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.0 KiB
Raw Permalink Blame History

Frame worker — faceless-explainer 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 faceless-explainer frame; you run N-up, one frame 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 focal: / roles: — invented elements

  • focal: — which invented element is the hero.
  • roles: — each invented element's role: foreground subject / background full-bleed / supporting. Because the explainer is faceless, these are elements you design (a hero word, a diagram node, a chart series, a coined-term card), not captured assets. The only real media is a user-supplied image, when present: public/<basename> — description (a [video] tag marks a .mp4 clip the user provided).

Designing each element (faceless-explainer constraint)

Design each element by its roles (the focal is the hero): a foreground subject is the thing the eye lands on — respect the 83% keep-out, lay text around it, not over it; a background is full-bleed and dimmed ~30–50% so foreground content stays legible; supporting elements (labels, secondary shapes, ambient layers) stay quiet. These are invented — you build them in SVG / CSS / type from frame.md's atoms, never from a fetched file (build the idea the narrative describes; never fall back to generic decorative bokeh or stock filler). If the user supplied a real image named in roles:/focal:, place it: a [video] candidate (.mp4) renders as a muted <video class="clip"> (data-start / data-duration / data-track-index per the core clip contract), a direct child of the frame root — never nested in another timed element, or the renderer freezes it; an untagged image → <img>.