Subchapter 14.55
dna/README.mdMarkdown12 KBView on GitHub
A DNA is a complete, art-directed visual language: typeface, palette logic, motion grammar, and hero orchestration. It parameterizes per scene instead of shipping a fixed look: the accent color is sampled from THIS scene, the contact shadow falls along THIS scene’s light, embed text blur matches THIS scene’s depth-of-field, and the hero’s entrance amplitude follows how hard the word was actually spoken (RMS).
Also bundled
GitignoreThis replaces the template grab-bag. Six deep languages × scene adaptation beats 54 shallow presets — every render is already fitted to its footage.
Every classic DNA’s home is Cinematic (column) — that is where all ten were
built and validated. (Standard/rail mode was retired 2026-06-12; the verbatim-rail
need is served by the anchor theme. The old rail combos are archived outside
this repo and are not distributed with the skill.)
| DNA | Register | Scene fit | Voice |
|---|---|---|---|
| cream | premium-warm | dark / mid warm scenes (band luma < 150) | Inter, warm cream, screen blend, glowing emergence hero. The poetic default. |
| ink | premium | bright scenes (band luma > 150) | Inter, near-black, multiply blend — type reads as printed on the wall. Fixes the bright-scene hole. |
| editorial | editorial-luxe | introspective / fashion / poetic, mid-dark | Bodoni Moda, bone, lowercase italic hero — magazine elegance over shout. |
| keynote | tech-premium | product / launch / founder updates | Inter 800, opaque white, line-wipe reveals, hero wipes UP. Stillness = confidence. |
| documentary | formal | interviews, serious subject matter | Inter, bone, burn-in reveals, no hero. Gravitas IS the style. |
| loud | loud | hype / sport / music / social | Anton, scene-sampled accent hero, single-unit slam + caption-layer ripple; body announces in front (bodyLayer: "fg" — k-pop depth, deliberate). |
| neon | loud-neon | neon-noir / nightlife / tech-noir (dark scenes) | Orbitron + electric cyan; words flicker-ignite like tubes; the hero powers ON with a strobe and hums (glow 0.5). |
| glitch | loud-neon | digital / hacker / AI / dystopia | Space Grotesk; RGB-split echo layers converge as each beat lands; 0.10–0.12s machine percussion; landing bumps co-visible captions 2px. |
| chrome | loud-luxe | Y2K / fashion-tech / music | Audiowide cast in a liquid-metal gradient (background-clip:text on the word spans); one sheen sweep crosses the hero during the hold. |
| velocity | loud-sport | sport / automotive / fitness | Teko italic; every word arrives along its motion vector (streak + skew settling upright); the hero passes through with blurred speed-trail echoes and looms while held. |
entrance: emergence | settle | slam | rise | wipe-up | flicker-on | streak ·
glow (0–0.5) · echoes: [{dx,dy,color,opacity,blur}] (converge-on-land duplicates) ·
sheen: true (gradient sweep — pair with wordCss background-clip) · wordCss
(per-word treatment; required for background-clip:text, which can’t clip through
composited children) · ripple (px — landing bump, captions only) · loom / breathe
(hold-life) · letterBlur · bodyLayer (top-level: default layer for narration lines).
safe-zones.json → heroAnchor.bandLuma + palette.temperature.cinematic.json → "dna": "<name>" (drop the template field).var(--accent) is available in per-group CSS — it resolves to the scene-sampled accent.Pick the payoff, not the topic: the words you would quote when paraphrasing the beat. “The stars were only limited by the pixel size” — the payoff is pixel size (the surprising claim), not “stars” (the subject). Test: would the word alone, big on screen, make the listener nod? A topic word makes them wait.
match: "pixel size" / "skin food"): a peak is a semantic
unit, not necessarily one token. 2–4 words max — beyond that it’s a sentence, not a
peak.sizeRange[1] × 1.25 (≤46cqh; formal register ×1.0) — a std apex
bursts a rail, not a body composition. Cinematic cap = sizeRange[1].max(3× rail, 0.55× apex-final),
width-capped. A peak that reads as a label is a bug.0.26× hero (clamped
0.05–0.085·h), recomputed after any width-fit raise. Don’t hand-tune context
sizes — size the hero; the context follows like a poster system.A hero line takes "placement": "subject" | "column":
Applying ONE composition to every peak is monoculture — the same failure the motion review caught. Pick per beat: a 15s explainer might run column peaks throughout and save the subject lockup for the single apex. (A third pattern — the editorial split, bg context upper + fg hero lower-third — lives in references/composition-craft.md and is the next placement candidate.)
A DNA’s animation is not a parameter tweak on a shared fade — it’s a distinct physics:
| Layer | What it governs | Where it lives |
|---|---|---|
| word entrance | how each word materializes on its beat ({y,x,blur,scale,rot,dur,ease} or burn) | motion.soft/present/impact |
| line exit | direction + speed of leaving, optional top-to-bottom cascade | motion.exit ({dur,y,x,scale,ease,stagger}) |
| hold-life | what text does while on screen — stillness is a deliberate choice | hero.breathe / hero.loom (0 = print-still) |
| hero orchestration | the three-act entrance signature (emergence / settle / slam / rise / wipe-up) + glow / letterBlur / ripple | hero.* |
| timing physics | the duration & easing register everything obeys (percussive 0.15s ↔ atmospheric 0.6s) | implied by the values above — keep one family per DNA |
Shipped signatures: cream = light condenses (blur-settle, drift-up exits) · ink = letterpress (scale-press, no float, dead-still) · editorial = the pen glides (x-glide with the italic, cascade-out page turns) · keynote = surgical reveal (burn words + line wipe + hero wipe-up, exits never move) · documentary = burn and hold (motion’s absence IS the language) · loud = percussion (back-eased punches, alternating tilt, hero ripple that bumps every caption — never the footage).
Rules inherited from hyperframes motion-principles: exits faster than entrances; vary
ease families BETWEEN DNAs (not within one); .out enters, .in leaves; never two
transform tweens on one element in the same window (wipe-up is clip-path so the
afterglow scale channel stays free; loom subsumes breathe).
Copy an existing dna/<name>.json, change the voice, keep the schema. The engine
(modes/cinematic/engine.html) and both compilers consume it as-is. A DNA earns its
place by being a distinct voice with a reason to exist — not a recolor.