Video Creation
Use this skill to manage video-creation DSL data in <AgentWorkspaceRoot>/creation. The data lives in creation/board.json and must strictly follow the type definitions below. Read and write it through ReadDsl (JMESPath queries) and UpdateDsl (JSON Patch updates).
Storage Location
- Root path:
<AgentWorkspaceRoot>/creation
- DSL file:
creation/board.json
- The workspace is determined by the current agent session. ReadDsl and UpdateDsl always operate on the current agent’s
creation/board.json.
Data Contract (DSL Type Definitions)
The root object in board.json is VideoCreation and must match the following TypeScript definitions. Do not introduce undefined fields or break the structure when reading or writing.
/**
* Media source enum
*/
export type MediaSourceType = "generate" | "upload" | "other";
/**
* Model / asset configuration
*/
export interface BaseModelConfig {
modelName: string; // Previously model_name
resolution?: string; // Resolution (e.g. "1920x1080")
aspectRatio?: string; // Previously aspect_ratio (e.g. "16:9")
prompt?: string; // Original prompt
}
export interface ImageModelConfig extends BaseModelConfig {
images?: string[]; // Input images (image-to-image)
}
/**
* Video generation model configuration (text-to-video / image-to-video)
*/
export interface VideoModelConfig extends BaseModelConfig {
startImageFilePath?: string; // First-frame image
endImageFilePath?: string; // Last-frame image
audio?: string; // Audio input (used for avatar videos)
elements?: {
frontalImage?: string;
referenceImages?: string[];
video?: string;
};
duration: number; // Video duration in seconds
}
export type ModelConfig = ImageModelConfig | VideoModelConfig;
/**
* Media asset version
*/
export interface MediaAssetVersion {
source: MediaSourceType;
filePath?: string;
active?: boolean; // Whether this version is currently in use
caption?: string;
modelConfig: ModelConfig;
}
export type MediaAssetList = MediaAssetVersion[];
export type AudioTrackType = "music" | "voiceover" | "sound_effect";
/**
* Audio track
*/
export interface AudioTrack {
id: string;
type: AudioTrackType;
description: string;
startTime: number;
duration: number;
audioFile?: MediaAssetList;
}
/**
* Shot
*/
export interface Shot {
id: string;
description: string;
duration: number;
type: "avatar" | "normal"; // avatar = lip-sync, normal = text-to-video or first/last-frame video
startFrame?: MediaAssetList;
endFrame?: MediaAssetList;
videoFile?: MediaAssetList;
}
/**
* Scene
*/
export interface Scene {
id: string;
description: string;
shots?: Shot[];
}
/**
* Video creation DSL root
*/
export interface VideoCreation {
creativeSummary: string; // Creative summary
scenes: Scene[]; // Scene list
sounds: AudioTrack[]; // Audio track list
}
Root Fields at a Glance
| Field |
Type |
Description |
creativeSummary |
string |
Creative summary |
scenes |
Scene[] |
Scene list. Each item includes id, description, and shots |
sounds |
AudioTrack[] |
Audio track list. Each item includes id, type, description, startTime, duration, and audioFile |
How to Manage Video Creation Data
- Inspect the current board structure:
ReadDsl("@") or targeted queries such as ReadDsl("keys(@)") or ReadDsl("scenes[*].id").
- Read the creative summary:
ReadDsl("creativeSummary").
- Read scenes and shots:
ReadDsl("scenes") or ReadDsl("scenes[*].shots").
- Read audio tracks:
ReadDsl("sounds").
- Update the creative summary: use a single
replace operation in UpdateDsl with path /creativeSummary and the new string value.
- Add a scene: use a single
add operation with path /scenes/- and a value that matches Scene (including id, description, and optional shots).
- Add a shot under a scene: use path
/scenes/<scene-index>/shots/- and a value that matches Shot (including id, description, duration, type, and optional startFrame, endFrame, and videoFile).
- Update or replace a shot or asset: use
replace with a path pointing to the target node, for example /scenes/0/shots/1 or /scenes/0/shots/1/videoFile/0.
- Add an audio track: use path
/sounds/- with a value that matches AudioTrack.
- Delete a scene, shot, or audio track: use
remove with the target path, for example /scenes/1, /scenes/0/shots/0, or /sounds/0.
- Initialize an empty board: if the file does not exist or needs to be created from scratch, use
UpdateDsl to write the root structure first, for example by adding creativeSummary, scenes, and sounds, while keeping the contract above intact.
Operating Conventions
- All reads and writes to
creation/board.json must go through ReadDsl and UpdateDsl. Do not edit the file directly.
- Keep the JSON valid and consistent with the DSL types above. Do not mix arrays and objects or add root fields outside the contract.
- When adding scenes, shots, or audio tracks, assign unique and stable
id values such as UUIDs or prefixed short IDs.
1---2name: video-creator3description: Manage the video creation DSL in `<AgentWorkspaceRoot>/creation` for scene-by-scene and shot-by-shot planning and generation workflows. Use when the user requests video creation work.4---56# Video Creation78Use this skill to manage video-creation DSL data in **`<AgentWorkspaceRoot>/creation`**. The data lives in `creation/board.json` and must strictly follow the type definitions below. Read and write it through **ReadDsl** (JMESPath queries) and **UpdateDsl** (JSON Patch updates).910## Storage Location1112- **Root path**: `<AgentWorkspaceRoot>/creation`13- **DSL file**: `creation/board.json`14- The workspace is determined by the current agent session. ReadDsl and UpdateDsl always operate on the current agent’s `creation/board.json`.1516## Data Contract (DSL Type Definitions)1718The root object in `board.json` is `VideoCreation` and must match the following TypeScript definitions. Do not introduce undefined fields or break the structure when reading or writing.1920```typescript21/**22 * Media source enum23 */24export type MediaSourceType = "generate" | "upload" | "other";2526/**27 * Model / asset configuration28 */29export interface BaseModelConfig {30 modelName: string; // Previously model_name31 resolution?: string; // Resolution (e.g. "1920x1080")32 aspectRatio?: string; // Previously aspect_ratio (e.g. "16:9")33 prompt?: string; // Original prompt34}3536export interface ImageModelConfig extends BaseModelConfig {37 images?: string[]; // Input images (image-to-image)38}3940/**41 * Video generation model configuration (text-to-video / image-to-video)42 */43export interface VideoModelConfig extends BaseModelConfig {44 startImageFilePath?: string; // First-frame image45 endImageFilePath?: string; // Last-frame image46 audio?: string; // Audio input (used for avatar videos)47 elements?: {48 frontalImage?: string;49 referenceImages?: string[];50 video?: string;51 };52 duration: number; // Video duration in seconds53}5455export type ModelConfig = ImageModelConfig | VideoModelConfig;5657/**58 * Media asset version59 */60export interface MediaAssetVersion {61 source: MediaSourceType;62 filePath?: string;63 active?: boolean; // Whether this version is currently in use64 caption?: string;65 modelConfig: ModelConfig;66}6768export type MediaAssetList = MediaAssetVersion[];6970export type AudioTrackType = "music" | "voiceover" | "sound_effect";7172/**73 * Audio track74 */75export interface AudioTrack {76 id: string;77 type: AudioTrackType;78 description: string;79 startTime: number;80 duration: number;81 audioFile?: MediaAssetList;82}8384/**85 * Shot86 */87export interface Shot {88 id: string;89 description: string;90 duration: number;91 type: "avatar" | "normal"; // avatar = lip-sync, normal = text-to-video or first/last-frame video92 startFrame?: MediaAssetList;93 endFrame?: MediaAssetList;94 videoFile?: MediaAssetList;95}9697/**98 * Scene99 */100export interface Scene {101 id: string;102 description: string;103 shots?: Shot[];104}105106/**107 * Video creation DSL root108 */109export interface VideoCreation {110 creativeSummary: string; // Creative summary111 scenes: Scene[]; // Scene list112 sounds: AudioTrack[]; // Audio track list113}114```115116## Root Fields at a Glance117118| Field | Type | Description |119| ----- | ---- | ----------- |120| `creativeSummary` | string | Creative summary |121| `scenes` | Scene[] | Scene list. Each item includes `id`, `description`, and `shots` |122| `sounds` | AudioTrack[] | Audio track list. Each item includes `id`, `type`, `description`, `startTime`, `duration`, and `audioFile` |123124## How to Manage Video Creation Data1251261. **Inspect the current board structure**: `ReadDsl("@")` or targeted queries such as `ReadDsl("keys(@)")` or `ReadDsl("scenes[*].id")`.1272. **Read the creative summary**: `ReadDsl("creativeSummary")`.1283. **Read scenes and shots**: `ReadDsl("scenes")` or `ReadDsl("scenes[*].shots")`.1294. **Read audio tracks**: `ReadDsl("sounds")`.1305. **Update the creative summary**: use a single `replace` operation in `UpdateDsl` with path `/creativeSummary` and the new string value.1316. **Add a scene**: use a single `add` operation with path `/scenes/-` and a value that matches `Scene` (including `id`, `description`, and optional `shots`).1327. **Add a shot under a scene**: use path `/scenes/<scene-index>/shots/-` and a value that matches `Shot` (including `id`, `description`, `duration`, `type`, and optional `startFrame`, `endFrame`, and `videoFile`).1338. **Update or replace a shot or asset**: use `replace` with a path pointing to the target node, for example `/scenes/0/shots/1` or `/scenes/0/shots/1/videoFile/0`.1349. **Add an audio track**: use path `/sounds/-` with a value that matches `AudioTrack`.13510. **Delete a scene, shot, or audio track**: use `remove` with the target path, for example `/scenes/1`, `/scenes/0/shots/0`, or `/sounds/0`.13611. **Initialize an empty board**: if the file does not exist or needs to be created from scratch, use `UpdateDsl` to write the root structure first, for example by adding `creativeSummary`, `scenes`, and `sounds`, while keeping the contract above intact.137138## Operating Conventions139140- All reads and writes to `creation/board.json` must go through **ReadDsl** and **UpdateDsl**. Do not edit the file directly.141- Keep the JSON valid and consistent with the DSL types above. Do not mix arrays and objects or add root fields outside the contract.142- When adding scenes, shots, or audio tracks, assign unique and stable `id` values such as UUIDs or prefixed short IDs.