* feat(skills): product-launch-video + consolidate motion knowledge into hyperframes-animation
- Add the product-launch-video skill: shot-sequence architecture where each
visual frame is a time-coded shot sequence picked from a blueprint menu and
paced to the voiceover (anti-PowerPoint). Includes the frame-worker sub-agent,
story/visual/motion-design references, and audio/captions/transitions/
stage-assets/assemble-index scripts.
- Consolidate motion knowledge in hyperframes-animation as the single source of
truth: promote the updated atomic rules (31 -> 36) and rename product-launch-
video's archetypes into hyperframes-animation blueprints (13 -> 15, replacing
the old set). product-launch-video, faceless-explainer, and pr-to-video now
reference them via ../hyperframes-animation/{rules-index,blueprints-index}.md
and the rules/blueprints dirs. Fixes the discrete-text-sequence broken links;
blueprints no longer ship per-id runnable examples, so example references in
the consumers were dropped.
- Default HeyGen TTS voice to Marcia (deterministic; was the API's first English
voice, which drifts on catalog re-sort). Override with --voice.
- assemble-index pre-assembly frame guards: auto-repair a sub-comp root missing
canvas dims; hard-fail on <video>/<audio> inside a sub-comp; hard-fail on a
timed non-root element missing class="clip" or overlapping same-track clips.
- Lint/CLI: lint media inside sub-compositions as an error; stop false-positive
caption layout/lint findings; contrast/layout-audit skip elements hidden by an
invisible ancestor.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(skills): clear CodeQL alerts in assemble-index.mjs
- script/style blanking regex now matches closing tags with trailing
whitespace (</script >, </style >) — js/bad-tag-filter (high).
- drop the existsSync precheck before reading/repairing a frame file; read
directly and handle ENOENT, removing the check->write TOCTOU window —
js/file-system-race (high).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.0 KiB
ticker-takeover — Ticker Displace / Takeover
intent: A context phrase types in, an accent word cycles through options like a slot-machine to suggest "this could be many things," then a hero CRASHES in from off-screen and physically shoves the text aside — "actually, this is what it is." A collision, not a fade.
roles served
- Hook (from
takeover-ticker-displace): when a static lead-in phrase + a cycling accent word should be physically replaced (not cross-dissolved) by a hero arriving with momentum, and the final frame is the hero alone. Reach for it when the takeover should read as an impact. - Brand_Outro: the same collision used as a sign-off — options cycle, the brand mark crashes in and owns the frame.
duration: 5–7s
shot structure (a [bg] canvas; one text group on the left/center that gets ejected by an incoming hero)
- Scene 1 (0.0–~1.4s) — context build. A typewriter lays down a
[lead-in phrase]character-by-character (smooth, no typos — selling confidence, not human chaos). Camera static. - Scene 2 (~1.4–3.0s) — the cycling beat. An
[accent word]slot inside the line ticks through 2–3[options]on a vertical spring-roll (each click a new word), suggesting breadth — "many things this could be." (More than ~3 reads as filler.) - Scene 3 (~3.0–4.2s) — the collision (signature move). A
[hero]crashes in from off-screen with momentum and physically SHOVES the whole text group aside — the text reacts to the impact (gets displaced), it does not fade. The hero lands heavy — a longer settle, not a zip — so it reads as mass, not speed. - Scene 4 (~4.2–end) — the hero alone. The hero settles dead-center and reads still. Holds.
motion vocabulary: smooth character typewriter; vertical spring-ticker word roll (2–3 steps); off-screen hero crash-in with momentum; reactive displacement of the struck text group; heavy long-tail landing (not bouncy); dual-axis subtle jitter on the resting hero.
rule mapping
- smooth single-phrase typewriter lead-in →
discrete-text-sequence(smooth-slice / continuousfloor(progress)form — no typo machinery) - accent word slot-machine cycling through options →
vertical-spring-ticker(STEPS= number of options the hero will replace; the rule's footer-reveal is unused — Scene 3 takes its place) - hero shoves the text group aside on impact →
reactive-displacement(the text is the displaced mass; express the hero's "heavy land" as a longerpower2settle, not the rule's defaultback.out) - hero's fast off-screen crash-in →
motion-blur-streak(directional velocity blur resolving sharp as it lands) - resting-hero aliveness →
sine-wave-loop(low-amplitude dual-frequency register — scale + rotation jitter composing onto the hero's final landed scale; never a yoyo around 1)
camera modifier: camera-static — the displacement happens in element space (the hero moves the text), so there is no real camera move; the impact is the only motion.