feat(registry): hw write-on wave — hw-write-title block + control surfaces for the handwritten family - #3557
Conversation
…faces for four hw components Adds hw-write-title (true glyph write-on: pen-traced Caveat via baked centerline masks, curvature-adaptive pen velocity, pen lifts, underline) and grows the handwritten family's four components with declared control surfaces (controls per the heygen-com#3227 convention), the completed stroke-texture matrix (sharp + deterministic seeded spray — no feTurbulence), boil poses, and physically-derived arrival deformation (travel-aligned squash with volume preserved and spring recovery). Shipped single-path callers keep working unchanged (legacy helper bodies preserved; proven in a legacy wiring harness). Validated in one reference build: check clean, double-render framemd5 910/910 bit-identical, seek-shuffle 8/8, WCAG 2.3.1 flash-scan zero violations, physics burn-ins hand-recomputed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@jbernard077 can you attach a video of the components pls in the pr description? that would be helpful to check quality |
|
@miguel-heygen done — videos are in the description now: the reference reel first (all five items staged together, with burned-in spec overlays), then one demo render per component, then the new block standalone in its Also flagged in the description: the one red check ("Catalog: search index covers the registry") is the documented external-contributor gap — needs the opt-in embedding model, so per CONTRIBUTING it's a maintainer regenerate-before-merge. Happy to adjust anything else. |
One wave to the handwritten family: a new true write-on title block, plus declared
control surfaces and a completed stroke-texture matrix for the family's four
components. The clips' shipped behavior is preserved — every existing single-path
caller renders exactly as today (legacy helper bodies kept verbatim; proven in a
dedicated legacy-wiring harness).
What's added
hw-write-title(NEW block) — a true glyph write-on: pen-traced Caveat builtfrom baked per-glyph centerline strokes (75-glyph table in
assets/baked/caveat-pen.js), curvature-adaptive pen velocity, real pen lifts, andan underline finisher. Controls:
scheme/animation/boil/writeOn/underline.hw-boil— the family runtime growshwBoilPose(declared boil poses over thefamily-locked frameDrop),
hwPenEase, and the completed stroke matrix(
hwStrokeTypes/hwStrokeApply/hwDrawOn): sharp + deterministic seeded spray— no feTurbulence anywhere.
hw-arrow—hwArrowBuildCONFIG-reading build (arrowStyle/strokeType/boil), split curve+head, and a travel-aligned arrival stretch on the head: it popsthe moment the accelerating draw lands, volume preserved, snappy spring recovery.
hwArrowPathships byte-identical;hwArrowOnruns the shipped body verbatim onnon-built targets (legacy
durhonored).hw-box-label— entrance"draw" | "drop"(the drop lands with a contactsquash on a deform wrapper, label counter-scaled to net identity, bouncy recovery),
strokeType, promotedlabelPos, boil base.hw-callout-circle— promotedlabelAt,strokeTypeon outline + connector, ameasured pop squash on arrival, boil base.
Every shared family helper ships one byte-identical text across all its carriers
(items and demos), verified programmatically; the two intentional divergences
(hw-callout-circle's pen-less
hwDrawOn; per-item spring register subsets) aredeliberate and documented.
Controls declarations (pairs with #3227)
Each item declares its control surface in
registry-item.jsoncontrols, agreeingfield-for-field with the CONFIG comment grammar, in the shape proposed by #3227. The
declarations are inert until that PR lands (today's schema ignores unknown fields and
today's codegen renders no table) and activate automatically when it does. Comment
shorthand used in the sources: g09 = the declared-control-surface convention
(#3227); g21 = the volume-preserving squash-and-stretch principle (#3221's
volume-squash-stretchrule).Validation
One reference build (24s reel exercising every addition, plus per-item and
legacy-wiring harnesses):
hyperframes checkComponent demos each exercise ≥1 non-default control state under
<name>-democomposition ids. An 8-state contact sheet for the new block and thepreview MP4s can be attached on request (external-contributor flow); the
caveat-pen.jsbake generator (bake-centerlines.mjs, deterministic) is availableon request as provenance — deliberately not shipped in the item.
Fonts: Caveat-700 (OFL), byte-identical to the copies the family already bundles —
no new font ships.
🤖 Generated with Claude Code
Preview media
(videos attached below — reference reel first, then one demo render per component, then the new block rendered in its
inkscheme; the block's defaultchalkscheme is authored for dark host stages, which the reel shows)00-reference-reel.mp4
hw-arrow-demo.mp4
hw-boil-demo.mp4
hw-box-label-demo.mp4
hw-callout-circle-demo.mp4
hw-write-title-ink.mp4
Note for the maintainer
The "Catalog: search index covers the registry" check names the expected external-contributor gap — the search index needs the opt-in embedding model, so per CONTRIBUTING a maintainer regenerates it before merge. Everything else is green.