Skip to content

Commit 7509af2

Browse files
committed
revert(skill): revert 4 hyperframes files + CLAUDE.md to main
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.
1 parent 094b10d commit 7509af2

5 files changed

Lines changed: 428 additions & 157 deletions

File tree

CLAUDE.md

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,6 @@ packages/
1212
studio/ → Browser-based composition editor UI
1313
```
1414

15-
## Local CLI
16-
17-
The published `npx hyperframes` is a released version and does **not** include local changes. Use the local CLI for commands where changes are in flight:
18-
19-
```bash
20-
# Local CLI (use instead of `npx hyperframes` for capture and snapshot):
21-
npx tsx packages/cli/src/cli.ts <command>
22-
23-
# Examples:
24-
npx tsx packages/cli/src/cli.ts capture <URL> -o videos/<name>/capture
25-
npx tsx packages/cli/src/cli.ts snapshot videos/<name> --frames <N>
26-
```
27-
28-
Commands with local changes: **capture** (paginated contact sheets, fit:contain, SVG root scan), **snapshot** (3-col contact sheet). All other commands (lint, validate, preview, render) can use `npx hyperframes` as-is.
29-
30-
For **shader transitions**, copy the local build into the video project instead of using the CDN — the local build includes CSS crossfade mixing support and other fixes not yet published:
31-
32-
```bash
33-
cp packages/shader-transitions/dist/index.global.js <project-dir>/hyper-shader-local.js
34-
```
35-
36-
Then reference `hyper-shader-local.js` instead of the `@hyperframes/shader-transitions` CDN URL in `index.html`.
37-
3815
## Development
3916

4017
```bash

skills/hyperframes/house-style.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# House Style
22

3-
Creative direction for compositions when no `DESIGN.md` is provided. These are starting points — override anything that doesn't serve the content. When a `DESIGN.md` exists, its brand values take precedence; house-style fills gaps.
3+
Creative direction for compositions when no `design.md` is provided. These are starting points — override anything that doesn't serve the content. When a `design.md` exists, its brand values take precedence; house-style fills gaps.
44

55
## Before Writing HTML
66

@@ -24,7 +24,7 @@ If the content genuinely calls for one of these — centered layout for a solemn
2424

2525
## Color
2626

27-
- Match light/dark to the brand, not the category. A wellness brand might be dark if its identity is sophisticated. A fintech might be light if it's consumer-first. Check the DESIGN.md or the user's direction before defaulting.
27+
- Match light/dark to content: food, wellness, kids → light. Tech, cinema, finance → dark.
2828
- One accent hue. Same background across all scenes.
2929
- Tint neutrals toward your accent (even subtle warmth/coolness beats dead gray).
3030
- **Contrast:** enforced by `hyperframes validate` (WCAG AA). Text must be readable with decoratives removed.
@@ -44,7 +44,7 @@ Ideas (mix and match, 2-5 per scene):
4444

4545
All decoratives should have slow ambient GSAP animation — breathing, drift, pulse. Static decoratives feel dead.
4646

47-
**Decorative count vs motion count.** The "2-5 per scene" count refers to decorative _elements_. If a project's `DESIGN.md` says "single ambient motion per scene", it means one looping motion applied to these decoratives (a shared breath/drift/pulse) — not one element total. A scene with 4 decoratives sharing one breathing motion is correct; a scene with 1 decorative is under-dressed.
47+
**Decorative count vs motion count.** The "2-5 per scene" count refers to decorative _elements_. If a project's `design.md` says "single ambient motion per scene", it means one looping motion applied to these decoratives (a shared breath/drift/pulse) — not one element total. A scene with 4 decoratives sharing one breathing motion is correct; a scene with 1 decorative is under-dressed.
4848

4949
## Motion
5050

skills/hyperframes/references/typography.md

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,34 @@
22

33
The compiler embeds supported fonts — just write `font-family` in CSS.
44

5-
## Banned fonts
5+
## Banned
66

7-
These are the fonts every LLM reaches for. They produce monoculture across compositions even when nothing else about the compositions is similar:
7+
Training-data defaults that every LLM reaches for. These produce monoculture across compositions.
88

99
Inter, Roboto, Open Sans, Noto Sans, Arimo, Lato, Source Sans, PT Sans, Nunito, Poppins, Outfit, Sora, Playfair Display, Cormorant Garamond, Bodoni Moda, EB Garamond, Cinzel, Prata, Syne
1010

11-
**Syne in particular** is the most overused "distinctive" display font. When you see it, it reads as AI-generated before anything else about the composition registers.
11+
**Syne in particular** is the most overused "distinctive" display font. It is an instant AI design tell.
1212

13-
If a brand's actual identity uses one of these fonts, that's a different situation — use the brand's font. The ban applies to the default-reach, not to the cases where the font is genuinely the right choice.
13+
## Guardrails
1414

15-
## Defaults to watch for
15+
You know these rules but you violate them. Stop.
1616

17-
These are the patterns that produce same-looking compositions even when the brands are different:
17+
- **Don't pair two sans-serifs.** You do this constantly — one for headlines, one for body. Cross the boundary: serif + sans, or sans + mono.
18+
- **One expressive font per scene.** You pick two interesting fonts trying to make it "better." One performs, one recedes.
19+
- **Weight contrast must be extreme.** You default to 400 vs 700. Video needs 300 vs 900. The difference must be visible in motion at a glance.
20+
- **Video sizes, not web sizes.** Body: 20px minimum. Headlines: 60px+. Data labels: 16px. You will try to use 14px. Don't.
1821

