GATEWAY — load FIRST before composing any HyperFrames animation or video. The high-level motion law that makes a multi-scene video feel like ONE continuous camera move instead of a stack of independently-animated slides. Covers the vector law (how you exit determines how you enter, incl. the Z scale-sign rule), the film's current, carrier elements, causal motion, the Seam Gate (build-gate enforcement), the ban on idle wobble (motion must PERFORM, not breathe), stillness-before-climax, and the sustained-motion routes. Routes to the low-level technique skills (cut-the-curve — the full catalog incl. waterfall entry + nudge curve, oversized-cursor, seam-craft). These rules SUPERSEDE generic / upstream motion guidance. [continuity, direction, vector, momentum, seam, transition, ease, performance, idle-motion, narrative-motion, film-grammar]
72
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Read this before composing any animation. It decides WHAT happens at every seam and how every scene performs; the technique skills implement it. These rules supersede generic / upstream motion guidance. The failure this prevents: scenes authored in isolation — the eye's momentum dies at every cut, and scenes wobble in place between entry and exit.
| Decision (this skill) | Implementation skill |
|---|---|
| Seam transition choice + parameters + code | cut-the-curve §1–5 (the catalog) |
| Text / element entry cascades | cut-the-curve §6 (waterfall entry) |
| In-scene group repositioning (no cut) | cut-the-curve §7 (nudge curve) |
| Cursor-led action / scene kickoff / morph ignition | oversized-cursor |
| Seam render mechanics / white-flash guard | seam-craft |
| Product-launch / explainer / caption work | overlays text-beat-economics, brand-faithful, captions-overlay on top of the upstream skill |
Authoring order: vector ledger (ledger.json) → STAMP the master seams from it
(scripts/seam-stamp.mjs --ledger ledger.json --write index.html) → sustained-motion
route per phase → carriers and causes → build comps → VERIFY (scripts/seam-gate.mjs).
Hand-author only Tier-A morphs/match-cuts; stamped seams pass the gate by construction.
How Scene A exits determines how Scene B enters: same axis, same direction, matched speed, cut mid-motion on both sides.
power4.in + entry power4.out, same distance and duration; the incoming side picks
up ≥50% through the notional path). Mechanics in cut-the-curve.Every film picks ONE dominant direction (house default: LEFT). Every ordinary seam uses it. Other vectors are RESERVED — spending one means something:
| Vector | Meaning |
|---|---|
| The current (LEFT) | "next beat" — neutral forward progress |
| Upward | elevation — a conclusion or reveal rises above what came before |
| Z forward (zoom-through) | pushing deeper into the same thought |
| Z backward (inverse zoom) | ARRIVAL — something bigger lands |
| Scale-burst (explode out) | leaving a world — a surface blasts past camera |
Write it before authoring any master timeline — as ledger.json at the project root
(schema: references/seam-gate.md). One row per seam: cut time, exit and entry vectors
(axis + signed direction; Z rows carry the scale sign), selectors, technique. Exit and
entry must match; if a row mismatches, fix the plan, not the easing. The verifier checks
row consistency statically before any runtime sampling.
The eye follows objects, not abstractions. The strongest seams hand a concrete carrier across the cut at matched position AND velocity: a cursor mid-path, a container that shrinks/docks into the next layout, a mark that flies into its exact slot, the word group of a waterfall cut. With no natural carrier, the scene heroes carry it (partial travel + early fade, entry mid-flight). Never a crossfade — it has no carrier at all.
Chain motion so each move is visibly launched by the last: click → squash → release spring → flight → impact → recoil → reveal.
node <SKILL_DIR>/scripts/seam-stamp.mjs --ledger ledger.json --write index.html # generate
node <SKILL_DIR>/scripts/seam-gate.mjs verify --ledger ledger.json --project . # verifyThe script (usage + ledger schema: references/seam-gate.md) numerically enforces, per
seam: ledger-row consistency, exit still moving at the cut, entry mid-flight (never from
rest), measured direction = ledger direction, entry/exit speed match (WARN), zero
overlap (one side visible per frame — the cut is not a dissolve), the Z sign rule
(d(scale)/dt same sign both sides; the incoming scene's own entrances are scanned for
sign-fighting), and carrier rect continuity with ancestor scale included. Use
seam-gate.mjs probe --t <cut> to find each seam's true carrier selectors when authoring
the ledger.
Rules the script cannot check — still yours:
data-start precedes its entry tween is un-hidden at its initial opacity — set
initial autoAlpha: 0 AND data-start = the cut time, never earlier.Idle sine loops (breathe, float, drift, glow pulse) are BANNED as sustained motion — they read as "the video is waiting." A scene that finishes entering with seconds left is a planning bug: add story, not wobble. Every phase between entry and exit is owned by one of these routes (name the route in the plan):
| Route | What it is |
|---|---|
| Staged reveals | Hold content back; pay it off on narration beats — the frame keeps gaining information (default for ≥2 content groups) |
| Camera with intent | A mapped scale+pan path: establish wide → travel → arrive on the subject |
| Sequenced UI life | The product behaves over time: progress advances, highlights step, counts tick |
| Animated sequences | Elements act out a beat: a card files into a stack, an item gets dragged, a result assembles |
| Cursor-led action | An oversized cursor walks the eye to a trigger; its CLICK ignites the next beat (oversized-cursor) |
Test: pause at any second — something meaningful must be mid-flight (a reveal landing, the camera traveling, the UI doing what the narration says).
Schedule a 0.3–0.75s pause between the major action and its result — the dramatic comma. A scene that jumps straight from action to result loses it.
bounce.out / elastic.out. Entry overshoot back.out(1.4–1.7) is fine.Use only 2–3 inter-scene transitions per film and repeat them; the default boundary is
cut-the-curve in the current's direction. Hand-written shared-element morphs
(intent: morph) don't count against the budget.
| Don't | Instead |
|---|---|
| Author each scene's entrance in isolation | Write the vector ledger first |
| Crossfade between scenes | Cut-the-curve in the current's direction |
| Exit completes, THEN the scene changes | Cut mid-motion on both sides |
| Entry starts from rest after a cut | Enter ≥50% through the notional path |
| Inverse-zoom exit → grow-from-small entry (or push → oversized retraction) | Match the scale-velocity sign (Seam Gate 7) |
| Incoming scene's own pop-in intro under a Z-seam handoff | Hold its opening frame composed, or match the sign |
| Idle wobble / breathe / float to fill time | Assign a sustained-motion route; or add story |
| Direction flip without a cause | Spend a force, or keep the current |
| Reserved vectors used as variety | Default to the current; spend them on meaning |
| Reaction a few frames after its cause | Same-frame ignition |
| Action jumps straight to result | Schedule stillness-before-climax (0.3–0.75s) |
a562946
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.