{"id":81851,"plugin_id":"plugin_asdk_app_6ad7a6e23400819198e9cc963ee1da61","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-11-05T01:19:13.127Z","digest":"6e7a5003feda8bce8af67ebfa197e16ad9528afd7a1080f9c831b062c9ce8b0f","against":null,"payload":{"description":"Make a short film of several shots inside a chat with the Visual Sandbox MCP tools: a story of 15 to 60 seconds with the same character in every shot, kept as a film project between chats, joined into one cut with a narration and a music bed. Trigger when the person asks to \"make a short film\", \"turn this script into a video\", \"a story with several scenes\", \"a trailer\", \"a music video\", \"a multi-scene ad\", \"an episode with my character\", or \"continue my film\". Plans the shots, gives the total price once, approves the keyframes before any video, then assembles the cut. Uses the MCP tools only; for the CLI, read vsb-film.\n","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":280}],"name":"vsb-short-film","skill_md_contents":"---\nname: vsb-short-film\ndescription: >\n  Make a short film of several shots inside a chat with the Visual Sandbox\n  MCP tools: a story of 15 to 60 seconds with the same character in every\n  shot, kept as a film project between chats, joined into one cut with a\n  narration and a music bed. Trigger when the person asks to \"make a short\n  film\", \"turn this script into a video\", \"a story with several scenes\", \"a\n  trailer\", \"a music video\", \"a multi-scene ad\", \"an episode with my\n  character\", or \"continue my film\". Plans the shots, gives the total price\n  once, approves the keyframes before any video, then assembles the cut.\n  Uses the MCP tools only; for the CLI, read vsb-film.\nlicense: Proprietary. See LICENSE for the terms.\n---\n\n# A short film\n\nA short film is 3 to 8 shots of about 5 seconds, one character, one shape. A\n**film project** keeps the brief, the script, the shot list and where each\nshot stands, so the work goes on in a later chat. Video costs many times more\nthan an image, so every shot is approved as a keyframe before it moves.\n\n## 0. Find or start the film\n\nCall `list_film_projects`. When the person continues a film, `get_film_project`\nreturns everything, and you go on from its `stage`. Otherwise ask for the\nbrief (step 1), then call `create_film_project` with the `name`, the `brief`,\nthe `aspect_ratio`, `target_seconds` and the `characters`. It opens the\nfilm's canvas and writes the plan there as `FILM.md`. **Send its\n`sandbox_uuid` with every run of the film.**\n\n## 1. Get the brief\n\nAsk only for what is missing, in three questions or less.\n\n- **The story** in one or two sentences, or the person's script.\n- **The length:** 15, 30 or 60 seconds. Default: 30.\n- **The shape:** 9:16 for a phone, 16:9 for a screen. Default: 16:9.\n\n## 2. Write the script and the shot list\n\nOne row for each shot, one action for each shot. Write spoken lines without\ndashes, and write numbers as words.\n\nSave them with `update_film_project`: `script`, and `shots` with an `id`\n(`shot-1`), a `title`, the `script` line and the `prompt`. When the person\napproves them, set `stage: \"script_ok\"`.\n\n## 3. Give the total price once\n\nCall `estimate_cost` for one keyframe, one clip of each length you plan, and\nthe narration. Multiply by the number of shots and give one total. Wait for\nthe person's yes. Spend nothing before it.\n\n## 4. Make the character\n\nRead [`vsb-characters`](../vsb-characters/SKILL.md). Make one character sheet,\nsave it with `create_character`, and pass its pictures as references to every\nkeyframe. A product or a place can be a character too.\n\n## 5. One keyframe for each shot\n\n1. Read [`vsb-image-prompting`](../vsb-image-prompting/SKILL.md).\n2. Make one keyframe for each shot, at the film's shape, with the character\n   pictures as references. Say first how many images that is.\n3. Call `show_media` with the keyframe job ids. Change a keyframe until the\n   person approves the set.\n4. Record each approved keyframe with `update_film_project`, `patch_shots`:\n   `storyboard_url` and `approved: true`. Then `stage: \"storyboard_ok\"`.\n\n## 6. Move each shot\n\n1. Read [`vsb-video`](../vsb-video/SKILL.md) at \"Picking a model\" and, for\n   spoken lines, \"People who talk\".\n2. Run one image-to-video job for each shot, with its keyframe as the first\n   frame. In Review mode each run waits for the person's press: show the card\n   or give the review link.\n3. Record each job at once with `patch_shots`: `job_id`. The shot's\n   `clip_url` fills in by itself when the job is done.\n\n## 7. Narration, music and the cut\n\n1. A narration: speak the film's script with `audio_elevenlabs_tts`, in the\n   character's voice when it has one. Save it with `narration_url`.\n2. A music bed (optional): make one with [`vsb-audio`](../vsb-audio/SKILL.md)\n   and save it with `music_url`.\n3. Call `assemble_film`. It joins every shot in order and lays the sound:\n   `audio_mode: \"narration\"` replaces the shots' sound with the narration,\n   `\"mix\"` lays it over, `\"shots\"` keeps the shots' own sound. The music\n   drops while the narration speaks. `transition`: `cut` for pace, `fade` for\n   calm. Free.\n4. Call `show_media` with its job id. Set `stage: \"preview_ok\"`. After the\n   person's last changes, set `stage: \"final\"`.\n5. Captions, when the film has speech: `add_captions` on the cut.\n\n## Rules\n\n- No video run before the keyframes are approved.\n- Move the `stage` on only when the person approved that step.\n- Never run a clip twice to check it. Read the four frames `get_job` sends.\n- A shot that fails costs nothing. Fix that shot only, then assemble again.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}