Loading...
Loading...
Captions living in 3D space around a talking head: a camera flies between the speaker and the words (whip-in, parallax truck, push), caption groups sit at different depths so camera moves pull them apart, hero words hide BEHIND the speaker through an alpha matte, a ring of words wraps round the speaker and turns in front of them, focus racks between depths, and text steps at 15 fps with ghost motion blur. Works in any type style (editorial serif, bold sans) or hand-drawn (p5.brush write-on). Trigger on: "3D text", "3D camera captions", "text around / behind the speaker", "camera moves through the text", "depth captions on my avatar video". Covers prep (portion, padded plate, matte, word clock, font metrics), the shot grammar, depth rules, QC, and limits.
npx skill4agent add heygen-com/hyperframes-community-skills camera-3d-captionsnpx hyperframes@0.8.62registry.npmjs.orgffmpegfonttoolsbrotlinumpypillownpx hyperframes@0.8.62 remove-background~/.cache/hyperframes/cdn.jsdelivr.netp5-paint-animationbuild-sprites.pyout/assets/renders/bash scripts/prep-take.sh <take.mp4> <start_s> <dur_s> <project>/assetsportion.mp4plate-tall.mp4person.webmpython3 scripts/font-metrics.py assets/metrics.js key=font.woff2[@wght=…,opsz=…] …font-variation-settingsfont-optical-sizing: noneperson.webmassets/kit/{cam3d.js,tables.js,finish.js}metrics.jsassets/references/worked-film.htmlreferences/recipes.mdC3.init(metrics, {W, H})tables.js(W − 1440) / 2wipe.x| Beat | Build | Rule |
|---|---|---|
| Whip-in punch-in | | plate |
| Depth groups | 2–3 caption groups per clause at D 1250 / 1500 / 2200 | near = bigger with a bigger shadow; the creep and truck reveal the parallax |
| Hero behind | hero word in the behind layer at the plate depth, masthead-style across the head | the head hides the middle letters; ≥ 60 % stays legible; the ascender is inside the frame |
| Parallax truck | | the old layout fades over 3 steps; the next layout arrives by parallax |
| Body wipe | the speaker's own matte, | shot A clips left of the band, shot B right; pull-out on both sides |
| Wrapped ring | horizontal circle IN FRONT of the speaker (centre Z 2000), 11–16° from above, turning | words enter small at the side as spoken, swing round the front, settle; lower arc flips to read upright |
| Fly-through | phrases at D 1500 / 2000 / 2500, camera swings between them | focus follows the phrase |
| Staircase finale | push segment; caption words each deeper and smaller down a diagonal | the push drives the near words apart |
shutter: 0.5fr(t) = 2·round((t − 0.2)·15)ENTRYRING_ENTRY[6, 16, 0.5, 1500]sizerisetlandringLinesidezSplitfinish.jsreferences/worked-film.htmlscripts/hand/build-sprites.pyreferences/recipes.mdnpx hyperframes@0.8.62 check . --no-contrastscripts/frame-bounds.js__frameBounds(0, dur)[]scripts/glyph-gaps.js__glyphGaps(t)npx hyperframes@0.8.62 render . --crf 12snapshot --at