{"slug":"scenario-video-ads","title":"scenario-video-ads","summary":"Use when producing a video ad with Scenario from a product shot or brand assets: a mobile 9:16 or landscape 16:9 commercial, a TikTok, Reels, Shorts, YouTube, or CTV spot, or campaign creative needing a creative brief, storyboard, cinematic camera work, brand-faithful product foo","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-10-17T09:10:50.151504Z","repo":{"url":"https://github.com/scenario-labs/skills","stars":1035,"forks":129,"license":"MIT","updatedAt":"2026-10-17T05:01:44Z"},"bodyHtml":"<hr>\n<h2>name: scenario-video-ads\ndescription: \"Use when producing a video ad with Scenario from a product shot or brand assets: a mobile 9:16 or landscape 16:9 commercial, a TikTok, Reels, Shorts, YouTube, or CTV spot, or campaign creative needing a creative brief, storyboard, cinematic camera work, brand-faithful product footage, music and voiceover, captions, ad variants, budget planning, or platform delivery specs. Keywords: video ad, commercial, product video, advert, hook, CTA, end card, campaign, ad creative.\"\nlicense: MIT</h2>\n<h1>Scenario Video Ads</h1>\n<h2>Overview</h2>\n<p>For ordered independent edits of an existing clip, use <code>scenario-ad-variants</code>; this skill starts new creative.</p>\n<p>This skill is the director layer: it turns one product shot and a brief into a finished ad, delegating mechanics to the sibling skills it names per stage. Connection and the core loop: see the <code>scenario</code> skill in this repo. If a sibling skill named here is missing from your available skills, ask the user to install it (<code>npx skills add scenario-labs/skills --skill &lt;name&gt;</code>); unattended, proceed from tool schemas and flag the gap. The full sibling map and install commands: <a href=\"references/dependencies.md\">references/dependencies.md</a>.</p>\n<p>Two rules bind every stage, because they carry the ad's credibility. The product is never generated: every product shot starts from the uploaded photo, as a first frame or composited into an approved still. Text is never generated: logos, taglines, prices, and legal lines are overlaid in assembly on text-free plates.</p>\n<p>Ask the brief once, then run without stopping. The one approval that matters sits between the priced storyboard and generation: video is the expensive stage, so the user signs off on the budget table first. The concept page and the stills are cheaper checkpoints: show them when someone can answer. In a run where nobody can, continue: the brief's spend ceiling stands in for the sign-off, so generate video only while the priced board fits it, and the fidelity gate stands in for still approval.</p>\n<h2>Quick reference</h2>\n<table>\n<thead>\n<tr>\n<th>Stage</th>\n<th>What happens</th>\n<th>Detail</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1. Brief</td>\n<td>One objective, audience, proposition, creativity and length dials, platforms, mandatories, spend ceiling</td>\n<td><a href=\"references/brief.md\">references/brief.md</a></td>\n</tr>\n<tr>\n<td>2. Concept</td>\n<td>One page, anchored to a named famous-ad pattern, shown to the user</td>\n<td><a href=\"references/storyboard.md\">references/storyboard.md</a></td>\n</tr>\n<tr>\n<td>3. Storyboard</td>\n<td>Beats and panels per the objective's rulebook, priced shot by shot with <code>dry_run</code>, approved</td>\n<td>storyboard.md, brief.md</td>\n</tr>\n<tr>\n<td>4. Stills</td>\n<td>Composed natively per delivery ratio, product composited from the real photo, approved before animating</td>\n<td><code>scenario-image</code>, <code>scenario-consistency</code></td>\n</tr>\n<tr>\n<td>5. Animate</td>\n<td>Image-to-video per approved still, one camera move, <code>generateAudio: false</code> where the schema has it, <code>wait=false</code></td>\n<td><code>scenario-video</code>, <code>scenario-seedance</code></td>\n</tr>\n<tr>\n<td>6. Fidelity gate</td>\n<td>Extract frames from every product or character clip, spot-the-difference against the approved reference</td>\n<td>storyboard.md, <code>scenario-asset-analysis</code></td>\n</tr>\n<tr>\n<td>7. Audio</td>\n<td>Music generated on the cut's beat grid, voiceover to a word budget, sonic logo</td>\n<td><code>scenario-audio</code>, <a href=\"references/delivery.md\">references/delivery.md</a></td>\n</tr>\n<tr>\n<td>8. Assemble</td>\n<td>Timeline, text cards from <code>scenario-text-overlay</code> as image layers, captions in safe zones</td>\n<td><code>scenario-video-assembly</code>, delivery.md</td>\n</tr>\n<tr>\n<td>9. Pre-flight</td>\n<td>Policy, flashes, sound-off pass, loudness, spend report</td>\n<td>delivery.md</td>\n</tr>\n</tbody>\n</table>\n<h2>Worked example: a perfume ad, 9:16, 20 seconds</h2>\n<ol>\n<li>Brief once: awareness, twist creativity, 20s for Reels and TikTok, ceiling in CU. Upload the product shot, then build the fidelity checklist from it with <code>asset_analyze</code>, instructing it to inventory label text, cap geometry, and glass tint: every later check reuses it (<code>asset_describe</code> returns a style line, not this inventory).</li>\n<li>Concept names its anchor: open inside the gala-and-gown cliche, break it on beat three. Show the page to the user.</li>\n<li>Storyboard 7 panels at 2 to 4 seconds each, hero shot designed first, 3 hook variants, 2 inserts as cut cover. <code>dry_run</code> every planned run, multiply by retry floors, present the budget table.</li>\n<li>Stills at 9:16: composite the real bottle into styled plates with an image-edit model, baseline-plus-delta prompts. Each still is approved before animating, by the user or by the fidelity checklist when nobody can answer: image money is cheap, video money is not.</li>\n<li>Animate each approved still: <code>model_schema_get</code> first, prompt movement first (\"slow push-in over 4 seconds, the bottle rests fixed in place\"), <code>generateAudio: false</code> when the schema lists it.</li>\n<li>Gate every clip: frame-extract, then one <code>asset_analyze</code> call against the checklist. Label drift fails the clip; regenerate from the same still, never from the drifted output.</li>\n<li>Music at a stated BPM so cuts land on bars; compose the timeline, <code>scenario-text-overlay</code> renders the tagline card into the safe zone; caption the master.</li>\n<li>Pre-flight per delivery.md, then report spend from <code>usage</code> against the approved board.</li>\n</ol>\n<h2>Common mistakes</h2>\n<ul>\n<li>Reaching for local ffmpeg or a desktop editor for the cut: assembly is <code>model_run</code> on Scenario tool models (see <code>scenario-video-assembly</code>).</li>\n<li>Letting the video model render a label, logo, tagline, or price: generated type drifts frame to frame; composite text in post.</li>\n<li>One long clip at the schema's maximum duration: generate 3 to 5 second product shots and 5 to 10 second coverage, then cut to rhythm in assembly.</li>\n<li>Judging fidelity by watching a clip once: drift hides between glances; run the frame-extract gate.</li>\n<li>Leaving the schema's audio toggle (<code>generateAudio</code>, where offered) at its default: the soundtrack is built in assembly, so clips with baked-in audio fight the bed.</li>\n<li>Cropping a 16:9 master to 9:16: each ratio is its own composition, decided at the storyboard.</li>\n<li>Two objectives in one brief: brand and performance in the same asset serves neither; make two cuts from one board instead.</li>\n<li>Shipping without the pre-flight: a sensual perfume cut or a wrong-length CTV file dies in ad review, not in generation.</li>\n</ul>\n","files":[{"path":"references/brief.md","sizeBytes":5100,"isText":true},{"path":"references/delivery.md","sizeBytes":4630,"isText":true},{"path":"references/dependencies.md","sizeBytes":1730,"isText":true},{"path":"references/storyboard.md","sizeBytes":9102,"isText":true},{"path":"SKILL.md","sizeBytes":6947,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-10-17T09:11:31.0956Z","sha256":"08CB8D5B78E89C0177FA8039CBAA9B7370869D12D5445EAF916E86A8AB91F08C","sizeBytes":12750},"review":null,"source":{"repositoryUrl":"https://github.com/scenario-labs/skills","path":"skills/scenario-video-ads","license":"MIT","commit":"dc592af7139ffacfe8fdae7dc7efa80f4dd09be3","subtreeSha":"1D6A89F5935145C1B530A8FBAC5189A88DE601EE95A6EA924328620DB01B2380","lastSyncedAt":"2026-10-17T09:10:46.286688Z"},"reviewedAt":"2026-10-17T09:12:43.137502Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/scenario-labs/skills/tree/main/skills/scenario-video-ads"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install scenario-labs-skills@llmmart"},{"target":"git","command":"git clone https://github.com/scenario-labs/skills.git"}]}