---
name: cliplaunch-short-ads
description: Make short vertical video ads (Instagram Reels, TikTok, YouTube Shorts) with ClipLaunch Studio's MCP tools, to a professional standard. Use when someone asks for a short ad, a Reel, a TikTok, a Short or a social video for a brand, and the ClipLaunch MCP server is connected. For a studio-style promo of a web app, a phone app or a new feature made from its real screens, use make_promo instead.
---

# Short ads with ClipLaunch

You are the editor. The person asking should only have to approve the cost. Plan the ad, make it, check it frame by frame, fix what's wrong, and hand over finished files.

## What good looks like

- **Hook:** the first word by 0.6s, and the opening line earns the next second: a question or a plain, specific claim. No logo intro.
- **Pace:** about 2.6 words a second. Above 2.9 sounds hurried. Every line at the same pace: a last line faster than the rest sounds rushed or clipped.
- **One idea:** what the product does for the viewer, in their words. No feature lists.
- **Call to action:** its own short sentence, spoken inside the clip, never squeezed into the last second.
- **End card:** after the clip, hold the last frame for 2.5s (never under 2s) with the logo, the call to action and the web address. No speech over it. Without an end card, stop speaking at least 1.5s before the end.
- **Captions:** 3 words or fewer at a time on vertical video, the key word highlighted in a brand colour, inside the safe zones.
- **Real product:** for an app, the viewer sees the real app, never an imagined screen. Two ways, 5 credits each once you have the footage: `make_screen_scene` turns a screenshot from the brand kit into a clip with a slow move inside a phone, tablet or browser frame; `place_screen` puts the real screenshot on the phone in a lifestyle shot (generated with a plain green screen), frame by frame. A screen scene leaves a clear band for the captions (`caption_room`; use `bottom` when it is joined to a lifestyle shot, so one caption position suits the whole ad and the small print stays off the white screen). Screenshots captured in a browser start at the app's header: pass `status_bar: true` so the camera cut-out doesn't cover it.
- **Brand:** logo in a top corner throughout; brand colours in the picture itself, not as a tint; brand fonts.
- **Sound:** a calm instrumental bed under the voice, ducked while it speaks, levelled to -14 LUFS.
- **Small print** (finance, health and other regulated products): on every asset and readable over any scene.

## Timing at a glance

| Clip | Words (calm) | Voice | Call to action starts | End card | Total |
|---|---|---|---|---|---|
| 5s | 11 | 0.3s to 4.6s | 3.4s | 2.5s | 7.5s |
| 10s | 24 | 0.3s to 9.6s | 7s | 2.5s | 12.5s |

For any other length, call `plan_short`.

## Workflow

