{"id":41643,"plugin_id":"plugin_asdk_app_6ab639b28e2081919b704b4ada7e478f","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-24T13:00:40.376Z","digest":"d6381842fc23166b445aab0cc8a700d49cd6a0816060d7cc1a628377691d24de","against":null,"payload":{"description":"An existing ad re-shot as new footage with the same beats, order, timing and pacing, and a new cast, product, language or market. Use when an ad that already works should be made again for another market or audience, instead of written from scratch.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":368},{"relative_path":"assets/icon.svg","size_in_bytes":440},{"relative_path":"references/breakdown.md","size_in_bytes":1504}],"name":"ad-remake","skill_md_contents":"---\nname: ad-remake\ndescription: \"An existing ad re-shot as new footage with the same beats, order, timing and pacing, and a new cast, product, language or market. Use when an ad that already works should be made again for another market or audience, instead of written from scratch.\"\n---\n\n## When\n\nThe user has an ad that works and wants it again as new footage: for another market or audience,\nin another spoken language, with a new cast, their new product, or a new setting. The new version\nkeeps the ad's beats, their order, timing and pacing; everything on screen is newly generated.\nTwo ways:\n\n- **Whole ad** (default): every beat re-shot.\n- **Hook or call to action only:** a new opening, a new closing, or both, joined to the rest of\n  the original, which stays as it is.\n\nNot for: changing people or products inside the original footage itself, which needs a\nvideo-to-video edit Frameo does not do; translating the original footage's own speech while its\npeople stay; an original ad that only borrows another ad's idea (`ugc-video` or `script-to-video`\nfrom a new script); a new edit in the style of a reference (`reference-remix`); trimming or\ncaptioning footage as it is (`subtitles-and-cut`).\n\n## Ask first\n\n1. **The source ad** — the video (`show_upload` for files on the user's device, `import_media_url` for a web link; files attached to the chat reach Frameo only through `import_attachments`, in apps that pass them such as ChatGPT, and `create_upload_url` is for clients that send the file themselves), and that the user owns it or has the rights to\n   remake it.\n2. **What changes** — the market or audience, the spoken language, the product (photos, its\n   name, and the claims the new version may make, in the user's words), the people (a photo with\n   that person's consent, or a description to design from), the setting. Anything not named stays\n   as in the source.\n3. **Whole ad or hook / call to action only**, and how many versions (one per market or\n   language).\n4. **Frame** — the source's aspect ratio unless the user wants another.\n\nSay the rough cost in the same turn: about the cost of the routed skill's clips for the source's\nlength, plus a few credits per minute for the breakdown. The user's yes comes with the plan (Steps,\n**The plan first.**).\n\n## Rights and truth\n\n- Only an ad the user owns or has the rights to remake. Nothing from the source is carried into\n  the new footage: its people, faces, logos and footage stay out, and its music too unless the user owns\n  it; the source is a guide to structure only.\n- A person in the source is recast unless they are the user, or the user brings their photo with\n  their consent.\n- Product claims follow the **Truth** section of `get_skill(\"ugc-video\")`: the user's claims only,\n  as written, no invented results or testimonials. A line in the source that claims something the\n  new product cannot is rewritten or dropped, never carried across.\n- On-screen text is new wording from the user or written to the beat; brand marks only the user's\n  own.\n\n## Steps\n\n**Before any paid step.** The project: `list_projects` (or `create_project`) gives the `project_id`\nand, when the project has several modules, the `module_id`; every call below that takes a project —\n`estimate_cost` included — gets that same pair; without the project those tools answer `project_needed`, and without the\nmodule of a project that has several, `module_needed`, which lists its modules. The\nquote: one `estimate_cost(items=[…])` prices a stage in one call, with the same project, model,\nsize and number of `image_urls` or `reference_image_urls` (`reference_count`) as each generate call, and returns a `quote_id` per item plus the total. Each generate call\nthen passes its own item's `quote_id` and `confirmed_by_user=true`. A quote is single-use and lasts\n15 minutes, so a long plan is priced stage by stage, right before each stage runs; a stage that\ncomes to more than the user approved is asked about again first. Generate calls return\n`generation_ids`; `wait_task` returns the links, and `show_generations` shows each stage's running\nand finished work in one card where the chat app displays Frameo cards: all the stage's ids at\nonce, before its first `wait_task`; the card updates itself as the work finishes, so the same ids are not shown again.\n\n**The plan first.** In this skill the step-0 breakdown is agreed on its own first, and the plan\nfollows the beat sheet. Before the first paid call, the plan goes to the user in the chat as plain\ntext: what will be made, in order, one line per generation (for a script, the shot list; for a\nset, each shot), with each line's credits and the total. The credits come from\n`estimate_cost(items=[…])`, up to 10 items a call, so a long plan takes several calls; those\nquotes may expire unused, since each stage is quoted again right before it runs. Nothing is\ngenerated until the user says yes. The user can drop or change lines; a changed line is priced\nagain.\n\n**Shot order.** Pass `shot_number` on every `generate_image` and `generate_video` of a shot (1, 2, 3… in story order; the same number for a retake and for that shot's video), so the project keeps each shot apart, in order. Cast, prop and location references take `placement_kind` (`character`, `prop` or `location`) and the subject's name as `placement_group` instead: they are kept with the project's references, apart from the shots built from them.\n\n**Review (on by default).** Every still and clip is checked before it is built on, and the\nfinished version before it is handed over, following `review-shots`: its checklist and steps come\nfrom `get_skill(\"review-shots\")`, loaded before step 2. Each new shot is also checked against its\nbeat in the sheet: the same shot size, action and length, and nobody or nothing from the source\nshowing through. A failed shot is retaken once, from the retake allowance the plan carries.\n\n**0. Break the source down (a few credits per minute, said and agreed first).**\n`analyze_media(media_url, question=…, detect_shots=true, confirmed_by_user=true)`, with the\nquestion from\n`get_skill_file(skill_id=\"ad-remake\", path=\"references/breakdown.md\")`; `wait_task` on its run\nid returns one section per shot with its `start_ms` and `end_ms` and a timestamped transcript.\nThen, free, `extract_frames(video_url, start_ms=…, end_ms=…, at_seconds=[<the shot's middle>])`\nper shot (calls can run in parallel) for a frame of each, and `view_image(url,\nresolution=\"high\")` where the on-screen text or the product needs reading. Write the beat sheet\nfrom the breakdown file and show it.\n\n**1. Map the changes.** On the beat sheet the user marks each beat keep, change (what), or drop.\nNew lines are written in the target language to each beat's length, following the word budget,\nhook and delivery sections of `get_skill_file(skill_id=\"ugc-video\", path=\"references/script-craft.md\")`: a line that runs longer than its beat is cut down, never\nsped up. Every claim in a new line is one of the user's.\n\n**2. Re-shoot.** Route by what the ad is, and follow that skill's own steps with the beat sheet in\nplace of its script, keeping each beat's shot size, camera move and length:\n\n- people in scenes, with dialogue → `get_skill(\"script-to-video\")`, steps 1 to 6: the cast, one\n  image per beat, the dialogue, the clips, the sound and the cut;\n- a creator or presenter with a product, or the product alone with a voiceover →\n  `get_skill(\"ugc-video\")`, with the matching format, steps 1 to 5.\n\nSource frames guide staging and framing in words in the prompt; they are not passed to\n`generate_image` or `generate_video`, so nothing from the source carries into the new footage. A\nnew language or a new person gets a new voice (`search_voices`). The source's music is kept only\nwhen the user owns it; otherwise `generate_music` makes a new bed, and `search_sound_effects`\nfinds short sound cues.\n\n**3. Hook or call to action only.** Re-shoot only those beats, as in step 2. The rest of the\nsource comes from `extract_frames(video_url, start_ms=<first kept shot's start_ms>,\nend_ms=<last kept shot's end_ms>)`, whose `clip.url` is that range cut out with its own sound.\n`run_ffmpeg` joins the new hook, the kept middle and the new close, with the `concat` filter and\nevery input scaled to the source's size and frame rate, so the cuts land at shot boundaries. The\nnew hook keeps roughly the old one's length.\n\n**4. Versions.** Several markets or languages: one beat sheet, one version per market, each its\nown set of lines in the plan, priced together and made one after another, so a fix found in the\nfirst carries into the rest.\n\n## Done\n\nEach version as one video, labelled by its market or language, close to the source's length; the\nbeat sheet with what changed in each; and the note that the people on screen are AI-generated.\n`open_in_frameo` on a result opens the project in the Frameo app, where every take is ready for retakes and edits.\n\n## Files\n\n- `references/breakdown.md` — the breakdown question for `analyze_media` and the beat sheet's columns.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}