Files
hyperframes/skills/hyperframes-animation/blueprints/comparison-split.md
WaterrrForeverandClaude Opus 4.8 05af482f22 feat(skills): product-launch-video skill + consolidate motion knowledge into hyperframes-animation (#1745)
* 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>
2026-06-27 02:51:35 +08:00

3.2 KiB
Raw Permalink Blame History

comparison-split — Comparison Split-Cards

intent: Two paired items of equal weight shown side-by-side with mirrored 3D "book-open" tilts — the eye reads them as a balanced comparison, then a pill badge lands at each card's inner edge to punctuate. The motion IS the symmetry: two cards arriving from opposite wings into a held spread.

roles served

  • Key_Feature (from comparison-split-cards): when two complementary features / capabilities of equal weight should be presented simultaneously, not sequentially — an A/B, a "X + Y together," paired concepts the viewer must weigh side-by-side. Not for >2 items (use grid-card-assemble) or sequential steps.

duration: 46s

shot structure (a [bg] canvas carrying two faint ambient glow blooms — [accent A] near 30%, [accent B] near 70% — so each side owns a color identity across a 50% symmetry axis; equal-width cards under one shared perspective parent)

  • Scene 1 (0.0~0.8s) — title sets the concept. A centered [title line] with an [accent keyword] slides DOWN into place from just above (a short smooth settle). The downward arrival is deliberate: it forms a non-conflicting T-shape against the cards, which arrive from the sides next.
  • Scene 2 (~0.41.9s) — the split-tilt entry (signature move). Two equal-width feature cards arrive from opposite wings — [left card] from the left, [right card] from the right ~0.2s behind — each carrying a mirrored 3D rotateY tilt (left faces right, right faces left, opening like a book) and scaling ~0.85→1 as it lands. The entry overlaps the title's tail so the whole thing reads as ONE arrival, not two beats. Each card holds [image / label / subtitle]; box-shadows fall outward from the tilt (left shadow right, right shadow left).
  • Scene 3 (~1.9end) — badges punctuate, then hold. A pill [badge] lands at each card's inner edge (left then right, ~0.3s apart), overlapping its card ~15% so it reads as attached, not orbiting. This is the lone overshoot in the shot — it earns the punctuation. Settles and holds.

motion vocabulary: title slide-down from above; mirrored opposite-wing card entry; static book-open rotateY tilt (+tilt left, tilt right); tilt-matched outward box-shadow; inner-edge badge spring-pop; gentle phase-opposed idle float (left vs right, never synchronized) registered as subtle jitter; dual side-glow ambient.

rule mapping

  • two cards entering from opposite wings with mirrored rotateY tilts + tilt-matched shadow → split-tilt-cards (the signature; keep the two-layer split so the entry x/scale and the idle never collide on one alias)
  • title slide-down settle → gsap-effects (translate + opacity on a long-tail power3)
  • inner-edge pill badge pop (the one overshoot) → spring-pop-entrance (overshoot register — earns the punctuation)
  • phase-opposed idle float on the pair → sine-wave-loop (low-amplitude register — subtle jitter, NOT lazy breathing; left sin(t), right sin(t+π) so they never conveyor-belt)
  • the two faint side glows behind the cards → ambient-glow-bloom (un-triggered soft bloom, one per accent)

camera modifier: camera-static by default — the symmetry is the subject and a move would break the balance.