dsh-hyperframes 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.en.md +35 -0
  2. package/README.md +35 -0
  3. package/cordis.patch.yml +7 -0
  4. package/lib/index.d.ts +35 -0
  5. package/lib/index.js +74 -0
  6. package/package.json +63 -0
  7. package/skills/gsap/SKILL.md +213 -0
  8. package/skills/gsap/references/effects.md +297 -0
  9. package/skills/gsap/scripts/extract-audio-data.py +188 -0
  10. package/skills/hyperframes/SKILL.md +366 -0
  11. package/skills/hyperframes/data-in-motion.md +19 -0
  12. package/skills/hyperframes/house-style.md +71 -0
  13. package/skills/hyperframes/palettes/bold-energetic.md +14 -0
  14. package/skills/hyperframes/palettes/clean-corporate.md +14 -0
  15. package/skills/hyperframes/palettes/dark-premium.md +14 -0
  16. package/skills/hyperframes/palettes/jewel-rich.md +14 -0
  17. package/skills/hyperframes/palettes/monochrome.md +14 -0
  18. package/skills/hyperframes/palettes/nature-earth.md +14 -0
  19. package/skills/hyperframes/palettes/neon-electric.md +14 -0
  20. package/skills/hyperframes/palettes/pastel-soft.md +14 -0
  21. package/skills/hyperframes/palettes/warm-editorial.md +14 -0
  22. package/skills/hyperframes/patterns.md +118 -0
  23. package/skills/hyperframes/references/audio-reactive.md +76 -0
  24. package/skills/hyperframes/references/captions.md +132 -0
  25. package/skills/hyperframes/references/css-patterns.md +373 -0
  26. package/skills/hyperframes/references/dynamic-techniques.md +90 -0
  27. package/skills/hyperframes/references/motion-principles.md +69 -0
  28. package/skills/hyperframes/references/transcript-guide.md +151 -0
  29. package/skills/hyperframes/references/transitions/catalog.md +117 -0
  30. package/skills/hyperframes/references/transitions/css-3d.md +12 -0
  31. package/skills/hyperframes/references/transitions/css-blur.md +51 -0
  32. package/skills/hyperframes/references/transitions/css-cover.md +43 -0
  33. package/skills/hyperframes/references/transitions/css-destruction.md +95 -0
  34. package/skills/hyperframes/references/transitions/css-dissolve.md +66 -0
  35. package/skills/hyperframes/references/transitions/css-distortion.md +45 -0
  36. package/skills/hyperframes/references/transitions/css-grid.md +10 -0
  37. package/skills/hyperframes/references/transitions/css-light.md +49 -0
  38. package/skills/hyperframes/references/transitions/css-mechanical.md +30 -0
  39. package/skills/hyperframes/references/transitions/css-other.md +25 -0
  40. package/skills/hyperframes/references/transitions/css-push.md +41 -0
  41. package/skills/hyperframes/references/transitions/css-radial.md +37 -0
  42. package/skills/hyperframes/references/transitions/css-scale.md +24 -0
  43. package/skills/hyperframes/references/transitions.md +112 -0
  44. package/skills/hyperframes/references/tts.md +75 -0
  45. package/skills/hyperframes/references/typography.md +175 -0
  46. package/skills/hyperframes/scripts/animation-map.mjs +596 -0
  47. package/skills/hyperframes/scripts/contrast-report.mjs +335 -0
  48. package/skills/hyperframes/visual-styles.md +211 -0
  49. package/skills/hyperframes-cli/SKILL.md +152 -0
  50. package/skills/hyperframes-registry/SKILL.md +106 -0
  51. package/skills/hyperframes-registry/examples/add-block.md +51 -0
  52. package/skills/hyperframes-registry/examples/add-component.md +73 -0
  53. package/skills/hyperframes-registry/references/demo-html-pattern.md +54 -0
  54. package/skills/hyperframes-registry/references/discovery.md +53 -0
  55. package/skills/hyperframes-registry/references/install-locations.md +45 -0
  56. package/skills/hyperframes-registry/references/wiring-blocks.md +91 -0
  57. package/skills/hyperframes-registry/references/wiring-components.md +77 -0
  58. package/skills/website-to-hyperframes/SKILL.md +125 -0
  59. package/skills/website-to-hyperframes/references/step-1-capture.md +74 -0
  60. package/skills/website-to-hyperframes/references/step-2-design.md +178 -0
  61. package/skills/website-to-hyperframes/references/step-3-script.md +96 -0
  62. package/skills/website-to-hyperframes/references/step-4-storyboard.md +246 -0
  63. package/skills/website-to-hyperframes/references/step-5-vo.md +42 -0
  64. package/skills/website-to-hyperframes/references/step-6-build.md +229 -0
  65. package/skills/website-to-hyperframes/references/step-7-validate.md +114 -0
  66. package/skills/website-to-hyperframes/references/techniques.md +387 -0