19-
- **Two sans-serifs paired together** — one for headlines, one for body. The pairing has no tension because both fonts come from the same family of forms. Cross the boundary: serif + sans, or sans + mono. The pairing should embody some contradiction in the content.
20-
- **Two expressive fonts in one scene** — one will perform and the other will recede no matter what you do. Pick which font is doing the work and let the other be quiet.
21-
- **Weight contrast at 400 vs 700** — fine for web, invisible at video distance. Video needs more dramatic contrast: 300 vs 900, or 200 vs 800. The weight difference should be readable in motion at a glance.
22-
- **Web type sizes** — body text at 14–16px disappears on a 1920×1080 frame. Video minimums: body 20px+, headlines 60px+, data labels 16px+. If a font-size is under 20px in a composition, there should be a specific reason.
22+
## What You Don't Do Without Being Told
2323

24-
## Principles
25-
26-
What follows isn't a checklist — these are principles for thinking about type in video specifically:
27-
28-
- **Tension should mean something.** When two fonts are paired, the pairing should embody some contradiction the content itself contains — mechanical vs human, public vs private, institutional vs personal. If you can't articulate the tension, the pairing is arbitrary and reads as such.
29-
- **Register switching.** Different fonts can carry different communicative modes — one voice for statements, another for data, another for attribution. This isn't hierarchy on a page; it's voices in a conversation. Each font is saying something different _about_ the content it carries.
30-
- **Tension can live inside a single font.** A font that looks familiar but is secretly strange creates tension with the viewer's expectations — no second font required. Some of the strongest type-driven compositions use one font confidently.
31-
- **One variable changed = dramatic contrast.** Same letterforms, monospaced vs proportional. Same family at different optical sizes. Changing only rhythm while everything else stays constant produces contrast without complexity.
32-
- **Double personality works when fonts share attitude.** Two expressive fonts can coexist if they share an underlying attitude (both irreverent, both precise, both eccentric) even when their visible forms are completely different.
33-
- **Time is hierarchy.** The first element to appear is the most important. In video, sequence replaces position — what would be top-of-page on the web is first-to-enter on screen.
34-
- **Motion is typography.** How a word enters carries as much meaning as the font it's set in. A 0.1s slam and a 2s fade say completely different things with the same letters.
35-
- **Fixed reading time.** Three seconds on screen means the line has to be readable in two. That forces fewer words and larger type than web type-setting habits assume.
36-
- **Tracking tighter than web.** Display sizes in video want `-0.03em` to `-0.05em` of letter-spacing. Video encoding compresses fine letter detail, and tighter tracking compensates.
24+
- **Tension should mean something.** Don't pattern-match pairings. Ask WHY these two fonts disagree. The pairing should embody the content's contradiction — mechanical vs human, public vs private, institutional vs personal. If you can't articulate the tension, it's arbitrary.
25+
- **Register switching.** Assign different fonts to different communicative modes — one voice for statements, another for data, another for attribution. Not hierarchy on a page. Voices in a conversation.
26+
- **Tension can live inside a single font.** A font that looks familiar but is secretly strange creates tension with the viewer's expectations, not with another font.
27+
- **One variable changed = dramatic contrast.** Same letterforms, monospaced vs proportional. Same family at different optical sizes. Changing only rhythm while everything else stays constant.
28+
- **Double personality works.** Two expressive fonts can coexist if they share an attitude (both irreverent, both precise) even when their forms are completely different.
29+
- **Time is hierarchy.** The first element to appear is the most important. In video, sequence replaces position.
30+
- **Motion is typography.** How a word enters carries as much meaning as the font. A 0.1s slam vs a 2s fade — same font, completely different message.
31+
- **Fixed reading time.** 3 seconds on screen = must be readable in 2. Fewer words, larger type.
32+
- **Tracking tighter than web.** -0.03em to -0.05em on display sizes. Video encoding compresses letter detail.
3733

3834
## Finding Fonts
3935

skills/hyperframes/references/video-composition.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,15 @@ design.md defines what the brand looks like: colors, fonts, personality, constra
1212

1313
## Density
1414

15-
Density depends on the beat's purpose. A dramatic single-word reveal or a keynote-style hero moment can have 1-2 elements — that's intentional. A data showcase or feature grid should have 8-10. Match the storyboard's intent, not a number target.
15+
A beat with 3 elements looks empty. A beat with 8-10 feels alive.
1616

1717
Every scene needs:
1818

1919
- **Background texture** — radial glow, oversized ghost type, color panel, grain, grid. Never solid flat color.
2020
- **Midground content** — the actual message. Cards, stats, code blocks, images.
2121
- **Foreground accents** — dividers, labels, data bars, registration marks, monospace metadata. The details that make it feel produced, not generated.
2222

23-
Every scene should have content at all three layers — background, midground, and foreground — even a sparse beat. A 1-element hero moment isn't really 1 element if the background has a radial glow and the foreground has a corner label; it's a 1-element _focal point_ with two layers around it doing quiet work. That's different from a frame with one element and nothing else, which reads as unfinished.
24-
25-
Total element count follows from the storyboard's density spec for that beat. The thing to check for is whether all three layers are present, not whether the count hits a target.
23+
Aim for 8-10 visual elements per scene. Two of those should be decorative elements the user didn't ask for — you add them because empty frames look broken.
2624

2725
## Color Presence
2826

0 commit comments

Comments
 (0)