← Files Creatify Ad AgentARCHIVED FILE
skills/ad-agent/references/dynamism.md
7.55 KB · Oct 4, 2026 · 00:02 UTC
# Dynamism bar: fidelity must not be bought with stillness
A clip that barely moves is easy to keep faithful and useless as an ad: it doesn't stop a scroll. Judge motion yourself from `strip`s of each shot (every frame of a stretch, via `composer_exec` + `composer_view`; see media-recipes.md). Is something visibly moving in every third of every shot, and does the hook move in its first second? `python3 -m lib.compose render index.html` (via `composer_exec`) also lists `static_stretches` (near-frozen picture ≥1.5s) as advice, not a gate. An end card or a held reaction is fine; a frozen product shot is not. Don't trade the brief or clean craft for motion: in the ablation that removed the model's motion score from this loop, chasing it cost brief adherence and craft without winning fidelity.
- **Hook in the first second, and keep moving to the last frame.** Open on motion (a camera already moving, a hand entering), never on a held still. But never front-load it: a fast push in the first second that settles into a static close-up reads as a frozen frame. Every third of every shot must visibly move. Spread a camera move across the shot's whole duration (anchored push-ins cover the full clip). If a move lands early, the next beat of motion (a light sweep, a slow arc, a hand) starts before it stops.
- **Motion lives inside the shots, not in the cut count.** Many short clips spliced together read as flaky and jittery, and viewers read it as low quality. Budget: a 4–6s video is 1–2 shots, ≤10s is 2–3, 15s is 3–5. No shot is under 2s (the opening hook may be 1.5s). One long, strongly moving take beats three short ones.
- **Long multi-beat briefs (10–15s, a "cut sequence" of beats) → 3–4 shots of 3–5s, not a montage.** Several beats can live in ONE shot (the camera pans from the customer to the couple behind the glass instead of cutting). Where the brief says "rapid cuts", 3 cuts in 5s is already rapid; never go under 2s per shot. Open straight on the action (no fade-in from black).
- **Morphing is a defect, not motion.** A body, hand, lid or partition that warps or melts between frames reads as flaky/jittery. Scrub every take's contact sheet for it and re-roll the take (new `seed`, simpler action) before assembling.
- **Seams must flow.** Prefer continuity over cuts: chain consecutive shots with i2v (shot N's last frame is shot N+1's `image`), so the motion carries through the seam. Where you do cut: cut on an action, keep camera direction and speed consistent across the cut (a push-in doesn't cut to a pull-out mid-beat), change framing clearly (never a jump cut between near-identical framings), and don't ping-pong between unrelated angles.
- **Real camera motion from H3**: anchored push-ins, arcs, tilts, dolly/slider/gimbal moves with visible parallax, handheld when the brief is UGC. Add subject action where the brief allows (hands picking up, opening, pouring, pressing) and light that moves (a sweep across the label).
- **Match the brief's energy.** People, emotion and action beats (reactions, tasting, celebrating, rapid cuts) must play at that energy; Seedance plays them at full energy. Anchor (`last_image`) ONLY the frames where the product must be exact. Shots where the product is not the subject (a reaction close-up, a celebration, the couple behind the glass) are **r2v**, but ONLY when the product is out of frame, or small and out of focus in the background. r2v re-imagines everything it renders, and a product in an r2v shot comes back misspelled, re-shaped or duplicated. Any shot where the product is visible stays i2v from an exact keyframe, with a MODEST, natural pose change to its `last_image` end frame (a big pose delta between anchors makes H3 morph the body, which reads as jitter).
- **Alternate product shots and people-only shots.** For people-heavy briefs where the product must stay exact, plan the edit as an alternation. Product shots are i2v from exact keyframes, with energy from camera travel plus a modest action. They cut with people-only shots (r2v, framed so the product is OUT of frame: a face close-up, the couple behind the glass, hands high-fiving above the counter line), which carry the fluid human energy. Template for 15s: product wide (3s) → people reaction (3s) → product close-up action (3s) → people celebration (3s) → product hero push-in (3s). Re-read every r2v shot's frames: if the product crept into frame, re-frame and re-roll. r2v shots use the scene keyframe as reference, since r2v moves people far more naturally than i2v, which turns people shots into "animated stills". Give them an energetic, specific action prompt ("she gasps and grabs his sleeve, both lean forward, then burst into cheers"). Give each of those shots 2–3s and cut on the action.
- **Tension is not stillness.** H3 renders "anxious", "holding breath", "frozen in suspense", "watching" as a freeze-frame, and it reads as one. Write tension as visible physical action: leans in, grips the other's sleeve, covers mouth with both hands, bounces on toes, exchanges a quick glance, clutches hands to chest. A reaction shot is 2s of visible action, not a flash cut.
- **A frozen stretch in a shot that should move is a regen, not a trim.** `static_stretches` (from `lib.compose render`) and your own `strip`s show where the picture stops. Re-render that shot with a concrete action; never fix it by chopping it into more, shorter clips. Anchored segments with people in them make people stiff: the end pose must follow from vigorous action, so prompt the action explicitly.
- **"CAMERA MOVEMENT ONLY" / "camera move" in a brief means the CAMERA MUST MOVE and the product stays put.** Never answer it with a locked-off tripod. Never write "locked-off", "no camera movement" or "static" into an H3 prompt unless the brief itself asks for a static frame.
- **Travel distance is what reads as motion.** A move that starts already close and creeps in changes almost nothing in the frame and reads as static, however smooth. Start WIDE (the full product, at the reference's own framing or wider) and END on the detail, with a ≥2.5× scale change spread across the whole clip. Seedance's winning shot on a "camera movement only" packshot is exactly that: full pair → tight heel in 4s.
- **Anchored push-in recipe** (keyframe `gen/kf.png` = the WIDE frame, W×H canvas): via `composer_exec`, `ffmpeg -v error -y -i gen/kf.png -vf "crop=iw*0.4:ih*0.4:iw*0.4:ih*0.4,scale=W:H:flags=lanczos" gen/kf_end.png` (aim the crop at the logo/detail the move lands on; 0.4 = 2.5× travel). Then `composer_generate_clip(mode="i2v", image="gen/kf.png", last_image="gen/kf_end.png", prompt="Smooth continuous dolly push-in toward <detail>, visible parallax, the product itself does not move or change", …)`. For more energy, chain two such segments (wide → mid, mid → detail) or add a second angle as a cut.
- "Subtle camera movement", "slow zoom" or "macro beauty shot" in a brief sets the style; it is not a license to be static. Subtle means smooth and controlled, still visibly moving through several beats.
- Screen recordings: the interaction IS the motion. That means brisk cursor paths, typing at human speed, and a visible click response (button press state, then a loading/progress state or the next screen sliding in). Add continuous camera travel over the screen for the WHOLE clip: start on the full screen, travel in to the text box (≥2×) as typing starts, follow the cursor across to the button, then pull back out on the click. Keep it one continuous camera path with real travel. Digital moves over the H3 screen clip are fine here, because the UI pixels are exact. A barely perceptible push scores as "mostly static".
SHA-256: 71803c51eff73f6462fbb71b13bfe779a63a45239e351177ccb1510922f19974