Change a launch video
update_launch_videoChanges an existing launch video. Use it for every edit to a launch video: replace the whole composition (blocks), change one block (block: { index, ...fields }, index from 1 as get_launch_video numbers the blocks), change the name, accent color, device, look, background or folder, add screenshots to slots by URL, or pick another part of the song (music_start, or music_drop for the exact drop) or a new song (music_url). Use get_launch_video first for block indexes and slots, create_launch_video for a new video and duplicate_project for a variant beside the original. lines/tagline without blocks rebuild the standard film. Another device re-checks the blocks: transitions that no longer fit fall back to the natural ones. Screenshots from disk: run the curl commands from get_launch_video (launch_screen=). Returns the updated video with its render page and what is still missing.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| look | No | "dark" (default): the trailer, devices out of the dark, light in the accent color. "light": friendly and bright, a light gradient background that opens up on the drop, dark text. | |
| loop | No | true: no end card — after the last block everything glides back into the very first frame (camera, the hero phone, its first screen, the background), so the video loops seamlessly from the start, the way Reels and TikToks replay; it ends on a full phrase of the song. Leave out the `end` block; the last block must still show the device of the hero (continue on it with navigate, or let a duo or trio fly in around it). Best with a hero style whose first frame is a moment of its own — zoom, fall, slide, wake. false goes back to an ending. | |
| name | No | The app name. | |
| block | No | Change ONE block instead of resending `blocks`: its `index` (from 1, as get_launch_video numbers the blocks) and only the fields that change, e.g. { "index": 2, "lines": ["Every split,", "at a glance."] } or { "index": 3, "screenshot": "stats" }. The fields are merged into that block; null removes a field; another `type` starts the block afresh from the fields given. The whole composition is checked again as with `blocks`. Not together with `blocks` or `lines`. | |
| lines | No | Only without `blocks` (the standard film): two or four lines — every block takes two or none, so one or three are rejected —, at most 24 characters each, one row each. Lines 1 and 2 are the hero — the first quiet in the intro, the second on the drop; lines 3 and 4 go over the next screen of the same phone, which comes in the way the app changes screens (navigate). The two phones after it stand without text. | |
| story | No | Required when creating: the ONE story this video tells, in two to four short sentences a stranger remembers after one watch — the hook, how the product gets there, what you end up with. The Showoff trailer: "Your screenshots, shot like products. Right in your browser — or just ask your AI. Ready to launch." Write it first; then every block tells the next part of it in its two lines, in order. A row of unrelated claims is not a story. Speak to the people the app is for (who they are, what they get now) and claim only what is true — never "every model" or "all colors" unless it literally is so. | |
| accent | No | #rrggbb brand color for glow and light. Default: the accent color of the first screenshot. | |
| blocks | No | The composition, in order — see the guide ("Launch videos"). Leave it out for the standard film built from `lines` and `tagline`. | |
| device | No | The device of every block without its own `device` (default iphone-17-pro). Phones only for real apps — and always an iPhone unless the user explicitly asks for another model, also for Android screenshots (the phone redraws its own status bar). For a web product take a MacBook ("macbook-pro-16") or "browser". | |
| folder | No | Only when the user names a folder: the folder in their Showoff projects to put this in, e.g. "Launch videos" or a subfolder "Showoff/Trailer" (two levels at most). Folders are found by name and created when missing. "" moves it back to the top level. | |
| format | No | "9:16" (default): a Reel for Instagram, TikTok and Shorts — phones and apps. "16:9": landscape for videos that are mostly a MacBook, a website or browser windows (YouTube, a landing page, X): the whole screen fits, pages are never cut off in a close-up. | |
| tagline | No | Only without `blocks`: a small line under the name on the end card of the standard film. Best left out — the review flags it (end-card-claim): a line under the name makes the end slow and small. For the name slamming into the web address, compose `blocks` with an `end` block and `merge_into`. | |
| variant | No | Finish of the video's device (list_devices). | |
| music_url | No | Public URL of the song (MP3, M4A, WAV, OGG, FLAC; up to 25 MB). | |
| background | No | light look: the gradient, top to bottom, as #rrggbb colors, e.g. ["#b0aff1", "#f7c6de"] (lavender to pink). Default: two pastel tones from the accent. Pass [] to go back to the default. | |
| music_drop | No | Exact second of the drop the hero lands on (snapped to the nearest beat) — when the detected drops miss the moment the chorus kicks in. Overrides music_start. A drop only a few seconds into the song is fine: the entrance before it is shortened to fit (the report says so). | |
| project_id | Yes | Project id (from create_project or list_projects). | |
| status_bar | No | Every phone already draws its own clean status bar (9:41, full signal, full battery) over its screenshot. true also puts one over tablet screenshots. | |
| music_start | No | Second in the song around which the video should start — it snaps to the nearest detected drop. Default: the strongest drop with enough music after it. | |
| screenshots | No | Screenshots by public URL (or tiny base64), each into a slot of the blocks. Without `slot` they fill the slots in the order of the film. Files on disk: leave this out and run the returned curl commands. | |
| music_impact | No | Only with an `end` block that has `merge_into` (a teaser without an end card ignores it): second in the song where the end card slams its title into merge_into — e.g. the next drop after the hero, or the last hit of a chorus (snapped to the nearest beat). Every block without its own `beats` stretches or shrinks to land it exactly. Pick it from `music.structure` (get_launch_video). Can be set before the song is uploaded; null removes it. | |
| project_name | No | What the user finds this video by in their projects, next to their other videos: "<product> · <what it shows>", e.g. "Tempo · Launch video, drag and drop" or "Showoff · Reel, before and after". Default: "<name> – Launch" — give it whenever the user has or makes more than one video of the product. |