---
name: video_element_swap_editing
description: Swap one element in existing footage (a product, prop, sign, screen, outfit, person, or location) while the original performance, timing, lip sync, and camera move stay intact: choose the swap route per shot (generative video edit, tracked composite, or a clean reshoot call), prepare the source clip and reference assets, check frame alignment against the original, and run a continuity and consent pass before delivery. Vendor-neutral, with a shot-by-shot route selector, an alignment checker, and a check sheet. Use when footage exists and one thing in it has to change without reshooting the whole piece, or when a swap is proposed and someone has to decide if it should happen at all.
---

# Video Element Swap Editing

## Purpose

Replacing one thing in a finished shot is a different job from generating a new shot or editing a timeline. The performance already exists and it is the asset: the timing, the camera move, the way a hand actually held the product, the exact frames where speech lands. A swap earns its place only if all of that survives untouched and the new element sits in the scene as if it had been there on the day.

This skill is vendor-neutral. Hosted generative editors, traditional compositing tools, and a reshoot are treated as three routes to the same result, picked per shot by a scored selector, checked by the same alignment and continuity sheet, and gated by the same consent pass. One worked product swap is carried from raw clip to final render in `references/worked-example.md`, including the frame count failure its first export produced.

## Workflow

1. **Define the swap as one element, one shot at a time.** Write the shot sheet: shot ID, the single element changing, everything protected (faces, hands, other props, background, the full audio track), and the deliverable the shot belongs to. A request to change three things in one shot is three swaps, scored and checked separately. Vague scope is where swaps eat a schedule.

2. **Run the consent gate before any pixels move.** Work section 4 of `references/check-sheet.md` first, not last. Confirm the team owns or licenses the new element, that any person shown has consented to this kind of alteration for this use, and that the swap does not change what a person appears to say or endorse. A no here ends the job or converts it to a reshoot with a consenting subject. Consent checked after the render is consent not checked.

3. **Pick the route per shot with the selector.** Run `python3 scripts/route_selector.py --element <type> --camera <move> --duration-sec <n>` with the occlusion, interaction, lip sync, hero, and reshoot flags that fit the shot. It prints a route (generative, tracked-composite, or reshoot), the scores, and the reasons. Full route guidance lives in `references/route-selector.md`. If you override the call, write the reason on the shot sheet. The common pattern: flat and rigid goes composite, background and location go generative, speaking and heavy contact go reshoot whenever a reshoot exists.

4. **Prepare the source and the element asset.** Trim the source clip to the shot plus a few frames of handle each side, keep it at full quality, and keep the original audio as a separate untouched track. For generative work, gather a reference image of the new element from a matching angle when one exists and write a prompt that names the new element, what stays unchanged, and the light direction. For composite work, get the element asset at higher resolution than the frame needs, with exact artwork for anything carrying text. For a reshoot, prepare the original shot as an overlay reference and the continuity list for wardrobe, props, and light position.

5. **Build the swap on the chosen route.** Generative: run short shots in one pass, split shots over about 10 seconds into segments with overlap, and never let the pass touch the audio. Composite: solve the track first and check it at the fastest motion in the shot, build or fill a clean plate for what the old element covered, place the new element, then do edge, contact, grain, and blur work. Reshoot: match framing and timing against the overlay, then check the new take against the neighboring shots before blending it into the edit.

6. **Run the alignment check against the original.** Run `python3 scripts/alignment_check.py <original> <swapped>`. The render must match on resolution, frame rate, duration within one frame, and frame count. Then flip stills at the first, middle, and last frames between original and swap, and confirm only the element changed. Run one sync spot check on a sharp sound event to catch a one frame slip the header checks miss. A misaligned render is re-exported or rebuilt, never hand-waved.

7. **Run the continuity and quality pass.** Work sections 2 and 3 of `references/check-sheet.md`: edge, track, light, contact, shadow, grain, and text stability on the element itself, then variant, screen direction, surrounding props, and light against the shots before and after. Read any text on the new element on three separate frames. Generative routes garble small text and drift labels first, composite routes fail at contact frames and reflections first, check accordingly.

8. **Set disclosure and file the record.** Check the current altered content and AI label rules for every platform the piece will run on, at upload time, and set what is required. Keep any provenance credential the edit tool embedded where the export path allows it. File the shot sheet, route scores and overrides, alignment output, consent answers, and the approver name with the project. Then deliver the render at the ordered spec, with the original audio unless the job sheet says otherwise.

## Output Contract

Every swap job returns:

- A shot sheet per shot: the one element changed, the protected items, the route chosen with its scores, and any override with its reason
- The consent record: ownership or license for the new element, person consent where a person is shown or altered, and the endorsement and speech answers from the check sheet
- The alignment output per render: resolution, frame rate, duration, and frame count verdicts against the original
- The continuity sign-off: element quality checks and neighbor shot checks, with any fault carrying a named waiver or a fix
- The disclosure record: which platform labels were required and set, or why none were
- The final render at the ordered spec, with the original audio intact

## Operating Rules

- One element per pass. Compound swaps hide which change caused a fault and multiply drift in generative passes.
- The original performance is the asset. Any route that changes timing, mouth shape on speech, hand contact, or camera move to make the swap easier has failed the job, however clean the new element looks.
- Exact text goes in as exact artwork through a composite, never as a generative redraw. Legal copy, prices, and label claims do not survive a model redrawing them, and a misspelled label on a hero product is a ship blocker.
- SSIM and other full-frame scores are drift detectors, not pass marks. A real swap lowers full-frame similarity by design. Use the scores to compare two renders of the same swap, and let the frame checks judge the swap itself.
- Tool limits, clip lengths, and model names change fast. This skill names tools only as examples of a route. Verify current limits on the tool site before committing a shot to a route that depends on them.
- A platform AI label and a legal disclosure are two different duties. Setting the platform toggle does not settle endorsement or testimonial obligations, and a fabricated endorsement is not cured by a label.
- Never swap in a person, a product in a person's hands, or a setting that changes what a recorded person appears to support without the consent record in step 2. When consent is unclear, the routes are reshoot or drop the swap.
- Bulky material lives in `references/`: `route-selector.md` (the three routes, the shortcuts the scorer encodes, prep per route, and honest cost notes), `check-sheet.md` (alignment, element quality, continuity, consent and disclosure, and the sign-off block), and `worked-example.md` (a hand-held product swap carried to delivery, with its failed first export). Working tools live in `scripts/`: `route_selector.py` (scored route call per shot) and `alignment_check.py` (ffprobe alignment verdict plus optional SSIM). Both were run on real inputs before this skill shipped: the selector on sign, person, and location cases, the checker on matched and mismatched test renders.