@@ -0,0 +1,77 @@
1
+ # Wiring Components
2
+
3
+ Components are effect snippets — HTML, CSS, and optionally JS that you merge directly into an existing composition. Unlike blocks, components have no standalone timeline; they participate in the host composition's timeline.
4
+
5
+ ## General process
6
+
7
+ 1. Run `hyperframes add <component-name>`
8
+ 2. Open the installed file (e.g., `compositions/components/grain-overlay.html`)
9
+ 3. Read the comment header for usage instructions
10
+ 4. Copy the parts into your host composition:
11
+ - **HTML elements** — inside your `<div data-composition-id="...">`
12
+ - **CSS styles** — into your composition's `<style>` block
13
+ - **JS setup** — into your composition's `<script>`, before your timeline code
14
+ - **Timeline calls** — into your GSAP timeline (if the component exposes them)
15
+
16
+ ## Example: grain-overlay (CSS-only, no timeline integration)
17
+
18
+ ```html
19
+ <!-- Paste the overlay div into your composition -->
20
+ <div
21
+ id="grain-overlay"
22
+ style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 100;"
23
+ >
24
+ <div class="grain-texture"></div>
25
+ </div>
26
+ ```
27
+
28
+ Then paste the CSS keyframes and `.grain-texture` rule into your styles. No GSAP timeline calls needed — the grain animates via CSS `@keyframes`.
29
+
30
+ ## Example: shimmer-sweep (needs timeline integration)
31
+
32
+ Wrap target elements, paste CSS and JS, then drive the sweep from your timeline:
33
+
34
+ ```js
35
+ tl.fromTo(
36
+ ".shimmer-sweep-target",
37
+ {
38
+ "--shimmer-pos": "-20%",
39
+ },
40
+ {
41
+ "--shimmer-pos": "120%",
42
+ duration: 1.2,
43
+ ease: "power2.inOut",
44
+ stagger: 0.15,
45
+ },
46
+ 2.0,
47
+ );
48
+ ```
49
+
50
+ ## Example: grid-pixelate-wipe (scene transition)
51
+
52
+ Paste the overlay HTML and CSS, then drive `.grid-cell` scale in your timeline:
53
+
54
+ ```js
55
+ // Cover screen
56
+ tl.to(
57
+ ".grid-cell",
58
+ { scale: 1, duration: 0.6, stagger: { amount: 0.6, from: "center" }, ease: "power2.inOut" },
59
+ 5.0,
60
+ );
61
+ // Swap scenes
62
+ tl.set("#scene-a", { opacity: 0 }, 5.6);
63
+ tl.set("#scene-b", { opacity: 1 }, 5.6);
64
+ // Reveal
65
+ tl.to(
66
+ ".grid-cell",
67
+ { scale: 0, duration: 0.6, stagger: { amount: 0.6, from: "edges" }, ease: "power2.inOut" },
68
+ 5.6,
69
+ );
70
+ ```
71
+
72
+ ## Key principles
73
+
74
+ - Components inherit the host composition's dimensions and duration
75
+ - Place component HTML at the appropriate z-index relative to your content
76
+ - Read the comment header in each snippet for customizable values
77
+ - Run `hyperframes lint` after wiring to catch structural issues
@@ -0,0 +1,125 @@
1
+ ---
2
+ name: website-to-hyperframes
3
+ description: "Capture a website and create a HyperFrames video from it. Use when: (1) a user provides a URL and wants a video, (2) someone says capture this site, turn this into a video, make a promo from my site, (3) the user wants a social ad, product tour, or any video based on an existing website, (4) the user shares a link and asks for any kind of video content. Even if the user just pastes a URL — this is the skill to use. 中文:把网址变成 HyperFrames 视频(产品宣传/广告/产品导览)时使用。"
4
+ compatibility: Requires Node.js >= 22 and FFmpeg on PATH; the 7-step pipeline drives `npx hyperframes`.
5
+ allowed-tools: Bash
6
+ ---
7
+
8
+ # Website to HyperFrames
9
+
10
+ Capture a website, then produce a professional video from it.
11
+
12
+ Users say things like:
13
+
14
+ - "Capture https://... and make me a 25-second product launch video"
15
+ - "Turn this website into a 15-second social ad for Instagram"
16
+ - "Create a 30-second product tour from https://..."
17
+
18
+ The workflow has 7 steps. Each produces an artifact that gates the next.
19
+
20
+ ---
21
+
22
+ ## Step 1: Capture & Understand
23
+
24
+ **Read:** [references/step-1-capture.md](references/step-1-capture.md)
25
+
26
+ Run the capture, read the extracted data, and build a working summary using the write-down-and-forget method.
27
+
28
+ **Gate:** Print your site summary (name, top colors, fonts, key assets, one-sentence vibe).
29
+
30
+ ---
31
+
32
+ ## Step 2: Write DESIGN.md
33
+
34
+ **Read:** [references/step-2-design.md](references/step-2-design.md)
35
+
36
+ Write a simple brand reference for the captured website. 6 sections, ~90 lines. This is a cheat sheet, not the creative plan — that comes in Step 4.
37
+
38
+ **Gate:** `DESIGN.md` exists in the project directory.
39
+
40
+ ---
41
+
42
+ ## Step 3: Write SCRIPT
43
+
44
+ **Read:** [references/step-3-script.md](references/step-3-script.md)
45
+
46
+ Write the narration script. The story backbone. Scene durations come from the narration, not from guessing.
47
+
48
+ **Gate:** `SCRIPT.md` exists in the project directory.
49
+
50
+ ---
51
+
52
+ ## Step 4: Write STORYBOARD
53
+
54
+ **Read:** [references/step-4-storyboard.md](references/step-4-storyboard.md)
55
+
56
+ Write per-beat creative direction: mood, camera, animations, transitions, assets, depth layers, SFX. This is the creative north star — the document the engineer follows to build each composition.
57
+
58
+ **Gate:** `STORYBOARD.md` exists with beat-by-beat direction and an asset audit table.
59
+
60
+ ---
61
+
62
+ ## Step 5: Generate VO + Map Timing
63
+
64
+ **Read:** [references/step-5-vo.md](references/step-5-vo.md)
65
+
66
+ Generate TTS audio, transcribe for word-level timestamps, and map timestamps to beats. Update STORYBOARD.md with real durations.
67
+
68
+ **Gate:** `narration.wav` (or .mp3) + `transcript.json` exist. Beat timings in STORYBOARD.md updated.
69
+
70
+ ---
71
+
72
+ ## Step 6: Build Compositions
73
+
74
+ **Read:** The `hyperframes` skill (load it — every rule matters)
75
+ **Read:** [references/step-6-build.md](references/step-6-build.md)
76
+
77
+ Build each composition following the storyboard. After each one: self-review for layout, asset placement, and animation quality.
78
+
79
+ **Gate:** Every composition has been self-reviewed. No overlapping elements, no misplaced assets, no static images without motion.
80
+
81
+ ---
82
+
83
+ ## Step 7: Validate & Deliver
84
+
85
+ **Read:** [references/step-7-validate.md](references/step-7-validate.md)
86
+
87
+ Lint, validate, snapshot, preview. Deliver the localhost Studio project URL
88
+ (`http://localhost:<port>/#project/<project-name>`) to the user first — only
89
+ render to MP4 on explicit request. Do not treat `index.html` as the project
90
+ handoff link; it is source-code context only.
91
+
92
+ **Gate:** `npx hyperframes lint` and `npx hyperframes validate` pass with zero errors, and the final response includes the active Studio project URL.
93
+
94
+ ---
95
+
96
+ ## Quick Reference
97
+
98
+ ### Video Types
99
+
100
+ | Type | Duration | Beats | Narration |
101
+ | --------------------- | -------- | ----- | ---------------------- |
102
+ | Social ad (IG/TikTok) | 10-15s | 3-4 | Optional hook sentence |
103
+ | Product demo | 30-60s | 5-8 | Full narration |
104
+ | Feature announcement | 15-30s | 3-5 | Full narration |
105
+ | Brand reel | 20-45s | 4-6 | Optional, music focus |
106
+ | Launch teaser | 10-20s | 2-4 | Minimal, high energy |
107
+
108
+ ### Format
109
+
110
+ - **Landscape**: 1920x1080 (default)
111
+ - **Portrait**: 1080x1920 (Instagram Stories, TikTok)
112
+ - **Square**: 1080x1080 (Instagram feed)
113
+
114
+ ### Reference Files
115
+
116
+ | File | When to read |
117
+ | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
118
+ | [step-1-capture.md](references/step-1-capture.md) | Step 1 — reading captured data |
119
+ | [step-2-design.md](references/step-2-design.md) | Step 2 — writing DESIGN.md |
120
+ | [step-3-script.md](references/step-3-script.md) | Step 3 — writing the narration script |
121
+ | [step-4-storyboard.md](references/step-4-storyboard.md) | Step 4 — per-beat creative direction |
122
+ | [step-5-vo.md](references/step-5-vo.md) | Step 5 — TTS, transcription, timing |
123
+ | [step-6-build.md](references/step-6-build.md) | Step 6 — building compositions with self-review |
124
+ | [step-7-validate.md](references/step-7-validate.md) | Step 7 — lint, validate, snapshot, preview |
125
+ | [techniques.md](references/techniques.md) | Steps 4 & 6 — 10 visual techniques with code patterns (SVG drawing, Canvas 2D, 3D, typography, Lottie, video, typing, variable fonts, MotionPath, transitions) |
@@ -0,0 +1,74 @@
1
+ # Step 1: Capture & Understand
2
+
3
+ ## Run the capture
4
+
5
+ Create a project directory for your video, then capture the website into a `capture/` subfolder within it:
6
+
7
+ ```bash
8
+ npx hyperframes capture <URL> -o <project-dir>/capture
9
+ ```
10
+
11
+ Example: `npx hyperframes capture https://stripe.com -o videos/stripe-launch/capture`
12
+
13
+ Keeping the capture artifacts (`screenshots/`, `assets/`, `extracted/`, `AGENTS.md`) in a dedicated `capture/` subfolder keeps them isolated from the later build files (`SCRIPT.md`, `STORYBOARD.md`, `DESIGN.md`, `compositions/`, `index.html`, `narration.wav`, `transcript.json`, `renders/`, `snapshots/`), which all live at `<project-dir>/` root.
14
+
15
+ For exploratory captures that aren't becoming a video yet, `-o captures/<name>` at the repo root is fine — the isolation convention only matters when you're building a video on top of the capture.
16
+
17
+ No API keys required. The capture extracts design tokens, screenshots, fonts, and assets with DOM-context descriptions automatically.
18
+
19
+ **Optional:** Set `GEMINI_API_KEY` (or `GOOGLE_API_KEY`) in a `.env` file at the repo root for richer AI-powered image descriptions via Gemini 3.1 Flash Lite vision (~$0.001/image).
20
+
21
+ Wait for it to complete. Print how many screenshots, assets, sections, and fonts were extracted.
22
+
23
+ ## Read and summarize
24
+
25
+ Read each file below. After reading each one, **write a 1-2 sentence summary** of what you learned. These summaries are your working memory — the raw file content may be cleared from context later.
26
+
27
+ ### Must read (do not skip)
28
+
29
+ 1. **View the scroll screenshots** — viewport-sized captures covering the full page height (the number depends on the page length). Start with:
30
+ - `capture/screenshots/scroll-000.png` — the hero section at full 1920x1080 resolution. This is the most important image. Describe: is the background light or dark? What's the dominant visual element? What colors jump out?
31
+ - Then scan through the rest to see the full page. Each screenshot overlaps the previous by ~30%.
32
+
33
+ After viewing them, write 3-4 sentences describing the site's visual mood, layout patterns, color strategy, and overall feel.
34
+
35
+ 2. **`capture/extracted/tokens.json`** — Note the top 5-7 colors (HEX), all font families with their weights (e.g. `Inter (400,700)` or `Sohne (100-900 variable)`), number of sections, and number of headings/CTAs.
36
+
37
+ 3. **`capture/extracted/visible-text.txt`** — Each line is prefixed with the HTML tag: `[h1] Heading`, `[p] Body text`, `[a] Link text`. Use these tags to understand hierarchy — headings are key messages, paragraphs are supporting copy. Strip the `[tag]` prefix when quoting text in the script.
38
+
39
+ 4. **`capture/extracted/asset-descriptions.md`** — One-line-per-file summary of all downloaded assets. Note which assets are most visually striking or useful for video (hero images, logos, product screenshots).
40
+
41
+ ### Read if they exist
42
+
43
+ 5. **`capture/extracted/animations.json`** — Note if the site uses scroll-triggered animations, marquees, canvas/WebGL, or named CSS animations.
44
+
45
+ 6. **`capture/extracted/lottie-manifest.json`** — View each preview image at `capture/assets/lottie/previews/` to see what the animations look like.
46
+
47
+ 7. **`capture/extracted/video-manifest.json`** — View each preview at `capture/assets/videos/previews/` to see what each video shows.
48
+
49
+ 8. **`capture/extracted/shaders.json`** — If present, this contains the actual GLSL shader code that powers the site's WebGL visual effects (gradient waves, particle systems, noise fields). Read the fragment shaders to extract: color values used in gradients, noise algorithms, blend functions. You can recreate similar effects in your compositions using Canvas 2D or by embedding the shader patterns with a `<canvas>` + WebGL context. See the Canvas 2D and procedural art patterns in `techniques.md`.
50
+
51
+ ### On-demand (read when building scenes)
52
+
53
+ 9. **Individual images in `capture/assets/`** — Use `capture/extracted/asset-descriptions.md` as your index. View specific images when you need them for a beat.
54
+
55
+ 10. **`capture/extracted/assets-catalog.json`** — Use to find remote URLs when you need an asset that wasn't downloaded.
56
+
57
+ ### For rich captures (30+ images)
58
+
59
+ Launch a sub-agent to view all images and SVGs:
60
+
61
+ > "Read every image in capture/assets/ and every SVG in capture/assets/svgs/. For each, write one line: filename — what it shows, dominant colors, approximate size. Return the complete catalog."
62
+
63
+ Use the sub-agent's catalog as your asset reference for the rest of the workflow.
64
+
65
+ ## Gate
66
+
67
+ Print your site summary before proceeding to Step 2:
68
+
69
+ - **Site:** [name]
70
+ - **Colors:** [top 3-5 HEX values with roles]
71
+ - **Fonts:** [font families]
72
+ - **Sections:** [count] sections, [count] headings, [count] CTAs
73
+ - **Key assets:** [3-5 most useful assets for video]
74
+ - **Vibe:** [one sentence describing the visual identity]
@@ -0,0 +1,178 @@
1
+ # Step 2: Write DESIGN.md
2
+
3
+ DESIGN.md is a **brand cheat sheet** for the captured website. It encodes the visual identity so you can reference exact colors, fonts, and patterns while writing the storyboard and compositions.
4
+
5
+ DESIGN.md is NOT the creative plan. The STORYBOARD (Step 4) drives creative direction. DESIGN.md is a reference you consult, not a document you follow slavishly.
6
+
7
+ ## The 6 Sections
8
+
9
+ ### `## Overview`
10
+
11
+ 3-4 sentences. Describe the visual identity factually: layout patterns (bento grid, logo wall, hero section), color strategy, typography tone, overall feel. Be precise, not poetic.
12
+
13
+ ### `## Colors`
14
+
15
+ 5-10 key colors with HEX values from `capture/extracted/tokens.json` and their roles:
16
+
17
+ ```
18
+ - **Primary Surface**: `#020204` — deep black background
19
+ - **Primary Content**: `#FFFFFF` — high-purity white for text and borders
20
+ - **Accent Warm**: `#FB923C` — orange for CTAs and highlights
21
+ ```
22
+
23
+ Include semantic colors if the site uses color to differentiate product areas.
24
+
25
+ ### `## Typography`
26
+
27
+ Font families with weights, roles, and any distinctive usage:
28
+
29
+ ```
30
+ - **Serif**: Cormorant Garamond (Italic). Major headings, brand identity.
31
+ - **Monospace**: Geist Mono. Subheaders, labels, terminal readouts. High tracking (0.1-0.3em), all-caps.
32
+ - **Sans-Serif**: Inter. Body copy, interface elements. Small sizes (9-14px).
33
+ ```
34
+
35
+ Include sizing hierarchy if notable (hero: 64px, section: 32px, body: 16px).
36
+
37
+ ### `## Elevation`
38
+
39
+ One paragraph on depth strategy: Does the site use borders, shadows, glassmorphism, or flat color shifts? Reference specific patterns (e.g., "1px borders at white/10 opacity" or "layered backdrop-blur with thin borders").
40
+
41
+ ### `## Components`
42
+
43
+ Name every notable UI component you see in the screenshot. Be specific:
44
+
45
+ - "Cinematic Accordion" not "Cards"
46
+ - "Logo Marquee" not "Scrolling section"
47
+ - "Glass Cards with grain overlay" not "Content containers"
48
+
49
+ For each, note the distinctive visual treatment (border-radius, spacing, hover behavior).
50
+
51
+ ### `## Do's and Don'ts`
52
+
53
+ 3-5 rules each, derived from what the site actually does and doesn't do:
54
+
55
+ ```
56
+ ### Do's
57
+ - Use thin subtle borders (white/10) to separate sections
58
+ - Keep imagery desaturated with dark gradients for text readability
59
+
60
+ ### Don'ts
61
+ - Do not use bright solid background colors — stay in "The Void"
62
+ - Do not use standard drop shadows — use radial glow or bloom effects
63
+ - Do not use sharp high-speed animations — all motion should be fluid
64
+ ```
65
+
66
+ ## Rules
67
+
68
+ - Use **exact HEX values** from `capture/extracted/tokens.json`. Do not approximate.
69
+ - Name components by what you see in the screenshot, not generic terms.
70
+ - Keep it under 100 lines. This is a cheat sheet, not a design system document.
71
+ - No "Style Prompt" section — the storyboard handles creative direction.
72
+ - No "Assets" section — `capture/extracted/asset-descriptions.md` already covers this.
73
+ - No "Motion" section — the storyboard specifies motion per-beat.
74
+
75
+ ## Example
76
+
77
+ This is a real DESIGN.md from a production capture (Soulscape 2026):
78
+
79
+ ```markdown
80
+ # Design System
81
+
82
+ ## Overview
83
+
84
+ Soulscape 2026 is a cinematic, "high-signal" digital experience that positions itself as the vanguard of AI filmmaking. The visual personality is dark, technical, and premium, characterized by high-contrast "Flare" on "Void" (white on black) aesthetics. The layout is dense but organized, utilizing heavy horizontal layering and border-defined sections to evoke a wide-screen cinematic feel. Motion is a core tenet, with atmospheric grain overlays, shifting light leaks, and slow-moving marquees creating constant, breathing texture.
85
+
86
+ ## Colors
87
+
88
+ - **Primary Surface**: `#020204` (Void) - Deep black for the entire background.
89
+ - **Primary Content**: `#FFFFFF` (Flare) - High-purity white for typography and primary borders.
90
+ - **Accent 1 (Warm)**: `#FB923C` - Orange for industry/executive tiers and primary CTAs.
91
+ - **Accent 2 (Cool)**: `#60A5FA` - Blue for creative voices and summit-focused components.
92
+ - **Subtle Overlays**: `rgba(255, 255, 255, 0.02)` to `0.08` for glass backgrounds.
93
+
94
+ ## Typography
95
+
96
+ - **Serif**: Cormorant Garamond (Italic). Major headings and "Soul" brand identity. Classical cinematic contrast.
97
+ - **Monospace**: Geist Mono. Subheaders, labels, terminal readouts. High tracking (0.1-0.3em), all-caps.
98
+ - **Sans-Serif**: Inter. Body copy and interface elements. Small sizes (9-14px).
99
+
100
+ ## Elevation
101
+
102
+ - **Glassmorphism**: Components use backdrop-filter blur(10px) with thin borders (1px solid rgba(255, 255, 255, 0.08)).
103
+ - **Layering**: Depth via fixed global grain-overlay and localized light-leak gradients rather than box-shadows.
104
+ - **Interaction**: Hover triggers subtle translateY(-5px) and increased border opacity.
105
+
106
+ ## Components
107
+
108
+ - **Cinematic Accordion**: Expanding horizontal/vertical card system where panels expand from compressed state to reveal full-bleed imagery and large serif typography.
109
+ - **HUD Explorer**: Floating mobile navigation trigger styled as a "Lens" with pulsing glow and terminal readouts.
110
+ - **Slow Marquees**: Continuous horizontal tickers for partner logos and veteran listings.
111
+ - **Glass Cards**: Content containers with subtle gradients, rounded corners (2.5rem), and high-contrast iconography.
112
+ - **Grain & Flicker**: Global CSS noise filters and holographic flicker animations on UI labels.
113
+
114
+ ## Do's and Don'ts
115
+
116
+ ### Do's
117
+
118
+ - Use thin subtle borders (white/10) to separate sections rather than solid color changes.
119
+ - Maintain high letter-spacing on all Geist Mono labels.
120
+ - Use serif italics for emotional or visionary statements.
121
+ - Keep imagery desaturated or stylized with dark gradients for readability.
122
+
123
+ ### Don'ts
124
+
125
+ - Do not use bright solid background colors — the page must remain in "The Void."
126
+ - Do not use standard drop shadows — use radial glow or bloom effects instead.
127
+ - Do not use sharp high-speed animations — all motion should be fluid and breathing.
128
+ ```
129
+
130
+ Here is a contrasting example from a light, corporate brand to show the range:
131
+
132
+ ```markdown
133
+ # Design System
134
+
135
+ ## Overview
136
+
137
+ Stripe's visual personality is defined by high-precision, technical sophistication, and a fluid, forward-moving motion language. The layout is dense but expertly balanced, utilizing a "canary" grid system that favors high-density data visualizations and modular bento-style layouts. The tone is authoritative and innovative, characterized by smooth CSS animations, complex SVG graphics that mimic UI dashboards, and the iconic "hero wave" background that uses layered gradients to create depth and movement.
138
+
139
+ ## Colors
140
+
141
+ - **Brand Primary**: #635bff (The signature Stripe Blurple)
142
+ - **Text Solid**: #0a2540 (Deep navy for primary headings)
143
+ - **Text Soft**: #424770 (Subdued slate for descriptions and secondary text)
144
+ - **Surface Background**: #ffffff (White primary surface)
145
+ - **Surface Subdued**: #f6f9fc (Light gray for section contrast)
146
+ - **Accent Green**: #212d45 (Used in high-converting success UI graphics)
147
+ - **Accent Orange**: #ff6118 (Used for specific product highlights like Connect)
148
+ - **Accent Yellow**: #fc5 (Warm highlight used in bento cards)
149
+ - **Border Quiet**: #e6ebf1 (Soft borders for cards and dividers)
150
+
151
+ ## Typography
152
+
153
+ - **Primary Font**: Sohne (sohne-var), a custom neo-grotesque that balances technical precision with approachability. Used across all headers and body copy.
154
+ - **Monospace Font**: SourceCodePro-Medium, specifically for code snippets, tabular data, and technical UI identifiers.
155
+ - **Heading Scale**: hds-heading--xxl ~3rem, hds-heading--lg ~1.5rem, hds-heading--md ~1.125rem
156
+ - **Body Scale**: Standard body text centers around 1rem (16px) with a line-height of 1.5-1.6.
157
+
158
+ ## Elevation
159
+
160
+ - **Shadows**: Multi-layered shadow system (e.g., 0 30px 60px -12px rgba(50,50,93,0.25)). Shadows are diffused and deep for a floating effect.
161
+ - **Borders**: Heavy use of 1px solid borders to define bento grid boundaries instead of shadows in flat sections.
162
+ - **Glass/Layering**: Navigation overlays use backdrop-filter blur(5px) with translucent white background.
163
+
164
+ ## Components
165
+
166
+ - **Navigation Popover**: Animated dropdown spanning page margin with multi-column bento layouts.
167
+ - **Bento Cards**: Interactive grid-aligned containers with gradient hover effects that follow the cursor.
168
+ - **Customer Marquee**: Seamless horizontal scrolling loop of flat-colored SVG logos.
169
+ - **UI Graphics**: Custom HTML/CSS representations of the Stripe Dashboard with tabular numbers and mini-charts.
170
+ - **CTA Buttons**: Rounded-pill shapes with subtle scale transforms on hover.
171
+
172
+ ## Do's and Don'ts
173
+
174
+ - **Do**: Use smooth cubic-bezier(.25, 1, .5, 1) transitions for all hover states and entering animations.
175
+ - **Do**: Maintain strict vertical alignment between iconography and text labels.
176
+ - **Don't**: Use sharp-cornered cards; always apply a border-radius.
177
+ - **Don't**: Over-saturate backgrounds; stick to white or #f6f9fc and let brand assets provide color pop.
178
+ ```
@@ -0,0 +1,96 @@
1
+ # Step 3: Write the Narration Script
2
+
3
+ **Before writing, re-read DESIGN.md** — specifically the Overview and Components sections. The script should reference real product features, real stats, and real components that the website highlights. Use exact numbers from `capture/extracted/visible-text.txt`.
4
+
5
+ The script is the backbone. Everything downstream — scene durations, animation timing, beat pacing — comes from the narration. Write it before the storyboard.
6
+
7
+ Save as `SCRIPT.md` in the project directory.
8
+
9
+ ## Pacing
10
+
11
+ - **2.5 words per second** is natural speaking pace
12
+ - 15s = ~37 words. 30s = ~75 words. 60s = ~150 words
13
+ - Leave room for pauses. Silence between sentences is a feature, not dead air
14
+ - The script should feel SHORTER than the video — visual breathing room matters
15
+
16
+ ## Tone
17
+
18
+ Write like a person, not a brochure:
19
+
20
+ - Use contractions: "it's", "you'll", "that's", "we've"
21
+ - Vary sentence length — short punchy phrases mixed with longer flowing ones
22
+ - Read it out loud. If it sounds robotic, rewrite it
23
+ - Avoid jargon unless the audience expects it
24
+
25
+ ## Number Pronunciation
26
+
27
+ Write what you want the voice to say. TTS reads literally.
28
+
29
+ | On the website | Write in script as |
30
+ | -------------- | --------------------------------- |
31
+ | 135+ | more than one hundred thirty five |
32
+ | $1.9T | nearly two trillion dollars |
33
+ | 99.999% | ninety nine point nine percent |
34
+ | 200M+ | over two hundred million |
35
+ | 10x | ten times |
36
+ | API | A P I |
37
+ | stripe.com | stripe dot com |
38
+
39
+ The visual can show the exact figure while the voice rounds it.
40
+
41
+ ## Structure
42
+
43
+ For product videos from a website capture:
44
+
45
+ 1. **Hook** — what's surprising or impressive about this product? A bold claim, a provocative question, a contrast, or a striking number. This is the opening line. **Vary the hook type** — don't default to a stat every time.
46
+ 2. **Story** — what does the product do? Who uses it? Keep it concrete.
47
+ 3. **Proof** — stats, customer names, social proof. Real numbers from the website.
48
+ 4. **CTA** — what should the viewer do? "Start building at stripe dot com."
49
+
50
+ Not every video needs all four. A 15-second social ad might be Hook + Proof + CTA. A 60-second product tour uses all four with more Story.
51
+
52
+ ## The Opening Line
53
+
54
+ The most important sentence in the video. It must create tension, curiosity, or surprise in the first 3 seconds.
55
+
56
+ Patterns that work:
57
+
58
+ - **A bold claim**: "The financial infrastructure that powers the internet economy."
59
+ - **A question that provokes**: "What if your database could think?"
60
+ - **A contrast**: "Your AI agent already knows how to make videos. It just needs the right format."
61
+ - **A number that shocks**: "Nearly two trillion dollars." (Use sparingly — not every video should open with a stat.)
62
+
63
+ If the opening is generic ("Welcome to Stripe" / "Introducing our product"), start over.
64
+
65
+ ## Example
66
+
67
+ From a 62-second product launch video (team reference):
68
+
69
+ ```
70
+ Your AI agent already knows how to make videos.
71
+ It just needs the right format.
72
+
73
+ This is Hyperframes. An open source framework. HTML in, video out.
74
+
75
+ A div is a keyframe. Data attributes are your timeline.
76
+ CSS is your look. G-Sap is your animation engine.
77
+
78
+ Anything a browser can render can be a frame in your video.
79
+
80
+ CSS animations. G-Sap. Lottie. Shaders. Three.js.
81
+
82
+ Drop in music, sound effects, footage — it all composes together.
83
+
84
+ No new framework for the agent to learn.
85
+ Just HTML.
86
+
87
+ The agent writes it. The renderer captures every frame as MP4.
88
+ It's deterministic. Identical outputs, every time.
89
+
90
+ Give your agent the CLI. Tell it what to make.
91
+ Watch it build.
92
+
93
+ Hyperframes. Go make something.
94
+ ```
95
+
96
+ Note: ~140 words for 62 seconds — that's 2.3 words/sec, leaving room for pauses and visual breathing.