Shot-for-shot remake
The person brings a finished spot, the new actor or actors (character sheets), any
product to swap in (product photos), and how many variants. You deliver, per variant,
the changed shots and the full cut with the original soundtrack under it, round after
round, in the layout agreed in AGENTS.md (rounds, deliverable folders and the
client note are the core skill's).
Only the shots that show the replaced person or product are remade. Every other frame stays original footage, and the original audio plays over the whole cut. Each variant (one per new actor) gets its own folder of stills and renders.
Steps
- Cut the source into shots. Load
ffprobe-inspect-mediafor the frame rate and frame count, thenffmpeg-scene-cuts(scene > 0.15; real cuts score about 0.4–0.8). Confirm every hit by eye: motion inside a shot can cross 0.15. Export each shot's first and last stills and an exact-frame clip, and write the shot table intoAGENTS.md: first and last frame, who and what is in it, whether it changes. Gate: the person confirms the table and the shots to remake. - Understand each changing shot.
gemini-shot-recreation-briefwatches the clip with sound at 24 fps: camera, timed beats, sound. Correct it with your own direction where it is wrong (it mirrors left and right, and it called every slow push-in "locked off"). Keep the direction per shot as text in the job folder; it feeds every prompt later. Transcribe the spot (elevenlabs-speech-to-text) for line times. - Recast the stills (
guide-recast-a-person). The default here isnano-banana-swap-actor-keep-wardrobe: 2K, 3 seeds per frame, a separate call for any frame with its own expression note (a side-eye, a smirk). When a shot's original take is usable as it is,h3-max-recastkeeps that performance exactly and replaces steps 3 to 6 for the shot. Gate: a review page per shot, first and last stills side by side; pick, and move the rest torejected/. - Correct the picks, one fix per pass (
guide-edit-a-frame-before-animating):nano-banana-targeted-fixwith the original frame, or a crop of it or of the matching frame, as the reference. Small print and logos go toguide-keep-small-details(nano-banana-rerender-small-printwithpython-crop-and-paste-back). Gate: review the corrected stills. - Swap the products where they must read (
guide-keep-small-details,nano-banana-swap-held-product): a pre-hazed product photo for the design, a crop of the source prop for angle and grip. - Render the first-frame-only shots (
guide-animate-a-shot,guide-choose-a-video-model). If the person hasn't seen the shots move yet, draft them onh3-max-image-to-videofirst: it is fast and cheap, and a draft approves composition and timing, not motion. The finals go onkling-v3-image-to-video, first frame pinned, the actor and product as references, 3 seeds; H3 Max mottles skin and hair up close, so no close-up ships on it. Write the brief as "act in real time, then hold" for the model's floor, and spell out counts and amounts. As each take lands (taskswithuntil: "any"), trim it to the shot's length plus 0.5 s (ffmpeg-frame-exact-trim); when a take idles before acting, start the trim later. Measure withpython-check-pinned-framesandpython-measure-layout-drift. Gate: a review page per shot with the original clip as the reference and every take, the numbers in the notes. - Shots that need a pinned last frame: an end pose the model keeps skipping, a
small branded object that must hold, physics like a paper burst. Follow
guide-keep-small-details' gated process, with a review page after each step:- the first frame in one
nano-banana-swap-actor-keep-wardrobepass on Pro from the source frame, the pre-hazed product photo as the prop reference, every change stated (eyes closed, props swapped, a tray empty, the film grain kept), then the logo re-rendered in an enlarged crop; - the last frame from the locked first with
nano-banana-derive-last-frame, text edits only, thenpython-match-push-into the source's measured push-in; - the last frame's logo re-rendered against the first frame's, cut at the same scale; first and last flipped back to back;
seedance-2-5-image-to-video, both ends pinned, at 1080p natively (6–30 min a render) for any shot whose detail matters; 720p plustopaz-upscalecame back soft on shot 09.
- the first frame in one
- Fix the spoken lines (
guide-lipsync-video). Isolate the voice (elevenlabs-voice-isolation), cut the line to start on the shot's first frame and go silent after its last word, picking the cut by ear from a ladder of trims a few hundredths of a second apart (ffmpeg-cut-audio-window). Then, by the note:- the still must speak the line:
h3-max-lipsync-a-still(worked on a 3/4 face); - a new, stronger performance:
seedance-2-5-dialoguewith a clip-length recording and the line timed in the prompt, so the take needs no re-cut; - a good take whose mouth is off:
heygen-v3-resync-existing-take. Gate: review unmuted, against the original line.
- the still must speak the line:
- Finish and splice (
guide-prepare-renders-for-delivery). For "plastic, shiny skin" on a good take, grain first (ffmpeg-grain-for-plastic-skin, size 2, strength from a ladder of 100% crops,python-measure-detailagainst the source). Upscale before trimming.ffmpeg-splice-into-source-cutputs each pick into the original timeline at its exact frame count over the original audio; frames without a replacement stay original. Then the round's deliverables (core skill): the cut and the changed shots, each with a no-audio copy, plus small review copies if asked.
Choices this recipe makes
- Kling v3 with only the first frame pinned is the default final: this spot's motion is simple (sips, glances, a lean), and Kling is the dependable, low-to-mid priced model that keeps close-up detail. Seedance takes only the physics shots. Pin a last frame only for the cases in step 7, and only with frames derived from each other.
- Seedance image-to-video, not reference-to-video, for the physics shots: with the frames already pinned, the people stay consistent without references.
- Trim, never speed up. Models spread the action over the whole clip and idle at the start; skip the idle opening and cut the tail.
- On a client note, the cheapest fix first: a re-trim, grain in post, a re-render with new direction, a rebuilt pinned frame, or the original footage back. A shot too far from the reference went back to the original footage in rev2.
- On a dialogue shot, HeyGen v3 was picked over VEED v2 and over the H3 lip sync on a 3/4 close-up, because it keeps the take's skin and light.
Dead ends
- A second full-frame edit, or a 4K render scaled down, to fix a logo: both smooth the grain and redraw background faces (the manager lost his moustache). Re-render the logo in a 6× crop and paste back only the changed pixels.
- The source's last frame as a reference for the derived last frame: the original actress and props came back. Text edits only.
- A pinned last frame without the push-in, or with its logo matched at another scale: the clip lost the push-in and the logo slid across the prop.
- H3 Max with both frames pinned from two independently swapped stills: the hair morphed mid-shot. Any two pinned frames must be continuous (hair, cuffs, props, eyes).
- Seedance reference-to-video with every character sheet on the paper-burst shot: opened slightly zoomed and shifted, no better than image-to-video. Raw SSIM said it redrew the scene (0.5); layout drift showed it kept the layout (0.96–0.98).
- Seedance with a short, untimed reference of the line: an angrier read, but re-paced (late start, about 10% long), and putting the real audio back left the lips drifting.
- Reference-to-video without a first frame (Seedance r2v, plain H3 r2v, Omni Flash, Wan r2v): they redraw the opening (0.2–0.5 against the pinned frame).
- Veo 3.1 (the look). Wan 3.0 on fal: the best paper physics, but 24 fps padded to 30 fps with a dup-then-skip cadence (judder 0.78 against the source's 0.05).
- A raw, studio-lit product photo as the prop reference: a pasted-in look. Hazing after the swap turned the prop grey. Warping the product photo on by hand never blended.
- Sync 3 on a 3/4 face: the output was nearly identical to the input.
- Choosing the line's cut point from STT or loudness minima: both were about 0.1 s off.
Worked example
acme_office_spot.mp4, a 20 s Acme Co. drinks commercial: 1920×1080, 24 fps, 484
frames, 12 shots. Nora appears in 6 (01, 03, 07, 08, 09, 10), remade for two new
actresses, B and C. Two rounds.
| Shot | Content | rev1 route | R1 note → rev2 |
|---|---|---|---|
| 01 | sips, side-eye (25 frames) | Kling, first frame only; the A in "ACME" lost its crossbar and needed a print fix | slow motion → re-rendered with a timed single-blink brief, trimmed to start 0–24 frames in |
| 03 | the manager leans in with his line (33 frames) | Kling, then H3 Max lip sync on the isolated line, silent from 3.21 s | plastic skin, angrier read → grain strength 10, then a Seedance dialogue take: for B cut so its line starts where the original's does, for C re-synced with HeyGen v3 |
| 07 | a spill; she lifts the tumbler | Kling with a beat-by-beat lift (pinning the end forced the lift but read badly) | far from the reference → original footage |
| 08 | profile sip | Kling; the sip spelled out as "a third of the way, base below her chin" | — |
| 09 | wide office chaos, paper burst (78 frames) | Seedance i2v both ends pinned, 720p → Topaz | soft, logo illegible → pinned frames rebuilt (push-in about 6%), Seedance 1080p |
| 10 | close-up sip, a breath, eyes to camera | Kling; the breath and "the tumbler stays in frame, logo visible" spelled out | slower, calmer → re-rendered with one breath, papers settling "like feathers" |
The exploration cost about $280 at list prices for both actresses with every rejected take, over half of it Seedance ($100 on an abandoned 1080p batch). At the settled routes, one actress's six shots cost $10–20.


