Files
zooqueenandHanzo Dev 70b41673a3 frames: rebrand the fork to Hanzo Frames
Forked from HyperFrames (Apache-2.0), full history preserved.

Hosts are mapped explicitly and BEFORE the identifier rename, because
hyperframes.heygen.com is not decoration: 175 of its occurrences are $schema
identifiers that a validator dereferences. A blind rename would have left them
naming a host that never serves them. The schema files are in this repo under
docs/schema, so the mapped host is one we can actually serve -- that is the
condition that makes the rewrite safe, and serving them is a deploy task, not
an edit. docs/schema/hyperframes.json is renamed to frames.json to match the
identifier it is now published under.

api.heygen.com and the CLI auth against heygen.com are left UNRENAMED on
purpose. They are a dependency on HeyGen's SaaS, not a name of ours to take,
and the right move is to remove that integration rather than rebrand it.

LICENSE and CREDITS.md are untouched; NOTICE records the lineage.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-28 23:42:24 -07:00

2.2 KiB

Frame worker — general-video delta

The shared law is the core contract above (the packet builder prepends ../frames-core/references/frame-worker-core.md to this file as _role.md) — read the two as one role. This file carries only what's specific to a general-video scene; you run N-up, one scene each — your dispatch carries exactly one packet. Tempted to add a generic GSAP / timeline rule here? Wrong home — it belongs in the core contract or frames-core.

Your scene is invented, not captured

There is no product capture pipeline: your packet's storyboard block plus the design truth file named in Project inputs are your complete input. Invent elements from those two sources only — use exactly the media paths the block itself names, and never resolve or fetch new media (the orchestrator staged everything your block cites before dispatch).

Design truth

Project inputs names the design file (resolution order frame.md → design.md → DESIGN.md). It is brand truth for tokens, type, palette, and treatment; the storyboard block owns content. When the block and the design file disagree on content, the block wins; on style, the design file wins.

Output contract — composition + motion sidecar

Write exactly two files, then stop:

  1. compositions/<frame_id>.html — the sub-composition, a bare fragment per the core contract.
  2. compositions/<frame_id>.motion.json — one JSON object the orchestrator merges into the project's motion ledger:
{
  "scene": "<frame_id>",
  "duration_s": 0.0,
  "rules": ["<rule ids you actually used>"],
  "exit": { "vector": "<direction + px/s at your last frame>", "still_moving": true },
  "entry": { "vector": "<direction + px/s at your first frame>", "from_rest": false }
}

Report what you actually authored — measured values from your timeline, not the plan's hopes; where the doctrine chain is installed, a numeric seam gate verifies exits and entries downstream and a wrong sidecar fails loudly there instead of silently here.

Boundaries

Audio is orchestrator-owned: never author <audio> in a scene. Seams between scenes are stamped by the orchestrator from the ledger — author your entry/exit motion inside your own timeline, and never reach into a neighbor scene's file.