mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-11-05 13:47:40 +00:00
feat(embedded-captions): integrate remaining 12 identities (batches 4+5) into the catalog
Brings the branch skill to the full 48-identity catalog (10 column-flow + 38 theme): interface family (breaking/finance/cover/blueprint/xray/glass/magnet) + uncanny family (constellation/seance/mirror/brand/redline), their paradigms/setpieces in make-theme.cjs, SKILL.md count + retired-Standard doc cleanup, 10 dead decls removed. 12/12 new themes compile in-repo; 16/16 fixture regression green. make-theme.cjs is now 702 KB (38 themes' worth of generators) — over the 500 KB non-LFS gate; committed with HF_MAX_NONLFS_KB override (it is reviewable source, not a binary; LFS would break diffs). Candidate for a future per-family split. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
b6d3a9c4b5
commit
38e8d9f469
@@ -16,44 +16,56 @@ Routing procedure (replaces any mode decision):
|
||||
|
||||
## Identities
|
||||
|
||||
| Identity | Reading surface | Voice (one line) | Recommend for | Scene needs | Author → engine |
|
||||
| ------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------- |
|
||||
| `cream` | scene-embedded column flow | warm poetic light, emergence + glow | introspective, narrative, emotional monologues | dark/mid-tone warm scenes (luma < 150) | cinematic.json → make-cinematic |
|
||||
| `ink` | scene-embedded column flow | letterpress pressed into bright surfaces | the bright scenes everything else washes out on | BRIGHT scenes (luma > 150) | cinematic.json → make-cinematic |
|
||||
| `editorial` | scene-embedded column flow | lowercase italic serif, pen-stroke glides | fashion / beauty / lyrical / premium brand films | mid/dark scenes | cinematic.json → make-cinematic |
|
||||
| `keynote` | scene-embedded column flow | confident centered slides-in-the-scene | launches, founder updates, tech explainers (mood over verbatim reading) | any mid/dark | cinematic.json → make-cinematic |
|
||||
| `documentary` | scene-embedded column flow | burn-in stillness, bone on charcoal | interviews, journalism, testimony — gravitas IS the style | any | cinematic.json → make-cinematic |
|
||||
| `loud` | scene-embedded, body in front | percussion type that competes with the face | hype, social reels, sport, music, motivational | any (counter-accent handles warm) | cinematic.json → make-cinematic |
|
||||
| `neon` | scene-embedded column flow | captions as neon signage in the dark | cyberpunk / nightlife / tech-noir / music | dark scenes | cinematic.json → make-cinematic |
|
||||
| `glitch` | scene-embedded column flow | corrupted-feed RGB-split type | hacker / AI / dystopia content | mid/dark | cinematic.json → make-cinematic |
|
||||
| `chrome` | scene-embedded column flow | liquid-metal hero with sheen sweeps | fashion-tech, Y2K, product-flex | mid/dark | cinematic.json → make-cinematic |
|
||||
| `velocity` | scene-embedded column flow | every word arrives along its motion vector | sport, automotive, fitness, kinetic content | any mid/dark | cinematic.json → make-cinematic |
|
||||
| `anchor` | verbatim lower-third rail + 1 settled climax | the quiet professional — fade-up rail that simply reads; the apex settles behind the subject with a drawn accent underline. Discipline IS the style. | explainers, tutorials, corporate, news-adjacent — **where every word must be read**; the conservative default | any (opaque rail; settle carries a soft veil) | theme.json → make-theme |
|
||||
| `ordnance` | stamped verbatim rail + detonation apex | military marking system; everything has mass; the room reacts | punchy announcements, drops, "炸一点 / 像 AE 做的" asks | any (charge-dim makes its own contrast) | theme.json → make-theme |
|
||||
| `terminal` | typed console panel + glyph-decode apex | the transcript is a signal log; apex decodes from noise | tech / data / AI / investigative, "终端/控制台/解码" asks | cool/dusk preferred | theme.json → make-theme |
|
||||
| `neonsign` | warm tube rail + hand-written neon apex | a sign district at dusk; the apex is WRITTEN stroke by stroke | lifestyle / music / mood, "霓虹/手写" asks | dusk/dark backdrop; needs `python3` (stroke-path gen) | theme.json → make-theme |
|
||||
| `stardust` | accumulating poem, condensing letters | words condense from dust and return to it | poetic / memory / science-wonder monologues | one clear column side (probe fails → fall back to `cream`) | theme.json → make-theme |
|
||||
| `stomp` | full-frame takeover cards | hard-cut typographic takeover with a void before the drop | hooks, manifestos, ad openers — the words ARE the show | any (plate runs dimmed) | theme.json → make-theme |
|
||||
| `lastpage` | manuscript rail + a blurred future-field | the future hangs unreadable in the room; one rack-focus reveals every faint line was the apex word | visionary thesis, prophecy-toned talks, trailers, literary content | mid/dark (the field needs air) | theme.json → make-theme |
|
||||
| `nightcity` | corrupted-UI rail + cover-letterform apex | body words boot through a corrupted-cyan frame into acid-yellow UI; the apex slams in BEHIND the subject set in the CP2077 cover replica typeface (cyan offset, baseline streak, circuit trace), tears in as displaced slices, lives as a glitching print | gaming / tech-edge / glitch culture / hype drops, "赛博朋克/游戏封面" asks | any (the lockup carries its own contrast); CP2077-adjacent content only (fan-kit terms) | theme.json → make-theme |
|
||||
| `scoreboard` | split-flap chyron rail + departures-board apex | stadium split-flap mechanics — body words flip-cycle wrong words on tiles before clacking onto the real one; ROW counter + odometer chip furniture; the apex is a giant departures board behind the subject that locks the word letter-by-letter under floodlights and a crowd-flash, status ticker types on | sports, transit/travel, scores, countdowns, reveals, "翻牌/记分牌/机场大屏" asks | any (board + chyron bring their own dark metal contrast) | theme.json → make-theme |
|
||||
| `transit` | LED departure-strip rail + illumination-wipe apex | amber dot-matrix station PA — body words light column-by-column (L→R LED wipe + arrival flicker) on a docked departure strip whose lines page by scroll-snap; platform tag, ticking clock, ⚠ DELAYED → ● ON TIME gag; the apex panel expands behind the subject inside a chasing LED-marquee border, the word illuminates column-by-column under a PA flash + ding pulses, then pages up and collapses | travel/transit, announcements, schedules, countdowns, retro-terminal, "LED屏/车站到站/点阵屏" asks | any (LED strip + panel bring their own dark contrast) | theme.json → make-theme |
|
||||
| `vhs` | camcorder OSD rail + REC-FREEZE tracking-slam apex | tape playback — permanent lens vignette + OSD furniture (▶ PLAY, ● REC, blinking green timestamp); body words carry a permanent red/cyan misregistration fringe, arrive by tracking glitch and REWIND off with flat-white echoes + scrub lines (the deck flips PLAY→REW in dead air); the apex is REC FREEZE: 1-frame white tear + head-switching noise bar, the word slams in behind the subject as three sheared tracking bands that SNAP into register, misregistration breathes through the hold under tape weave + auto-iris, then rewinds off | retro / nostalgia / found-footage / home-video, '90s tech, music & lifestyle edits, "录像带/VHS/复古/DV" asks | any (backlight-comp scrim makes its own contrast on bright skies) | theme.json → make-theme |
|
||||
| `arcade` | arcade HUD rail + pixel-block boss-intro apex | 8-bit cabinet attract mode — the frame plays through CRT scanlines + a corner vignette; body words coin-pop onto a bordered HUD bar (blinking 1UP, CREDIT 01) with a 1-frame white blip each, emphasis words run a cyan→magenta palette swap, lines dissolve checkerboard; the apex is a BOSS INTRO behind the subject: the room dims, WARNING blinks twice, ~64 seeded pixel blocks fall quantized into a matrix grid over the word rect, the word flashes ON in Press Start 2P with chromatic ghost layers + a 3-frame palette strobe while letterbox bars slam in and a HI-SCORE odometer rolls top-right; everything dissolves checkerboard and the blocks drop away | gaming, retro-tech, playful hype, launches, achievement/level-up beats, "像素/街机/8-bit/打游戏" asks | any (boss dim + dark HUD bar bring their own contrast) | theme.json → make-theme |
|
||||
| `dossier` | manila case-file strip + rubber-stamp apex | cold-war case file — carbon Special Elite HAMMERS onto a manila transcript strip char by char (seeded baselines + ribbon ink, every strike kicks the paper; typed case header, CONFIDENTIAL watermark, red ink circles around the evidence; pages are X-row over-struck and carriage-fed away); the apex is a RUBBER STAMP behind the subject: the footage goes sepia-archival, the stamp crushes in at −8° with a double-strike ghost + thin-ink patches, then holds DEAD STILL — sold only by a breathing paper indent — until the page is filed away with a mechanical yank | investigations, exposés, true-crime, document-driven storytelling, declassified/archival framing, "档案/卷宗/解密/盖章" asks | any (the manila strip is self-lit; the stamp brings its own sepia charge) | theme.json → make-theme |
|
||||
| `laser` | beam-ignited rail + 6-beam laser-cage apex | concert laser rig in a blackout — every body word is IGNITED where a green and a magenta beam converge on it two frames early (flare pop, snap-on, single strobe on emphasis; a sweeper beam carries each line away); the apex is the drop: a 6-beam array sweeps to one hot point, the word ignites behind the subject in an additive glow stack with two controlled strobe pops, a criss-cross beam cage draws around it, the array fans out wide through the hold, then the beams sweep everything off L→R | music, nightlife, festivals, drops, hype reveals, keynote 'one more thing' beats, "激光/灯光秀/蹦迪字幕" asks | any (the concert blackout makes its own contrast, bright skies included) | theme.json → make-theme |
|
||||
| `thunder` | rain-washed rail + branched-bolt strike apex | the storm is the editor — slate storm mood on the room, ambient slanted rain falling in front of the subject, and the sky "kisses" (1-frame brighten) on every body word; rail words arrive with a lit-bright lightning pop (emphasis = sheet-lightning double flash mirrored by a double sky-kiss); the apex is THE STRIKE: a hand-authored branched bolt flashes two frames before the word, the word slams in lit HARD with its shadow flipped toward the bolt, ozone under-glow breathes through the hold while the rain doubles, then everything washes downward with the rain | dramatic reveals, storm/weather content, epic hype beats, trailer-toned monologues, "雷电/闪电/暴风雨字幕" asks | any (charge-dim + radial word scrim make their own contrast, bright skies included) | theme.json → make-theme |
|
||||
| `hologram` | volumetric projection plate + hologram-boot apex | every caption is LIGHT cast from an emitter — body words boot onto a scanlined projection plate with a rising sweep, a 1-frame interference glitch and a permanent cyan/magenta fringe (emphasis words drop out for 2 frames and restore brighter; lines drift in rotationY and exit by projector cut); the apex is the full volumetric boot: a desk emitter dot pops, the cone snaps wide, a seed beam fires, and the word materializes behind the subject as a 7-layer hologram with climbing interference bands — a hand passes through it before the projector cuts it back to the dot | tech / sci-fi / AI / space / imaging explainers, futuristic product reveals, "全息/投影/科幻字幕" asks | any (the apex scrim + dim make their own contrast; wants a lower frame edge for the emitter dots) | theme.json → make-theme |
|
||||
| `biolume` | jellyfish glow-on rail + bioluminescent-bloom apex | deep-sea bioluminescence — the clip sinks into an abyss grade with a breathing vignette and every caption is a living light: body words GLOW ON like jellyfish (radial bloom from center while a cyan glow breathes in; emphasis words pulse a slow propulsion double-beat) across two coexisting floating rows and SINK away dimming; seeded plankton motes drift the open water and the ones ringing the apex are pulled into the bloom; the apex is the BLOOM behind the subject: a creature pre-glow double-beats and crushes to a point, the word condenses in, six luminous tendrils draw outward like filaments while caustics shimmer, cyan light spills onto the scene and spores burst past — then all the light sinks back into the deep | ocean / nature / science-wonder docs, dreamy or meditative monologues, slow night-time reveals, "深海/发光水母/水下字幕" asks | any (the abyss grade + pocket scrim make their own contrast on bright scenes) | theme.json → make-theme |
|
||||
| `aurora` | iridescent sheen rail + silk-ribbon draw-on apex | polar-night elegance — two huge aurora blobs drift the sky all clip; body words are silk serif ink whose rose→teal→violet sheen drifts continuously through the letters (entrance = 2-frame flow-on + y8 settle; emphasis = one bright highlight sweep marching through the word), lines share two coexisting rows like a woven couplet and dissolve UPWARD into drifting light streaks; the apex is a SILK RIBBON: the hero word is hand-WRITTEN into the sky behind the subject stroke by stroke (script single-line font, blurred halo + bright core, a light mote riding the pen) and the aurora gradient keeps FLOWING through the drawn ribbon during the hold while a soft spill tints the sky and light motes rise past the subject — gentle, no shake | dreamy / romantic / wonder content, night-sky and travel pieces, poetry, weddings, elegant brand films, "极光/丝带/优雅手写字幕" asks | any (apex scrim + dark understroke carry contrast on bright skies; loves dusk/night) | theme.json → make-theme |
|
||||
| `spectrum` | oscilloscope scope-band rail + phosphor trace-write apex | an oscilloscope is listening — a dark scope band hosts an ALWAYS-ALIVE waveform (seeded pseudo-RMS envelope: speech grows it, silence flattens it, every word arrival kicks a local burst) under VT323 phosphor lines that wipe in L→R over reserved slots with a 2-frame just-traced flash (emphasis words get a ticking frequency-readout chip, the trig LED blinks on every word); the apex is the trace itself LEAPING off the scope (surge column) to hand-WRITE the hero word in a thin phosphor script stroke, fill flicker-on, hum + breathe, then COLLAPSE to a flatline before the next spoken word — and on the FINAL word the trace explodes to max-amp chaos, flatlines to a single dot and stamps SIGNAL LOST | science / signal / audio / measurement / astronomy explainers, data-nerd content, retro-lab or synth aesthetics, "示波器/波形/信号字幕" asks | any (the scope band brings its own dark glass; the apex scrim handles bright skies); needs `python3` (stroke-path gen) | theme.json → make-theme |
|
||||
| `papercut` | paper-chip craft rail + stop-motion papermat apex | stop-motion paper craft — the frame becomes an animator's table: body words are cream paper chips PLACED one by one (steps(2) drop, seeded crooked, ~5fps wobble) on a kraft strip with torn top edge, washi-taped corners and a handwritten cut&paste tag; emphasis words get a washi-tape slap, the final word is an accent-red sign-off chip, and a red paper star stands in for the hero word; the apex is a torn kraft mat slapped down behind the subject where torn-edge letter chips DROP with stepped gravity + anticipation shadows, land crooked, settle in 12fps poses, wobble at 8fps while a warm vignette charges — then the FINAL word bumps the table and everything scatters off down-right | craft/DIY, kids & family, indie product demos, behind-the-scenes, maker channels, "手工/剪纸/定格动画字幕" asks | any (kraft strip + cream chips bring their own warm contrast) | theme.json → make-theme |
|
||||
| `popup` | pop-up book page rail + centerfold starburst apex | a pop-up book opens inside the frame — body words POP UP on a baseline hinge (rotationX back.out, paper overshoot, a growing back-shadow) along a cream page strip that unfolds from the bottom edge (center foldline, two alternating reading rows); emphasis words land bigger with a contact squash the page FEELS (1px strip dip), then flick-wobble with a blue paper strut leaning in behind; line exits fold flat in an L→R wave (the page closing), the whole page TILTS on the final word and the strip folds shut on the last frame; the apex is THE CENTERFOLD: blue + cream 12-point paper starbursts unfold behind the subject, the hero word pops up in three hinged clip-path segments, kraft struts lean in, backdrop + word wobble-settle TOGETHER and breathe through the hold — then the whole spread folds flat before the next sentence; a blue paper star holds the hero slot on the rail and paper confetti flicks past the subject at the pop | kids and family content, storytelling, education, greeting-card / wholesome brand spots, picture-book and craft channels, "立体书/弹出书/纸艺字幕" asks | any (the cream page strip is self-lit; the apex dusk scrim guards bright skies) | theme.json → make-theme |
|
||||
| `chalkboard` | chalk-band rail + hand-written chalkwrite apex | night lecture — a worn deep-green chalk band where every word is SCRIBBLED in fast chalk (2-frame pop + steps(4) scribble reveal + dust puff at the base, seeded crooked); emphasis gets double underline dashes, the final word lands in yellow chalk, and between sentences an ERASER SWIPE smears the old words off (blurred light band, ghost smudges stay — chalk never fully erases); the apex: the band GROWS into a full blackboard behind the subject and the hero word is HAND-WRITTEN 130px tall stroke by stroke (jittered chalk nib, dust falling from the pen, blurred halo under a tight core), finished with a hand-slap dust CLAP in front of the subject + a 1-frame board shake and two violent accelerating underlines, then the halo breathes through the hold | education / explainers, science and lecture content, teacher channels, documentary asides, "黑板/粉笔/板书/老师讲课字幕" asks | any (the deep-green board brings its own contrast); needs `python3` (stroke-path gen) | theme.json → make-theme |
|
||||
| `graffiti` | marker rail + spray-tagged handstyle apex | street bombing run — marker words FLICK onto the rail crooked (1-frame squeak skew, seeded rotation, back.out settle); emphasis takes alternating yellow/magenta paint + a spray-underline swoosh with overspray dots; spent lines are ROLLER-BUFFED away (gray roller sweep, wet smear lingers) and the final word lands BIG in yellow with the punch; the apex: the dusk wall dims, the can RATTLES, and the hero word is spray-TAGGED stroke by stroke behind the subject in fat yellow paint (dark under-stroke armor + blurred overspray halo + glowing nib + seeded overspray dots), paint DRIPS grow from the low points through the hold, a magenta paint splat pops at the pen-finish and the plate punches on it | street culture, hip-hop / rap, sneaker & fashion drops, urban sports, skate/BMX, rebellious brand spots, "涂鸦/喷漆/街头字幕" asks | any (the dark under-stroke armors the tag against bright skies); needs `python3` (stroke-path gen) | theme.json → make-theme |
|
||||
| `brush` | washi paper-band rail + sumi-e brush-gesture apex | sumi-e study — a deckle-edged washi paper band swipes in behind a traveling brush-head shadow; body words are brush-WIPED on in a Mincho serif (clip reveal behind a per-word brush head, seeded ±1° tilt), emphasis gets a double curved ink underline, and spent lines are wiped OFF right-to-left like a wet cloth (erase brush head riding the wipe); the apex: a warm paper wash charges behind the subject and the hero word is written in ONE violent calligraphic gesture — pressure-tapered wet brush (four stacked stroke widths, blurred bleed underneath), start-SPLAT at the first pen contact with ink flecks kicking past the subject, spatter droplets ejected at the sharpest curves — then the ink BLEEDS into the paper through the hold (the work breathes) and a vermilion SEAL chop (観) stamps beside the ink with the plate punch | calm-authority explainers, craft / design / philosophy / Japan-adjacent content, tea / meditation / writing channels, elegant brand films, "水墨/毛笔/书法字幕" asks | mid/bright scene band (dark ink + its paper wash carry the contrast); needs `python3` (stroke-path gen) | theme.json → make-theme |
|
||||
| `inkwater` | three-row ink rail + ink-drop bloom apex | sumi ink dropped in still water — paper-white radial washes back the text zones, Mincho-serif ink words BLEED into three fixed reading rows (blur+scale bleed over a paper-glow halo, dark blurred halo overshoots then tightens, an ink-settling hairline under each line, emphasis sheds a curling ink wisp) and spent lines re-dissolve upward like dispersing ink; the apex: a dark drop falls behind the subject, hits an invisible water surface at the word point and BLOOMS (three stacked blurred ink ellipses at counter-rotating rates + two thin ripple rings) while the world stills under a gentle vignette — the hero words resolve out of the blob on their own spoken times, breathe at the glyph edges through the hold, then re-dissolve before the next thought needs the reader | contemplative / literary / scientific-wonder narration, astronomy / nature / memory / essay films, poetry and slow-craft channels — one liquid meditative event instead of an impact, "水墨滴落/墨水字幕" asks | mid/bright scene band (dark ink + its paper washes carry the contrast) | theme.json → make-theme |
|
||||
| `ransom` | cutout-chip collage rail + ransom-note slam apex | kidnapper's collage — every word is a chip clipped from a different page (cream Anton / black Inter / newsprint typewriter / accent-yellow marker, torn edges, hard offset shadows) PASTED crooked on the rail with misaligned baselines (the apex slam at low amplitude); emphasis words get a 1-frame RE-PASTE lift (shadow grows, rotation flips sign for good) and spent chips are RIPPED off one by one under 1-frame paper-tear flashes; the apex: a collage scrim darkens the sky and the hero word slams in letter by letter as a ransom note BEHIND the subject — each letter a different cutout chip, flight shadow popping tight on contact — the whole word JOLTS as the last letter lands (the plate punches with it), looms crooked through the hold, then is torn off chip by chip while the closing line speaks | true crime, mystery / thriller, heist energy, punk / DIY zine aesthetics, edgy drops, unhinged-comedy hooks, "勒索信/剪贴/拼贴字幕" asks | any (solid chip backgrounds carry their own contrast; the apex scrim guards bright skies) | theme.json → make-theme |
|
||||
| Identity | Reading surface | Voice (one line) | Recommend for | Scene needs | Author → engine |
|
||||
| --------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- |
|
||||
| `cream` | scene-embedded column flow | warm poetic light, emergence + glow | introspective, narrative, emotional monologues | dark/mid-tone warm scenes (luma < 150) | cinematic.json → make-cinematic |
|
||||
| `ink` | scene-embedded column flow | letterpress pressed into bright surfaces | the bright scenes everything else washes out on | BRIGHT scenes (luma > 150) | cinematic.json → make-cinematic |
|
||||
| `editorial` | scene-embedded column flow | lowercase italic serif, pen-stroke glides | fashion / beauty / lyrical / premium brand films | mid/dark scenes | cinematic.json → make-cinematic |
|
||||
| `keynote` | scene-embedded column flow | confident centered slides-in-the-scene | launches, founder updates, tech explainers (mood over verbatim reading) | any mid/dark | cinematic.json → make-cinematic |
|
||||
| `documentary` | scene-embedded column flow | burn-in stillness, bone on charcoal | interviews, journalism, testimony — gravitas IS the style | any | cinematic.json → make-cinematic |
|
||||
| `loud` | scene-embedded, body in front | percussion type that competes with the face | hype, social reels, sport, music, motivational | any (counter-accent handles warm) | cinematic.json → make-cinematic |
|
||||
| `neon` | scene-embedded column flow | captions as neon signage in the dark | cyberpunk / nightlife / tech-noir / music | dark scenes | cinematic.json → make-cinematic |
|
||||
| `glitch` | scene-embedded column flow | corrupted-feed RGB-split type | hacker / AI / dystopia content | mid/dark | cinematic.json → make-cinematic |
|
||||
| `chrome` | scene-embedded column flow | liquid-metal hero with sheen sweeps | fashion-tech, Y2K, product-flex | mid/dark | cinematic.json → make-cinematic |
|
||||
| `velocity` | scene-embedded column flow | every word arrives along its motion vector | sport, automotive, fitness, kinetic content | any mid/dark | cinematic.json → make-cinematic |
|
||||
| `anchor` | verbatim lower-third rail + 1 settled climax | the quiet professional — fade-up rail that simply reads; the apex settles behind the subject with a drawn accent underline. Discipline IS the style. | explainers, tutorials, corporate, news-adjacent — **where every word must be read**; the conservative default | any (opaque rail; settle carries a soft veil) | theme.json → make-theme |
|
||||
| `ordnance` | stamped verbatim rail + detonation apex | military marking system; everything has mass; the room reacts | punchy announcements, drops, "炸一点 / 像 AE 做的" asks | any (charge-dim makes its own contrast) | theme.json → make-theme |
|
||||
| `terminal` | typed console panel + glyph-decode apex | the transcript is a signal log; apex decodes from noise | tech / data / AI / investigative, "终端/控制台/解码" asks | cool/dusk preferred | theme.json → make-theme |
|
||||
| `neonsign` | warm tube rail + hand-written neon apex | a sign district at dusk; the apex is WRITTEN stroke by stroke | lifestyle / music / mood, "霓虹/手写" asks | dusk/dark backdrop; needs `python3` (stroke-path gen) | theme.json → make-theme |
|
||||
| `stardust` | accumulating poem, condensing letters | words condense from dust and return to it | poetic / memory / science-wonder monologues | one clear column side (probe fails → fall back to `cream`) | theme.json → make-theme |
|
||||
| `stomp` | full-frame takeover cards | hard-cut typographic takeover with a void before the drop | hooks, manifestos, ad openers — the words ARE the show | any (plate runs dimmed) | theme.json → make-theme |
|
||||
| `lastpage` | manuscript rail + a blurred future-field | the future hangs unreadable in the room; one rack-focus reveals every faint line was the apex word | visionary thesis, prophecy-toned talks, trailers, literary content | mid/dark (the field needs air) | theme.json → make-theme |
|
||||
| `nightcity` | corrupted-UI rail + cover-letterform apex | body words boot through a corrupted-cyan frame into acid-yellow UI; the apex slams in BEHIND the subject set in the CP2077 cover replica typeface (cyan offset, baseline streak, circuit trace), tears in as displaced slices, lives as a glitching print | gaming / tech-edge / glitch culture / hype drops, "赛博朋克/游戏封面" asks | any (the lockup carries its own contrast); CP2077-adjacent content only (fan-kit terms) | theme.json → make-theme |
|
||||
| `scoreboard` | split-flap chyron rail + departures-board apex | stadium split-flap mechanics — body words flip-cycle wrong words on tiles before clacking onto the real one; ROW counter + odometer chip furniture; the apex is a giant departures board behind the subject that locks the word letter-by-letter under floodlights and a crowd-flash, status ticker types on | sports, transit/travel, scores, countdowns, reveals, "翻牌/记分牌/机场大屏" asks | any (board + chyron bring their own dark metal contrast) | theme.json → make-theme |
|
||||
| `transit` | LED departure-strip rail + illumination-wipe apex | amber dot-matrix station PA — body words light column-by-column (L→R LED wipe + arrival flicker) on a docked departure strip whose lines page by scroll-snap; platform tag, ticking clock, ⚠ DELAYED → ● ON TIME gag; the apex panel expands behind the subject inside a chasing LED-marquee border, the word illuminates column-by-column under a PA flash + ding pulses, then pages up and collapses | travel/transit, announcements, schedules, countdowns, retro-terminal, "LED屏/车站到站/点阵屏" asks | any (LED strip + panel bring their own dark contrast) | theme.json → make-theme |
|
||||
| `breaking` | live-news chyron rail + BREAKING-banner takeover apex | cable-news package — body words ride a navy chyron and reveal by broadcast wipe (clip-path L→R + a 2px slam-kick), emphasis words flash yellow + pop; a never-stopping ticker scrolls one long head string and DOUBLES its pace at the takeover; red bar tab, pulsing LIVE bug, ticking timestamp; the apex is a red BREAKING banner that slams down onto the chyron while the hero word STAMPS in Anton under a 3-flash red/white strobe, a BREAKING clock flips over the timestamp, the studio dims + a red alert wash pulses with a ghosted watermark drifting behind the subject, then the banner collapses to a line the ticker absorbs | news-adjacent explainers, hot takes, announcements, reactions, urgent/breaking energy, "新闻/突发/直播条/字幕条" asks | any (navy chyron + red banner bring their own contrast) | theme.json → make-theme |
|
||||
| `vhs` | camcorder OSD rail + REC-FREEZE tracking-slam apex | tape playback — permanent lens vignette + OSD furniture (▶ PLAY, ● REC, blinking green timestamp); body words carry a permanent red/cyan misregistration fringe, arrive by tracking glitch and REWIND off with flat-white echoes + scrub lines (the deck flips PLAY→REW in dead air); the apex is REC FREEZE: 1-frame white tear + head-switching noise bar, the word slams in behind the subject as three sheared tracking bands that SNAP into register, misregistration breathes through the hold under tape weave + auto-iris, then rewinds off | retro / nostalgia / found-footage / home-video, '90s tech, music & lifestyle edits, "录像带/VHS/复古/DV" asks | any (backlight-comp scrim makes its own contrast on bright skies) | theme.json → make-theme |
|
||||
| `arcade` | arcade HUD rail + pixel-block boss-intro apex | 8-bit cabinet attract mode — the frame plays through CRT scanlines + a corner vignette; body words coin-pop onto a bordered HUD bar (blinking 1UP, CREDIT 01) with a 1-frame white blip each, emphasis words run a cyan→magenta palette swap, lines dissolve checkerboard; the apex is a BOSS INTRO behind the subject: the room dims, WARNING blinks twice, ~64 seeded pixel blocks fall quantized into a matrix grid over the word rect, the word flashes ON in Press Start 2P with chromatic ghost layers + a 3-frame palette strobe while letterbox bars slam in and a HI-SCORE odometer rolls top-right; everything dissolves checkerboard and the blocks drop away | gaming, retro-tech, playful hype, launches, achievement/level-up beats, "像素/街机/8-bit/打游戏" asks | any (boss dim + dark HUD bar bring their own contrast) | theme.json → make-theme |
|
||||
| `dossier` | manila case-file strip + rubber-stamp apex | cold-war case file — carbon Special Elite HAMMERS onto a manila transcript strip char by char (seeded baselines + ribbon ink, every strike kicks the paper; typed case header, CONFIDENTIAL watermark, red ink circles around the evidence; pages are X-row over-struck and carriage-fed away); the apex is a RUBBER STAMP behind the subject: the footage goes sepia-archival, the stamp crushes in at −8° with a double-strike ghost + thin-ink patches, then holds DEAD STILL — sold only by a breathing paper indent — until the page is filed away with a mechanical yank | investigations, exposés, true-crime, document-driven storytelling, declassified/archival framing, "档案/卷宗/解密/盖章" asks | any (the manila strip is self-lit; the stamp brings its own sepia charge) | theme.json → make-theme |
|
||||
| `laser` | beam-ignited rail + 6-beam laser-cage apex | concert laser rig in a blackout — every body word is IGNITED where a green and a magenta beam converge on it two frames early (flare pop, snap-on, single strobe on emphasis; a sweeper beam carries each line away); the apex is the drop: a 6-beam array sweeps to one hot point, the word ignites behind the subject in an additive glow stack with two controlled strobe pops, a criss-cross beam cage draws around it, the array fans out wide through the hold, then the beams sweep everything off L→R | music, nightlife, festivals, drops, hype reveals, keynote 'one more thing' beats, "激光/灯光秀/蹦迪字幕" asks | any (the concert blackout makes its own contrast, bright skies included) | theme.json → make-theme |
|
||||
| `thunder` | rain-washed rail + branched-bolt strike apex | the storm is the editor — slate storm mood on the room, ambient slanted rain falling in front of the subject, and the sky "kisses" (1-frame brighten) on every body word; rail words arrive with a lit-bright lightning pop (emphasis = sheet-lightning double flash mirrored by a double sky-kiss); the apex is THE STRIKE: a hand-authored branched bolt flashes two frames before the word, the word slams in lit HARD with its shadow flipped toward the bolt, ozone under-glow breathes through the hold while the rain doubles, then everything washes downward with the rain | dramatic reveals, storm/weather content, epic hype beats, trailer-toned monologues, "雷电/闪电/暴风雨字幕" asks | any (charge-dim + radial word scrim make their own contrast, bright skies included) | theme.json → make-theme |
|
||||
| `hologram` | volumetric projection plate + hologram-boot apex | every caption is LIGHT cast from an emitter — body words boot onto a scanlined projection plate with a rising sweep, a 1-frame interference glitch and a permanent cyan/magenta fringe (emphasis words drop out for 2 frames and restore brighter; lines drift in rotationY and exit by projector cut); the apex is the full volumetric boot: a desk emitter dot pops, the cone snaps wide, a seed beam fires, and the word materializes behind the subject as a 7-layer hologram with climbing interference bands — a hand passes through it before the projector cuts it back to the dot | tech / sci-fi / AI / space / imaging explainers, futuristic product reveals, "全息/投影/科幻字幕" asks | any (the apex scrim + dim make their own contrast; wants a lower frame edge for the emitter dots) | theme.json → make-theme |
|
||||
| `biolume` | jellyfish glow-on rail + bioluminescent-bloom apex | deep-sea bioluminescence — the clip sinks into an abyss grade with a breathing vignette and every caption is a living light: body words GLOW ON like jellyfish (radial bloom from center while a cyan glow breathes in; emphasis words pulse a slow propulsion double-beat) across two coexisting floating rows and SINK away dimming; seeded plankton motes drift the open water and the ones ringing the apex are pulled into the bloom; the apex is the BLOOM behind the subject: a creature pre-glow double-beats and crushes to a point, the word condenses in, six luminous tendrils draw outward like filaments while caustics shimmer, cyan light spills onto the scene and spores burst past — then all the light sinks back into the deep | ocean / nature / science-wonder docs, dreamy or meditative monologues, slow night-time reveals, "深海/发光水母/水下字幕" asks | any (the abyss grade + pocket scrim make their own contrast on bright scenes) | theme.json → make-theme |
|
||||
| `aurora` | iridescent sheen rail + silk-ribbon draw-on apex | polar-night elegance — two huge aurora blobs drift the sky all clip; body words are silk serif ink whose rose→teal→violet sheen drifts continuously through the letters (entrance = 2-frame flow-on + y8 settle; emphasis = one bright highlight sweep marching through the word), lines share two coexisting rows like a woven couplet and dissolve UPWARD into drifting light streaks; the apex is a SILK RIBBON: the hero word is hand-WRITTEN into the sky behind the subject stroke by stroke (script single-line font, blurred halo + bright core, a light mote riding the pen) and the aurora gradient keeps FLOWING through the drawn ribbon during the hold while a soft spill tints the sky and light motes rise past the subject — gentle, no shake | dreamy / romantic / wonder content, night-sky and travel pieces, poetry, weddings, elegant brand films, "极光/丝带/优雅手写字幕" asks | any (apex scrim + dark understroke carry contrast on bright skies; loves dusk/night) | theme.json → make-theme |
|
||||
| `spectrum` | oscilloscope scope-band rail + phosphor trace-write apex | an oscilloscope is listening — a dark scope band hosts an ALWAYS-ALIVE waveform (seeded pseudo-RMS envelope: speech grows it, silence flattens it, every word arrival kicks a local burst) under VT323 phosphor lines that wipe in L→R over reserved slots with a 2-frame just-traced flash (emphasis words get a ticking frequency-readout chip, the trig LED blinks on every word); the apex is the trace itself LEAPING off the scope (surge column) to hand-WRITE the hero word in a thin phosphor script stroke, fill flicker-on, hum + breathe, then COLLAPSE to a flatline before the next spoken word — and on the FINAL word the trace explodes to max-amp chaos, flatlines to a single dot and stamps SIGNAL LOST | science / signal / audio / measurement / astronomy explainers, data-nerd content, retro-lab or synth aesthetics, "示波器/波形/信号字幕" asks | any (the scope band brings its own dark glass; the apex scrim handles bright skies); needs `python3` (stroke-path gen) | theme.json → make-theme |
|
||||
| `papercut` | paper-chip craft rail + stop-motion papermat apex | stop-motion paper craft — the frame becomes an animator's table: body words are cream paper chips PLACED one by one (steps(2) drop, seeded crooked, ~5fps wobble) on a kraft strip with torn top edge, washi-taped corners and a handwritten cut&paste tag; emphasis words get a washi-tape slap, the final word is an accent-red sign-off chip, and a red paper star stands in for the hero word; the apex is a torn kraft mat slapped down behind the subject where torn-edge letter chips DROP with stepped gravity + anticipation shadows, land crooked, settle in 12fps poses, wobble at 8fps while a warm vignette charges — then the FINAL word bumps the table and everything scatters off down-right | craft/DIY, kids & family, indie product demos, behind-the-scenes, maker channels, "手工/剪纸/定格动画字幕" asks | any (kraft strip + cream chips bring their own warm contrast) | theme.json → make-theme |
|
||||
| `popup` | pop-up book page rail + centerfold starburst apex | a pop-up book opens inside the frame — body words POP UP on a baseline hinge (rotationX back.out, paper overshoot, a growing back-shadow) along a cream page strip that unfolds from the bottom edge (center foldline, two alternating reading rows); emphasis words land bigger with a contact squash the page FEELS (1px strip dip), then flick-wobble with a blue paper strut leaning in behind; line exits fold flat in an L→R wave (the page closing), the whole page TILTS on the final word and the strip folds shut on the last frame; the apex is THE CENTERFOLD: blue + cream 12-point paper starbursts unfold behind the subject, the hero word pops up in three hinged clip-path segments, kraft struts lean in, backdrop + word wobble-settle TOGETHER and breathe through the hold — then the whole spread folds flat before the next sentence; a blue paper star holds the hero slot on the rail and paper confetti flicks past the subject at the pop | kids and family content, storytelling, education, greeting-card / wholesome brand spots, picture-book and craft channels, "立体书/弹出书/纸艺字幕" asks | any (the cream page strip is self-lit; the apex dusk scrim guards bright skies) | theme.json → make-theme |
|
||||
| `chalkboard` | chalk-band rail + hand-written chalkwrite apex | night lecture — a worn deep-green chalk band where every word is SCRIBBLED in fast chalk (2-frame pop + steps(4) scribble reveal + dust puff at the base, seeded crooked); emphasis gets double underline dashes, the final word lands in yellow chalk, and between sentences an ERASER SWIPE smears the old words off (blurred light band, ghost smudges stay — chalk never fully erases); the apex: the band GROWS into a full blackboard behind the subject and the hero word is HAND-WRITTEN 130px tall stroke by stroke (jittered chalk nib, dust falling from the pen, blurred halo under a tight core), finished with a hand-slap dust CLAP in front of the subject + a 1-frame board shake and two violent accelerating underlines, then the halo breathes through the hold | education / explainers, science and lecture content, teacher channels, documentary asides, "黑板/粉笔/板书/老师讲课字幕" asks | any (the deep-green board brings its own contrast); needs `python3` (stroke-path gen) | theme.json → make-theme |
|
||||
| `graffiti` | marker rail + spray-tagged handstyle apex | street bombing run — marker words FLICK onto the rail crooked (1-frame squeak skew, seeded rotation, back.out settle); emphasis takes alternating yellow/magenta paint + a spray-underline swoosh with overspray dots; spent lines are ROLLER-BUFFED away (gray roller sweep, wet smear lingers) and the final word lands BIG in yellow with the punch; the apex: the dusk wall dims, the can RATTLES, and the hero word is spray-TAGGED stroke by stroke behind the subject in fat yellow paint (dark under-stroke armor + blurred overspray halo + glowing nib + seeded overspray dots), paint DRIPS grow from the low points through the hold, a magenta paint splat pops at the pen-finish and the plate punches on it | street culture, hip-hop / rap, sneaker & fashion drops, urban sports, skate/BMX, rebellious brand spots, "涂鸦/喷漆/街头字幕" asks | any (the dark under-stroke armors the tag against bright skies); needs `python3` (stroke-path gen) | theme.json → make-theme |
|
||||
| `brush` | washi paper-band rail + sumi-e brush-gesture apex | sumi-e study — a deckle-edged washi paper band swipes in behind a traveling brush-head shadow; body words are brush-WIPED on in a Mincho serif (clip reveal behind a per-word brush head, seeded ±1° tilt), emphasis gets a double curved ink underline, and spent lines are wiped OFF right-to-left like a wet cloth (erase brush head riding the wipe); the apex: a warm paper wash charges behind the subject and the hero word is written in ONE violent calligraphic gesture — pressure-tapered wet brush (four stacked stroke widths, blurred bleed underneath), start-SPLAT at the first pen contact with ink flecks kicking past the subject, spatter droplets ejected at the sharpest curves — then the ink BLEEDS into the paper through the hold (the work breathes) and a vermilion SEAL chop (観) stamps beside the ink with the plate punch | calm-authority explainers, craft / design / philosophy / Japan-adjacent content, tea / meditation / writing channels, elegant brand films, "水墨/毛笔/书法字幕" asks | mid/bright scene band (dark ink + its paper wash carry the contrast); needs `python3` (stroke-path gen) | theme.json → make-theme |
|
||||
| `blueprint` | drafting-band rail + technical-plotter draw-on apex | drafting-table cyanotype — the captions are a working technical drawing: a faint drafting band (grid + a bright top rule + a corner title block) docks across the bottom, transcript lines sit LEFT-ALIGNED on thin baseline RULES that draw L→R before each line and retract after, words WIPE in along the line with a registration TICK at each word start (the plotter motif at low amplitude), and emphasis words get a DIMENSION CALLOUT (a thin bracket + a tiny mono Ø-label above/below); the apex: a cyanotype scrim + a drafting grid charge behind the subject, registration crosses snap into the sheet corners, a faint dashed construction guide previews the path, and a thin white PLOTTER pen writes the hero word in ONE sequential gesture (square nib hopping at pen lifts, glow core) — then a 45° HATCH fill sweeps L→R through the glyph (masked to the word) and a "REV A // APPROVED" chip STAMPS the bottom-left corner (crush → squash → elastic, stamp flash); through the hold the drawing breathes and the hatch shimmers, then the hatch retracts, the pen UN-DRAWS in reverse and the chip lifts away | engineering / science / data / architecture / product-spec & precise explainer content, technical brand films, anything measured-not-loud, "蓝图/工程图/制图/技术图字幕" asks | any (the cool cyanotype scrim brings its own contrast on bright skies); needs `python3` (stroke-path gen) | theme.json → make-theme |
|
||||
| `inkwater` | three-row ink rail + ink-drop bloom apex | sumi ink dropped in still water — paper-white radial washes back the text zones, Mincho-serif ink words BLEED into three fixed reading rows (blur+scale bleed over a paper-glow halo, dark blurred halo overshoots then tightens, an ink-settling hairline under each line, emphasis sheds a curling ink wisp) and spent lines re-dissolve upward like dispersing ink; the apex: a dark drop falls behind the subject, hits an invisible water surface at the word point and BLOOMS (three stacked blurred ink ellipses at counter-rotating rates + two thin ripple rings) while the world stills under a gentle vignette — the hero words resolve out of the blob on their own spoken times, breathe at the glyph edges through the hold, then re-dissolve before the next thought needs the reader | contemplative / literary / scientific-wonder narration, astronomy / nature / memory / essay films, poetry and slow-craft channels — one liquid meditative event instead of an impact, "水墨滴落/墨水字幕" asks | mid/bright scene band (dark ink + its paper washes carry the contrast) | theme.json → make-theme |
|
||||
| `ransom` | cutout-chip collage rail + ransom-note slam apex | kidnapper's collage — every word is a chip clipped from a different page (cream Anton / black Inter / newsprint typewriter / accent-yellow marker, torn edges, hard offset shadows) PASTED crooked on the rail with misaligned baselines (the apex slam at low amplitude); emphasis words get a 1-frame RE-PASTE lift (shadow grows, rotation flips sign for good) and spent chips are RIPPED off one by one under 1-frame paper-tear flashes; the apex: a collage scrim darkens the sky and the hero word slams in letter by letter as a ransom note BEHIND the subject — each letter a different cutout chip, flight shadow popping tight on contact — the whole word JOLTS as the last letter lands (the plate punches with it), looms crooked through the hold, then is torn off chip by chip while the closing line speaks | true crime, mystery / thriller, heist energy, punk / DIY zine aesthetics, edgy drops, unhinged-comedy hooks, "勒索信/剪贴/拼贴字幕" asks | any (solid chip backgrounds carry their own contrast; the apex scrim guards bright skies) | theme.json → make-theme |
|
||||
| `finance` | market-terminal ticker rail + candle-breakout apex | a live market terminal — words PRINT into a dark glass ticker band behind ▲▼ tick prefixes (quantized 2-frame up-tick pops, the surge motif at low amplitude); emphasis words light a green surge glow + roll a +N% price counter beside them; a seeded mini candlestick chart drifts on the right and a header (index / pct / vol) ticks through; the apex is THE BREAKOUT — a green candle spike rockets up the full frame behind the subject, three resistance level lines flash as the tip punches through them, and the hero word slams at the spike top (crush → contact squash → elastic settle, flash-white cooling to market green, breathing underglow) with a +447% odometer rolling up beside it; exit: the trade flips RED — word + odometer + spike crash DOWN (the tick-out motif at apex amplitude), header close goes red | data / growth / finance / results / metrics / momentum, "up and to the right" announcements, fintech & crypto, earnings, anything where the energy is a number going up, "股票/行情/金融/涨/数据字幕" asks | any (the dark glass band + top-weighted charge-dim carry contrast against the bright sky behind the spike) | theme.json → make-theme |
|
||||
| `cover` | editorial magazine column + cover-masthead takeover apex | the live magazine-cover takeover — body words read as a small editorial column docked in a clear corner (Cormorant small-caps that INK-SETTLE in, an italic-swash flip on emphasis, folio numbers swapping per line, top/bottom hairline rules, a barcode bug, lines exiting on a page-turn diagonal sweep, a page-light pass through the silence); the apex turns the room into paper — a top scrim eases the bright sky into newsprint, a luminous band + a lipstick-red accent bar deploy, and the hero word SETS as a serif Bodoni masthead ACROSS THE TOP of frame behind the subject's head (classic cover occlusion): it ink-settles up while a kicker + issue date stagger in around it, then the cover BREATHES and holds as set dressing (a printed cover stays — no tear-out) | editorial, fashion/culture/lifestyle, premium brand & founder profiles, thought-leadership & longform, anywhere the speaker should read like a cover story, "杂志/封面/刊头/时尚字幕" asks | bright top preferred (the scrim turns sky into paper) + a clear lower corner for the column | theme.json → make-theme |
|
||||
| `xray` | radiograph scan-beam rail + scan-lock negative apex | an imaging scanner reads the speech — a hot vertical SCAN BEAM sweeps a dark radiograph band and each body word is WIPED in (clip L→R) exactly as the beam crosses it (instant just-traced flash, ice-blue phosphor bones), with a RADIOGRAPH header, a SCANNING/LOCK/ANALYSIS/RESCAN/COMPLETE status readout and a `[DENSE]` density tag on emphasis; the apex is a SCAN LOCK behind the subject: the room dims, an x-ray exposure pulse fires, the hero word SNAPS in (crush → contact squash → elastic settle), a bracket target-frame draws shut with top/bottom edge lines, the word FLIPS to a glowing negative on its final spoken word, a loupe ring passes over each letter (each pulses as examined) while a MATCH readout types and the lock breathes + servo-jitters; then the beam flies off, RETURNS flipped and scans the freeze-frame away R→L while the later lines RE-PRINT in its wake | imaging / sensing / vision / AI / measurement / forensics / astronomy content, anything about detection, recovery, resolution or seeing the unseen, "X光/扫描/成像/雷达字幕" asks | any (the radiograph band + apex dim & exposure flash make their own contrast on bright skies) | theme.json → make-theme |
|
||||
| `glass` | frosted-glass chip rail + glass-slab assembly apex | frosted glass, light moving across a cool surface — body words ride their own rounded backdrop-blur CHIPS on a stable lower-third rail (2-frame opacity + soft slide-up + a one-shot light-catch sheet; emphasis words take one diagonal specular glint), the only motion is the light, never the words; the apex assembles BEHIND the subject from frosted SHARDS that fly in and SNAP edge-to-edge into a glass slab (each flashing on contact), the slab takes a contact squash + the hairline rim snaps on, the hero word fades on across 2 frames, ONE clean glint sweeps it, the slab tilts rotateY ±1.5° while the edge light catches in counter-phase and breathes — then it SHATTERS: hairline cracks flash and the shards drop away with gravity | premium product, design-tool, optics / camera / lens, calm tech reveals & elegant brand films — anywhere the spectacle should be refracted light, not impact, "玻璃/毛玻璃/磨砂玻璃/质感字幕" asks | any (the dusk dim + sky scrim guard bright skies; the frosted blur + cool spill carry the look on any luma) | theme.json → make-theme |
|
||||
| `magnet` | fridge-magnet chip rail + letter-magnet assembly apex | refrigerator poetry, tactile and domestic-warm — body words are cream rounded-rect CHIPS that fly a short hop, DECELERATE and SNAP onto a translucent steel band (pinned at two corners by glossy magnet dots, a specular sheen drifting across all clip), landing crooked (±2°) with a 1-frame squash and SHOVING the left neighbor 1.6px (neighbor nudge); emphasis chips double-bounce and press flat, the sign-off word is a red accent chip that lands so hard the band itself takes the hit; spent lines lose grip and slide DOWN with a slow rotation; the apex assembles the hero word BEHIND the subject as individual letter-MAGNETS (Anton) flying in from the frame edges, decelerating and SNAPPING the last 12px hard in a L→R clack cadence, then the crooked word STRAIGHTENS as one rigid unit on the plate punch and holds with a slow magnetic breathe (a sympathetic nudge fires when the red chip slams), then releases | warm/playful explainers, personal stories, kitchen-table & behind-the-scenes talk, craft/hobby/family channels, friendly brand films — tactile and handmade without going loud, "冰箱贴/磁吸/拼字字幕" asks | a clear sky / upper band so the letter-magnets can land behind the subject (the cool scrim + halo guard the bright sky) | theme.json → make-theme |
|
||||
| `constellation` | star-chart rail + sky-constellation condense apex | a star chart drawn live — body words arrive as the apex motif at low amplitude: GOLD STAR-POINTS pop in at each letter (seeded jitter, back.out), a hairline underline draws L→R, then the Cormorant-italic glyphs settle onto a faint declination/right-ascension grid (two draw-on arcs + graticule ticks + DEC/R.A. labels) and dim to ledger weight once read; emphasis words get a dotted catalogue ellipse + an α-CMa designation tag; the apex word is handed off to the SKY — night quietly falls (dusk gradient + a dark radial pocket + a reading scrim), gold stars (some bright cross-spikes) twinkle in at the word's letter anchors, hairlines connect them in sequence, the hero word condenses in WITHIN the linework (blur + letter-spacing collapse, glow+core twin) and a designation (STELLA·LIMITIS) types beneath, breathing through the hold; exit is asymmetric — lines retract, stars wink one by one, the glyphs fade LAST, and on the final word every chart line glitch-wavers two frames (clouds crossing the field) | science / astronomy / optics / imaging / research & discovery, contemplative or wonder explainers, anything about looking up or seeing further, "星座/星空/天文/星图字幕" asks | any (the dusk dim + dark sky pocket + reading scrim guard the bright sky; loves dusk/night) — wants a clear upper band so the constellation can crown the word behind the subject | theme.json → make-theme |
|
||||
| `mirror` | black-mirror reflection rail + kaleidoscope-merge apex | still water — a piano-black glass floor with a silver hairline, where EVERY body word RISES out of its own reflection (Bodoni Moda, opacity full in 2 frames, y 14→0 — emerging from the surface) and the reading face NEVER moves: only the WHOLE-line reflection (scaleY -1 under a gradient-fade mask) ripples — emphasis pulses just the reflection's scaleY+blur — and a glint travels the floor line through the silence; lines exit by sinking back INTO the mirror (scaleY→0.18, the apex motif at low amplitude); the apex is a kaleidoscope MERGE behind the subject — dusk falls (gradient + a dark radial pocket + a bottom scrim calms the desk), 4 rotated low-opacity ghost copies of the hero word converge rotation→0 while fading up, then SNAP into one sharp Bodoni word (2-frame law, micro squash, elastic settle), a grand reflection emerges below, a cold under-glow blooms+breathes, a vertical light streak crosses and a silver floor hairline draws; HOLD = the word perfectly still while only the reflection shimmers (baked skew/blur/opacity f(t)); EXIT = the word sinks INTO its reflection, both compressing to a sliver at the floor line | reflective / contemplative / premium clips — science, design, photography, optics, quiet product reveals, anything wanting elegance and stillness rather than impact, "镜面/倒影/水面/静谧字幕" asks | wants a darker lower band where the floor reflection lives (the dusk dim + dark pocket + bottom scrim guard the bright sky); room behind the subject for the merge (20–50% occlusion) | theme.json → make-theme |
|
||||
| `seance` | mist-seep rail + behind-the-subject possession apex | a seance, the room is WRONG — the whole clip sits under a desaturated teal grade + a soft dim + a breathing vignette; body words SEEP in on a centered two-row lower-third (a desat mist resolves into Shippori Mincho bone glyphs, blur 8→0 / y 6→0, with a seeded ±1-frame arrival jitter, the odd letter dropping to 0.4 for 2 frames, every text-shadow cast UPWARD — light-from-below wrongness — and emphasis words exhaling a ghost duplicate that drifts up; a bone hairline + diamond and seeded dust motes drift through the air); the apex is a POSSESSION behind the subject — the lights dip HARD (stutter then snap), the spoken word MANIFESTS in Creepster (crush scale 2.6→1 power4.in → contact squash → elastic settle), the shadow casts UPWARD, a 1s red/cyan split SHUDDER runs (steps set-chain x/skewX dual textShadow) while a cold underlight breathes from below; a cold flash + two mist rings + an ash exhale ride the contact, then the word EXHALES upward with a 1-frame flicker and is gone | the uncanny / paranormal, true-crime & horror cold-opens, mystery & the supernatural, anything that should feel haunted or wrong, "通灵/灵异/恐怖/降神字幕" asks | any (the teal grade + dim + vignette make their own contrast on bright skies) — wants room behind the subject for the manifestation (20–50% occlusion) | theme.json → make-theme |
|
||||
| `brand` | tooled-leather singe-in rail + white-hot iron-stamp apex | a branding iron — everything is burned in; body words SINGE onto a tooled-leather lower-third band (grain + saddle stitching): an iron press at low amplitude (tiny crush → 1-frame contact squash → elastic settle, ember-HOT Cinzel glow receding into a charred edge via a shadow swap, one faint smoke wisp rising off each fresh burn), emphasis words RE-GLOW as if pressed again, and each spent line SMOKES OUT (blur + drift up) leaving a dark word-shaped CHAR SMUDGE branded into the leather until clip end; the apex SLAMS down behind the subject as a white-hot iron stamp (scale crush 3.1→1, contact squash, elastic settle) that immediately CHARS — white → ember orange → deep char brown over ~0.9s while two stacked charred stroke OUTLINES grow in, a heat under-glow blooms and decays into furnace breathing, warm ember light SPILLS on the dusk scene, two seeded letters re-glow through the hold, and a SCORCH radial darkens the world around the brand and REMAINS to the last frame; exit = smoke-out, the word lifts away leaving its char smudge seared in | heritage / craft / maker brands, leather goods, whiskey & coffee, founder stories, premium-rustic announcements — anything that should feel permanent, made-by-hand and seared in, "烙印/皮革/手工/炭烧字幕" asks | a dusk / warm scene that tolerates a charge-dim — wants room behind the subject for the brand (20–50% occlusion) | theme.json → make-theme |
|
||||
| `redline` | racing track-line rail + doppler-arrival slab apex | night-circuit telemetry at speed — body words DRIFT IN along a low track line (ticks + leading chevrons, draws on L→R) with VELOCITY STREAKS: a Teko-italic core slides x −40→0 (skew settling) trailed by two accent echo copies that lag and burn off; lines idle with a ~1° forward-lean breathe, emphasis words gear-shift SNAP (scale 1.2→1 back.out) and sweep a small TACHOMETER arc up into the redline, and each spent line WHIPS off RIGHT with a motion smear; the apex arrives like a car at speed — the asphalt DIMS, a headlight glow grows at a left vanishing point, and the hero word starts as a SPECK there and ACCELERATES (power4.in) into a full italic slab across the frame in ~0.22s, locks with a contact squash → elastic settle, paint COOLS white-hot → bone, a heat-ripple TRAIL (3 blurred accent copies, y oscillating) shimmers behind it while a sonic-boom CONE fires (hot flash + two skewed expanding rings + a fan of air-rip speed streaks + a pulse racing down the track line), an orange wash + tunnel vignette snap on, the slab looms through the hold, then WHIPS off frame right with a smear | high-energy, motion-forward clips — automotive / motorsport / racing, sports & fitness, performance tech, gaming, hype announcements & product drops that should feel fast, "赛车/竞速/速度/动感字幕" asks | any (the charge-dim + tunnel vignette + dark text-shadow carry contrast on bright skies) — wants room behind the subject for the slab to cross the silhouette (20–50% occlusion) | theme.json → make-theme |
|
||||
|
||||
## Shortlisting heuristics (identity-level, not category-level)
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
name: embedded-captions
|
||||
description: 'Add captions to a talking-head video. ONE catalog (CATALOG.md) of 32 visual identities behind two engines: column-flow (captions composited INTO the scene — matte occlusion + mix-blend; cream/ink/editorial/keynote/documentary/loud/neon/glitch/chrome/velocity) and themed constitutions (anchor/ordnance/terminal/neonsign/stardust/stomp/scoreboard/transit/vhs/arcade/dossier/laser/thunder/hologram/biolume/aurora/spectrum/papercut/popup/chalkboard/graffiti/brush/inkwater/ransom/lastpage/nightcity — e.g. a glyph-decode climax, a neon sign WRITTEN stroke by stroke, or the quiet `anchor` rail default). Route by identity, never by mode. Trigger on "captions/subtitles", "embed/cinematic captions", "VFX captions", "炸/特效/酷炫字幕", a named identity, or top-tier motion-graphics asks. Embedding every word is wrong for most talking-head content — `anchor` is the verbatim default. Pipeline: transcription → hyperframes remove-background matting → HTML render → ffmpeg overlay. Requires hyperframes and a single-subject clip.'
|
||||
description: Add captions to a talking-head video. ONE catalog (CATALOG.md) of 48 visual identities behind two engines: column-flow (every caption composited INTO the scene — matte occlusion + mix-blend; cream/ink/editorial/keynote/documentary/loud/neon/glitch/chrome/velocity) and 38 themed constitutions across mechanical/light/craft/interface/uncanny families (the quiet `anchor` verbatim default + ordnance/stomp/terminal/neonsign/scoreboard/vhs/laser/hologram/breaking/cover/blueprint/mirror/seance/… — e.g. a glyph-decode climax or a neon sign WRITTEN stroke by stroke). Route by identity, never by mode. Trigger on "captions/subtitles", "embed/cinematic captions", "VFX captions", "炸/特效/酷炫字幕", a named identity, or top-tier motion-graphics asks. Embedding every word is wrong for most talking-head content — `anchor` is the verbatim default. Pipeline: transcription → hyperframes remove-background matting → HTML render → ffmpeg overlay. Requires hyperframes and a single-subject clip.
|
||||
metadata:
|
||||
tags: captions, embedded-captions, occlusion, matting, talking-head, rembg-matting, whisper, ffmpeg, cinematic
|
||||
---
|
||||
|
||||
# Embedded Captions
|
||||
|
||||
**One catalog, picked up front** ([CATALOG.md](CATALOG.md) — 17 identities; the three engines behind it are backend detail). **Standard** (default) builds a clean verbatim **rail** (lower-third subtitle carrying most text) + an **embed** climax composited _into_ the scene behind the subject at the peak. **Cinematic** is pure embed — no rail, every caption composited behind the subject (hero typography, accumulation, occlusion as the effect). **Theme** is a complete themed constitution — body paradigm × hero setpiece × front fx × plate reaction, composed from registries ([themes/README.md](themes/README.md)): `ordnance` `terminal` `neonsign` `stardust` `stomp`. Most explainer / voiceover is **Standard**; **embed is the scarce, earned peak** — embedding every word is the common mistake; Theme is for VFX-grade asks ("炸", "特效", "像 AE 做的").
|
||||
**One catalog, picked up front** ([CATALOG.md](CATALOG.md) — 48 identities; the two engines behind it are backend detail). **Column-flow** (Cinematic) is pure embed — no rail, every caption composited _into_ the scene behind the subject (hero typography, accumulation, occlusion as the effect): `cream` `ink` `editorial` `keynote` `documentary` `loud` `neon` `glitch` `chrome` `velocity`. **Theme** is a complete themed constitution — body paradigm × hero setpiece × front fx × plate reaction, composed from registries ([themes/README.md](themes/README.md)); 38 of them, from the quiet verbatim `anchor` (the conservative default — a lower-third rail + a settled climax) through `ordnance` `terminal` `neonsign` `scoreboard` `laser` `breaking` `mirror` …. Most explainer / voiceover wants `anchor` or another rail-surface theme; **embed is the scarce, earned peak** — embedding every word is the common mistake; the loud themes are for VFX-grade asks ("炸", "特效", "像 AE 做的"). _(The old Standard rail engine was retired 2026-06-12; `anchor` replaced it.)_
|
||||
|
||||
---
|
||||
|
||||
@@ -16,7 +16,7 @@ metadata:
|
||||
The craft prose below is long; the **pipeline itself is short** — and everything
|
||||
deterministic is computed or compiled, never hand-written:
|
||||
|
||||
1. **Decision gate** (refuse bad clips) → **pick ONE identity from [CATALOG.md](CATALOG.md)** (17 identities; engine/compiler derived by lookup — never surface a mode/category question)
|
||||
1. **Decision gate** (refuse bad clips) → **pick ONE identity from [CATALOG.md](CATALOG.md)** (48 identities; engine/compiler derived by lookup — never surface a mode/category question)
|
||||
2. `hyperframes init` (skip it if the project dir already exists with the video inside — `matte.cjs`/`transcribe.cjs` adopt any video in the dir as source.mp4) → **`bash scripts/prepare.sh <project>`** (matte ∥ transcribe ∥ audio-envelope in parallel, then safe-zones v2 with scene palette/optics/lighting — one command, nothing forgotten)
|
||||
3. **author a small JSON of creative choices** (read `safe-zones.json` first):
|
||||
Cinematic → `plan.json` → `fill-timings.cjs` → `fit-fonts.cjs` → `make-composition.cjs`;
|
||||
@@ -26,8 +26,8 @@ deterministic is computed or compiled, never hand-written:
|
||||
|
||||
Load-bearing rules people miss:
|
||||
|
||||
- **rail (default) + embed (promotion).** `drop` (filler, not shown) / `rail` (verbatim lower-third subtitle, in front, carries most text) / `embed` (a peak word composited behind the subject). **Standard mode does both**, embedding only the peak(s). See **§ Caption model**.
|
||||
- **The video is delivered UNTOUCHED (Standard/Cinematic; **Theme mode's PLATE budget is the one sanctioned exception** — register-gated reaction beats (charge-dim, punch, shake, grain) defined per theme DNA and applied AFTER the matte composite so subject+text+plate move as one frame)** — captions are the only thing added; the matte just lets the subject occlude the embed track. Never grade/recolor/scanline the footage.
|
||||
- **rail (default) + embed (promotion).** `drop` (filler, not shown) / `rail` (verbatim lower-third subtitle, in front, carries most text) / `embed` (a peak word composited behind the subject). **Rail-surface themes (e.g. `anchor`) do both**, embedding only the peak(s). See **§ Caption model**.
|
||||
- **The video is delivered UNTOUCHED (column-flow; **Theme mode's PLATE budget is the one sanctioned exception** — register-gated reaction beats (charge-dim, punch, shake, grain) defined per theme DNA and applied AFTER the matte composite so subject+text+plate move as one frame)** — captions are the only thing added; the matte just lets the subject occlude the embed track. Never grade/recolor/scanline the footage.
|
||||
- Two rulebooks: **rail → [references/rail.md](references/rail.md)** (thin), **embed craft → [references/composition-craft.md](references/composition-craft.md)** (rich, embed-only). Skim by need.
|
||||
|
||||
---
|
||||
@@ -50,10 +50,10 @@ Rail-surface identities build exactly this (rail = `rail.html`, embed = the clim
|
||||
|
||||
## Step 0 — pick ONE identity from the CATALOG
|
||||
|
||||
**One front-end, three engines behind.** The user picks an IDENTITY from
|
||||
[CATALOG.md](CATALOG.md) (17 entries: 12 classic + 5 themed); the engine,
|
||||
**One front-end, two engines behind.** The user picks an IDENTITY from
|
||||
[CATALOG.md](CATALOG.md) (48 entries: 10 column-flow + 38 themed); the engine,
|
||||
compiler and authoring file are derived by lookup from the catalog row.
|
||||
**Never surface "Standard vs Cinematic vs Theme" as a question** — those are
|
||||
**Never surface "Cinematic vs Theme" (or the retired Standard) as a question** — those are
|
||||
backend names (a product has one UX even with several engines). The catalog
|
||||
encodes everything routing needs: reading surface, voice, recommend-for, scene
|
||||
needs, adjacency notes for the genuinely-close pairs (loud↔ordnance,
|
||||
@@ -165,30 +165,37 @@ each loop costs seconds. Render once, when the previews pass.
|
||||
|
||||
---
|
||||
|
||||
## DNA registries — where each engine's looks live
|
||||
## The DNA registry — ten visual languages (replaces the template catalog)
|
||||
|
||||
Every identity in [CATALOG.md](CATALOG.md) is backed by one **DNA file** — its complete
|
||||
visual language (type, palette logic, motion grammar, hero orchestration), **parameterized
|
||||
per scene** (accent sampled from the footage, contact shadow along the measured light,
|
||||
depth-match blur, RMS-coupled hero amplitude). DNAs live in **two registries, one per
|
||||
engine** — you never browse DNAs to route: pick the IDENTITY in CATALOG.md and its engine +
|
||||
registry are derived by lookup.
|
||||
Both modes draw from **[dna/](dna/README.md)** — six art-directed visual languages that
|
||||
**parameterize per scene** (accent sampled from the footage, contact shadow along the
|
||||
measured light direction, depth-match blur, RMS-coupled hero amplitude):
|
||||
|
||||
- **Cinematic** → the 10 column-flow languages in **[dna/](dna/README.md)**: `cream` `ink`
|
||||
`editorial` `keynote` `documentary` `loud` `neon` `glitch` `chrome` `velocity`.
|
||||
`dna/README.md` holds the full table + the `bandLuma × register` decision rule; authoring:
|
||||
`cinematic.json` takes `"dna": "<name>"`.
|
||||
- **Theme** → the themed constitutions in **[themes/](themes/README.md)**: `anchor`
|
||||
`ordnance` `terminal` … (incl. the verbatim-rail `anchor`, which replaced the retired
|
||||
Standard mode); authoring: `theme.json` takes `"dna": "<name>"`.
|
||||
| DNA | Register | Scene fit | Voice |
|
||||
| --------------- | -------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------- |
|
||||
| **cream** | premium-warm | dark/mid warm scenes | Inter + warm cream + screen; glowing emergence hero (successor of cinematic-cream) |
|
||||
| **ink** | premium | **bright scenes (luma > 150)** | near-black multiply — type printed ON the wall; the bright-scene answer |
|
||||
| **editorial** | editorial-luxe | introspective / fashion / poetic | Bodoni Moda, lowercase-italic hero — magazine elegance |
|
||||
| **keynote** | tech-premium | product / launch | opaque white Inter 800, dead-center stillness |
|
||||
| **documentary** | formal | interview / serious | burn-in reveals, no hero — gravitas IS the style |
|
||||
| **loud** | loud | hype / sport / social | Anton + scene-sampled accent, single-unit slam + ripple; body ANNOUNCES in front (`bodyLayer: fg`) |
|
||||
| **neon** | loud-cyber | cyberpunk / nightlife / tech-noir (dark scenes) | electric-cyan signage, ignition flicker, the hero powers ON like a sign |
|
||||
| **glitch** | loud-cyber | digital / hacker / AI | RGB-split echoes snap together on landing; machine-percussive timing |
|
||||
| **chrome** | loud-luxe | Y2K / fashion-tech / music | liquid-metal gradient hero + one sheen sweep during the hold |
|
||||
| **velocity** | loud-sport | sport / auto / fitness | every word arrives along its motion vector (streak+skew), hero passes with speed trails |
|
||||
|
||||
Pick by `safe-zones.json` (`heroAnchor.bandLuma`, `palette.temperature`) × content
|
||||
register — [dna/README.md](dna/README.md) has the decision rule. Authoring:
|
||||
`cinematic.json` takes `"dna": "<name>"`.
|
||||
|
||||
The engine generates the **hero three-act** from the DNA (no authoring needed):
|
||||
co-visible captions dim (setup) → per-letter entrance with amplitude ∝ spoken loudness
|
||||
(impact) → breathe + glow until exit (afterglow).
|
||||
|
||||
(Legacy: `plan.template:"cinematic-cream"` maps to `dna:"cream"` automatically. The retired
|
||||
54-template library lives at `~/Downloads/embedded-captions-archive/standard-templates-54/`;
|
||||
`_motion.md` remains in-skill as the motion-verb reference catalog.)
|
||||
(Legacy: `plan.template:"cinematic-cream"` maps to `dna:"cream"` automatically.
|
||||
The retired 54-template library lives outside the skill at
|
||||
`~/Downloads/embedded-captions-archive/standard-templates-54/`; `_motion.md` remains
|
||||
in-skill as the motion-verb reference catalog.)
|
||||
|
||||
---
|
||||
|
||||
@@ -216,7 +223,7 @@ The full **embed-track** playbook lives in **[references/composition-craft.md](r
|
||||
transcript role-annotation, phrase grouping, planes & clean-zone anchoring, zone coherence,
|
||||
climax pop & readability, edge-breathing, the occlusion 3-step judgement, and
|
||||
accumulation/persistence. It governs how a _promoted_ phrase sits INTO the scene — read it
|
||||
before authoring any embed (Cinematic `plan.json` or Standard `index.html`). The default **rail**
|
||||
before authoring any embed (Cinematic `plan.json` or a theme's `theme.json`). The default **rail**
|
||||
track has its own, much simpler spec → **[references/rail.md](references/rail.md)**.
|
||||
|
||||
---
|
||||
@@ -254,7 +261,7 @@ track has its own, much simpler spec → **[references/rail.md](references/rail.
|
||||
- **Embed is scarce + spaced.** ≤1 embed per sentence/beat, never two adjacent or co-visible, ≥ a beat apart, at most one `apex`. climax = per-beat peak, **not** "the single payoff of the entire clip."
|
||||
- **Matte = the PERSON (hyperframes `remove-background`, u2net_human_seg, Apache-2.0).** Human segmentation by intent, but not surgically: thin offset furniture (mic boom arms) is usually excluded — captions render over it, behind the person — while large salient objects NEAR the subject (a telescope, a desk rig) can still leak into the matte and occlude captions. Objects HELD by the subject (products, phones) may drop out intermittently, letting captions pass in front. NEVER assume: sample `frames_fg/` at 2-3 timestamps before placing the hero, and prefer hero positions clear of any leaked furniture (`heroAnchor` can be skewed by leaks — cross-check against frames_bg).
|
||||
- **safe-zones is PROP-BLIND — eyeball every band you use.** Zones/heroBands score _subject_ occlusion + luma only: a mic, telescope, or screen sitting inside a "clean" zone is invisible to them (and a prop leaking INTO the matte skews `heroAnchor.centerXPct` off the person). Before authoring, extract ONE frame of each band you intend to use; if a prop lives there, measure its bbox and move/shrink the plane. Two real cases shipped clean only because the agent did exactly this. (Auto prop-saliency is a known gap; zones' `peakLuma` only catches _moving_ bright objects.)
|
||||
- **Captions stay on-frame.** Cinematic mode hard-gates frame-overflow; Standard mode runs `check-overflow.cjs` as a WARNING (intentional bleed is the only exception — read the warning).
|
||||
- **Captions stay on-frame.** Cinematic mode hard-gates frame-overflow; Theme mode runs `check-overflow.cjs` as a WARNING (intentional bleed is the only exception — read the warning).
|
||||
- **Each caption ≥ 0.5s on screen** — shorter = unreadable.
|
||||
- **Word timings must match transcript.json within 80ms** — a caption firing 500ms off-beat destroys the scene illusion. Cinematic runs `check-timing.cjs --strict` before rendering (via render-and-composite.sh); THEME mode enforces the same timings at compile time instead (make-theme's sequential transcript matcher + verbatim completeness gate — drift is a compile error). Never pack multiple transcript words into one entry (e.g. `"FUTURE OF"` or an `IT` + line-break + `ALL` stack with one start/end) — the second word inherits the first's timestamp and fires early. Split them into separate word entries with their own timings, even if you want them on the same visual line (use CSS `white-space` / natural wrap instead of `<br>`). Creative substitutions where caption text ≠ transcript (e.g. `"15%"` replacing `"fifteen percent"`) are supported — register them in `CREATIVE_SUBS` inside `check-timing.cjs`.
|
||||
- **Group windows must envelop their words** — `group.in ≤ min(word.start)` and `group.out ≥ max(word.end)` for every group. If `group.in` is later than a word's start, the word is silently delayed until the container mounts (we've shipped 800ms lag bugs from this). The validator enforces this.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -11,7 +11,7 @@ identity**. A new look is a JSON file; only a genuinely new paradigm/setpiece
|
||||
theme DNA = body PARADIGM how the transcript surface lives
|
||||
× body LAYER fg-alpha (rail.html channel) | bg-embed
|
||||
× hero SETPIECE the climax choreography
|
||||
× front FX flash / rings / sparks / scanband / crowdflash / paflash (fg, over subject)
|
||||
× front FX flash / rings / sparks / scanband / crowdflash / paflash / seance / dopplerboom (fg, over subject)
|
||||
× PLATE budget charge-dim (in-page) + punch/shake/grain (_postfx.sh)
|
||||
× LINKAGES declarative theme interactions
|
||||
```
|
||||
@@ -68,7 +68,19 @@ phases, each gated on need — never rewrite for tidiness alone:
|
||||
| `markerrail` | street handstyle rail: centered marker lines on a bottom rail (`body.bottomPx`), `palette.body` cream paint with a heavy drop text-shadow; emphasis words take ALTERNATING paint colors (`palette.em`/`em2`, yellow/magenta) + a spray-underline SWOOSH (dash-revealed squiggle viewBox-stretched to the word) with 8 seeded overspray dots that pop and fade; the FINAL transcript word lands BIG (1.5×) in `palette.em` with mini apex-impact physics (crush 0.09s power3.in → 2-frame contact squash → elastic settle — it rides the plate punch); the line visible at the tag's onset yields (`body.yield`, restore only with runway before its buff — else it exits dimmed) | fg | `flick` (the spray-write verb at low amplitude: opacity full in 1 frame at scale 1.18, seeded ±6° rotation settling to ±2°, 1-frame squeak skewX 7, back.out(2.2) settle 0.18s) | ROLLER BUFF (gray paint roller scaleX-sweeps the line 0.15s power2.in, words vanish under it, the wet smear lingers at 0.15 + blur(2) before fading); the last line is never buffed — the sign-off stays painted |
|
||||
| `brushrail` | washi paper band: a deckle-edged band (`body.strip` geometry, two faintly rotated `paperHi`→`paperLo` under-sheets at 0.42 + a translucent `sheetHi`→`sheetLo` main sheet with warm inset shadow) swipes in L→R behind a traveling brush-head shadow (clipPath wipe 0.2s power2.out + blurred `palette.bh` gradient head — the ink gesture at low amplitude), then the under-sheet breathes faintly (0.32 Hz baked f(t)); body lines are centered replace-lines on the band (`fonts.body` serif at `body.fontPx`/`body.weight`, seeded ±1° tilt); emphasis words get a DOUBLE curved ink underline (`palette.ulInk`, fat 7/0.3 wash + tight 2.6/0.95 core, dash-drawn at st+0.12/+0.15); band + the line under the gesture yield (`body.yield`) while the apex lands; the band exits with the last line on one final R→L wipe | fg | `brush-wipe` (the gesture at low amplitude: clipPath inset reveal L→R 0.16s power2.out with a blurred per-word brush-head shadow riding the reveal edge, then vanishing) | wet-cloth WIPE (the reveal in reverse: the line clipPath wipes R→L over 0.10–0.14s power2.in with an erase brush head riding it, at min(next line − 0.136, lastWord + `body.maxHold`); the LAST line and the band wipe together at DUR−0.142) |
|
||||
| `inkrail` | sumi ink on still water: up to THREE fixed reading rows at the bottom center (`body.bottomPx` = last-row center, `body.rowGap` apart; rows cycle in pairs, the closing line takes the third row — the final thought ACCUMULATES instead of replacing); `fonts.body` Mincho serif at `body.fontPx`/`body.weight`/`body.letterSpacing`, `palette.body` ink over a paper-white text-shadow halo (`palette.paper`/`paper2` glow stack — readable on bright skies) with a duplicate blurred dark halo per word; an ink-settling RULE (86%-width gradient hairline, scaleX 0→1 over 0.9s) draws beneath each line at firstWord+0.12; emphasis words shed a faint ink wisp curling off the word top (st+0.55, ±dir by line parity, skipped near clip end); the rows visible under the bloom yield (`body.yield` — dim at heroIn+`delay`, restore at heroIn+`post` only with runway before the exit) | fg | `bleed` (the apex bloom at low amplitude: opacity snaps in 2 frames; blur 12→0 + scale 1.25→1 power2.out carry the bleed — late words bleed faster so they resolve before clip end; the dark halo overshoots scale 1.5→1.04 while its opacity decays 0.5→0.25) | RE-DISSOLVE (blur 9 + scale 1.13 + fade + y−8 power1.in — ink dispersing back into the water) as the line-after-next approaches (= the next occupant of its row, outDur 0.5−0.05·i, never mid-read); the closing TWO lines persist to clip end |
|
||||
| `chyronrail` | live-news lower-third package: body words ride a navy chyron bar (`body.bar`, height `body.barH`) sitting on a never-stopping ticker (`body.ticker`: one long seeded head string set as text, scrolled by a constant-speed linear x-tween that DOUBLES its pace at `heroIn` — `v1→v2` px/s); furniture: red bar tab (`body.tab`), a `LATEST` ticker label, a pulsing LIVE bug (red dot toggles every 0.5s via a seek-safe set-chain), a ticking timestamp bug (`body.header.clockPrefix`, last digit pages 5→8 each second); the chyron boots scaleY 0→1 with a 1-frame overshoot; rail yields (`body.yield`, chyron + ticker opacity) while the apex banner slams | fg | `broadcastwipe` (per-word clip-path inset L→R reveal 0.12s + a 2px line slam-kick = the apex motif at low amplitude; emphasis words flash `palette.em` + scale 1.14 → elastic settle) | per-line clip-path inset R→L wipe-out 0.10s then hide (completes before the next line reads) |
|
||||
| `ransomrail` | kidnapper's collage rail: every transcript word is a cutout chip in one of 4 cycled recipes (cream/`fonts.body` Anton, black/`fonts.dark` Inter-800, newsprint/`fonts.news` Special Elite, accent/`fonts.accent` Permanent Marker — emphasis words snap to the accent chip, never two identical chips in a row) PASTED along the bottom rail line (`body.bottomPx`) with seeded crookedness (rot sign alternates with line+word parity, baseline dy leans the other way), seeded ±px sizes (`body.fontPx`−2..+1, emphasis +3) and torn edges (seeded 12-vertex tear polygon, same paper stock as the apex); chips carry a hard dy5 offset drop-shadow; lines breathe (5-key scale keyframes) through their hold; the whole railwrap yields (`body.yield`, container opacity — never contests per-chip channels) while the apex letters slam | fg | `paste` (the apex slam motif at low amplitude: opacity full in 1 frame at scale 1.12 / rot×1.5 / y−8 → power3.in crush 0.08s → 2-frame contact squash 1.05/0.95 → elastic settle; emphasis = 1-frame RE-PASTE lift at `body.emphDelay` — shadow grows to a flight blur, rotation flips sign for good, then crush + squash + elastic again, rip-runway-guarded) | RIPPED off one by one (rotation ±16/17° throw + y−30 + fade, power2.in, staggered 0.045s) with a 1-frame paper-tear flash under each chip — timed so the rip tail overlaps the next line's pastes a beat (collage chaos, by design); the last line tears off clamped to finish on frame |
|
||||
| `tickerrail` | market-terminal feed band docked at the bottom (`body.bandH` dark glass, accent top-border + inset glow, boots up from below): transcript words PRINT into the band behind seeded ▲▼ tick prefixes (62% up via seeded PRNG, `up`/`down` palette) — each word instant-on then a steps(2) 2-frame up-tick pop (scale 1.16 + 9px lift, `hot`→`body` color); emphasis words light a green surge glow (`emGlow` + accent text-shadow) and roll a +N% price counter beside them (`body.counters` targets in order, 4 set-steps power-0.6 climb); a seeded 24-candle mini chart (`body.seed`) drifts one candle per ~0.5s in a right-docked window with one brighter breakout candle (`body.breakoutCandle`) pulsing near the apex; a header (`body.header`: left feed name / idx / pct / vol) ticks through seeded value scripts; the band yields (`body.yield`) while the apex lands | fg | `tickpop` (the surge motif at low amplitude: opacity full in 1 frame at y9 / scale 1.16 / `hot` color, transformOrigin 0%/80% → steps(2) settle to y0/scale1; emphasis adds the green glow + counter roll) | RED tick-out (words + ▲▼ + counter flip to `down` color, line drops 4px after 1 frame, fades 0.10s power1.in, then display:none — the trade closes) |
|
||||
| `draftrail` | technical-drawing lower third: a faint drafting BAND (grid + a bright top rule `palette.accent` + a corner title BLOCK `body.tblock` in the tag font, `body.bandTop`/`tblockX` geometry) docks across the bottom; transcript lines live LEFT-ALIGNED (`body.left`/`railW`) on up to `body.rows` thin baseline RULES (`palette.ruleDim`) that draw L→R (scaleX 0→1 power3.out) before each line and retract after (lines round-robin the rows so the exiting line un-draws while the next draws on a fresh rule); words WIPE in along the line (clipPath inset L→R, 0.18s power2.out) with a registration TICK (`palette.accent`) at each word start (the plotter motif at low amplitude); emphasis words get a DIMENSION CALLOUT — a thin bracket (scaleX 0→1) + a tiny mono Ø-label (`body.dims` cycled, dir alternates up/down) drawn above/below; the band + rules + title block YIELD (`body.yield`) while the apex plotter writes | fg | `wipe` (clipPath inset L→R reveal 0.18s + a registration tick popping scaleY 0→1 at each word start — the plotter draw-on at low amplitude; emphasis adds the bracket + mono dimension label) | un-draw — words wipe back into the rule (clipPath R→L, 0.12s power2.in, reverse order, staggered 0.035s), callouts retract; the baseline rule scaleX→0 after; at clip end the title block clips away + the band retracts |
|
||||
| `columnmag` | editorial magazine column docked in a clear corner (`body.col` geometry: `left`/`top`/`width`, dropped on `CLEARER` side; a radial paper-scrim `colbg`, top + bottom hairline rules that wipe in scaleX, a barcode bug `body.barcodeNum`, and a folio number per line — `— 01 —` … swapping in/out as lines turn); body words are `fonts.body` small-caps (`body.fontPx`/`fontWeight`/`letterSpacing`) that replace per line; the column breathes a slow 0.6% loom and yields (`body.yield`) while the masthead lands | fg | `inksettle` (the masthead verb at low amplitude: opacity snaps in 2 frames, a `y6 → 0` rise + `blur(2px) → 0` carry the motion 0.32s power2.out; emphasis words flip to `font-style:italic` (swash) at +0.14s and grow a baseline underline scaleX 0→1) | `pageturn` (a diagonal shadow sweep `cmsweep` crosses the column L→R in 0.32s and the old line slips out under it — x−16, fade, blur 1.5, rotate −0.6° — its folio fading with it; the gap between sentences gets a soft page-light pass `cmshine`) |
|
||||
| `beamrail` | radiograph SCAN-BAND lower third (`body.bandH` dark glass with a faint vertical-tick wash + accent top-border, a `body.header` HUD tag, a SCANNING/LOCK/ANALYSIS/RESCAN/COMPLETE status readout): a single hot vertical SCAN BEAM (white core + accent wake, baked `x(t)` path) is the engine of every reveal — body words are placed LEFT-ALIGNED on per-line rows (`body.row0`/`lineDy`, x from the measured char-width table + `gapEm`) and WIPED in (clipPath inset, 0.10s) exactly as the beam crosses them, with a 2-frame just-traced brightness flash (brighter on emphasis); lines whose first word is BEFORE the apex onset reveal in the forward L→R pass, lines at/after it print in the RETURN beam's wake (the beam flies off right at the apex release, returns flipped/hot and scans R→L, erasing the forward lines by clip R→L and re-printing the later lines); emphasis words drop a `body.tagText` density chip (≤`body.maxTags`); the band yields (`body.yield`) while the apex locks | fg | `beamwipe` (the scan-lock motif at low amplitude: clipPath L→R reveal slaved to the beam crossing + a 2-frame just-traced brightness flash; emphasis = brighter flash + a `[DENSE]` density tag) | beam-synced ERASE — forward words wiped R→L (clipPath inset, 0.18s) as the return beam reaches each left edge (right-most words erase first); return-phase words simply ride to the band end |
|
||||
| `glassrail` | FROSTED-GLASS lower third: each transcript word rides its own rounded glass CHIP (a `backdrop-filter: blur(body.blur)` pill, `palette.tint` bottom wash, a `palette.rim` hairline border, a top inner highlight + a soft drop shadow, `body.chipRadius` corners) on a stable bottom rail (`body.bottomPx`, `fonts.body` at `body.fontPx`/`body.fontWeight`); lines replace each other; emphasis chips brighten to `palette.em` + bump weight; the only motion is the LIGHT moving across the glass — no flying words, no scatter | fg | `light-catch` (the apex motif at low amplitude: opacity full in 2 frames + a soft slide-up `body.riseY → 0` 0.22s power3.out + a one-shot white light-catch sheet `.fl` that flashes across the chip and fades; emphasis = ONE diagonal specular GLINT — a skewed bright band sweeping the chip, the same glint the slab gets) | the whole line of chips slides DOWN (`body.dropY`) and fades 0.15s power2.in (glass dropping out of the light); the line feeding the slab yields (`body.yield`) while the apex lands, restored before its own exit |
|
||||
| `magnetrail` | FRIDGE-MAGNET lower third: a translucent steel BAND (`body.band` geometry, top highlight + bottom shadow line, rounded) docks across the bottom, pinned at two corners by glossy magnet DOTS (`body.pins`, cool + warm) with a faint specular SHEEN drifting across it all clip (dead-air killer); transcript words are cream rounded-rect CHIPS (`palette.chip`→`chipLo`, `fonts.body` at `body.fontPx`/`body.weight`) on up to `body.rows` chip-rows (round-robin per line, so a phrase reads as two rows at once); each chip arrives with magnetic physics = the apex letter-magnet motif at low amplitude (a short seeded inbound hop 26–42px → decelerate → SNAP the last 6px hard power4.in → crooked land ±2° → 1-frame squash) and SHOVES its left neighbor 1.6px on contact (neighbor nudge); emphasis chips DOUBLE-BOUNCE + press flat (rotation→0, shadow tightens); the sign-off word (`body.redLastWord`) is a red accent chip whose landing makes the BAND itself take the hit; rows bob gently through the hold | fg | `snap` (decelerate-then-snap, the magnetapex motif at low amplitude: hop in → power4.in SNAP last 6px → squash → elastic settle + left-neighbor nudge; emphasis = double-bounce pressed flat; the red sign-off chip slams the band) | chips lose grip and slide DOWN (3-key `y:[0,34,124]` + slow rotation + fade, 0.55s power2.in, staggered 0.055s) when a later same-row line replaces them; the band YIELDS (`body.yield`, container opacity) while the apex assembles |
|
||||
| `seancerail` | MIST-SEEP lower third (CENTERED, two-row): transcript words SEEP in on a stable centered lower-third (`body.bottomPx`/`body.rowGap`; concurrently-visible lines stack — first on the TOP row, second drops below, demo 596/654) as `fonts.body` (Shippori Mincho) bone glyphs — a desaturated MIST duplicate (`palette.mist`) blooms blurred and resolves away while the ink word un-blurs (blur 8→0 + y 6→0, 0.5s power2.out) with a seeded ±1-frame arrival JITTER; every text-shadow casts UPWARD (light-from-below wrongness); per line ~2 seeded letter FLICKERS (a glyph drops to 0.4 for 2 frames); emphasis words (`.em`, `palette.haunt` glow) exhale a GHOST duplicate (`palette.ghost`) drifting up; a bone HAIRLINE draws L→R + a small rotated DIAMOND breathes above (`body.hairline:false` to drop), and `body.motes` seeded dust MOTES drift upward through the air; the whole `#sewrap` dims to `body.yield.dim` while the apex lands | fg | `seep` (the possession motif at low amplitude: mist resolves to bone, blur 8→0 + y 6→0 + ±1-frame jitter; emphasis = an upward ghost-exhale duplicate) | `exhale` (a 1-frame opacity flicker, then the whole line lifts UP — y −25 + blur(6px) + fade, 0.4s power1.in); the apex word is handed off to the embedded POSSESS event (left OUT of `lines`) |
|
||||
| `starrail` | STAR-CHART lower third (LEFT-aligned at `body.leftPx`): a faint astronomy chart sits behind (two draw-on declination ARCS + graticule TICKS + DEC/R.A. labels `body.lblA`/`body.lblB`, `chart:false` to drop it) and YIELDS to `chart` opacity while the apex lands; concurrently-visible lines stack bottom-anchored (`body.lineGap`, `body.bottomPx`) and each transcript word arrives as the apex motif at low amplitude — per-letter GOLD STAR-POINTS (`palette.dot`) pop in with seeded jitter (back.out(2.6)) at T0=st−0.27, a hairline UNDERLINE draws L→R (scaleX), then the Cormorant glyphs fade up +5px (stagger 0.013); dots + hairline DIM to ledger weight once read; emphasis words (`.em`, `body.minorScale`) get a dotted catalogue ELLIPSE (clip-rect sweep) + a designation TAG (`body.emTag`, e.g. α-CMa); the whole `#srwrap` dims to `body.yield.dim` while the apex lands | fg | `starpoint` (the constellation motif at low amplitude: seeded star-dots pop at each letter → hairline draws → glyphs fade up; emphasis = dotted ellipse + designation tag) | asymmetric per line: hairline RETRACTS (scaleX 0) → dots WINK (opacity 0, stagger) → glyphs BLUR UP last (y−7 + blur(3px)); the apex word is handed off to the sky (left OUT of `lines`); on the final word every chart line glitch-wavers two frames + the arcs un-draw |
|
||||
| `mirrorrail` | BLACK-MIRROR REFLECTION lower third (CENTERED): a piano-black glass BAND (`#mband`) + a silver floor HAIRLINE (`#mfline`, `body.railWidth`) dock across the bottom; each line is built as TWO rows — a face row (`.mfaces`, `fonts.body` Bodoni at `body.fontPx`/`body.weight`) and a whole-line REFLECTION (`.mmirs`, scaleY -1, `palette.mirror` at `body.mirrorOpacity`, under a gradient-fade mask) — and EVERY transcript word RISES out of its reflection: opacity full in 2 frames (`ease:none`) + word AND its reflection move apart from the floor line (y 14→0 + blur 1.6→0, 0.30s power2.out); the reading FACE never moves again — emphasis words (`.em`, `palette.em`) ripple ONLY the reflection (scaleY [1,1.07,0.985,1] + blur pulse, 0.55s sine.inOut); hold life = the line's reflection wavers faintly (baked opacity f(t), per-line seeded phase); a GLINT (`#mglint`) travels the floor line during the silence (`body.glintAt`); the whole `#mwrap` dims to `body.yield.dim` while the apex lands | fg | `rise` (the mirrormerge motif at low amplitude: word + reflection emerge from the floor line, opacity full in 2 frames + y 14→0; emphasis = the reflection alone ripples, the face dead still) | `sink` (the line sinks back INTO the mirror — faces y10 + scaleY→0.18, reflection y−10 + scaleY→−0.15, opacity 0, 0.13s power2.in); the apex word is handed off to the embedded MIRRORMERGE event (left OUT of `lines`) |
|
||||
| `leatherrail` | TOOLED-LEATHER lower-third band (`#lband`, `body.bandH`, grain + repeating-gradient stitch texture + inset highlight/shadow) docked across the bottom with two saddle-STITCH lines (`palette.stitch`); each transcript word SINGES in — the iron-brand motif at low amplitude (`body.singeScale` crush → 1-frame contact squash 1.06/0.94 → elastic settle, ember-HOT `palette.hot` Cinzel glow that recedes into a charred edge via a GLOW_IN→GLOW_OUT shadow swap, one faint smoke WISP `.lwsp` rising off each fresh burn, seeded x-drift); emphasis words (`.minors`) RE-GLOW after `body.emPulseDelay` (color/shadow only — never the scale channel); a dark word-shaped CHAR GHOST (`.lghost`, blurred `palette.char`) sits behind each line and reveals to `body.ghostOpacity` after the line exits (the smudge stays branded to clip end); the whole `#lrwrap` dims to `body.yield.dim` while the apex lands | fg | `singe` (the ironbrand press at low amplitude: crush → contact squash → elastic settle, ember glow receding to a charred edge + a smoke wisp; emphasis = a re-glow pulse) | `smoke-out` (the line lifts away as smoke — y−9 + blur(4px) + opacity 0, 0.20s power1.in) leaving its char-ghost smudge seared into the band; the apex word is handed off to the embedded IRONBRAND event (left OUT of `lines`) |
|
||||
| `racingrail` | NIGHT-CIRCUIT lower-third TRACK LINE (`#track`, `body.trackLeft`/`body.trackW`/`body.trackY`; a 2px gradient line that draws on L→R via scaleX with seeded `body.ticksX` ticks + three leading skewed CHEVRONS in `palette.accent`); each transcript word DRIFTS in along the line — the doppler motif at low amplitude: a `fonts.body` italic CORE (`body.weight`) slides x −40→0 with a skewX −8→0 + blur 2→0 settle (0.14s expo.out), trailed by TWO accent ECHO copies (`.e1`/`.e2`) that start further left and lag, then burn off (the velocity streaks); idle = ~1° forward-LEAN breathing (baked skewX f(t)) until exit; emphasis words (`.em`, `palette.accent`) gear-shift SNAP (`body.emScale` → 1, back.out(2.2)) and an `addTach` SVG TACHOMETER arc sweeps up into the redline (needle kiss color flick) then fades; a `#linepulse` element rides the track for the apex front-fx pulse; the whole line dims to `body.yield.dim` while the apex lands | fg | `streak` (the doppler arrival at low amplitude: core slides x −40→0 + skew settle, two echo copies lag and burn off; emphasis = gear-shift snap + tachometer sweep) | `whip-off` (the line whips off RIGHT with a motion smear — x 120 + scaleX 1.4 + blur(6px) + opacity 0, 0.12s power2.in); the apex word is handed off to the embedded DOPPLER event (left OUT of `lines`); pairs with `fx.dopplerboom` (the sonic-boom cone + track pulse at lock) |
|
||||
|
||||
fg body uses the **rail.html alpha-webm channel** (true alpha — dark panels and
|
||||
scrims work; never the screen-blend index_fg path, which can only add light).
|
||||
@@ -101,8 +113,20 @@ scrims work; never the screen-blend index_fg path, which can only add light).
|
||||
| `chalkwrite` | NIGHT LECTURE behind the subject: the lower chalk band grows into a FULL deep-green board (scaleY 0→1 power3.out from the bottom edge at I−0.3, the room dims `params.dim` + vignette `params.vig` with it); the hero word is HAND-WRITTEN in chalk — sequential Hershey stroke reveal (drawon pattern, `gen-stroke-path.py` baked at compile time), dry/rough via seeded ±1px jitter on every pen point (`params.jitterSeed`), a blurred halo (`params.haloWidth`, feGaussianBlur 3.2, group opacity `params.halo`) under a tight core (`params.coreWidth`), a chalk-stick nib (rotated rect) riding the pen — while `params.dustN` dust specks fall from the nib along the path; at write-complete a hand-slap CLAP shakes the board 1 frame (set-chain y 3/−2/1/0; the dust burst lives in the rail, in FRONT: `fx.chalkclap`), then TWO violent accelerating underlines slash beneath (seeded waviness, power3.in, the nib rides them, dust kicks at the ends), the chalk flicks away, and the halo breathes (baked 1.6/3.7 Hz f(t)) through the hold with two slow motes drifting off the letters | geometry registers on the MEASURED ink box (the stroke path is parsed at compile time; ink CENTER lands on scene-aware HG.y, pref top 44): the board rect (`params.boardGap`×inkH above the ink, bottom flush with the frame, width = the body strip), the underlines (inkL+14→inkR−4 at inkBot+30/+50) and the fg clap point (the pen's LAST contact point → HG.clapX/Y/T) all derive from it; x defaults to the board's LEFT margin + tw/2 — a hand writes from the left, never centered on the subject (`theme.hero.x` overrides); pairs with `fx.chalkclap` (12 seeded radial dust specks + a blurred puff at DRAWN, fg) and the `chalkrail` paradigm (same scribble verb at low amplitude); plate: grain only is the demo register; needs `python3` |
|
||||
| `spraytag` | STREET TAG behind the subject: the dusk wall dims (`params.dim`) + a radial scrim charges (`params.scrim`) at I−0.42 as the writer steps up; the can RATTLES at the pen-start point (6 seeded set-chain nib jitters, I−0.30→I−0.02), then the hero word is spray-written stroke by stroke — sequential Hershey dash reveal at constant pen speed (`gen-stroke-path.py` baked at compile time) — as a TRIPLE stack per stroke: fat dark under-stroke `palette.under` (`params.underWidth`, sky-contrast armor) + blurred overspray halo (`params.haloWidth`, feGaussianBlur 7, group opacity `params.haloOpacity`) + wet paint core (`params.coreWidth`, drop-shadow), the glowing nib (r9, `palette.nib`) riding each stroke; `params.osprayN` seeded overspray dots pop near the nib as it passes; nib throws off 2.6× at DRAWN; through the hold `params.drips` seeded DRIPS (paint→`dripMid`→`dripLo` gradient bars) grow from painted low points (x-separated >110px) and KEEP growing, the halo hums (7/11 Hz baked f(t)) and the whole tag looms 1.014; writing window = `params.window` (demo 0.58s) clamped so write + splat + drip fit before ENDT = DUR−0.04 | geometry registers on the MEASURED ink box (ink CENTER lands on scene-aware HG.y, pref top 26 — the sky band, crossing the subject silhouette is the point; tag centers on the hero anchor, `targetWidth` capped at W−140); the pen-finish point is baked onto HG.splatX/Y/T for the fg splat; pairs with `fx.paintsplat` (hot `em2` ring + paint ring + seeded ballistic droplets at DRAWN, fg, in FRONT of the subject) and the `markerrail` paradigm (same flick verb at low amplitude); plate: punch with `punchOffset` ≈ window+0.05 so the punch lands on the splat, not the hero onset; needs `python3` |
|
||||
| `brushwrite` | SUMI-E GESTURE behind the subject: a warm paper wash (`palette.wash`/`wash2` radial, `targetWidth`+380 × `params.washH`) charges at I−0.18 to `params.wash`, settling to `params.washSettle` through the hold; the brush SLAPS down at the first pen point — a start-SPLAT (irregular ink ellipse rotated −24° + 5 seeded satellite dots, scale 0.35→1 power3.out 0.12s; the fg fleck pass rides `fx.brushflecks`) — then the hero word is written in ONE sequential gesture (Hershey dash reveal at constant pen speed, `gen-stroke-path.py` baked at compile time) as a FOUR-layer stack per stroke: blurred bleed (`params.bleedWidth`, feGaussianBlur 6, group hidden until the hold) under fat/mid/core widths (`fatWidth` 0.25 / `midWidth` 0.6 / `coreWidth` 1.0 stroke-opacity = pressure-tapered wet brush), the round ink nib (r7.5, `palette.nib`) riding the pen and flicking off (+42,−30, scale 1.9) at DRAWN; ≤`params.spatterN` spatter droplets eject PERPENDICULAR at the sharpest-curvature points of the gesture (angle-delta > 0.55 rad, te-separated > 0.045s); through the hold the ink BLEEDS into the paper (bleed group fades to `params.bleed` over ≤1.7s) and the whole work breathes 0.6% (`params.breatheHz` baked f(t), svgOrigin = ink center); then the vermilion SEAL chop (`params.sealGlyph`, `palette.seal`/`sealMid`/`sealLo` radial face, `fonts.seal` glyph) stamps at DRAWN+`params.sealDelay` — power4.in crush 0.09s → 2-frame squash → elastic settle + 3 seeded red flecks — skipped entirely if the clip ends too soon; writing window = `params.window` (demo 0.45s) clamped so write + seal + bleed fit before ENDT = DUR−0.04 | geometry registers on the MEASURED ink box (ink CENTER lands on scene-aware HG.y, pref top 19 — the sky band, crossing the subject silhouette is the point; gesture centers on the hero anchor, `targetWidth` capped at W−240 — on scenes with a dark object near the pen start, set `theme.hero.x` so the slap-down lands clear, like the demo's 864); the pen-START point is baked onto HG.fleckX/Y/T for the fg flecks and the seal sits at (inkR−103, inkBot+72) clamped on frame (`params.sealDx/sealDy` override); pairs with `fx.brushflecks` (seeded upward ballistic ink flecks at the slap-down, fg, in FRONT of the subject) and the `brushrail` paradigm (same brush-wipe verb at low amplitude); plate: punch with `punchOffset` ≈ window+`sealDelay` so the punch lands on the seal CONTACT, not the hero onset; needs `python3` |
|
||||
| `plotterdraw` | TECHNICAL PLOTTER behind the subject: a cyanotype scrim (`palette.scrimTop`/`scrimMid` gradient) drops over the upper frame + a drafting GRID charges (`params.grid`) at I−0.41/I−0.37 (scene reaction, masked to fade out at 70% height); four registration CROSSES snap into the sheet corners (scale 0.4→1 expo.out, staggered 0.05s, the corners derived from the measured ink box + `params.sheetPad*`) and a faint dashed construction GUIDE previews the full path; then the hero word PLOTS in one sequential gesture — Hershey dash reveal at constant pen speed (`gen-stroke-path.py` baked at compile time), a square white NIB (`palette.line`, glow drop-shadows) hopping at pen lifts, over a tight glow core (`params.coreWidth`); at write-complete the nib throws off 2× and a 45° HATCH fill (`palette.blueline` pattern) sweeps L→R through the glyph area over 0.36s — a MASKED rect (the strokes are copied fat, `params.maskWidth`, into an SVG mask so the hatch only shows INSIDE the word); a "`params.chip`" chip STAMPS at the word's bottom-left corner (scale 1.7→1 power3.in → 2-frame squash → elastic settle, with a `palette.flash` stamp flash + an idle breathe); through the hold the whole drawing breathes (1.1 Hz baked f(t)) and the hatch shimmers (2.3 Hz); exit = the hatch retracts (width→0), the pen UN-DRAWS in reverse order (fast, strokeDashoffset back to len), the chip lifts away (y−16, rot −8°) and the scrim + grid + crosses + guide all clear | same draw-on family as chalkwrite/brushwrite (shared `gen-stroke-path.py` + measured-ink-box registration); geometry registers on the MEASURED ink box (ink CENTER lands on scene-aware HG.y, pref top 18 — the sky band, crossing the subject silhouette is the point; word centers on the hero anchor, `params.targetWidth` capped at W−200): the hatch rect, glyph mask, registration crosses, construction guide and the REV chip all derive from it; no front fx — the chip + hatch live BEHIND the subject; plate: grain only is the demo register; needs `python3` |
|
||||
| `ransomnote` | RANSOM NOTE slam behind the subject: one cutout chip per letter (4 recipes cycled, seeded ±13% sizes around `hero.fontPx`, alternating-sign rotations ±2–5°, misaligned baselines ±2–6px, seeded tear-polygon edges) slams in oversized (scale 1.5, rot×1.8, flight drop-shadow) at S_k = I + 0.01 + `params.step`·k, crushes power3.in over 0.085s, and on contact the shadow POPS tight (1-frame filter swap) → 2-frame squash 1.07/0.93 → elastic settle; when the LAST letter lands the whole word takes a collective 1-frame JOLT (y6 → power3.out) + a scene pulse (`params.pulse` full-frame dark blink); hold = slow 5-key loom (the crooked grid never straightens); exit = letters RIPPED off one by one (rot+±15–22° throw, y−34, fade, 1-frame tear flash under each) at ripT = min(lastWord − `params.ripLead`, DUR-clamped), ≥ jolt+0.45; scene reaction = collage scrim (`params.scrim` top-dark gradient) charges at I−0.07, out with the rip | width-fit measures each glyph IN ITS OWN recipe font (`assets/fonts/char-widths.json`) + 0.20em chip padding + 6px margins so the collage never overflows; chip chrome (shadows, space width) scales with fontPx from the 130px demo cut; the setpiece RECOMPUTES `plate.punchOffset` = 0.01 + step·(N−1) + crush from the real letter count so the plate punch always lands on the collective jolt, whatever the hero word length; pairs with the `ransomrail` paradigm (same paste verb + tear flashes at low amplitude, same recipe classes/seeded tear polygon emitted into both layers); no front fx — the flashes live inside the chips |
|
||||
| `breakaway` | LIVE-NEWS BREAKING TAKEOVER. BG (behind the subject): the studio dims a touch (`plate.dim`), an accent alert wash pulses (`params.wash`, hard `params.washHit` on contact), and a ghosted hero watermark (`fonts.hero`, `params.wmSize`, opacity `params.wmOpacity`) fades in and slow-drifts, partially occluded by him. FG (in front, lower third, riding the chyron): a red BREAKING banner (`palette.accent`, `params.bannerH`, pinned just above the chyron+ticker) SLAMS DOWN scaleY 0→1 power4.in over 0.10s → elastic dig-in (0.45), the `params.tag` deploys top-left, and the hero word STAMPS in `fonts.hero`: crush 1.6→1 power4.in over 0.09s at I → 2-frame contact squash 1.07/0.93 at C=`I+params.crush` → elastic settle (0.4); a 3-flash red/white inversion strobe (`params.flashes` offsets from C, 0.042s each) fires the banner background + word/tag color; a corner BREAKING clock (`params.breakClock`) flips rotationX 90→0 in over the timestamp; hold = word breathes 1.018 (yoyo×2), banner brightness pulses, tag blinks slow; exit at X = min(`heroOut`, C+`params.hold`) = word fades, banner collapses to a 2px line then slides down off the chyron, and `#cyglow` (the chyronrail ticker rail) takes a 1-frame glow hit (the ticker "absorbs" it) | the banner is FG by design (a chyron banner is always pinned to the bottom, never floated behind the subject) — y is NOT scene-derived; word type width-fits via `assets/fonts/char-widths.json` (`fonts.hero`, 0.02em tracking) to ≤0.86W, banner stays full width; pairs with the `chyronrail` paradigm (shares the chyron geometry + the never-stop ticker that absorbs the collapse + the timestamp-bug clock prefix); plate: `punch` with `punchOffset = params.crush` so the plate punch lands on the word contact |
|
||||
| `inkbloom` | INK DROP IN STILL WATER behind the subject: paper-white radial washes charge the two text zones (`palette.wash` rail wash from t≈0.15, PERSISTS to clip end so the closing body lines keep their ground — it registers on the body row geometry `body.bottomPx`/`rowGap`; `palette.washApex` apex wash at I−0.077, out with the bloom) and a gentle vignette (`params.vig`) STILLS the world while the ink blooms; the drop (ink teardrop, `params.fall` 0.15s) appears above the word point at I−0.08, swells, falls power2.in with a scaleY stretch, squashes 1.7/0.35 on contact (2 frames) and merges into the BLOOM — 3 stacked blurred irregular ink ellipses (`palette.ink`, opacity snaps 0.82/0.62/0.5 then decays) scaling at different rates with counter-rotations (expo.out 1.15/1.35/1.5s) + 2 thin concentric ripple rings expanding 7.2×/9.6× on the water surface; the hero words RESOLVE out of the blob (opacity snaps, blur 16→0 + scale 1.12→1 power2.out) — the FIRST at contact+0.02, the following at their own spoken times (multi-word hero, per-word hand-off); through the hold the glyph edges BREATHE (baked 5-key blur keyframes per word, alternating 0.66/0.5s), the group looms 1.018 and two faint ink wisps curl off the word top (C+0.573/C+0.753, fit-guarded); exit: RE-DISSOLVE (blur 11 + scale 1.15 + fade, 0.52s power1.in) at XOUT = min(I+`params.maxHold`, next body line − `params.clearGap`, DUR−0.6) — the ink clears before the next thought needs the reader | geometry derives from the measured word rect (`assets/fonts/char-widths.json`; kx = halfW/demoHalf, ky = fontPx/132 scale the demo's blob/ring/wisp anchors; pref top 25 — the sky band, crossing the subject silhouette is the point); dark `palette.ink` + its paper washes carry the contrast on bright skies; pairs with the `inkrail` paradigm (same bleed verb at low amplitude); plate: quiet `pushIn`, no punch — the bloom is liquid, not percussive |
|
||||
| `breakout` | MARKET BREAKOUT behind the subject: a top-weighted sky scrim charges in (`plate.charge`, the bright sky can't wash the spike out) and three resistance level lines arm faintly (`params.levels` tags in `palette.tag`), then THE BREAKOUT — a green candle spike (7px core + blurred glow + a hot tip dot, `palette.up`/`glow`) ROCKETS up the full frame height in 0.25s expo.out (scaleY 0→1, bottom-anchored, just left of the word rect); each level FLASHES bright (brightness 1.9) as the tip punches through it bottom→top (staggered 0.03/0.07/0.12s); the hero word rides the spike top — crush transit (scale 2.7→1 power4.in over 0.10s, blur 13→0 brightness 3) → 2-frame contact squash 1.10/0.88 → elastic settle (0.5), flash-WHITE cooling to `palette.glow` market green, with a blurred underglow (`palette.up`, blur 26) that breathes (6-key opacity) through the hold + a slow loom; a +N% odometer (`params.roll`, `fonts.body` bold at 0.39×fontPx, `params.ctrLabel` below) pops in back.out(2) beside the word and climbs through `roll` in set-steps; EXIT at min(`heroOut`−0.1, I+`params.hold`) = the trade flips RED — word + odometer + spike crash DOWN (y52, fade, power3.in) while the spike collapses scaleY→0 and the levels fade (the tick-out motif at apex amplitude) | word rect is metric-exact via `assets/fonts/char-widths.json` (`fonts.hero`, 0.01em tracking; the spike/levels/odometer/underglow all derive from `halfW`+`fontPx`); pref top 22 — the climax happens HIGH (the spike crosses the subject on its way up); when `theme.hero.x` is unset and the word is wide, x biases toward the clearer side so the tail crosses but doesn't bury behind the subject (demo registration: word left, subject right); pairs with the `tickerrail` paradigm (the tick-pop print + red tick-out at low amplitude; the chart's breakout candle pulses at the same onset) and `fx.breakline` (the broken-resistance flash at the slam); plate: `punch` with `punchOffset = params.slam` so the punch lands on the word contact, not the spike launch |
|
||||
| `masthead` | MAGAZINE-COVER TAKEOVER behind the subject: the room becomes paper — a top scrim (`params.paperRGB`, full-width, to ~0.51H) eases the bright sky into newsprint to `params.scrim`, a luminous band brightens the masthead row, and a lipstick-red accent bar (`palette.accent`/`params.accentHold`, `params.barWidth`) grows scaleY 0→1 at the frame edge; the hero word then SETS as a serif masthead (`fonts.hero`, width-fit ~0.62em/char at 0.045em tracking) ACROSS THE TOP of frame behind the subject's head (classic cover occlusion — y pinned to a fixed top band `hero.y`, NOT scene-derived): it INK-SETTLES up (opacity snaps in 2 frames, `y22 → 0` + `blur(7px) → 0` rise 0.55s power3.out — the body's verb at apex amplitude); a kicker (`params.kicker`), a hairline rule (`params.ruleWidth`) and an issue date (`params.date`) stagger in around it; hold = the cover BREATHES (3 sine scale beats 1.0↔1.013 + a slow scrim/bar swell) — print never freezes; it HOLDS as set dressing (a printed cover stays — no tear-out unless `hero.exitAt` is set, then masthead+furniture fade up and the paper releases) | the masthead is TOP-pinned by design (`hero.y` default 172, never re-clamped down — like `breakaway`'s lower-third pin); word width-fits via the 0.62em estimate (Bodoni Moda); pairs with the `columnmag` paradigm (the column dims `body.yield.dim` while the masthead lands, restores after; the masthead is the hero hand-off the column drops from its line, e.g. demo keeps only `It's` on the column row); plate: quiet `pushIn` + grain, no punch — a cover is set, not struck (demo postfx profile `push`) |
|
||||
| `scanlock` | SCAN LOCK behind the subject: the room dims (`palette.dim`) and an x-ray exposure pulse fires (`palette.accent` radial at the word center) as the hero word SNAPS in (the apex impact physics — scale 1.26 → 0.11s power3.in crush → 2-frame contact squash 1.07/0.93 → elastic.out(1,0.42) settle); the readout is monospaced fixed-width cells (`params.charEm`/`spaceEm` of fontPx, `fonts.hero` weight `params.weight`) so it reads like an instrument; a bracket TARGET-FRAME (4 corner brackets pop expo.out staggered, top + bottom edge lines wipe scaleX 0→1) draws shut around it; on the word's FINAL spoken word the readout FLIPS to negative (`palette.negFill` dark fill + a `palette.rim` glow rim — no text-stroke); a loupe RING (`fpx·0.83` radius) then passes L→R over the letters, each char pulsing scale 1.22 + brightness 1.8 as it is examined, while a MATCH readout (`params.readout`) types char-by-char beside the frame and the lock breathes 1.6% + servo-jitters ±1px; EXIT = scan-out, clears before the next spoken word (else `heroOut`): the freeze-frame is WIPED R→L (clipPath inset −30% 0→102%), the edge lines + brackets retract, the readout fades | readout geometry is metric-exact from the cell model (`params.charEm` 0.819 / `spaceEm` 0.483 of fontPx — the demo's 95px char / 56px space @ 116px Orbitron), width-fit to ≤0.86W; bracket frame, edge lines, loupe ring + MATCH readout all derive from the readout rect + `HG.x/y` (scene-aware, pref top 26 — sits behind the subject's head for partial occlusion); pairs with the `beamrail` paradigm (the scan beam freezes/locks at the apex onset and flies off at the scan-out, the band yields `body.yield`); plate: quiet `scrim`+`dim`+grain — the lock owns the frame via the dim, no punch |
|
||||
| `glassslab` | FROSTED-GLASS SLAB behind the subject: the room reacts first — a dusk dim (`palette.deep`) + a top sky scrim (washout guard) charge in at I−0.21/−0.23 and a cool light SPILL (`palette.accent` radial at the hero frame fractions) blooms + flickers, all releasing after the hold; then `params.shards` vertical glass SHARDS (each a `backdrop-filter: blur(params.blur)` wedge with a seeded clip-path shear so the seams read as cracked glass) FLY in from seeded offset+rotation on a power3.in transit (0.11s) and SNAP into register edge-to-edge, each flashing a white light-catch sheet on contact; when the last shard lands the assembled slab takes a contact SQUASH (scaleX 1.035 / scaleY 0.93 → elastic.out(1,0.38) settle) and the hairline RIM snaps on; the hero word (uppercased unless `params.case:"preserve"`, `fonts.hero` weight `params.weight`) then fades on across 2 frames (the one sanctioned opacity entrance); ONE clean diagonal GLINT sweeps the slab; HOLD = the slab tilts rotateY ±`params.tilt`° while the L/R edge lights catch in counter-phase + a slow loom breathe; EXIT at I+`params.hold`+0.28 = 3 hairline CRACKS flash, then every shard DROPS with gravity + seeded rotation and the word falls away | slab rect is metric-exact via `assets/fonts/char-widths.json` (`fonts.hero` at `params.tracking`): `slabW = wordW + params.padX`, `slabH = params.heightRatio·fontPx` (demo 790×196 @ Sora 90px "REMARKABLE"); shards, rim, edge lights, glint mask + crack SVG all derive from the slab rect; pref top 38, but the DNA anchor (`hero.x/y`, subject-side) takes precedence over the occlusion-band auto-pick when set (a wide slab wants to sit BEHIND the subject, 20–50% occlusion); pairs with the `glassrail` paradigm (the light-catch chip motif at low amplitude; the rail yields while the slab lands) and `fx.sparkles` (`fx.sparkles` twinkle CROSSES pop at the slab edges after the word lands); plate: quiet `pushIn` + grain, no punch — the apex verb is the assembly + the light moving across the glass (demo postfx profile `push`) |
|
||||
| `magnetapex` | LETTER-MAGNET ASSEMBLY behind the subject: the room reacts first — a cool fridge-shadow SCRIM (`palette.scrim*` top gradient) + an anchored HALO (`palette.halo*` radial at the word point) dim the bright sky at I−0.23/−0.21 (the scrim settles to 0.82 once the word locks); then the hero word (uppercased unless `params.case:"preserve"`) assembles as one cream rounded-rect CHIP per letter (`fonts.hero`, chip `params.chipWEm`×`params.chipHEm`, slot stride `params.slotStepEm` — all ratios of `fontPx`) — each letter flies in from a seeded FRAME EDGE, decelerates near its slot (0.16s power2.out to 12px short), then SNAPS the last 12px hard (power4.in, 2 frames) into a crooked landing (±2.5°) with a 1-frame squash 1.12/0.88 → elastic settle, in a L→R clack cadence (`params.clackStagger`/letter); when the last letter LOCKS the whole word takes a collective 1-frame JOLT (y3 → power2.out, on the plate punch) and then STRAIGHTENS as one rigid unit (`tl.to(chips,{rotation:0})` 0.4s power3.inOut); HOLD = a collective magnetic BREATHE (scale 1.016, 4-beat sine yoyo); a sympathetic 1px nudge fires when the body's red sign-off chip slams (at `LASTWORD`); EXIT at I+`params.hold` = the dim lifts and the word releases (y26 + fade) | the magnet row is width-fit to ≤94% of frame from `fontPx`×`params.slotStepEm`×N (chip rect + slot stride shrink together); pref top 16 — the word sits HIGH in the sky band and crosses the subject's head crown (good occlusion); pairs with the `magnetrail` paradigm (the same decelerate-then-snap chip verb + neighbor nudge at low amplitude; the band yields while the apex assembles and takes the sympathetic nudge when its red chip lands); plate: `punch` with `punchOffset = (N−1)·clackStagger` so the punch lands on the collective jolt at the last-letter lock, whatever the word length (demo postfx profile `punch` @3.95) |
|
||||
| `starfield` | SKY-CONSTELLATION CONDENSE behind the subject: the room reacts first (scene reaction lives HERE, not the plate) — night quietly FALLS on the bright sky: a dusk gradient (`#sfdusk`), a dark radial POCKET anchored at the word point (`#sfhalo`) and a bottom reading SCRIM (`#sfrailscrim`) ease in across I−0.96/−0.80/−0.76 and settle to 0.4/0.45/0.3 after the hold; then `params.stars` gold STARS (seeded anchors spread across the word rect biased ABOVE the glyphs, alternating bright cross-SPIKES) twinkle in (opacity full in 2 frames + scale back.out(2.8)) at the hero word's letter anchors, each carrying a baked seeded TWINKLE (two-sine opacity keyframes, hold life); HAIRLINES connect the stars in sequence (`pathLength` dash draw, 0.125s/segment) starting I−0.40; the hero word (italic `fonts.hero`, glow twin `#sfwglow` + core `#sfwcore`) CONDENSES IN within the linework (blur(8px)→0 + letter-spacing 0.10em→0.05em over 0.5s, opacity in 2 frames), the lines relax to 0.3 and faint-waver; a designation (`params.desig`, e.g. STELLA·LIMITIS, `fonts.tag`) TYPES beneath; HOLD = the word breathes (scale 1.016) + the glow oscillates; on the final transcript word the lines glitch-waver two frames (clouds); EXIT is asymmetric — lines RETRACT in reverse, stars WINK out one by one (scale 1.7 + fade), the GLYPHS fade LAST (y−8 + reblur) | star anchors are metric-exact via `assets/fonts/char-widths.json` (`fonts.hero` italic at 0.05em): `halfW = wordW/2`, anchors at `HG.x ± halfW` ± seeded jitter; pref top 24 — the word + its constellation crown the subject's head (good occlusion); pairs with the `starrail` paradigm (the star-point/hairline motif at low amplitude; the rail + chart yield while the apex lands; the hero word is handed off to the sky, left OUT of `lines`); plate: quiet `pushIn` + grain, NO punch — the apex verb is the dusk falling + the word condensing (demo postfx profile `push`) |
|
||||
| `possess` | BEHIND-THE-SUBJECT POSSESSION + scene reaction: the scene reaction lives HERE (not the plate) — the whole clip sits under a teal GRADE (`palette.grade`, multiply), a `params.dim` dim and a breathing VIGNETTE f(t); at the apex the lights DIP HARD (a 4-step stutter then snap to `params.dimSnap`) and a desaturated MIST (`palette.mist`, `fonts.hero` blurred) gathers in anticipation; the spoken word then MANIFESTS in `fonts.hero` (Creepster) at the word point — crush (scale 2.6→1, 0.105s power4.in + blur(16px)→1px brightness pump) → contact SQUASH (scaleX 1.12/scaleY 0.90, on the plate punch at I+`params.crush`) → elastic.out(1,0.38) settle; the SHADOW casts UPWARD (`#pshadow` y −12, the light-wrongness signature); a 1s legacy possess SHUDDER runs (7-step set-chain x/skewX with a dual red/cyan `SH_A`/`SH_B` textShadow, `palette.haunt`/`palette.cool`) settling to `SH_F`; HOLD = a slow LOOM (scale 1.005–1.032) + a cold UNDERLIGHT (`palette.under`) breathing from below + two micro shudder bursts; EXIT at heroOut+`params.hold` = a 1-frame flicker then the word EXHALES upward (y −60 + fade + blur 10) | the word is metric-exact via `assets/fonts/char-widths.json` (`fonts.hero` at `params.tracking`): `wordW = measured advance`, `halfW = wordW/2`; pref top 33, sits slightly left-of-center behind the seated subject (20–50% occlusion); pairs with the `seancerail` paradigm (the seep/mist + upward-shadow motif at low amplitude; the rail yields while the word manifests, the hero word handed off and left OUT of `lines`) and `fx.seance` (a cold flash + two mist rings + an ash exhale at the contact frame); plate: `punch` with `punchOffset = params.crush` so the contact squash rides the punch (demo postfx profile `punch` @3.78) |
|
||||
| `mirrormerge` | KALEIDOSCOPE-MERGE behind the subject + scene reaction: the scene reaction lives HERE — dusk FALLS (`#mmdusk` gradient), a dark radial POCKET (`#mmpocket`) forms behind the apex zone and a bottom SCRIM (`#mmscrim`, on `plate.dim`) calms the desk, easing in across M−0.51/−0.47/0.10 and lifting after the hold; the hero word arrives as `params.ghostRot` rotated low-opacity GHOST copies (`palette.ghost`, default −24/−8/8/24°, `params.ghostOp`) that converge rotation→0 while fading up + un-blurring (0.45s expo.out) starting M−0.45, then at the MERGE instant (I+`params.mergeDelay`) ONE sharp `fonts.hero` word (`palette.body`) SNAPS to full opacity (2-frame law) + micro squash (scaleX 1.035/scaleY 0.95) → elastic.out(1,0.42); a cold under-GLOW (`palette.glow`, blur 16) blooms and breathes (baked f(t)); a grand REFLECTION (`#mmmir`, scaleY -1, `palette.mirror`, gradient mask) emerges from the floor line; a vertical light STREAK (`palette.streak`, two bars) crosses on the merge; a silver floor HAIRLINE (`palette.silver`) draws under the word; HOLD = the word PERFECTLY still while only the reflection shimmers (baked skewX/blur/opacity f(t)); EXIT at `hero.exitAt`/M+`params.hold` = the word SINKS into its reflection — both travel to the floor line and compress scaleY→0.05/−0.05 (0.30s power3.in), absorbed by the mirror | the word is metric-exact via `assets/fonts/char-widths.json` (`fonts.hero` at `params.tracking` 0.03em): `wordW = measured advance`, `halfW = wordW/2`, `fontPx` width-fit to ≤90% of frame INCLUDING the ×1.2 ghost-rotation overshoot; pref top 30, sits center-ish behind the seated subject (20–50% occlusion); the floor hairline, light streak and reflection mask all derive from the word rect; pairs with the `mirrorrail` paradigm (the same rise-from-reflection verb at low amplitude; the rail yields while the merge lands, the hero word handed off and left OUT of `lines`); plate: quiet `pushIn` + grain, NO punch — the apex verb is the ghosts converging + the dusk falling (demo postfx profile `push`) |
|
||||
| `doppler` | DOPPLER ARRIVAL behind the subject + scene reaction: the scene reaction lives HERE — the asphalt DIMS (`#dim` to `plate.dim` from I−0.21, easing back, clears before clip end) as the thing approaches and a HEADLIGHT glow (`#vpglow`) grows at a left VANISHING POINT (`vpx = HG.x − halfW − params.runup`); the hero word starts as a SPECK there (`#apex` scale 0.06 at `startX`) and ACCELERATES (power4.in over `params.lock` ≈0.22s) into a full `fonts.hero` italic slab at the word point, with a blur/brightness pump along the transit; at `C = I + params.lock` it LOCKS — contact squash (scaleX 1.16/scaleY 0.88, the plate-punch anchor) → elastic.out(1,0.36); the paint COOLS `params.warm` → `params.bone` while the text-shadow eases from a 48px hot bloom to a 24px rest glow; an accent `#wash` + `#tunnel` vignette snap on at lock; HOLD = a heat-ripple TRAIL (`#dtr1/2/3`, three blurred `params.hot` copies at staggered x with baked y-oscillation + opacity f(t)), a breathing `#aglow`, and a slow 3.5% loom; EXIT at `heroOut−0.18` = the slab WHIPS off frame RIGHT (x → +halfW+0.32W, scaleX 1.5, blur 10, opacity 0, 0.16s power3.in) | the word is metric-exact via `assets/fonts/char-widths.json` (`fonts.hero` Teko italic at `params.tracking` 0.02em): `wordW = measured advance`, `halfW = wordW/2`, `fontPx` width-fit to ≤90% of frame INCLUDING the ×1.16 squash overshoot; pref top 28, sits center-ish so the slab crosses the seated subject (20–50% occlusion); the vanishing point, headlight glow, wash/tunnel and trail all derive from the word rect; pairs with the `racingrail` paradigm (the same velocity-streak verb at low amplitude; the track yields while the slab lands, the hero word handed off and left OUT of `lines`) and `fx.dopplerboom` (a hot flash + two skewed expanding rings + air-rip speed streaks + a track pulse at lock); plate: `punch` + light shake at `punchOffset = params.lock` (the lock contact); the warm headlight/wash tints derive from `params.hot` via the `hexA` helper (demo postfx profile `punch` @3.93) |
|
||||
| `ironbrand` | WHITE-HOT IRON STAMP behind the subject + scene reaction: the room CHARGES (`#scrim` to `plate.charge` from I−0.46) and DIMS (`#dimP` to `plate.dim`, easing back) as the iron approaches; the apex word SLAMS down (`#det` scale `params.slamScale` 3.1→1 power4.in over 0.10s + `#wgroup` blur 13→0) → 2-frame contact squash (1.10/0.91) → elastic.out(1,0.38) at `C = I + params.crush`; it immediately CHARS — `#apexword` color `params.white` → `params.ember` → `params.char` over ~0.9s while two stacked charred stroke OUTLINES (`#stroke1` 1px / `#stroke2` 2px) grow in; a `#heat` under-glow (blur 26) blooms 0.9 then decays into a 10-key furnace-breathing cycle; warm `#spill` light catches the dusk scene on contact; a `#scorch` radial darkens the world around the brand and REMAINS to the last frame (the signature); two SEEDED letters (`params.seed`) re-glow ember through the hold; a slow 3.2% loom keeps the brand alive; EXIT at `heroOut−0.18` = SMOKE-OUT — `#wgroup` lifts (y−16 + blur 5) and fades while a faint word-shaped `#apexchar` SMUDGE (opacity 0.14) stays seared in | the word is metric-exact via `assets/fonts/char-widths.json` (`fonts.hero` Cinzel at `params.tracking` 0.03em): `wordW = measured advance`, `halfW = wordW/2`, `fontPx` width-fit to ≤88% of frame INCLUDING the ×1.10 squash overshoot; pref top 28, sits center-ish behind the seated subject (20–50% occlusion); the scorch radial + charred outlines all derive from the word rect; pairs with the `leatherrail` paradigm (the same singe/press verb at low amplitude; the band yields while the brand lands, the hero word handed off and left OUT of `lines`) and `fx` flash/sparks/embers (contact ember flash + ember sparks + rising smoke wisps); plate: `punch` + light shake at `punchOffset = params.crush` (the iron contact) |
|
||||
|
||||
Inline setpieces (`hero.inline: true`) live inside the body paradigm — the hero
|
||||
word stays in `lines`. Embed setpieces own the word: leave it OUT of `lines`
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"name": "blueprint",
|
||||
"voice": "drafting-table cyanotype — captions are a technical drawing. The lower third is a faint drafting band with a bright rule and a title block; transcript lines sit LEFT-ALIGNED on thin baseline rules that draw L→R, words WIPE in along the line with a registration tick at each word, and emphasis words get a dimension callout (bracket + tiny mono label). At the apex a cyanotype scrim + drafting grid charge behind the subject and a thin white PLOTTER pen writes the hero word stroke by stroke (square nib, construction guide, registration crosses), then a 45° hatch-fill sweeps through the glyph and a 'REV A // APPROVED' chip stamps the corner.",
|
||||
"when": "engineering, science, data, architecture, product-spec and explainer content — anything precise and measured that wants a measured-not-loud register. The cool cyanotype scrim supplies its own contrast on bright scenes; reads as a working drawing, so it suits deliberate pacing.",
|
||||
"register": "precise",
|
||||
"fonts": { "body": "Space Grotesk", "tag": "VT323", "strokeFont": "HersheyScript1.svg" },
|
||||
"palette": {
|
||||
"body": "#f1f7ff",
|
||||
"accent": "#9fc6ff",
|
||||
"em": "#9fc6ff",
|
||||
"line": "#ffffff",
|
||||
"blueline": "#9fc6ff",
|
||||
"ruleDim": "#9fc6ff",
|
||||
"scrimTop": "rgba(8,24,52,0.60)",
|
||||
"scrimMid": "rgba(10,30,60,0.42)",
|
||||
"bandHi": "rgba(7,20,42,0.42)",
|
||||
"bandMid": "rgba(7,20,42,0.66)",
|
||||
"bandLo": "rgba(8,24,50,0.76)",
|
||||
"tblockBg": "rgba(8,24,50,0.35)",
|
||||
"tblockLo": "#7fa8d8",
|
||||
"chipText": "#cfe6ff",
|
||||
"chipBg": "rgba(8,24,52,0.62)",
|
||||
"flash": "rgba(190,220,255,0.55)"
|
||||
},
|
||||
"body": {
|
||||
"paradigm": "draftrail",
|
||||
"layer": "fg",
|
||||
"fontPx": 44,
|
||||
"fontWeight": 500,
|
||||
"left": 74,
|
||||
"railW": 706,
|
||||
"rows": [566, 624],
|
||||
"bandTop": 560,
|
||||
"tblockX": 952,
|
||||
"tblock": ["NIGHT SKY SURVEY — SHT 06", "DWG OBS-042 · SCALE 1:1 · REV A"],
|
||||
"dims": ["Ø 4.2″", "Ø 9 µm", "R 0.5", "12.4 mm"],
|
||||
"yield": { "dim": 0.55, "pre": 0.05, "post": 0.67 }
|
||||
},
|
||||
"hero": {
|
||||
"setpiece": "plotterdraw",
|
||||
"layer": "bg",
|
||||
"params": {
|
||||
"targetWidth": 960,
|
||||
"window": 0.55,
|
||||
"coreWidth": 3,
|
||||
"maskWidth": 17,
|
||||
"grid": 0.85,
|
||||
"chip": "REV A // APPROVED",
|
||||
"chipSize": 24,
|
||||
"chipDelay": 0.48
|
||||
}
|
||||
},
|
||||
"plate": { "grain": 5 },
|
||||
"linkages": []
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"name": "brand",
|
||||
"voice": "a branding iron — everything is burned in. Body words SINGE onto a tooled-leather band (a low-amplitude iron press: tiny crush, contact squash, elastic settle, ember-hot glow receding into a charred edge, one smoke wisp); each line exits as smoke and leaves a dark word-shaped char smudge in the leather. The apex word SLAMS down behind the subject as a white-hot iron stamp that chars white → ember → deep brown while charred outlines grow in, a scorch radial darkens the scene and REMAINS to the last frame, then the word lifts away as smoke leaving its smudge.",
|
||||
"when": "heritage, craft, leather-goods, whiskey/coffee, founder and maker brands, premium-rustic announcements — anywhere the message should feel permanent, made-by-hand, and seared in. Loud-warm register. Needs a dusk/warm scene that tolerates a charge-dim.",
|
||||
"register": "loud",
|
||||
"fonts": { "body": "Cinzel", "hero": "Cinzel", "tag": "Cinzel" },
|
||||
"palette": {
|
||||
"body": "#e8c697",
|
||||
"hot": "#ffdfae",
|
||||
"em": "#ffb066",
|
||||
"char": "#150b05",
|
||||
"leatherHi": "#483320",
|
||||
"leather": "#3a2a1c",
|
||||
"leatherLo": "#2e2013",
|
||||
"stitch": "232,201,151"
|
||||
},
|
||||
"body": {
|
||||
"paradigm": "leatherrail",
|
||||
"layer": "fg",
|
||||
"fontPx": 44,
|
||||
"bottomPx": 69,
|
||||
"letterSpacing": "0.035em",
|
||||
"weight": 700,
|
||||
"bandH": 94,
|
||||
"singeScale": 1.12,
|
||||
"emPulseDelay": 0.6,
|
||||
"ghostOpacity": 0.2,
|
||||
"seed": 34034034,
|
||||
"yield": { "dim": 0.52, "pre": 0.12, "post": 0.5 }
|
||||
},
|
||||
"hero": {
|
||||
"setpiece": "ironbrand",
|
||||
"layer": "bg",
|
||||
"x": 600,
|
||||
"y": 314,
|
||||
"fontPx": 124,
|
||||
"params": {
|
||||
"crush": 0.07,
|
||||
"slamScale": 3.1,
|
||||
"tracking": 0.03,
|
||||
"weight": 700,
|
||||
"white": "#fff6e8",
|
||||
"ember": "#ff8a30",
|
||||
"char": "#2b1a10",
|
||||
"seed": 34034
|
||||
}
|
||||
},
|
||||
"fx": { "flash": 0.62, "sparks": 8, "embers": 3, "seed": 34034034 },
|
||||
"plate": {
|
||||
"charge": 0.55,
|
||||
"dim": 0.34,
|
||||
"punch": 0.04,
|
||||
"punchOffset": 0.07,
|
||||
"punchDecay": 9,
|
||||
"shakeAmpX": 5,
|
||||
"shakeAmpY": 4,
|
||||
"shakeHz": 11,
|
||||
"shakeDecay": 7,
|
||||
"shakeWindow": 0.5,
|
||||
"grain": 6
|
||||
},
|
||||
"linkages": []
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"name": "breaking",
|
||||
"voice": "live-news takeover — the whole clip is a cable-news package. Body words ride a navy chyron and reveal by broadcast wipe (clip-path L→R + a 2px slam-kick); emphasis words flash a yellow highlight and pop; a never-stopping ticker scrolls one long head string at constant speed and DOUBLES its pace at the takeover. Furniture: red bar tab, pulsing LIVE bug, ticking timestamp. The apex is a BREAKING banner that slams down onto the chyron (scaleY 0→1, elastic dig-in) while the hero word STAMPS in Anton — crush, contact squash, elastic settle — under a 3-flash red/white strobe; a red BREAKING clock flips over the timestamp; the studio dims and a red alert wash pulses while a ghosted hero watermark drifts behind the subject. Exit: the banner collapses to a 2px line the ticker absorbs.",
|
||||
"when": "news-adjacent explainers, hot takes, announcements, reactions, anything that should read URGENT / BREAKING. Loud register; needs a lower third that tolerates a navy chyron + red banner.",
|
||||
"register": "loud",
|
||||
"fonts": { "body": "Space Grotesk", "hero": "Anton", "tag": "VT323" },
|
||||
"palette": {
|
||||
"body": "#FFFFFF",
|
||||
"accent": "#D2232A",
|
||||
"hot": "#FF2E36",
|
||||
"em": "#FFD23F",
|
||||
"bar": "rgba(17,35,63,0.94)",
|
||||
"tick": "#CFE0F2"
|
||||
},
|
||||
"body": {
|
||||
"paradigm": "chyronrail",
|
||||
"layer": "fg",
|
||||
"fontPx": 42,
|
||||
"barH": 68,
|
||||
"letterSpacing": "0.01em",
|
||||
"tab": { "text": "NEWS 24", "w": 172 },
|
||||
"ticker": {
|
||||
"h": 32,
|
||||
"label": "LATEST",
|
||||
"v1": 180,
|
||||
"v2": 360,
|
||||
"head": "ROOFTOP OBSERVATORY REPORTS CLEAREST SKIES OF THE SEASON +++ CITY TELESCOPE ARRAY ENTERS FINAL CALIBRATION PHASE +++ SENSOR TEAM CLAIMS RECORD SIGNAL RECOVERY FROM NOISE FLOOR +++ AMATEUR ASTRONOMERS FLOOD DOWNTOWN ROOFTOPS AT DUSK +++ NEW DENOISING PIPELINE TURNS HEADS AT IMAGING SUMMIT +++ STARGAZERS UNDETERRED BY LIGHT POLLUTION +++ ENGINEERS SAY PIXEL LIMITS NO LONGER THE CEILING +++ MORE AT THE TOP OF THE HOUR +++ "
|
||||
},
|
||||
"header": { "clockPrefix": "19:41:5" },
|
||||
"yield": { "dim": 0.55, "pre": 0.06, "post": 0.46 }
|
||||
},
|
||||
"hero": {
|
||||
"setpiece": "breakaway",
|
||||
"layer": "fg",
|
||||
"fontPx": 110,
|
||||
"params": {
|
||||
"tag": "BREAKING NEWS",
|
||||
"bannerH": 140,
|
||||
"breakClock": "● 19:42:00",
|
||||
"wmSize": 190,
|
||||
"wmOpacity": 0.17,
|
||||
"wash": 0.08,
|
||||
"washHit": 0.16,
|
||||
"crush": 0.09,
|
||||
"hold": 1.95,
|
||||
"flashes": [0.13, 0.21, 0.29]
|
||||
}
|
||||
},
|
||||
"plate": {
|
||||
"dim": 0.11,
|
||||
"punch": 0.04,
|
||||
"punchDecay": 9,
|
||||
"punchOffset": 0.09,
|
||||
"shakeWindow": 0.5,
|
||||
"grain": 5
|
||||
},
|
||||
"linkages": []
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"name": "constellation",
|
||||
"voice": "a star chart drawn live — body words arrive as gold star-points that pop in at each letter, a hairline underline draws beneath, then the glyphs settle onto a faint declination/right-ascension grid; the apex word is handed off to the SKY, where stars twinkle in at its letter anchors, hairlines connect them in sequence, the word condenses in within the linework and a catalogue designation types beneath. Night quietly falls on the bright sky as it lands. Wonder, not spectacle.",
|
||||
"when": "science, astronomy, optics/imaging, research and discovery clips, contemplative explainers, anything about looking up or seeing further. Wants a clip that tolerates a soft dusk-dim (the sky goes night-blue behind the subject). Calm-to-elegant register.",
|
||||
"register": "calm",
|
||||
"fonts": { "body": "Cormorant Garamond", "hero": "Cormorant Garamond", "tag": "VT323" },
|
||||
"palette": {
|
||||
"body": "#f2ead8",
|
||||
"accent": "#ffd98c",
|
||||
"em": "#f6e2ae",
|
||||
"dot": "#ffd98c",
|
||||
"tag": "#ffd98c",
|
||||
"starCore": "#fff8e2"
|
||||
},
|
||||
"body": {
|
||||
"paradigm": "starrail",
|
||||
"layer": "fg",
|
||||
"fontPx": 46,
|
||||
"minorScale": 1.17,
|
||||
"leftPx": 84,
|
||||
"lineGap": 60,
|
||||
"bottomPx": 72,
|
||||
"chart": true,
|
||||
"lblA": "DEC +38°",
|
||||
"lblB": "R.A. 04h—09h",
|
||||
"emTag": "α-CMa",
|
||||
"seed": 2727,
|
||||
"yield": { "dim": 0.55, "pre": 0.2, "post": 1.15 }
|
||||
},
|
||||
"hero": {
|
||||
"setpiece": "starfield",
|
||||
"match": "stars",
|
||||
"layer": "bg",
|
||||
"x": 725,
|
||||
"y": 247,
|
||||
"fontPx": 150,
|
||||
"maxHold": 5.5,
|
||||
"params": {
|
||||
"stars": 5,
|
||||
"desig": "STELLA·LIMITIS",
|
||||
"seed": 4242
|
||||
}
|
||||
},
|
||||
"plate": { "pushIn": 0.012, "grain": 5 },
|
||||
"linkages": []
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"name": "cover",
|
||||
"voice": "the live magazine-cover takeover — the transcript reads as a small editorial column docked in a clear corner (folio numbers, hairline rules, a barcode bug; words INK-SETTLE in, the emphasis word flips to an italic swash, lines exit on a page-turn). At the apex the room becomes paper: a serif masthead of the hero word SETS ACROSS THE TOP of frame behind the subject's head (classic cover occlusion), a kicker + issue date + lipstick-red accent bar deploy around it, and the cover breathes — print never freezes.",
|
||||
"when": "editorial, fashion/culture/lifestyle, premium brand and founder profiles, thought-leadership and longform — anywhere the speaker should read like a cover story. Calm-elegant register; needs a bright top (the scrim turns sky into paper) and a clear lower corner for the column.",
|
||||
"register": "elegant",
|
||||
"fonts": { "body": "Cormorant Garamond", "hero": "Bodoni Moda", "tag": "Space Grotesk" },
|
||||
"palette": {
|
||||
"body": "#f6f2ea",
|
||||
"ink": "#1c1a18",
|
||||
"accent": "#e25a50",
|
||||
"paper": "#f6f2ea",
|
||||
"rule": "rgba(246,242,234,0.82)"
|
||||
},
|
||||
"body": {
|
||||
"paradigm": "columnmag",
|
||||
"layer": "fg",
|
||||
"fontPx": 33,
|
||||
"fontWeight": 700,
|
||||
"letterSpacing": "0.02em",
|
||||
"col": { "left": 48, "top": 508, "width": 500, "scrim": 0.62, "bgOpacity": 0.52 },
|
||||
"barcodeNum": "06 26",
|
||||
"yield": { "dim": 0.55, "pre": 0.2, "post": 0.9 }
|
||||
},
|
||||
"hero": {
|
||||
"setpiece": "masthead",
|
||||
"layer": "bg",
|
||||
"x": 640,
|
||||
"y": 172,
|
||||
"fontPx": 148,
|
||||
"params": {
|
||||
"kicker": "THE OBSERVATORY ISSUE",
|
||||
"date": "JUNE 2026",
|
||||
"paperRGB": "244,238,228",
|
||||
"accentHold": "#c8473f",
|
||||
"scrim": 0.7,
|
||||
"ruleWidth": 1080,
|
||||
"barWidth": 8,
|
||||
"heroWeight": 700
|
||||
}
|
||||
},
|
||||
"plate": { "pushIn": 0.012, "grain": 5 },
|
||||
"linkages": []
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
{
|
||||
"name": "finance",
|
||||
"voice": "a live market terminal — the transcript is the feed. Words PRINT into a dark glass ticker band behind ▲▼ tick prefixes (quantized 2-frame up-tick pops, the surge motif at low amplitude); emphasis words light a green surge glow and roll a +N% price counter beside them. A seeded mini candlestick chart drifts on the right and the header (index / pct / vol) ticks through. The apex is THE BREAKOUT: a green candle spike rockets up the full frame behind the subject, level lines flash as the tip punches through, and the apex word slams at the spike top with a +447% odometer rolling beside it. Exit: the trade goes red and crashes down.",
|
||||
"when": "data, growth, finance, results, metrics, momentum, 'up and to the right' announcements — any clip where the energy is a number going up. Loud-ish register; wants a scene that tolerates a top-weighted charge-dim (the bright sky behind the spike).",
|
||||
"register": "loud",
|
||||
"fonts": { "body": "Space Grotesk", "hero": "Anton", "tag": "VT323" },
|
||||
"palette": {
|
||||
"body": "#eafff4",
|
||||
"hero": "#eafff3",
|
||||
"up": "#1fd66b",
|
||||
"accent": "#1fd66b",
|
||||
"down": "#ff4d4d",
|
||||
"hot": "#d9ffe9",
|
||||
"glow": "#8dffc0",
|
||||
"emGlow": "#8dffc0",
|
||||
"tag": "#7be8a8",
|
||||
"dim": "#3f8f63",
|
||||
"flash": "#beffdc"
|
||||
},
|
||||
"body": {
|
||||
"paradigm": "tickerrail",
|
||||
"layer": "fg",
|
||||
"fontPx": 40,
|
||||
"bandH": 118,
|
||||
"inset": 36,
|
||||
"seed": 4470611,
|
||||
"breakoutCandle": 18,
|
||||
"counters": ["12.4", "38.2", "89.1"],
|
||||
"header": {
|
||||
"left": "OBS-CAP · LIVE FEED_",
|
||||
"idx0": "4,212.88",
|
||||
"pct0": "0.42%",
|
||||
"vol0": "VOL 88.4K",
|
||||
"idx": [
|
||||
[0.35, "4,212.88"],
|
||||
[0.8, "4,213.41"],
|
||||
[1.25, "4,212.96"],
|
||||
[1.7, "4,214.05"],
|
||||
[2.15, "4,213.62"],
|
||||
[2.6, "4,214.88"],
|
||||
[3.05, "4,215.10"],
|
||||
[3.5, "4,216.02"],
|
||||
[3.9, "4,388.50"],
|
||||
[4.1, "4,471.13"],
|
||||
[4.35, "4,540.77"],
|
||||
[4.8, "4,571.30"],
|
||||
[5.25, "4,588.96"],
|
||||
[5.65, "4,590.12"]
|
||||
],
|
||||
"pct": [
|
||||
[0.9, "▲ 0.48%"],
|
||||
[1.8, "▲ 0.51%"],
|
||||
[2.7, "▲ 0.47%"],
|
||||
[3.5, "▲ 0.55%"],
|
||||
[3.95, "▲ 2.96%"],
|
||||
[4.2, "▲ 4.47%"],
|
||||
[5.6, "▼ 1.12%"]
|
||||
],
|
||||
"vol": [
|
||||
[1.4, "VOL 91.2K"],
|
||||
[2.8, "VOL 95.7K"],
|
||||
[3.9, "VOL 312.4K"],
|
||||
[5.0, "VOL 318.0K"]
|
||||
]
|
||||
},
|
||||
"yield": { "dim": 0.55, "pre": 0.06, "post": 0.9 }
|
||||
},
|
||||
"hero": {
|
||||
"setpiece": "breakout",
|
||||
"layer": "bg",
|
||||
"fontPx": 140,
|
||||
"params": {
|
||||
"slam": 0.14,
|
||||
"hold": 1.84,
|
||||
"levels": ["R3 · 4,580", "R2 · 4,440", "R1 · 4,300"],
|
||||
"ctrLabel": "SIGNAL GAIN",
|
||||
"roll": [
|
||||
"+18%",
|
||||
"+86%",
|
||||
"+159%",
|
||||
"+226%",
|
||||
"+285%",
|
||||
"+334%",
|
||||
"+374%",
|
||||
"+405%",
|
||||
"+427%",
|
||||
"+440%",
|
||||
"+447%"
|
||||
]
|
||||
}
|
||||
},
|
||||
"fx": { "breakline": 0.9 },
|
||||
"plate": {
|
||||
"charge": 0.52,
|
||||
"dim": 0.34,
|
||||
"punch": 0.04,
|
||||
"punchDecay": 10,
|
||||
"punchOffset": 0.14,
|
||||
"shakeAmpX": 4,
|
||||
"shakeAmpY": 3,
|
||||
"shakeHz": 13,
|
||||
"shakeDecay": 8,
|
||||
"shakeWindow": 0.5,
|
||||
"grain": 6
|
||||
},
|
||||
"linkages": []
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"name": "glass",
|
||||
"voice": "frosted glass — light moving across a cool surface. Body words ride their own rounded backdrop-blur CHIPS on a stable lower-third rail (2-frame opacity, soft slide-up, a one-shot light-catch sheet; emphasis words take one diagonal specular glint). The apex assembles BEHIND the subject from flying frosted SHARDS that snap into a glass slab, the word fades on, one clean glint sweeps, the slab tilts and the edge light follows, then it shatters: cracks flash and the shards drop away.",
|
||||
"when": "premium product, design-tool, optics/camera and calm tech reveals — anything that wants a cool, glassy, restrained cinematic surface where the spectacle is refracted light, not impact. Elegant register. Needs a scene that tolerates a dusk dim + cool spill (any luma; brighter skies want the sky scrim it ships with).",
|
||||
"register": "calm",
|
||||
"fonts": { "body": "Sora", "hero": "Sora", "tag": "Sora" },
|
||||
"palette": {
|
||||
"body": "#FFFFFF",
|
||||
"accent": "#78C8FF",
|
||||
"em": "#F4FBFF",
|
||||
"deep": "#05101C",
|
||||
"spark": "#EAF8FF",
|
||||
"rim": "rgba(255,255,255,0.28)",
|
||||
"tint": "rgba(150,195,230,0.10)"
|
||||
},
|
||||
"body": {
|
||||
"paradigm": "glassrail",
|
||||
"layer": "fg",
|
||||
"fontPx": 40,
|
||||
"fontWeight": 500,
|
||||
"bottomPx": 74,
|
||||
"letterSpacing": "0.01em",
|
||||
"chipRadius": 10,
|
||||
"blur": 14,
|
||||
"riseY": 18,
|
||||
"dropY": 26,
|
||||
"yield": { "dim": 0.5, "pre": 0.05, "post": 0.31 }
|
||||
},
|
||||
"hero": {
|
||||
"setpiece": "glassslab",
|
||||
"layer": "bg",
|
||||
"x": 900,
|
||||
"y": 390,
|
||||
"fontPx": 90,
|
||||
"maxHold": 1.7,
|
||||
"params": {
|
||||
"shards": 7,
|
||||
"tracking": 0.012,
|
||||
"weight": 800,
|
||||
"padX": 155,
|
||||
"heightRatio": 2.18,
|
||||
"radius": 12,
|
||||
"blur": 14,
|
||||
"tilt": 1.5,
|
||||
"hold": 1.45,
|
||||
"seed": 20260612
|
||||
}
|
||||
},
|
||||
"fx": { "sparkles": 2, "seed": 20260612 },
|
||||
"plate": { "dim": 0.16, "pushIn": 0.012, "grain": 5 },
|
||||
"linkages": []
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"name": "magnet",
|
||||
"voice": "refrigerator poetry — every word is a cream magnet chip that flies in, decelerates and SNAPS onto a translucent steel band with a crooked landing and a neighbor-shoving clack; the apex word assembles letter by letter as individual magnets flying from the frame edges, then straightens as one rigid unit and holds with a slow magnetic breathe. Tactile, handmade, domestic-warm.",
|
||||
"when": "warm/playful explainers, personal stories, kitchen-table or behind-the-scenes talk, anything that wants a tactile handmade feel without going loud. Needs a clip with a clear sky/upper band so the letter-magnets can land behind the subject. Friendly register.",
|
||||
"register": "warm",
|
||||
"fonts": { "body": "Inter", "hero": "Anton", "tag": "Inter" },
|
||||
"palette": {
|
||||
"body": "#23252b",
|
||||
"accent": "#cf4434",
|
||||
"accentLo": "#b1372a",
|
||||
"accentEdge": "rgba(74,18,12,0.65)",
|
||||
"accentInk": "#fdf3ea",
|
||||
"chip": "#fbfaf6",
|
||||
"chipLo": "#efece3",
|
||||
"chipEdge": "rgba(104,110,122,0.55)",
|
||||
"heroInk": "#20232a",
|
||||
"pinCool": "#8cc0e6",
|
||||
"pinCoolLo": "#4d7fa8",
|
||||
"pinWarm": "#f0a06c",
|
||||
"pinWarmLo": "#b65a2e",
|
||||
"scrimHi": "rgba(9,14,24,0.58)",
|
||||
"scrimMid": "rgba(9,14,24,0.48)",
|
||||
"scrimLo": "rgba(9,14,24,0.20)",
|
||||
"haloHi": "rgba(5,9,16,0.50)",
|
||||
"haloLo": "rgba(5,9,16,0.26)"
|
||||
},
|
||||
"body": {
|
||||
"paradigm": "magnetrail",
|
||||
"layer": "fg",
|
||||
"fontPx": 36,
|
||||
"weight": 600,
|
||||
"rows": [574, 640],
|
||||
"band": { "w": 760, "h": 148, "cx": 640, "top": 560 },
|
||||
"redLastWord": true,
|
||||
"seed": 4423,
|
||||
"yield": { "dim": 0.55, "pre": 0.08, "post": 0.4 }
|
||||
},
|
||||
"hero": {
|
||||
"setpiece": "magnetapex",
|
||||
"layer": "bg",
|
||||
"x": 768,
|
||||
"y": 142,
|
||||
"fontPx": 100,
|
||||
"params": {
|
||||
"seed": 230611,
|
||||
"clackStagger": 0.026,
|
||||
"flight": 0.23,
|
||||
"chipWEm": 0.78,
|
||||
"chipHEm": 1.24,
|
||||
"slotStepEm": 0.82,
|
||||
"hold": 1.8
|
||||
}
|
||||
},
|
||||
"plate": {
|
||||
"dim": 0.12,
|
||||
"punch": 0.045,
|
||||
"punchOffset": 0.235,
|
||||
"punchDecay": 11,
|
||||
"shakeAmpX": 3,
|
||||
"shakeAmpY": 2,
|
||||
"shakeHz": 11,
|
||||
"shakeDecay": 8,
|
||||
"shakeWindow": 0.4,
|
||||
"grain": 5
|
||||
},
|
||||
"linkages": []
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"name": "mirror",
|
||||
"voice": "the still-water surface — a black-mirror floor where every word RISES out of its own reflection and the reading face never moves; only the reflection ripples. The climax is a kaleidoscope merge: four rotated ghost copies of the hero word converge and SNAP into one sharp Bodoni word over a grand reflection, then sink back into the glass. Restraint as spectacle.",
|
||||
"when": "reflective, contemplative, premium clips — science, design, photography, quiet product reveals, anything that wants elegance and stillness rather than impact. Calm register. Needs a scene with a darker lower band (the floor reflection lives there).",
|
||||
"register": "calm",
|
||||
"fonts": { "body": "Bodoni Moda", "hero": "Bodoni Moda", "tag": "Bodoni Moda" },
|
||||
"palette": {
|
||||
"body": "#f0f4f9",
|
||||
"mirror": "#dce8f4",
|
||||
"glow": "#86b4e4",
|
||||
"ghost": "#bdd7f1",
|
||||
"em": "#f3f7fc",
|
||||
"halo": "120,160,210",
|
||||
"silver": "190,210,235",
|
||||
"silverHi": "228,240,252",
|
||||
"streak": "225,238,255"
|
||||
},
|
||||
"body": {
|
||||
"paradigm": "mirrorrail",
|
||||
"layer": "fg",
|
||||
"fontPx": 46,
|
||||
"bottomPx": 89,
|
||||
"weight": 400,
|
||||
"letterSpacing": "0.02em",
|
||||
"mirrorOpacity": 0.25,
|
||||
"railWidth": 780,
|
||||
"glintAt": 2.32,
|
||||
"seed": 3033,
|
||||
"yield": { "dim": 0.5, "pre": 0.2, "post": 0.9 }
|
||||
},
|
||||
"hero": {
|
||||
"setpiece": "mirrormerge",
|
||||
"layer": "bg",
|
||||
"fontPx": 110,
|
||||
"maxHold": 2.2,
|
||||
"params": {
|
||||
"weight": 700,
|
||||
"tracking": 0.03,
|
||||
"ghostRot": [-24, -8, 8, 24],
|
||||
"ghostOp": [0.13, 0.21, 0.21, 0.13],
|
||||
"mergeDelay": 0.45,
|
||||
"hold": 1.69
|
||||
}
|
||||
},
|
||||
"plate": { "dim": 0.18, "pushIn": 0.012, "grain": 4 },
|
||||
"linkages": []
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "redline",
|
||||
"voice": "night-circuit racing telemetry — captions move at speed. Body words DRIFT IN along a low track line with velocity streaks and two trailing echo copies that burn off; emphasis words gear-shift snap and sweep a tachometer arc into the redline. The apex arrives like a car at speed: a speck at a vanishing point that accelerates into a full italic slab across the frame, locks with a contact squash, paint cools from white-hot to bone, a heat-ripple trail shimmers behind it, then it whips off frame with a smear.",
|
||||
"when": "high-energy, motion-forward, performance/automotive/sports/tech-velocity clips — anything that should feel fast and kinetic. Loud register. Needs a scene that tolerates a charge-dim (any luma) and an apex word that can cross the subject silhouette.",
|
||||
"register": "loud",
|
||||
"fonts": { "body": "Teko", "hero": "Teko", "tag": "Teko" },
|
||||
"palette": { "body": "#f4f2ee", "accent": "#ff6a2b", "hot": "#ff6a2b", "em": "#ff6a2b" },
|
||||
"body": {
|
||||
"paradigm": "racingrail",
|
||||
"layer": "fg",
|
||||
"fontPx": 50,
|
||||
"bottomPx": 71,
|
||||
"letterSpacing": "0.04em",
|
||||
"weight": 600,
|
||||
"textTransform": "uppercase",
|
||||
"emScale": 1.2,
|
||||
"seed": 20260611,
|
||||
"yield": { "dim": 0.45, "pre": 0.2, "post": 0.9 }
|
||||
},
|
||||
"hero": {
|
||||
"setpiece": "doppler",
|
||||
"layer": "bg",
|
||||
"fontPx": 150,
|
||||
"params": {
|
||||
"tracking": 0.02,
|
||||
"weight": 600,
|
||||
"lock": 0.22,
|
||||
"runup": 120,
|
||||
"hot": "#ff6a2b",
|
||||
"warm": "#ffd9c4",
|
||||
"bone": "#f6f3ee"
|
||||
}
|
||||
},
|
||||
"fx": { "dopplerboom": 14, "seed": 20260611 },
|
||||
"plate": {
|
||||
"dim": 0.38,
|
||||
"punch": 0.045,
|
||||
"punchOffset": 0.22,
|
||||
"punchDecay": 9,
|
||||
"shakeAmpX": 6,
|
||||
"shakeAmpY": 4,
|
||||
"shakeHz": 13,
|
||||
"shakeDecay": 8,
|
||||
"shakeWindow": 0.5,
|
||||
"grain": 6
|
||||
},
|
||||
"linkages": []
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"name": "seance",
|
||||
"voice": "a seance — the room is WRONG. The whole clip sits under a desaturated teal grade, a soft dim and a breathing vignette; bone words SEEP in on a centered two-row lower-third (a desat mist resolves into Shippori Mincho, blur 8→0, with a ±1-frame arrival jitter, the odd letter flickering, every shadow cast UPWARD). At the apex the lights dip hard and the spoken word MANIFESTS behind the subject in Creepster: it crushes in, squashes, settles, then shudders with a red/cyan split while a cold underlight breathes from below. A cold flash, two mist rings and an ash exhale ride the contact; the word finally exhales upward and is gone.",
|
||||
"when": "the uncanny, the paranormal, true-crime and horror cold-opens, mystery and the supernatural, anything that should feel haunted or wrong. Loud-but-eerie register. Wants a clip that tolerates a dim teal grade and a behind-the-subject manifestation (20-50% occlusion).",
|
||||
"register": "loud",
|
||||
"fonts": { "body": "Shippori Mincho", "hero": "Creepster", "tag": "Shippori Mincho" },
|
||||
"palette": {
|
||||
"body": "#e8e2d4",
|
||||
"accent": "#9fb0aa",
|
||||
"em": "#e8e2d4",
|
||||
"mist": "#9fb0aa",
|
||||
"ghost": "#d4dcd2",
|
||||
"haunt": "150,28,28",
|
||||
"cool": "96,170,196",
|
||||
"grade": "rgba(28,46,46,0.30)",
|
||||
"under": "rgba(120,150,140,0.55)",
|
||||
"heroInk": "#e8e2d4"
|
||||
},
|
||||
"body": {
|
||||
"paradigm": "seancerail",
|
||||
"layer": "fg",
|
||||
"fontPx": 44,
|
||||
"bottomPx": 66,
|
||||
"rowGap": 58,
|
||||
"weight": 600,
|
||||
"hairline": true,
|
||||
"hairW": 560,
|
||||
"motes": 12,
|
||||
"seed": 1212,
|
||||
"yield": { "dim": 0.55, "pre": 0.2, "post": 0.9 }
|
||||
},
|
||||
"hero": {
|
||||
"setpiece": "possess",
|
||||
"match": "remarkable",
|
||||
"layer": "bg",
|
||||
"x": 590,
|
||||
"y": 285,
|
||||
"fontPx": 140,
|
||||
"maxHold": 1.5,
|
||||
"out": 5.21,
|
||||
"params": {
|
||||
"crush": 0.065,
|
||||
"tracking": 0.025,
|
||||
"dim": 0.22,
|
||||
"dimSnap": 0.55,
|
||||
"hold": 0.37,
|
||||
"seed": 1212
|
||||
}
|
||||
},
|
||||
"fx": { "seance": 12, "seed": 1212 },
|
||||
"plate": {
|
||||
"punch": 0.04,
|
||||
"punchOffset": 0.07,
|
||||
"punchDecay": 10,
|
||||
"shakeAmpX": 4,
|
||||
"shakeAmpY": 3,
|
||||
"shakeHz": 11,
|
||||
"shakeDecay": 8,
|
||||
"shakeWindow": 0.45,
|
||||
"grain": 6
|
||||
},
|
||||
"linkages": []
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"name": "xray",
|
||||
"voice": "an imaging scanner reads the speech. A hot vertical scan beam sweeps a dark radiograph band and WIPES each body word in exactly as it crosses — instant just-traced flash, ice-blue phosphor bones. At the apex the beam freezes and LOCKS the hero word behind the subject: a bracket target-frame snaps shut, an x-ray exposure pulse fires, the word flips to a glowing negative, a loupe ring passes over each letter, and a MATCH readout types. Then the beam returns flipped and scans the freeze-frame away R→L while the later lines reprint in its wake.",
|
||||
"when": "imaging / sensing / AI / vision / measurement / forensics content, anything about detection, recovery, resolution, or seeing the unseen. Sleek-clinical register. Needs a darker mid-band tolerance for the radiograph band; the apex dim + exposure flash make their own contrast on bright skies.",
|
||||
"register": "sleek",
|
||||
"fonts": { "body": "VT323", "hero": "Orbitron", "tag": "Orbitron" },
|
||||
"palette": {
|
||||
"body": "#cfe8ff",
|
||||
"accent": "#9fd8ff",
|
||||
"flash": "#eaf7ff",
|
||||
"em": "#eaf7ff",
|
||||
"hud": "#5e8fa3",
|
||||
"dim": "#03101e",
|
||||
"heroWord": "#f2faff",
|
||||
"negFill": "#071521",
|
||||
"rim": "#9fd8ff"
|
||||
},
|
||||
"body": {
|
||||
"paradigm": "beamrail",
|
||||
"layer": "fg",
|
||||
"fontPx": 42,
|
||||
"bandH": 180,
|
||||
"inset": 18,
|
||||
"lineDy": 50,
|
||||
"row0": 16,
|
||||
"gapEm": 0.5,
|
||||
"header": "RADIOGRAPH // T-24",
|
||||
"tagText": "[DENSE]",
|
||||
"maxTags": 3,
|
||||
"yield": { "dim": 0.55, "pre": 0.06, "post": 0.9 }
|
||||
},
|
||||
"hero": {
|
||||
"setpiece": "scanlock",
|
||||
"layer": "bg",
|
||||
"fontPx": 116,
|
||||
"params": {
|
||||
"charEm": 0.819,
|
||||
"spaceEm": 0.483,
|
||||
"weight": 700,
|
||||
"readout": "MATCH 99.2%",
|
||||
"clearGap": 0.215
|
||||
}
|
||||
},
|
||||
"plate": { "scrim": 0.3, "dim": 0.12, "grain": 5 },
|
||||
"linkages": []
|
||||
}
|
||||
Reference in New Issue
Block a user