1. **Brand.** `list_brands`, then `get_brand` for the brand you were asked about. From then on pass `brand_id` to every tool: the kit brings the colours, fonts, logo, website, voice, default headline, call to action and small print, and the brand's own screenshots. No kit yet? Read the brand's public website and make one with `save_brand`. Anything behind a login (app screenshots, say), ask the person for; never sign in to get it.
2. **Brief.** The one message, the platforms, and any change to the kit's call to action or small print. Don't invent claims.
3. **Plan.** `plan_short` with the clip length (5 or 10 seconds) and your draft script. Cut the script to the word budget.
4. **Quote.** `estimate_cost` for the image and `animate_image` with `estimate_only` for the motion; `make_music` with `estimate_only`. Tell the person the total and wait for a yes. Set `max_credits` on every call that takes it. If a tool answers `insufficient_credits` or `generation_locked`, stop and tell the person: they buy credits or a plan on the studio's Billing page (`/studio/billing`), never you.
5. **Picture.** For an app, plan on the real screen: `make_screen_scene` with `brand_id` and a screenshot's `asset_id` (5 credits). If the kit has no screenshots, ask for them. For a lifestyle shot of someone using the app, `generate_assets` with `green_screen: true` and the phone large in frame. Get the geometry right: if the viewer sees the screen, the camera is behind the person, so describe it that way, e.g. "seen from behind her left shoulder, she looks down at the phone in her hand; its screen faces her and the camera". Never ask for the screen to face the viewer while the person faces the camera, and don't write "over-the-shoulder" on its own (models read it as someone looking back over their shoulder). Otherwise `generate_assets` in image mode with one master for all formats. Photos of people and places: `soul-2`. Graphics and illustration: `recraft-v4.1`. ClipLaunch already tells the model to keep text out; describe the scene, not a layout. Then `review_shot` on it (a fraction of a cent) and look at it yourself. On a fail, generate again with its `prompt_fix` added to the scene; never animate a weak frame, because the motion costs forty times the still. If `wait_for_jobs` reports a job as `stalled`, cancel it with `cancel_job` (free while queued) and submit again.
6. **Motion.** `animate_image` on the 9:16 job with a calm, specific motion prompt (a slow push-in, a small natural gesture, no cuts). For a green-screen still, say the screen stays plain, flat, bright green and blank the whole time, then `place_screen` on the finished clip with the screenshot: it reports the frames the screen was found in, and `checks` for what three still frames can't show. A phone that rocks or shakes in the hands makes the app wobble: animate again, asking for the phone held still in both hands. A screen under 30% of the frame's width shows the app's big numbers but not its small text: follow it with a screen scene. `review_shot` the finished clip too (it checks the start, middle and end). To show the lifestyle shot and then the app full size, `join_clips` (a short crossfade reads well), and plan the script to the joined length. Check a strip of frames.
7. **Voice.** `make_voiceover` with `video_seconds`. If `timing_ok` is false, fix the script and make it again (it costs a few credits).
8. **Music.** `find_music` with `video_seconds`; if nothing suits, `make_music` (calm, instrumental, 2 versions). Prefer tracks that need no credit.
9. **Render.** `render_video` with `brand_id`, the voice, captions from the voice's segments (3 words, highlight in the brand accent), `audio.track_id` and `cover_time` on a good moment. The end card (logo, call to action, web address) and the small print come from the kit unless you pass others.
10. **Check.** `get_render` returns `checks` run on the finished file, such as the music cutting out before the end: an error means don't publish that render, so fix the cause and render again. Then look and listen yourself: `review_render` gives contact sheets of every frame, the captions at every change (three frames in a row, so a blank or doubled caption shows), the end card and the audio level over time, in one call. Look for anything clipped, overlapping, off-brand or hard to read. Zoom in on a few frames in a row where the app's small text shows: it should read the same in each, not change shape as the shot moves. Listen through to the last frame: the music should carry on after the voice and under the end card, then fade. The review's audio chart shows the same, and its notes say when the music swells or drops. Fix what's wrong before handing over.
11. **Pack.** `build_campaign_pack` with `dry_run` first; fix every error and read every warning, then build it and hand over the video, the images and the pack.

## Shorts from a recording

When the person has a long-form project (`create_project`, `add_take`), its best moments become shorts without new footage:

1. **Price.** `suggest_shorts` with `estimate_only` and a `count` (1 to 10; about one per 2 minutes of finished video). Tell the person the price: 2 credits.
2. **Suggest.** `suggest_shorts` again without `estimate_only`. Each short is one continuous stretch with 15 to 56.8s of speech, opening on a hook, with a hook title of at most 8 words shown for its first 3 seconds. Accepted shorts are kept when you suggest again; the rest are replaced.
3. **Read and fix.** Read each short's `text` and `checks`. Its first sentence must make sense to someone who hasn't seen the rest, and its last must land the point. Fix them with `update_short`: `extend` adds or drops whole sentences at either end, `from` and `to` pick exact words, `trims` cuts words inside it, and `title` rewrites the hook title.
4. **Drafts.** `render_short_from_project` with `draft: true` (720p, 15 credits, about 3 to 4 minutes each). Poll `get_task` for each `task_id`, then `review_render` every draft and fix what's wrong.
5. **Finals.** Accept the good ones (`update_short` with `status: "accepted"`), then `render_short_from_project` with `draft: false` (1080p). Hand them over with `build_campaign_pack` using the final render ids.

## Don't

- Spend without a yes, or go past the approved cap.
- Put words in the image model's picture; ClipLaunch adds all text afterwards.
- End on the call to action with no end card, or say it faster than the rest.
- Use music that needs a credit on a placement with nowhere to put the credit.
- Hand over something you haven't looked at and listened to, animate a still that failed `review_shot`, or hand over a render whose `checks` include an error.
- Call `make_screen_scene`, `place_screen` or `join_clips` again while one is working. They return a `task_id` at once; poll `get_task` until it completes.
