# Director → catalog block map (reuse-first) **Search the live catalog before you use this table, and again before any hand-authored effect.** Run `npx hyperframes catalog --query "" --json` — once per named look or effect the user asks for ("CRT scanlines", "glitch", "film grain", "shimmer sweep"), including effects asked for mid-build. **The search needs nothing installed**: it ranks the whole hosted registry (~400 items) from any directory, with no project, no prior `add`, and no account. The table below is a hand-maintained snapshot of part of that registry and it under-covers by design — treat a miss here as unproven, and only the search's own empty result as evidence the catalog lacks the move. When it does, say so with `npx hyperframes feedback --search-miss "" --wanted "" --tier ` before hand-authoring. Full flags and tiers: `/hyperframes-registry` → § Discovery. The Builder's **default is to compose existing HF catalog blocks, not hand-author.** `npx hyperframes add ` drops a block's source into `compositions/`; the Builder then **customizes in place** — most blocks bake their content/data into their own script (only a few expose CSS-var `params`), so reuse = **add + edit**, not pure variable injection. Hand-author only (a) gaps no block covers and (b) the asset-fusion affordance binding. After classifying intent → category, the **Director names the block(s) + what to customize** in the shot-plan IR: ```jsonc "content": { "block": "data-chart", "customize": { "data": [...], "headline": "…", "palette": ["…"] } } ``` ## Category → block(s) | Category | Borrow from catalog | Customize | Gaps → hand-author | | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------- | | **kinetic-typo** | one of **17 `caption-*`** (kinetic-slam, editorial-emphasis, clip-wipe, gradient-fill, neon-glow, glitch-rgb, matrix-decode, particle-burst, weight-shift, pill-karaoke, highlight, blend-difference…) | words; `emphasis_words` → `word--emphasis`; palette; font; timing | a motif none of the 17 cover | | **charts** | `data-chart` (bar+line, staggered, value labels), `bar-chart-race` (a race) | edit the data array + headline/subtitle; `--bg`/`--text` | pie/donut, ring/% | | **stat** | `apple-money-count` (finance: $ counter + burst + SFX) **or** hand-author a generic %/number + ring per `categories/stat/module.md` (there is no `stat-motion` block) | target, prefix/suffix, label, palette | — | | maps/geo | **vector lane**: `us-map` (+bubble/hex/flow), `world-map`, `spain-map` + **hand-author** `geo-highlight`/`geo-flow`/`flag-borders`/`pin-rollout` (NOT in registry — build per `categories/maps/module.md`). **basemap lane** (real satellite/dark / zoom-to-place): bake via `categories/maps/bake-basemap.mjs` → `