feat(skill): hyperframes core — remove prescriptive tables, bundle text-effects#991
feat(skill): hyperframes core — remove prescriptive tables, bundle text-effects#991ukimsanov wants to merge 6 commits into
Conversation
|
Warning This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Three concrete bugs found while auditing PR #991: 1. html-in-canvas-patterns.md (#1 in catalog, 3D Rotation with Bloom): The code example used `new THREE.EffectComposer(renderer)` UMD-style namespace access while the ESM imports right below pull them in as bare named imports. Three.js r150+ removed the UMD `examples/js/` globals, so as written the example throws `TypeError: THREE.EffectComposer is not a constructor`. Switched to the bare names matching the imports. THREE.Vector2 stays as-is — Vector2 is on the THREE namespace. 2. techniques.md (#5, Lottie Animation): The CDN path `@lottiefiles/dotlottie-web/dist/dotlottie-player.js` returns 404. `@lottiefiles/dotlottie-web` is the JavaScript SDK, not a web component — its `main` is `dist/index.cjs`. The web-component package is `@lottiefiles/dotlottie-wc` and the custom element is `<dotlottie-wc>`, not `<dotlottie-player>`. Updated both. 3. techniques.md (5 occurrences across Lottie / lottie-web / Video / @font-face examples): asset paths used the `../capture/` pattern that PR #989's `invalid_capture_path` lint rule emits an error for. Replaced all with root-relative `capture/...`. PRs #989 and #991 are no longer self-contradictory.
Three concrete bugs found while auditing PR #991: 1. html-in-canvas-patterns.md (#1 in catalog, 3D Rotation with Bloom): The code example used `new THREE.EffectComposer(renderer)` UMD-style namespace access while the ESM imports right below pull them in as bare named imports. Three.js r150+ removed the UMD `examples/js/` globals, so as written the example throws `TypeError: THREE.EffectComposer is not a constructor`. Switched to the bare names matching the imports. THREE.Vector2 stays as-is — Vector2 is on the THREE namespace. 2. techniques.md (#5, Lottie Animation): The CDN path `@lottiefiles/dotlottie-web/dist/dotlottie-player.js` returns 404. `@lottiefiles/dotlottie-web` is the JavaScript SDK, not a web component — its `main` is `dist/index.cjs`. The web-component package is `@lottiefiles/dotlottie-wc` and the custom element is `<dotlottie-wc>`, not `<dotlottie-player>`. Updated both. 3. techniques.md (5 occurrences across Lottie / lottie-web / Video / @font-face examples): asset paths used the `../capture/` pattern that PR #989's `invalid_capture_path` lint rule emits an error for. Replaced all with root-relative `capture/...`. PRs #989 and #991 are no longer self-contradictory.
Per review feedback, these 5 files should not change in this stack: - visual-styles.md — keep main's existing version - house-style.md — keep main's light/dark prescription - references/typography.md — keep main's tone + Banned/Guardrails framing - references/video-composition.md — keep main's density guidance - CLAUDE.md — drop the local-CLI Capture/Snapshot section added in this branch; the local-CLI dev-instruction block for adding CLI commands stays (was already on main, unrelated to skill prose). Net: removes ~545 lines of churn from PR #991's diff.
b5cfdc0 to
7509af2
Compare
Three concrete bugs found while auditing PR #991: 1. html-in-canvas-patterns.md (#1 in catalog, 3D Rotation with Bloom): The code example used `new THREE.EffectComposer(renderer)` UMD-style namespace access while the ESM imports right below pull them in as bare named imports. Three.js r150+ removed the UMD `examples/js/` globals, so as written the example throws `TypeError: THREE.EffectComposer is not a constructor`. Switched to the bare names matching the imports. THREE.Vector2 stays as-is — Vector2 is on the THREE namespace. 2. techniques.md (#5, Lottie Animation): The CDN path `@lottiefiles/dotlottie-web/dist/dotlottie-player.js` returns 404. `@lottiefiles/dotlottie-web` is the JavaScript SDK, not a web component — its `main` is `dist/index.cjs`. The web-component package is `@lottiefiles/dotlottie-wc` and the custom element is `<dotlottie-wc>`, not `<dotlottie-player>`. Updated both. 3. techniques.md (5 occurrences across Lottie / lottie-web / Video / @font-face examples): asset paths used the `../capture/` pattern that PR #989's `invalid_capture_path` lint rule emits an error for. Replaced all with root-relative `capture/...`. PRs #989 and #991 are no longer self-contradictory.
Per review feedback, these 5 files should not change in this stack: - visual-styles.md — keep main's existing version - house-style.md — keep main's light/dark prescription - references/typography.md — keep main's tone + Banned/Guardrails framing - references/video-composition.md — keep main's density guidance - CLAUDE.md — drop the local-CLI Capture/Snapshot section added in this branch; the local-CLI dev-instruction block for adding CLI commands stays (was already on main, unrelated to skill prose). Net: removes ~545 lines of churn from PR #991's diff.
7509af2 to
d8d8cef
Compare
Three concrete bugs found while auditing PR #991: 1. html-in-canvas-patterns.md (#1 in catalog, 3D Rotation with Bloom): The code example used `new THREE.EffectComposer(renderer)` UMD-style namespace access while the ESM imports right below pull them in as bare named imports. Three.js r150+ removed the UMD `examples/js/` globals, so as written the example throws `TypeError: THREE.EffectComposer is not a constructor`. Switched to the bare names matching the imports. THREE.Vector2 stays as-is — Vector2 is on the THREE namespace. 2. techniques.md (#5, Lottie Animation): The CDN path `@lottiefiles/dotlottie-web/dist/dotlottie-player.js` returns 404. `@lottiefiles/dotlottie-web` is the JavaScript SDK, not a web component — its `main` is `dist/index.cjs`. The web-component package is `@lottiefiles/dotlottie-wc` and the custom element is `<dotlottie-wc>`, not `<dotlottie-player>`. Updated both. 3. techniques.md (5 occurrences across Lottie / lottie-web / Video / @font-face examples): asset paths used the `../capture/` pattern that PR #989's `invalid_capture_path` lint rule emits an error for. Replaced all with root-relative `capture/...`. PRs #989 and #991 are no longer self-contradictory.
Per review feedback, these 5 files should not change in this stack: - visual-styles.md — keep main's existing version - house-style.md — keep main's light/dark prescription - references/typography.md — keep main's tone + Banned/Guardrails framing - references/video-composition.md — keep main's density guidance - CLAUDE.md — drop the local-CLI Capture/Snapshot section added in this branch; the local-CLI dev-instruction block for adding CLI commands stays (was already on main, unrelated to skill prose). Net: removes ~545 lines of churn from PR #991's diff.
d8d8cef to
825b108
Compare
Three concrete bugs found while auditing PR #991: 1. html-in-canvas-patterns.md (#1 in catalog, 3D Rotation with Bloom): The code example used `new THREE.EffectComposer(renderer)` UMD-style namespace access while the ESM imports right below pull them in as bare named imports. Three.js r150+ removed the UMD `examples/js/` globals, so as written the example throws `TypeError: THREE.EffectComposer is not a constructor`. Switched to the bare names matching the imports. THREE.Vector2 stays as-is — Vector2 is on the THREE namespace. 2. techniques.md (#5, Lottie Animation): The CDN path `@lottiefiles/dotlottie-web/dist/dotlottie-player.js` returns 404. `@lottiefiles/dotlottie-web` is the JavaScript SDK, not a web component — its `main` is `dist/index.cjs`. The web-component package is `@lottiefiles/dotlottie-wc` and the custom element is `<dotlottie-wc>`, not `<dotlottie-player>`. Updated both. 3. techniques.md (5 occurrences across Lottie / lottie-web / Video / @font-face examples): asset paths used the `../capture/` pattern that PR #989's `invalid_capture_path` lint rule emits an error for. Replaced all with root-relative `capture/...`. PRs #989 and #991 are no longer self-contradictory.
Per review feedback, these 5 files should not change in this stack: - visual-styles.md — keep main's existing version - house-style.md — keep main's light/dark prescription - references/typography.md — keep main's tone + Banned/Guardrails framing - references/video-composition.md — keep main's density guidance - CLAUDE.md — drop the local-CLI Capture/Snapshot section added in this branch; the local-CLI dev-instruction block for adding CLI commands stays (was already on main, unrelated to skill prose). Net: removes ~545 lines of churn from PR #991's diff.
825b108 to
ac7b5d4
Compare
miguel-heygen
left a comment
There was a problem hiding this comment.
Good restructure of the core hyperframes skill. Removing prescriptive lookup tables (visual styles as YAML token blocks, energy tables, technique mapping) in favor of deliberation-oriented prose is the right direction — copy-pasting recipes was producing monoculture output.
24 text-effects bundle (from pixel-point/animate-text) is a useful addition — gives storyboards a fixed vocabulary for typography animations.
Clean split from the w2h pipeline changes — this stands on its own as a core skill improvement.
jrusso1020
left a comment
There was a problem hiding this comment.
Reviewed at ac7b5d48. Magi covered the prescriptive-lookup-table removal direction. The skill rewrite IS the right call — eval evidence supports it. One real blocker to address before merge: the text-effects bundle's upstream license.
⚠️ Blocker — text-effects upstream attribution + license
The PR vendors 24 text-animation specs (assets/text-effects/effects/*.json + assets/text-effects/specs/*.json). PR body says: "Sourced from pixel-point/animate-text; copied into the repo so users don't need a separate install."
Verified via the GitHub API:
GET /repos/pixel-point/animate-text → license: null
GET /repos/pixel-point/animate-text/license → 404
The upstream has no license. With no explicit license, US copyright law defaults to "all rights reserved" by the upstream author — copying the 24 specs into this repo is not legally clear, and we cannot redistribute them as part of Apache 2.0-licensed code.
Verified the PR's attribution surface:
assets/text-effects/CREDITS.md→ 404 (doesn't exist)references/text-effects.md→ no mention ofpixel-point,animate-text,source,attribution, orcredit(grepped)
The PR body's "Sourced from pixel-point/animate-text" line doesn't make it into any file that ships with the skill.
Three paths forward (pick one before merge):
- Contact the upstream and ask for an explicit license (MIT / Apache 2.0 / similar). Add their LICENSE text + a
CREDITS.mdinassets/text-effects/. This is the cleanest path if upstream is responsive. - Rewrite the 24 specs from scratch as independent implementations, then no attribution is needed (only the concept is borrowed). Higher effort.
- Drop the text-effects bundle from this PR and ship the prescriptive-table removal + 24-effect catalog reference (names + behavior descriptions only, no JSON specs) separately once licensing is resolved.
Same pattern as hf#971's MIT-attribution gap from zarazhangrui/beautiful-html-templates. Easier to address once than to argue with a takedown notice later.
Strong points
- Prescriptive lookup tables removed —
visual-styles.mdrewrite (8 generic styles → 8 named design traditions with prose),motion-principles.md"Common defaults that produce monoculture" framing,beat-direction.mdrhythm question-driven instead of table-driven. These are the changes the v3/v4 evals identified as the lever for breaking monoculture output. Direction is right. - Density contradiction fix in
video-composition.md— removing the 8-10-elements rule was correct; sparse beats are intentional. - DESIGN.md casing consistency in
prompt-expansion.md— small but matters for cross-skill consistency. html-in-canvas-patterns.mdwith Three.js 0.181.2 ESM + mulberry32 PRNG — deterministic shatter is exactly what the renderer needs. Same pattern as the existing hyperframes determinism contract.- Repo housekeeping in
.gitignore— catches the per-brand video project dirs at repo root. Worth a quick cross-check that none of the captured prod brand prefixes (apple-*,mercury-*, etc.) collide with legitimate registry or skill content; the patterns I see (huly-*/,raycast-*/,*-demo-*/) look like agent-leftover patterns, not real-project naming.
Smaller
CLAUDE.mdupdates documenting local CLI usage are the right move for the contributor-vs-published-CLI lag. Worth a note that this is temporary and remove once the capture-pipeline improvements (PRs #987-988 in the stack) ship in a publishedhyperframes@x.y.z.- 24 text-effect specs — the per-effect JSON shape is solid; consistent schema across the bundle. If upstream licensing resolves, this is a real win for cross-composition typography consistency (storyboard says "kinetic-center-build", build step implements deterministically). The cognitive-load benefit for users is real.
Verdict
Posting as COMMENT (not APPROVE) specifically because of the text-effects licensing gap — this needs to land before merge. Everything else in the PR is solid and stays approve-on-merit. Once one of the three resolution paths lands, this is ship-ready.
— Rames Jusso
Three concrete bugs found while auditing PR #991: 1. html-in-canvas-patterns.md (#1 in catalog, 3D Rotation with Bloom): The code example used `new THREE.EffectComposer(renderer)` UMD-style namespace access while the ESM imports right below pull them in as bare named imports. Three.js r150+ removed the UMD `examples/js/` globals, so as written the example throws `TypeError: THREE.EffectComposer is not a constructor`. Switched to the bare names matching the imports. THREE.Vector2 stays as-is — Vector2 is on the THREE namespace. 2. techniques.md (#5, Lottie Animation): The CDN path `@lottiefiles/dotlottie-web/dist/dotlottie-player.js` returns 404. `@lottiefiles/dotlottie-web` is the JavaScript SDK, not a web component — its `main` is `dist/index.cjs`. The web-component package is `@lottiefiles/dotlottie-wc` and the custom element is `<dotlottie-wc>`, not `<dotlottie-player>`. Updated both. 3. techniques.md (5 occurrences across Lottie / lottie-web / Video / @font-face examples): asset paths used the `../capture/` pattern that PR #989's `invalid_capture_path` lint rule emits an error for. Replaced all with root-relative `capture/...`. PRs #989 and #991 are no longer self-contradictory.
Per review feedback, these 5 files should not change in this stack: - visual-styles.md — keep main's existing version - house-style.md — keep main's light/dark prescription - references/typography.md — keep main's tone + Banned/Guardrails framing - references/video-composition.md — keep main's density guidance - CLAUDE.md — drop the local-CLI Capture/Snapshot section added in this branch; the local-CLI dev-instruction block for adding CLI commands stays (was already on main, unrelated to skill prose). Net: removes ~545 lines of churn from PR #991's diff.
ac7b5d4 to
ab529cb
Compare
…xt-effects
Rewrites the standalone `hyperframes` skill (the main authoring
skill used by every hyperframes user, not just the
website-to-hyperframes pipeline) to remove prescriptive lookup
tables that drove monoculture output, restore tone, and bundle
24 named text animation effects directly into the skill so
agents don't need a separate install.
This is a +9951/-567 change touching 61 files in `skills/hyperframes/`.
It deserves its own review separate from the capture pipeline and
the website-to-hyperframes pipeline because it affects every
hyperframes user — not just the website-to-video flow.
**Prescriptive tables removed / restructured**
External rater feedback across two rounds identified six lookup
tables agents were pasting wholesale as recipes:
- `visual-styles.md` YAML blocks — completely replaced. Old version
had 8 styles with full YAML token blocks (colors / typography /
motion / transition names). Agents copy-pasted. New version
renames to actual design traditions (Swiss / Late-Modernist
Editorial / Punk / Maximalist / Computational / Humanist /
Vernacular / Cinematic) and replaces YAML with prose: "what it
teaches / where it resonates / pitfalls when borrowing." No
lookup table.
- `motion-principles.md` — complete rewrite. Old version opened
every section with "You know these rules but violate them. Stop."
/ "You will try to use 14px. Don't." New version: "Common defaults
that produce monoculture" framing. All load-bearing GSAP rules
preserved verbatim (those are correct and critical).
- `beat-direction.md` rhythm table — removed. Replaced with
questions that derive rhythm from brand + storyboard. Verb table
regrouped by physical character (Impact / Directional / Reveals /
Organic / Mechanical) without energy labels.
- `transitions.md` Energy → Transition table + Mood → Type table —
removed named transitions, replaced with motion-quality
descriptions (Soft/organic, Directional/purposeful,
Percussive/instant). Mixing documented: CSS crossfade + shader
in the same HyperShader composition (verified working).
- `dynamic-techniques.md` energy table — restructured with
explanatory principles (highlight amplitude, exit style, cycle
variation) before showing the table as calibration reference.
- `techniques.md` "When to Use What" table — deleted. Replaced
with "choose techniques based on beat concept, not video genre."
- `typography.md` — "Guardrails / You know these rules but violate
them" → "Defaults to watch for." Banned fonts gain a caveat:
if the brand actually uses one of these fonts, use it.
- `video-composition.md` — fixed density contradiction
("8–10 visual elements" removed; sparse beats are intentional).
**Text-effects bundle (new)**
24 named text-animation effects shipped as paired specs:
- `assets/text-effects/effects/<id>.json` — GSAP-specific recipe
agents can paste verbatim
- `assets/text-effects/specs/<id>.json` — portable motion contract
(engine-agnostic, so the same effect can be re-implemented in any
animation library)
Catalog at `references/text-effects.md`. Storyboards reference effects
by name (typewriter, kinetic-center-build, shimmer-sweep, …) instead
of saying "fades in," which produced inconsistent typography across
beats.
Effects organized by target:
- Per-character (7): soft-blur-in, per-character-rise, typewriter,
bottom-up-letters, top-down-letters, stagger-from-{center,edges}
- Per-word (8): per-word-crossfade, spring-scale-in, shared-axis-y,
blur-out-up, kinetic-center-build, short-slide-{right,down},
depth-parallax-words
- Per-line (2): mask-reveal-up, line-by-line-slide
- Whole element (7): micro-scale-fade, shimmer-sweep, fade-through,
shared-axis-{x,z}, scale-down-fade, focus-blur-resolve
Sources adapted from `pixel-point/animate-text`; copied into the
repo so users don't need a separate install.
**Misc cleanups**
- `house-style.md` — light/dark prescription removed; defer to brand.
- `prompt-expansion.md` — `design.md` → `DESIGN.md` casing fixed.
- `html-in-canvas-patterns.md` — Three.js 0.147.0 (legacy
`examples/js/`) → 0.181.2 (`examples/jsm/` ESM imports);
`Math.random()` in the shatter example → mulberry32 seeded PRNG
so output is deterministic.
**.gitignore + CLAUDE.md**
- `.gitignore` catches per-brand video project directories agents
leave at the repo root (`huly-*/`, `raycast-*/`, `*-demo-*/`,
`test-runs/`, `test-outputs/`) plus the `videos/` folder
conventions.
- `CLAUDE.md` documents the local CLI for `capture` + `snapshot`
(since the published `npx hyperframes` doesn't yet include the
capture pipeline improvements from this stack) and the local
shader-transitions build copy convention.
Three concrete bugs found while auditing PR #991: 1. html-in-canvas-patterns.md (#1 in catalog, 3D Rotation with Bloom): The code example used `new THREE.EffectComposer(renderer)` UMD-style namespace access while the ESM imports right below pull them in as bare named imports. Three.js r150+ removed the UMD `examples/js/` globals, so as written the example throws `TypeError: THREE.EffectComposer is not a constructor`. Switched to the bare names matching the imports. THREE.Vector2 stays as-is — Vector2 is on the THREE namespace. 2. techniques.md (#5, Lottie Animation): The CDN path `@lottiefiles/dotlottie-web/dist/dotlottie-player.js` returns 404. `@lottiefiles/dotlottie-web` is the JavaScript SDK, not a web component — its `main` is `dist/index.cjs`. The web-component package is `@lottiefiles/dotlottie-wc` and the custom element is `<dotlottie-wc>`, not `<dotlottie-player>`. Updated both. 3. techniques.md (5 occurrences across Lottie / lottie-web / Video / @font-face examples): asset paths used the `../capture/` pattern that PR #989's `invalid_capture_path` lint rule emits an error for. Replaced all with root-relative `capture/...`. PRs #989 and #991 are no longer self-contradictory.
Per review feedback, these 5 files should not change in this stack: - visual-styles.md — keep main's existing version - house-style.md — keep main's light/dark prescription - references/typography.md — keep main's tone + Banned/Guardrails framing - references/video-composition.md — keep main's density guidance - CLAUDE.md — drop the local-CLI Capture/Snapshot section added in this branch; the local-CLI dev-instruction block for adding CLI commands stays (was already on main, unrelated to skill prose). Net: removes ~545 lines of churn from PR #991's diff.
Removed 7 entries that are not techniques. They're either UI style treatments, hand-rolled CSS templates, or named effects — different kinds of artifacts that don't belong under the same "primitive animation techniques" frame: - 12. Frosted Glass Panels → style treatment - 15. Impact Line on Text Drop → named effect - 16. Device Mockups (Laptop + Phone) → hand-rolled CSS template - 17. Aurora Gradient Backgrounds → style treatment - 18. Floating Particles → style treatment - 19. Terminal UI with Typing → hand-rolled CSS template - 20. Moodboard / Editorial Layout → hand-rolled layout The 13 entries that remain (SVG drawing, Canvas 2D, CSS 3D, Per-Word Kinetic Type, Lottie, Video Compositing, Char Typing, Variable Font, MotionPath, Velocity-Matched Transitions, Audio-Reactive, Clip-Path Reveal, WebGL Shader Art) are real primitives — animation building blocks an agent composes into beats, not finished recipes to lift verbatim. Updated the header to say 13 and point at `registry/blocks/` for pre-built UI templates instead of pretending they're techniques. ToC table and section numbering both updated. Net: -361 / +6 lines.
…hniques count Two follow-ups caught by a post-restructure audit pass: - skills/hyperframes/references/transitions.md:46 had a parenthetical "(derived from visual-vocabulary.md)" pointing at a file deleted earlier in this stack. Drop the parenthetical; the surrounding sentence reads cleanly without it. - skills/hyperframes/SKILL.md:476 still said "20 visual techniques" and listed 7 entries that the techniques.md trim removed (frosted glass, impact lines, device mockups, aurora gradients, floating particles, terminal UI, moodboard layouts). Updated to the actual 13 primitive techniques + a pointer to registry/blocks/ for the pre-built UI templates that used to be conflated with techniques.
Closes Rames's blocker on PR #991. The previous text-effects bundle was vendored from `pixel-point/animate-text`, which the GitHub API confirms has no license: GET /repos/pixel-point/animate-text → license: null GET /repos/pixel-point/animate-text/license → 404 With no explicit license, default US copyright is "all rights reserved" by the upstream author. Cannot ship under Apache 2.0. This commit replaces the 48 vendored JSON files (8451 lines) with a 24-file rewrite (525 lines) using a fresh, simpler schema. The effect IDs (typewriter, soft-blur-in, etc.) are concept names — not copyrightable. The schema (`enter`/`exit`/`swap`, `target`, `durationMs`/`staggerMs`/`easing`) is standard motion-design vocabulary. Per-effect parameter values are picked from motion-design intuition for each effect's intent — not copied. ### Structure changes Before: dual directory + per-effect schema duplication assets/text-effects/effects/<id>.json (~330 lines each, GSAP recipe + embedded spec) assets/text-effects/specs/<id>.json (~40 lines each, portable contract — duplicates the spec section above) After: flat single-file-per-effect with one shared rendering pattern assets/text-effects/<id>.json (~20 lines each, just the per-effect parameters) references/text-effects.md (shared GSAP rendering pattern, documented ONCE with split rules, CustomEase wiring, layout-aware exceptions) The shared rendering pattern (split by target → set initial state → stagger to enter.to → exit symmetric to enter → hard-kill at beat boundary) is in text-effects.md instead of repeated in every effect JSON. Sub-agents read the catalog once and the per-effect JSON gives them the parameters. ~94% smaller file footprint, single canonical implementation pattern. ### Per-effect schema { id, name, description, target, enter, exit, swap, notes? } target = "char" | "word" | "line" | "element" enter / exit = { durationMs, staggerMs?, staggerOrder?, easing, from, to } swap = { mode: "crossfade" | "sequential", overlapMs, microDelayMs } notes = implementation guidance (when present) layoutAware = true for the 3 effects whose line container animates separately (kinetic-center-build, short-slide-right, short-slide-down) ### Reference updates - references/text-effects.md: rewritten with our own catalog table, fresh duration / stagger values per effect, and the shared GSAP rendering pattern as one canonical section instead of per-effect recipes. - step-3-storyboard.md: path references updated from `text-effects/effects/[id].json` → `text-effects/[id].json`. Removed the upstream-specific `showcase.library_adapters.gsap` reference; sub-agents now read the per-effect params + the shared rendering pattern in text-effects.md. 24 effects total, unchanged set: 7 per-character, 8 per-word, 2 per-line, 7 whole-element. The 3 layout-aware effects keep their custom behavior documented in their JSON `notes` field and in text-effects.md's layout-aware section.
523391d to
f8b359d
Compare
ab529cb to
8acc71b
Compare
miguel-heygen
left a comment
There was a problem hiding this comment.
Re-reviewed after 3 new commits, focusing on the licensing blocker Rames flagged.
8acc71bf — text-effects rewrite (license fix): The rewrite is genuine and thorough, not a cosmetic rename:
-
Schema is completely different. Old files used deeply nested
showcaseobjects (~300 lines each) withshowcase.renderer.recipe,showcase.library_adapters.waapi/motion/gsap,showcase.runtime, etc. New files are flat ~22-line JSON with{id, name, description, target, enter, exit, swap, notes}. Fundamentally different contract. -
Property naming changed. Old:
duration_ms,stagger_ms,y_px,blur_px. New:durationMs,staggerMs,y,filter: "blur(8px)"(CSS strings directly). -
Timing values differ. e.g.
soft-blur-inenter: old was 900ms/25ms stagger/y=16/blur=12; new is 700ms/20ms/y=14/blur=8px. -
46 old files deleted (
effects/+specs/dirs), replaced by 24 flat files. No old files survive. No attribution topixel-point/animate-textremains.
Licensing blocker resolved. No surviving code from the unlicensed source.
502fde3f — techniques trim: 20→13, removing 7 entries that became registry blocks. Clean.
957aa1d9 — bookkeeping: Updates count in SKILL.md, removes stale visual-vocabulary.md ref.
Ship it.

What
Rewrite of the standalone
hyperframesskill — the main authoring skill used by every hyperframes user, not just the website-to-video pipeline. Removes prescriptive lookup tables that drove monoculture output, restores tone in the rule files, and bundles 24 named text-animation effects directly into the skill so users don't need a separate install.5 of 5 in the pipeline-quality stack. Stacked on #990.
This is +9989 / -567 across 63 files in
skills/hyperframes/, plus.gitignoreandCLAUDE.mdhousekeeping at the repo root. It deserves its own review separate from the capture pipeline and the w2h pipeline because it affects every hyperframes user.Why
External rater feedback across multiple rounds identified six lookup tables that agents were pasting wholesale as recipes — turning every video into a generic "cinematic" or "technical" template regardless of the brand. Removing the tables (or restructuring them so the agent has to deliberate rather than look up) is the only way to get brand-driven output.
The text-effects bundle solves a different problem: storyboards kept saying things like "fades in" or "slides up," and sub-agents invented different per-beat animations every time, producing inconsistent typography across beats. A fixed catalog of 24 named effects gives the storyboard a vocabulary that the build step implements deterministically.
How
Prescriptive tables removed / restructured
visual-styles.md— complete rewrite. Old version had 8 styles with YAML token blocks (colors / typography / motion / transitions). Agents copy-pasted. New version renames to actual design traditions (Swiss / Late-Modernist / Punk / Maximalist / Computational / Humanist / Vernacular / Cinematic) with prose: "what it teaches / where it resonates / pitfalls when borrowing."motion-principles.md— complete rewrite. Old tone ("You will try to use 14px. Don't.") replaced with "Common defaults that produce monoculture." All load-bearing GSAP rules preserved verbatim.beat-direction.md— rhythm pattern table removed; replaced with questions that derive rhythm from brand + storyboard. Verb table regrouped by physical character (Impact / Directional / Reveals / Organic / Mechanical) without energy labels.transitions.md— Energy and Mood tables stripped of named transitions; replaced with motion-quality descriptions. Mixing documented (CSS crossfade + shader in the same composition).dynamic-techniques.md— energy table restructured with explanatory principles before showing the table as calibration reference.techniques.md— "When to Use What" mapping deleted. Replaced with "choose techniques based on beat concept, not video genre."typography.md— "Guardrails / You know these rules but violate them" → "Defaults to watch for." Banned-fonts list keeps a brand-override caveat.video-composition.md— density contradiction fixed (8–10 elements removed; sparse beats are intentional).Text-effects bundle (new)
24 named text animations shipped as paired specs:
assets/text-effects/effects/<id>.json— GSAP-specific recipe (paste verbatim)assets/text-effects/specs/<id>.json— portable motion contract (engine-agnostic)Catalog at
references/text-effects.md. Effects organized by target (per-character 7, per-word 8, per-line 2, whole-element 7). Sourced frompixel-point/animate-text; copied into the repo so users don't need a separate install.Other cleanups
house-style.md— light/dark prescription removed; defer to brand.prompt-expansion.md—design.md→DESIGN.mdcasing fixed.html-in-canvas-patterns.md— Three.js 0.181.2 + ESM jsm imports, mulberry32 PRNG in the shatter example so output is deterministic.Repo housekeeping
.gitignorecatches per-brand video project directories agents leave at the repo root (huly-*/,raycast-*/,*-demo-*/,test-runs/,test-outputs/) plusvideos/conventions.CLAUDE.mddocuments the local CLI forcapture+snapshot(since the publishednpx hyperframesdoesn't yet include the capture-pipeline improvements from PRs Initial repo setup #1–initial code #2 of this stack) and the local shader-transitions build copy convention.Test plan