All skills
heygen-com avatar

/vox-explainer

@cddf0e6

Create a 60–90 second, collage-style HyperFrames explainer from a hiding-in-plain-sight topic or supplied documents and links. Use for requests such as 'make a plain-sight explainer', 'Vox-style history of X', 'why is X everywhere?', or 'turn this document into an explainer'. Covers topic or source routing, research, script, static design approval, voiceover timing, motion continuity, build, and numeric quality gates.

Use this Skill: https://skilld.dev/gh/heygen-com/hyperframes-community-skills/vox-explainer

This session only. Nothing lands on disk.

referencesmotion-continuity.md

≈2.4k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Motion Continuity (Gateway)

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.

Route map

Decision (this skill) Implementation skill
Seam transition choice + parameters + code velocity-matched-transitions.md §1–5
Text / element entry cascades velocity-matched-transitions.md §6
In-scene group repositioning (no cut) velocity-matched-transitions.md §7
ONE element running two+ animations in sequence animation-overlap.md
Seam render mechanics / white-flash guard render-safe-seams.md

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 satisfy the generator's hard invariants, but warnings and rendered output still require review.


Part 1 — The Seam Law

The Vector Law

How Scene A exits determines how Scene B enters: same axis, same direction, matched speed, cut mid-motion on both sides.

  1. Axis — x stays x, y stays y, Z stays Z. Never trade axes across a cut.
  2. Direction — never mirror. On Z, direction = the SIGN of scale change: growing = push (camera forward), shrinking = pull (camera back). A receding exit answered by a grow-from-small entry is a mirrored vector — the most common violation, because grow-from-small is the default element entrance.
  3. Speed — entry initial velocity ≈ exit final velocity, via mirrored eases (exit power4.in + entry power4.out, same distance and duration; the incoming side picks up ≥50% through the notional path). See velocity-matched-transitions.md.
  4. Phase — the cut lands mid-motion on BOTH sides. Settling to rest before the cut, or starting from rest after it, is a dead beat.

The Current

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
  • Never run consecutive seams in opposing directions — ping-pong reads as an error.
  • A direction change needs a visible cause (click / bounce / impact) or a chapter boundary.

The Vector Ledger

Write it before authoring any master timeline — as ledger.json at the project root (schema: 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.

Carriers

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 staggered word-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.

Causal Motion

Chain motion so each move is visibly launched by the last: click → squash → release spring → flight → impact → recoil → reveal.

  • Effects start ON the causing frame — same timeline position, never "shortly after."
  • Reactions scale with implied mass: big elements rebound slower, small ones snap.
  • A force is a license to change direction; an uncaused flip is a ping-pong.

the seam verification gate (build gate — run the verifier, exit 0 or the seam is not done)

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 .  # verify

The script (usage + ledger schema: 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:

  1. Edits re-open the seam. Any change to a scene's first/last ~1s (including re-timing to new VO) invalidates that boundary's audit — re-run the verifier.
  2. Audio is the clock. Re-time scenes to the VO's real word timestamps; never rush a read to fit a slot. A VO regen re-opens its seams.
  3. Clip-gating gotcha (the usual cause of a zero-overlap FAIL): a clip whose 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.

Part 2 — Performance (the scene keeps performing)

No idle wobble

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

Test: pause at any second — something meaningful must be mid-flight (a reveal landing, the camera traveling, the UI doing what the narration says).

Film-texture exemption: deterministic, seeded, sub-pixel-scale media texture — grain, stop-motion boil on cutouts, gate weave + exposure flicker on archival photos — is GRADE, not motion, and does not count as idle wobble or as a sustained-motion route. It never touches text, never exceeds ~1px / ±0.05 stop, and obeys its own mode rules (gate weave: footage mode / full-bleed only — 0.5px @ 8Hz + ±0.04 stop @ 10Hz, ignite at zoom start). A scene may not use texture to pass the pause test — something narrative must still be mid-flight.

Stillness before climax

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.

Timing intents

  • Single entry ≤ ~800ms; longer buildup = multi-element stagger, not one slow element.
  • Exit ≈ 75% of entry. Exception: velocity-matched-transitions inverts this (entry ~127% of exit).
  • Total stagger ≤ 500ms; with 8+ elements, tighten per-item delay or stagger the first few.
  • Forbidden eases: bounce.out / elastic.out. Entry overshoot back.out(1.4–1.7) is fine.
  • Similar elements share one ease+duration intent — never a unique pair per element.

Transition vocabulary

Use only 2–3 inter-scene transitions per film and repeat them; the default boundary is velocity-matched transitions in the current's direction. Hand-written shared-element morphs (intent: morph) don't count against the budget.


Anti-Patterns

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 verification 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)

Source: SKILL.md on GitHub

2 warnings1mo3 checks · Risk SAFE
  • Gen Agent Trust Hub1mo

    The vox-explainer skill is a specialized toolset for creating college-style explainer videos using the HyperFrames framework. It includes a pipeline for research, scripting, and design, supported by Node.js scripts that automate animation code generation and visual continuity verification. The skill interacts with external resources by downloading vendor-owned packages via npx and fetching media assets from trusted public archives like Wikimedia and the Library of Congress. It operates locally, using a spawned Chrome instance for previews and verification.

  • Socket1mo

    1 alert: gptAnomaly

  • Snyk1mo

    Risk: MEDIUM · 2 issues

Signed by skilld at cddf0e6. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 6 days ago.

Activeupdated last month

README badge

README badge for heygen-com/hyperframes-community-skills/vox-explainer