Skip to content

feat(skill): hyperframes core — remove prescriptive tables, bundle text-effects#991

Open
ukimsanov wants to merge 6 commits into
feat/skill-website-to-hyperframesfrom
feat/skill-hyperframes-core
Open

feat(skill): hyperframes core — remove prescriptive tables, bundle text-effects#991
ukimsanov wants to merge 6 commits into
feat/skill-website-to-hyperframesfrom
feat/skill-hyperframes-core

Conversation

@ukimsanov
Copy link
Copy Markdown
Collaborator

What

Rewrite of the standalone hyperframes skill — 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 .gitignore and CLAUDE.md housekeeping 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 from pixel-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.mddesign.mdDESIGN.md casing 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

  • .gitignore catches per-brand video project directories agents leave at the repo root (huly-*/, raycast-*/, *-demo-*/, test-runs/, test-outputs/) plus videos/ conventions.
  • CLAUDE.md documents the local CLI for capture + snapshot (since the published npx hyperframes doesn't yet include the capture-pipeline improvements from PRs Initial repo setup #1initial code #2 of this stack) and the local shader-transitions build copy convention.

Test plan

  • Unit tests added/updated — n/a (skill prose + asset files).
  • Manual testing performed — used by every hyperframes user authoring a video; the same v2/v3/v4 evals that exercise the website-to-hyperframes skill exercise this skill transitively.
  • Documentation updated (if applicable) — the skill IS documentation.

Copy link
Copy Markdown
Collaborator Author

ukimsanov commented May 20, 2026

ukimsanov added a commit that referenced this pull request May 20, 2026
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.
ukimsanov added a commit that referenced this pull request May 20, 2026
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.
ukimsanov added a commit that referenced this pull request May 20, 2026
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.
@ukimsanov ukimsanov force-pushed the feat/skill-hyperframes-core branch from b5cfdc0 to 7509af2 Compare May 20, 2026 21:58
ukimsanov added a commit that referenced this pull request May 20, 2026
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.
ukimsanov added a commit that referenced this pull request May 20, 2026
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.
@ukimsanov ukimsanov force-pushed the feat/skill-hyperframes-core branch from 7509af2 to d8d8cef Compare May 20, 2026 22:53
ukimsanov added a commit that referenced this pull request May 20, 2026
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.
ukimsanov added a commit that referenced this pull request May 20, 2026
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.
@ukimsanov ukimsanov force-pushed the feat/skill-hyperframes-core branch from d8d8cef to 825b108 Compare May 20, 2026 23:08
ukimsanov added a commit that referenced this pull request May 20, 2026
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.
ukimsanov added a commit that referenced this pull request May 20, 2026
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.
@ukimsanov ukimsanov force-pushed the feat/skill-hyperframes-core branch from 825b108 to ac7b5d4 Compare May 20, 2026 23:15
@ukimsanov ukimsanov requested a review from Copilot May 20, 2026 23:40
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copy link
Copy Markdown
Collaborator

@miguel-heygen miguel-heygen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Copy Markdown
Collaborator

@jrusso1020 jrusso1020 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 of pixel-point, animate-text, source, attribution, or credit (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):

  1. Contact the upstream and ask for an explicit license (MIT / Apache 2.0 / similar). Add their LICENSE text + a CREDITS.md in assets/text-effects/. This is the cleanest path if upstream is responsive.
  2. Rewrite the 24 specs from scratch as independent implementations, then no attribution is needed (only the concept is borrowed). Higher effort.
  3. 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 removedvisual-styles.md rewrite (8 generic styles → 8 named design traditions with prose), motion-principles.md "Common defaults that produce monoculture" framing, beat-direction.md rhythm 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.md with 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.md updates 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 published hyperframes@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

ukimsanov added a commit that referenced this pull request May 21, 2026
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.
ukimsanov added a commit that referenced this pull request May 21, 2026
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.
@ukimsanov ukimsanov force-pushed the feat/skill-hyperframes-core branch from ac7b5d4 to ab529cb Compare May 21, 2026 00:25
ukimsanov added 3 commits May 20, 2026 18:00
…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.
ukimsanov added 3 commits May 20, 2026 18:00
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.
@ukimsanov ukimsanov force-pushed the feat/skill-website-to-hyperframes branch from 523391d to f8b359d Compare May 21, 2026 01:13
@ukimsanov ukimsanov force-pushed the feat/skill-hyperframes-core branch from ab529cb to 8acc71b Compare May 21, 2026 01:13
@ukimsanov ukimsanov requested a review from Copilot May 21, 2026 02:44
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@ukimsanov ukimsanov requested a review from miguel-heygen May 21, 2026 03:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants