mindforge-cc 11.5.1 → 11.7.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 (214) hide show
  1. package/.agent/mindforge/skill-tdd.md +53 -0
  2. package/.agent/mindforge/skills-index.md +118 -0
  3. package/.agent/mindforge/systematic-debug.md +60 -0
  4. package/.agent/mindforge/wf-catalog.md +37 -0
  5. package/.agent/mindforge/wf-code-audit.md +31 -0
  6. package/.agent/mindforge/wf-competitive-analysis.md +31 -0
  7. package/.agent/mindforge/wf-deep-research.md +32 -0
  8. package/.agent/mindforge/wf-feature-planner.md +31 -0
  9. package/.agent/mindforge/wf-incident-response.md +31 -0
  10. package/.agent/mindforge/wf-onboard-codebase.md +31 -0
  11. package/.agent/mindforge/wf-perf-optimize.md +31 -0
  12. package/.agent/mindforge/wf-pr-review.md +31 -0
  13. package/.agent/mindforge/wf-refactor-plan.md +31 -0
  14. package/.agent/mindforge/wf-release-prep.md +31 -0
  15. package/.agent/mindforge/wf-tdd-sprint.md +31 -0
  16. package/.agent/mindforge/wf-tech-evaluation.md +31 -0
  17. package/.agent/skills/1password-skill/SKILL.md +156 -0
  18. package/.agent/skills/1password-skill/references/cli-examples.md +31 -0
  19. package/.agent/skills/1password-skill/references/get-started.md +21 -0
  20. package/.agent/skills/article-illustrator/SKILL.md +199 -0
  21. package/.agent/skills/article-illustrator/references/prompt-construction.md +426 -0
  22. package/.agent/skills/article-illustrator/references/style-presets.md +80 -0
  23. package/.agent/skills/article-illustrator/references/styles.md +224 -0
  24. package/.agent/skills/article-illustrator/references/usage.md +50 -0
  25. package/.agent/skills/article-illustrator/references/workflow.md +332 -0
  26. package/.agent/skills/arxiv/SKILL.md +275 -0
  27. package/.agent/skills/blogwatcher/SKILL.md +130 -0
  28. package/.agent/skills/code-wiki/SKILL.md +438 -0
  29. package/.agent/skills/code-wiki/templates/README.md +31 -0
  30. package/.agent/skills/code-wiki/templates/architecture.md +30 -0
  31. package/.agent/skills/code-wiki/templates/getting-started.md +47 -0
  32. package/.agent/skills/code-wiki/templates/module.md +38 -0
  33. package/.agent/skills/codebase-inspection/SKILL.md +109 -0
  34. package/.agent/skills/comic-creator/SKILL.md +240 -0
  35. package/.agent/skills/comic-creator/references/analysis-framework.md +176 -0
  36. package/.agent/skills/comic-creator/references/auto-selection.md +71 -0
  37. package/.agent/skills/comic-creator/references/base-prompt.md +98 -0
  38. package/.agent/skills/comic-creator/references/character-template.md +180 -0
  39. package/.agent/skills/comic-creator/references/ohmsha-guide.md +85 -0
  40. package/.agent/skills/comic-creator/references/partial-workflows.md +106 -0
  41. package/.agent/skills/comic-creator/references/storyboard-template.md +143 -0
  42. package/.agent/skills/comic-creator/references/workflow.md +401 -0
  43. package/.agent/skills/concept-diagrams/SKILL.md +355 -0
  44. package/.agent/skills/concept-diagrams/references/dashboard-patterns.md +43 -0
  45. package/.agent/skills/concept-diagrams/references/infrastructure-patterns.md +144 -0
  46. package/.agent/skills/concept-diagrams/references/physical-shape-cookbook.md +42 -0
  47. package/.agent/skills/creative-ideation/SKILL.md +144 -0
  48. package/.agent/skills/creative-ideation/references/full-prompt-library.md +110 -0
  49. package/.agent/skills/devops-cli/SKILL.md +149 -0
  50. package/.agent/skills/devops-cli/references/app-discovery.md +112 -0
  51. package/.agent/skills/devops-cli/references/authentication.md +59 -0
  52. package/.agent/skills/devops-cli/references/cli-reference.md +104 -0
  53. package/.agent/skills/devops-cli/references/running-apps.md +171 -0
  54. package/.agent/skills/devops-watchers/SKILL.md +103 -0
  55. package/.agent/skills/docker-management/SKILL.md +273 -0
  56. package/.agent/skills/domain-intel/SKILL.md +96 -0
  57. package/.agent/skills/duckduckgo-search/SKILL.md +230 -0
  58. package/.agent/skills/github-auth/SKILL.md +240 -0
  59. package/.agent/skills/github-code-review/SKILL.md +474 -0
  60. package/.agent/skills/github-code-review/references/review-output-template.md +74 -0
  61. package/.agent/skills/github-issues/SKILL.md +363 -0
  62. package/.agent/skills/github-issues/templates/bug-report.md +35 -0
  63. package/.agent/skills/github-issues/templates/feature-request.md +31 -0
  64. package/.agent/skills/github-pr-workflow/SKILL.md +360 -0
  65. package/.agent/skills/github-pr-workflow/references/ci-troubleshooting.md +183 -0
  66. package/.agent/skills/github-pr-workflow/references/conventional-commits.md +71 -0
  67. package/.agent/skills/github-pr-workflow/templates/pr-body-bugfix.md +35 -0
  68. package/.agent/skills/github-pr-workflow/templates/pr-body-feature.md +33 -0
  69. package/.agent/skills/github-repo-management/SKILL.md +509 -0
  70. package/.agent/skills/github-repo-management/references/github-api-cheatsheet.md +161 -0
  71. package/.agent/skills/godmode/SKILL.md +396 -0
  72. package/.agent/skills/godmode/references/jailbreak-templates.md +128 -0
  73. package/.agent/skills/godmode/references/refusal-detection.md +142 -0
  74. package/.agent/skills/hyperframes/SKILL.md +182 -0
  75. package/.agent/skills/hyperframes/references/cli.md +185 -0
  76. package/.agent/skills/hyperframes/references/composition.md +129 -0
  77. package/.agent/skills/hyperframes/references/features.md +289 -0
  78. package/.agent/skills/hyperframes/references/gsap.md +136 -0
  79. package/.agent/skills/hyperframes/references/troubleshooting.md +137 -0
  80. package/.agent/skills/hyperframes/references/website-to-video.md +145 -0
  81. package/.agent/skills/jupyter-live-kernel/SKILL.md +160 -0
  82. package/.agent/skills/kanban-orchestrator/SKILL.md +209 -0
  83. package/.agent/skills/kanban-worker/SKILL.md +188 -0
  84. package/.agent/skills/llm-wiki/SKILL.md +499 -0
  85. package/.agent/skills/meme-generation/SKILL.md +122 -0
  86. package/.agent/skills/node-inspect-debugger/SKILL.md +312 -0
  87. package/.agent/skills/obsidian/SKILL.md +60 -0
  88. package/.agent/skills/osint-investigation/SKILL.md +269 -0
  89. package/.agent/skills/osint-investigation/templates/source-template.md +59 -0
  90. package/.agent/skills/oss-forensics/SKILL.md +422 -0
  91. package/.agent/skills/oss-forensics/references/evidence-types.md +89 -0
  92. package/.agent/skills/oss-forensics/references/github-archive-guide.md +184 -0
  93. package/.agent/skills/oss-forensics/references/investigation-templates.md +131 -0
  94. package/.agent/skills/oss-forensics/references/recovery-techniques.md +164 -0
  95. package/.agent/skills/oss-forensics/templates/forensic-report.md +151 -0
  96. package/.agent/skills/oss-forensics/templates/malicious-package-report.md +43 -0
  97. package/.agent/skills/parallel-cli/SKILL.md +384 -0
  98. package/.agent/skills/pinggy-tunnel/SKILL.md +302 -0
  99. package/.agent/skills/pixel-art/SKILL.md +209 -0
  100. package/.agent/skills/pixel-art/references/palettes.md +49 -0
  101. package/.agent/skills/plan/SKILL.md +331 -0
  102. package/.agent/skills/polymarket/SKILL.md +75 -0
  103. package/.agent/skills/polymarket/references/api-endpoints.md +220 -0
  104. package/.agent/skills/python-debugpy/SKILL.md +368 -0
  105. package/.agent/skills/requesting-code-review/SKILL.md +273 -0
  106. package/.agent/skills/research-paper-writing/SKILL.md +2367 -0
  107. package/.agent/skills/research-paper-writing/references/autoreason-methodology.md +394 -0
  108. package/.agent/skills/research-paper-writing/references/checklists.md +434 -0
  109. package/.agent/skills/research-paper-writing/references/citation-workflow.md +563 -0
  110. package/.agent/skills/research-paper-writing/references/experiment-patterns.md +728 -0
  111. package/.agent/skills/research-paper-writing/references/human-evaluation.md +476 -0
  112. package/.agent/skills/research-paper-writing/references/paper-types.md +481 -0
  113. package/.agent/skills/research-paper-writing/references/reviewer-guidelines.md +433 -0
  114. package/.agent/skills/research-paper-writing/references/sources.md +191 -0
  115. package/.agent/skills/research-paper-writing/references/writing-guide.md +474 -0
  116. package/.agent/skills/research-paper-writing/templates/README.md +251 -0
  117. package/.agent/skills/rest-graphql-debug/SKILL.md +507 -0
  118. package/.agent/skills/s6-container-supervision/SKILL.md +171 -0
  119. package/.agent/skills/scrapling/SKILL.md +328 -0
  120. package/.agent/skills/sherlock/SKILL.md +186 -0
  121. package/.agent/skills/simplify-code/SKILL.md +168 -0
  122. package/.agent/skills/skill-authoring/SKILL.md +158 -0
  123. package/.agent/skills/spike/SKILL.md +190 -0
  124. package/.agent/skills/subagent-driven-development/SKILL.md +345 -0
  125. package/.agent/skills/subagent-driven-development/references/context-budget-discipline.md +53 -0
  126. package/.agent/skills/subagent-driven-development/references/gates-taxonomy.md +93 -0
  127. package/.agent/skills/systematic-debugging/SKILL.md +360 -0
  128. package/.agent/skills/test-driven-development/SKILL.md +336 -0
  129. package/.agent/skills/video-orchestrator/SKILL.md +194 -0
  130. package/.agent/skills/video-orchestrator/references/examples.md +227 -0
  131. package/.agent/skills/video-orchestrator/references/intake.md +166 -0
  132. package/.agent/skills/video-orchestrator/references/kanban-setup.md +278 -0
  133. package/.agent/skills/video-orchestrator/references/monitoring.md +180 -0
  134. package/.agent/skills/video-orchestrator/references/role-archetypes.md +298 -0
  135. package/.agent/skills/video-orchestrator/references/tool-matrix.md +317 -0
  136. package/.agent/skills/web-pentest/SKILL.md +332 -0
  137. package/.agent/skills/web-pentest/references/bypass-techniques.md +133 -0
  138. package/.agent/skills/web-pentest/references/exploitation-techniques.md +204 -0
  139. package/.agent/skills/web-pentest/references/scope-enforcement.md +110 -0
  140. package/.agent/skills/web-pentest/references/vuln-taxonomy.md +81 -0
  141. package/.agent/skills/web-pentest/templates/authorization.md +69 -0
  142. package/.agent/skills/web-pentest/templates/pentest-report.md +178 -0
  143. package/.claude/commands/mindforge/skill-tdd.md +53 -0
  144. package/.claude/commands/mindforge/skills-index.md +118 -0
  145. package/.claude/commands/mindforge/systematic-debug.md +60 -0
  146. package/.claude/commands/mindforge/wf-catalog.md +37 -0
  147. package/.claude/commands/mindforge/wf-code-audit.md +31 -0
  148. package/.claude/commands/mindforge/wf-competitive-analysis.md +31 -0
  149. package/.claude/commands/mindforge/wf-deep-research.md +32 -0
  150. package/.claude/commands/mindforge/wf-feature-planner.md +31 -0
  151. package/.claude/commands/mindforge/wf-incident-response.md +31 -0
  152. package/.claude/commands/mindforge/wf-onboard-codebase.md +31 -0
  153. package/.claude/commands/mindforge/wf-perf-optimize.md +31 -0
  154. package/.claude/commands/mindforge/wf-pr-review.md +31 -0
  155. package/.claude/commands/mindforge/wf-refactor-plan.md +31 -0
  156. package/.claude/commands/mindforge/wf-release-prep.md +31 -0
  157. package/.claude/commands/mindforge/wf-tdd-sprint.md +31 -0
  158. package/.claude/commands/mindforge/wf-tech-evaluation.md +31 -0
  159. package/.mindforge/config.json +2 -2
  160. package/.mindforge/dynamic-workflows/REGISTRY.md +65 -0
  161. package/.mindforge/dynamic-workflows/index.json +171 -0
  162. package/.mindforge/dynamic-workflows/scripts/code-audit.js +103 -0
  163. package/.mindforge/dynamic-workflows/scripts/competitive-analysis.js +85 -0
  164. package/.mindforge/dynamic-workflows/scripts/deep-research.js +151 -0
  165. package/.mindforge/dynamic-workflows/scripts/feature-planner.js +104 -0
  166. package/.mindforge/dynamic-workflows/scripts/incident-response.js +106 -0
  167. package/.mindforge/dynamic-workflows/scripts/onboard-codebase.js +102 -0
  168. package/.mindforge/dynamic-workflows/scripts/perf-optimize.js +128 -0
  169. package/.mindforge/dynamic-workflows/scripts/pr-review.js +87 -0
  170. package/.mindforge/dynamic-workflows/scripts/refactor-plan.js +121 -0
  171. package/.mindforge/dynamic-workflows/scripts/release-prep.js +102 -0
  172. package/.mindforge/dynamic-workflows/scripts/tdd-sprint.js +103 -0
  173. package/.mindforge/dynamic-workflows/scripts/tech-evaluation.js +72 -0
  174. package/.mindforge/memory/sync-manifest.json +1 -1
  175. package/.mindforge/skills/arxiv/SKILL.md +294 -0
  176. package/.mindforge/skills/blogwatcher/SKILL.md +147 -0
  177. package/.mindforge/skills/code-wiki/SKILL.md +457 -0
  178. package/.mindforge/skills/codebase-inspection/SKILL.md +126 -0
  179. package/.mindforge/skills/concept-diagrams/SKILL.md +373 -0
  180. package/.mindforge/skills/creative-ideation/SKILL.md +162 -0
  181. package/.mindforge/skills/domain-intel/SKILL.md +116 -0
  182. package/.mindforge/skills/duckduckgo-search/SKILL.md +249 -0
  183. package/.mindforge/skills/github-code-review/SKILL.md +493 -0
  184. package/.mindforge/skills/github-issues/SKILL.md +382 -0
  185. package/.mindforge/skills/github-pr-workflow/SKILL.md +379 -0
  186. package/.mindforge/skills/jupyter-live-kernel/SKILL.md +179 -0
  187. package/.mindforge/skills/kanban-orchestrator/SKILL.md +227 -0
  188. package/.mindforge/skills/kanban-worker/SKILL.md +206 -0
  189. package/.mindforge/skills/meme-generation/SKILL.md +141 -0
  190. package/.mindforge/skills/obsidian/SKILL.md +80 -0
  191. package/.mindforge/skills/osint-investigation/SKILL.md +288 -0
  192. package/.mindforge/skills/oss-forensics/SKILL.md +421 -0
  193. package/.mindforge/skills/pixel-art/SKILL.md +228 -0
  194. package/.mindforge/skills/plan/SKILL.md +350 -0
  195. package/.mindforge/skills/requesting-code-review/SKILL.md +292 -0
  196. package/.mindforge/skills/research-paper-writing/SKILL.md +2384 -0
  197. package/.mindforge/skills/scrapling/SKILL.md +345 -0
  198. package/.mindforge/skills/sherlock/SKILL.md +203 -0
  199. package/.mindforge/skills/simplify-code/SKILL.md +187 -0
  200. package/.mindforge/skills/spike/SKILL.md +209 -0
  201. package/.mindforge/skills/subagent-driven-development/SKILL.md +364 -0
  202. package/.mindforge/skills/systematic-debugging/SKILL.md +379 -0
  203. package/.mindforge/skills/test-driven-development/SKILL.md +355 -0
  204. package/.mindforge/skills/web-pentest/SKILL.md +327 -0
  205. package/CHANGELOG.md +71 -0
  206. package/MINDFORGE.md +2 -2
  207. package/README.md +72 -3
  208. package/RELEASENOTES.md +109 -0
  209. package/bin/installer-core.js +6 -2
  210. package/bin/mindforge-cli.js +7 -0
  211. package/bin/workflows/workflow-runner.js +110 -0
  212. package/docs/commands-reference.md +25 -0
  213. package/docs/getting-started.md +42 -5
  214. package/package.json +2 -1
@@ -0,0 +1,289 @@
1
+ # HyperFrames Feature Reference
2
+
3
+ Load this file when a composition needs captions, TTS narration, audio-reactive visuals, marker-style text highlighting, or scene transitions. All patterns here are deterministic (no `Math.random()`, no `Date.now()`, no runtime audio analysis) and live on the same GSAP timeline as the rest of the composition.
4
+
5
+ ## Captions
6
+
7
+ ### Language Rule (Non-Negotiable)
8
+
9
+ **Never use `.en` whisper models unless the audio is confirmed English.** `.en` models TRANSLATE non-English audio into English instead of transcribing it.
10
+
11
+ - User says the language → `npx hyperframes transcribe audio.mp3 --model small --language <code>` (no `.en`)
12
+ - User confirms English → `--model small.en`
13
+ - Language unknown → `--model small` (auto-detects)
14
+
15
+ ### Style Detection
16
+
17
+ If the user doesn't specify a caption style, detect it from the transcript tone:
18
+
19
+ | Tone | Font mood | Animation | Color | Size |
20
+ | ------------ | ------------------------ | ---------------------------------- | --------------------------- | ------- |
21
+ | Hype / launch | Heavy condensed, 800-900 | Scale-pop, `back.out(1.7)`, 0.1-0.2s | Bright on dark | 72-96px |
22
+ | Corporate | Clean sans, 600-700 | Fade+slide, `power3.out`, 0.3s | White / neutral + muted accent | 56-72px |
23
+ | Tutorial | Mono / clean sans, 500-600 | Typewriter or fade, 0.4-0.5s | High contrast, minimal | 48-64px |
24
+ | Storytelling | Serif / elegant, 400-500 | Slow fade, `power2.out`, 0.5-0.6s | Warm muted tones | 44-56px |
25
+ | Social | Rounded sans, 700-800 | Bounce, `elastic.out`, word-by-word | Playful, colored pills | 56-80px |
26
+
27
+ ### Word Grouping
28
+
29
+ - High energy: 2-3 words, quick turnover.
30
+ - Conversational: 3-5 words, natural phrases.
31
+ - Measured / calm: 4-6 words.
32
+
33
+ Break on sentence boundaries, 150ms+ pauses, or a max word count.
34
+
35
+ ### Positioning
36
+
37
+ - Landscape (1920x1080): bottom 80-120px, centered.
38
+ - Portrait (1080x1920): ~600-700px from bottom, centered.
39
+ - Never cover the subject's face. `position: absolute` (never relative). One caption group visible at a time.
40
+
41
+ ### Text Overflow Prevention
42
+
43
+ Use the runtime helper so captions never overflow:
44
+
45
+ ```js
46
+ const result = window.__hyperframes.fitTextFontSize(group.text.toUpperCase(), {
47
+ fontFamily: "Outfit",
48
+ fontWeight: 900,
49
+ maxWidth: 1600, // 1600 landscape, 900 portrait
50
+ });
51
+ el.style.fontSize = result.fontSize + "px";
52
+ ```
53
+
54
+ When per-word styling uses `scale > 1.0`, compute `maxWidth = safeWidth / maxScale` to leave headroom. Container needs `overflow: visible` (not `hidden` — hidden clips scaled emphasis words and glow).
55
+
56
+ ### Caption Exit Guarantee
57
+
58
+ Every group MUST have a hard kill after its exit tween — otherwise groups leak into later ones:
59
+
60
+ ```js
61
+ tl.to(groupEl, { opacity: 0, scale: 0.95, duration: 0.12, ease: "power2.in" }, group.end - 0.12);
62
+ tl.set(groupEl, { opacity: 0, visibility: "hidden" }, group.end); // deterministic kill
63
+ ```
64
+
65
+ ### Per-Word Styling
66
+
67
+ Scan the transcript for words that deserve distinct treatment:
68
+
69
+ - Brand / product names — larger, unique color.
70
+ - ALL CAPS — scale boost, flash, accent color.
71
+ - Numbers / statistics — bold weight, accent color.
72
+ - Emotional keywords — exaggerated animation (overshoot, bounce).
73
+ - Call-to-action — highlight, underline, color pop.
74
+
75
+ ## TTS (Kokoro-82M)
76
+
77
+ Local, no API key. Runs on CPU. Model downloads on first use (~311 MB + ~27 MB voices, cached in `~/.cache/hyperframes/tts/`).
78
+
79
+ ### Voice Selection
80
+
81
+ | Content type | Voice | Why |
82
+ | ------------- | ----------------------- | --------------------------- |
83
+ | Product demo | `af_heart` / `af_nova` | Warm, professional |
84
+ | Tutorial | `am_adam` / `bf_emma` | Neutral, easy to follow |
85
+ | Marketing | `af_sky` / `am_michael` | Energetic or authoritative |
86
+ | Documentation | `bf_emma` / `bm_george` | Clear British English |
87
+ | Casual | `af_heart` / `af_sky` | Approachable, natural |
88
+
89
+ Run `npx hyperframes tts --list` for all 54 voices across 8 languages.
90
+
91
+ ### Multilingual Phonemization
92
+
93
+ Voice ID first letter encodes language: `a`=American English, `b`=British English, `e`=Spanish, `f`=French, `h`=Hindi, `i`=Italian, `j`=Japanese, `p`=Brazilian Portuguese, `z`=Mandarin. The CLI auto-infers the phonemizer locale from that prefix — you don't need `--lang` when voice and text match.
94
+
95
+ ```bash
96
+ npx hyperframes tts "La reunión empieza a las nueve" --voice ef_dora --output es.wav
97
+ npx hyperframes tts "今日はいい天気ですね" --voice jf_alpha --output ja.wav
98
+ ```
99
+
100
+ Pass `--lang` only to override auto-detection (e.g. stylized accents):
101
+
102
+ ```bash
103
+ npx hyperframes tts "Hello there" --voice af_heart --lang fr-fr --output accented.wav
104
+ ```
105
+
106
+ Valid `--lang` codes: `en-us`, `en-gb`, `es`, `fr-fr`, `hi`, `it`, `pt-br`, `ja`, `zh`. Non-English phonemization requires `espeak-ng` installed system-wide (`apt-get install espeak-ng` / `brew install espeak-ng`).
107
+
108
+ ### Speed
109
+
110
+ - `0.7-0.8` — tutorial, complex content
111
+ - `1.0` — natural (default)
112
+ - `1.1-1.2` — intros, upbeat content
113
+ - `1.5+` — rarely appropriate
114
+
115
+ ### TTS + Captions Workflow
116
+
117
+ ```bash
118
+ npx hyperframes tts script.txt --voice af_heart --output narration.wav
119
+ npx hyperframes transcribe narration.wav # → transcript.json (word-level)
120
+ ```
121
+
122
+ ## Audio-Reactive Visuals
123
+
124
+ Drive visuals from music, voice, or sound. Any GSAP-tweenable property can respond to pre-extracted audio data.
125
+
126
+ ### Data format
127
+
128
+ ```js
129
+ const AUDIO_DATA = {
130
+ fps: 30,
131
+ totalFrames: 900,
132
+ frames: [{ bands: [0.82, 0.45, 0.31, /* ... */] }, /* ... */],
133
+ };
134
+ ```
135
+
136
+ `frames[i].bands[]` are frequency band amplitudes, 0-1. Index 0 = bass, higher indices = treble. Each band is normalized independently across the full track.
137
+
138
+ ### Mapping audio to visuals
139
+
140
+ | Audio signal | Visual property | Effect |
141
+ | ---------------------- | --------------------------------- | -------------------------- |
142
+ | Bass (`bands[0]`) | `scale` | Pulse on beat |
143
+ | Treble (`bands[12-14]`)| `textShadow`, `boxShadow` | Glow intensity |
144
+ | Overall amplitude | `opacity`, `y`, `backgroundColor` | Breathe, lift, color shift |
145
+ | Mid-range (`bands[4-8]`)| `borderRadius`, `width` | Shape morphing |
146
+
147
+ Any GSAP-tweenable property works — `clipPath`, `filter`, SVG attributes, CSS custom properties. Let content guide the visual and let audio drive its behavior. **Never add** equalizer bars, spectrum analyzers, waveform displays, rainbow cycling, or generic particle systems — they look cheap.
148
+
149
+ ### Sampling pattern (required)
150
+
151
+ Audio reactivity needs per-frame sampling via a `for` loop of `tl.call()`, NOT a single tween. A single long tween does NOT react to audio:
152
+
153
+ ```js
154
+ for (let f = 0; f < AUDIO_DATA.totalFrames; f++) {
155
+ tl.call(
156
+ ((frame) => () => draw(frame))(AUDIO_DATA.frames[f]),
157
+ [],
158
+ f / AUDIO_DATA.fps,
159
+ );
160
+ }
161
+ ```
162
+
163
+ ### Gotchas
164
+
165
+ - **textShadow on a container** with semi-transparent children (e.g. inactive caption words at `rgba(255,255,255,0.3)`) renders a visible glow rectangle behind every child. Apply the glow to active words individually, not to the container.
166
+ - **Subtlety for text** — 3-6% scale variation, soft glow. Heavy pulsing makes text unreadable.
167
+ - **Go bigger on non-text** — backgrounds and shapes can handle 10-30% swings.
168
+ - **Deterministic only** — pre-extracted audio data, no Web Audio API, no runtime analysis.
169
+
170
+ ## Marker-Style Highlighting
171
+
172
+ Deterministic CSS + GSAP implementations of the classic "highlight / circle / burst / scribble / sketchout" drawing modes for emphasizing text. Fully seekable — no animated SVG filters, no JS timers.
173
+
174
+ ### Highlight (yellow marker sweep)
175
+
176
+ ```html
177
+ <span class="mh-highlight-wrap">
178
+ <span class="mh-highlight-bar" id="hl-1"></span>
179
+ <span class="mh-highlight-text">highlighted text</span>
180
+ </span>
181
+ ```
182
+
183
+ ```css
184
+ .mh-highlight-wrap { position: relative; display: inline; }
185
+ .mh-highlight-bar {
186
+ position: absolute; inset: 0 -6px;
187
+ background: #fdd835; opacity: 0.35;
188
+ transform: scaleX(0); transform-origin: left center;
189
+ border-radius: 3px; z-index: 0;
190
+ }
191
+ .mh-highlight-text { position: relative; z-index: 1; }
192
+ ```
193
+
194
+ ```js
195
+ tl.to("#hl-1", { scaleX: 1, duration: 0.5, ease: "power2.out" }, 0.6);
196
+ ```
197
+
198
+ Multi-line: apply to `.mh-highlight-bar` with `stagger: 0.3`.
199
+
200
+ ### Circle
201
+
202
+ Hand-drawn ellipse around a word. Use a positioned `::before` with `border-radius: 50%`, slight rotation, and `clip-path` to avoid covering the letters. Animate `clip-path` or `stroke-dashoffset` on an inline SVG circle.
203
+
204
+ ### Burst
205
+
206
+ Short radiating lines around a word. Render 6-12 small `<span>` elements positioned in a radial pattern; animate `scaleY` from 0.
207
+
208
+ ### Scribble
209
+
210
+ A chaotic overlay created by animating `stroke-dashoffset` on an inline SVG `<path>` with a `d` attribute describing a zig-zag. Seed values, never `Math.random()`.
211
+
212
+ ### Sketchout
213
+
214
+ A rough rectangle outline. Two `<rect>`s with slight `transform` offsets, animated via `stroke-dashoffset`.
215
+
216
+ All five modes tween CSS transforms or `stroke-dashoffset` only — both tween cleanly, are deterministic, and seek correctly.
217
+
218
+ ## Scene Transitions
219
+
220
+ Every multi-scene composition MUST use transitions. No jump cuts.
221
+
222
+ ### Energy → primary transition
223
+
224
+ | Energy | CSS primary | Shader primary | Accent | Duration | Easing |
225
+ | ------------------------------------ | ---------------------------- | ------------------------------------ | ------------------------------ | --------- | ------------------------ |
226
+ | **Calm** (wellness, brand, luxury) | Blur crossfade, focus pull | Cross-warp morph, thermal distortion | Light leak, circle iris | 0.5-0.8s | `sine.inOut`, `power1` |
227
+ | **Medium** (corporate, SaaS) | Push slide, staggered blocks | Whip pan, cinematic zoom | Squeeze, vertical push | 0.3-0.5s | `power2`, `power3` |
228
+ | **High** (promos, sports, launch) | Zoom through, overexposure | Ridged burn, glitch, chromatic split | Staggered blocks, gravity drop | 0.15-0.3s | `power4`, `expo` |
229
+
230
+ Pick ONE primary (60-70% of scene changes) plus 1-2 accents. Never use a different transition for every scene.
231
+
232
+ ### Mood → transition type
233
+
234
+ | Mood | Transitions |
235
+ | ------------------------ | --------------------------------------------------------------------------- |
236
+ | Warm / inviting | Light leak, blur crossfade, focus pull, film burn · _Shader:_ thermal distortion, cross-warp morph |
237
+ | Cold / clinical | Squeeze, zoom out, blinds, shutter, grid dissolve · _Shader:_ gravitational lens |
238
+ | Editorial / magazine | Push slide, vertical push, diagonal split, shutter · _Shader:_ whip pan |
239
+ | Tech / futuristic | Grid dissolve, staggered blocks, blinds · _Shader:_ glitch, chromatic split |
240
+ | Tense / edgy | Glitch, VHS, chromatic aberration, ripple · _Shader:_ ridged burn, domain warp |
241
+ | Playful / fun | Elastic push, 3D flip, circle iris, morph circle · _Shader:_ swirl vortex, ripple waves |
242
+ | Dramatic / cinematic | Zoom through, gravity drop, overexposure · _Shader:_ cinematic zoom, gravitational lens |
243
+ | Premium / luxury | Focus pull, blur crossfade, color dip to black · _Shader:_ cross-warp morph |
244
+ | Retro / analog | Film burn, light leak, VHS, clock wipe · _Shader:_ light leak |
245
+
246
+ ### Presets
247
+
248
+ | Preset | Duration | Easing |
249
+ | ---------- | -------- | ----------------- |
250
+ | `snappy` | 0.2s | `power4.inOut` |
251
+ | `smooth` | 0.4s | `power2.inOut` |
252
+ | `gentle` | 0.6s | `sine.inOut` |
253
+ | `dramatic` | 0.5s | `power3.in` → out |
254
+ | `instant` | 0.15s | `expo.inOut` |
255
+ | `luxe` | 0.7s | `power1.inOut` |
256
+
257
+ ### Install a shader transition
258
+
259
+ ```bash
260
+ npx hyperframes add flash-through-white
261
+ npx hyperframes add --list
262
+ ```
263
+
264
+ ### CSS vs shader
265
+
266
+ - **CSS transitions** animate scene containers with opacity, transforms, `clip-path`, and filters. Simpler to set up.
267
+ - **Shader transitions** composite both scene textures per-pixel on a WebGL canvas — can warp, dissolve, and morph in ways CSS cannot. Import from `@hyperframes/shader-transitions` instead of writing raw GLSL.
268
+
269
+ Don't mix CSS and shader transitions in the same composition — once a composition uses shader transitions, the WebGL canvas replaces DOM-based scene switching for every transition.
270
+
271
+ ### Shader-compatible CSS rules
272
+
273
+ Shader transitions capture DOM scenes to WebGL textures via html2canvas. The canvas 2D pipeline doesn't match CSS exactly:
274
+
275
+ 1. No `transparent` keyword in gradients — use the target color at zero alpha: `rgba(200,117,51,0)` not `transparent`. (Canvas interpolates `transparent` as `rgba(0,0,0,0)` creating dark fringes.)
276
+ 2. No gradient backgrounds on elements thinner than 4px. Use solid `background-color` on thin accent lines.
277
+ 3. No CSS variables (`var()`) on elements visible during capture — html2canvas doesn't reliably resolve custom properties. Use literal color values.
278
+ 4. Mark uncapturable decoratives with `data-no-capture` — they stay on the live DOM but are absent from the shader texture.
279
+ 5. No gradient opacity below 0.15 — renders differently in canvas vs CSS.
280
+ 6. Every `.scene` div must have explicit `background-color`, AND pass the same color as `bgColor` in the `init()` config. Without either, the texture renders as black.
281
+
282
+ These rules only apply to shader transition compositions. CSS-only compositions have no restrictions.
283
+
284
+ ### Don't
285
+
286
+ - Mix CSS and shader transitions in one composition.
287
+ - Use exit animations on any scene except the final scene — the transition IS the exit.
288
+ - Introduce a new transition type every scene — pick one primary + 1-2 accents.
289
+ - Use transitions that create visible geometric repetition (grids, hex cells, uniform dots) — they look artificial regardless of the math behind them. Prefer organic noise (FBM, domain warping).
@@ -0,0 +1,136 @@
1
+ # GSAP for HyperFrames
2
+
3
+ GSAP is the animation engine for all HyperFrames compositions. Load from CDN inside the composition:
4
+
5
+ ```html
6
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
7
+ ```
8
+
9
+ ## Core Tween Methods
10
+
11
+ - **`gsap.to(targets, vars)`** — animate from current state to `vars`. Most common.
12
+ - **`gsap.from(targets, vars)`** — animate from `vars` to current state (entrances).
13
+ - **`gsap.fromTo(targets, fromVars, toVars)`** — explicit start and end.
14
+ - **`gsap.set(targets, vars)`** — apply immediately (duration 0). Don't use on clip elements that enter later — use `tl.set(selector, vars, time)` inside the timeline instead.
15
+
16
+ Always use **camelCase** property names (`backgroundColor`, `rotationX`, not `background-color`).
17
+
18
+ ## Common vars
19
+
20
+ - **`duration`** — seconds (default 0.5).
21
+ - **`delay`** — seconds before start.
22
+ - **`ease`** — `"power1.out"` (default), `"power3.inOut"`, `"back.out(1.7)"`, `"elastic.out(1, 0.3)"`, `"none"`, `"expo.out"`, `"circ.inOut"`.
23
+ - **`stagger`** — number `0.1` or object: `{ amount: 0.3, from: "center" }`, `{ each: 0.1, from: "random" }`.
24
+ - **`overwrite`** — `false` (default), `true`, or `"auto"`.
25
+ - **`repeat`** — number (never `-1` in HyperFrames). **`yoyo`** — alternates direction with repeat.
26
+ - **`onComplete`**, **`onStart`**, **`onUpdate`** — callbacks.
27
+ - **`immediateRender`** — default `true` for `from()`/`fromTo()`. Set `false` on later tweens targeting the same property+element to avoid overwrite surprises.
28
+
29
+ ## Transforms
30
+
31
+ Prefer GSAP's transform aliases over raw CSS `transform`:
32
+
33
+ | GSAP property | Equivalent |
34
+ | --------------------------- | -------------------------- |
35
+ | `x`, `y`, `z` | translateX/Y/Z (px) |
36
+ | `xPercent`, `yPercent` | translateX/Y (%) |
37
+ | `scale`, `scaleX`, `scaleY` | scale |
38
+ | `rotation` | rotate (deg) |
39
+ | `rotationX`, `rotationY` | 3D rotate |
40
+ | `skewX`, `skewY` | skew |
41
+ | `transformOrigin` | transform-origin |
42
+
43
+ - **`autoAlpha`** — prefer over `opacity`. At 0, also sets `visibility: hidden`.
44
+ - **CSS variables** — `"--hue": 180`.
45
+ - **Directional rotation** — `"360_cw"`, `"-170_short"`, `"90_ccw"`.
46
+ - **`clearProps`** — `"all"` or comma-separated; removes inline styles on complete.
47
+ - **Relative values** — `"+=20"`, `"-=10"`, `"*=2"`.
48
+
49
+ ## Function-based Values
50
+
51
+ ```js
52
+ gsap.to(".item", {
53
+ x: (i, target, targets) => i * 50,
54
+ stagger: 0.1,
55
+ });
56
+ ```
57
+
58
+ ## Easing
59
+
60
+ Built-in eases: `power1` through `power4`, `back`, `bounce`, `circ`, `elastic`, `expo`, `sine`. Each has `.in`, `.out`, `.inOut`.
61
+
62
+ Rule of thumb:
63
+ - Entrances: `power3.out`, `expo.out`, `back.out(1.4)`
64
+ - Exits: `power2.in`, `expo.in`
65
+ - Scrubbed sections: `none` (linear)
66
+ - Vary eases across entrance tweens within a scene — at least 3 different eases.
67
+
68
+ ## Defaults
69
+
70
+ ```js
71
+ gsap.defaults({ duration: 0.6, ease: "power2.out" });
72
+ ```
73
+
74
+ ## Timelines (HyperFrames primary pattern)
75
+
76
+ ```js
77
+ window.__timelines = window.__timelines || {};
78
+
79
+ const tl = gsap.timeline({ paused: true, defaults: { duration: 0.6, ease: "power2.out" } });
80
+
81
+ tl.from(".title", { y: 50, opacity: 0 }, 0.3);
82
+ tl.from(".subtitle", { y: 30, opacity: 0 }, 0.5);
83
+ tl.from(".cta", { scale: 0.8, opacity: 0, ease: "back.out(1.7)" }, 0.8);
84
+
85
+ window.__timelines["root"] = tl;
86
+ ```
87
+
88
+ ### Position parameter
89
+
90
+ Third argument to `.from()` / `.to()` / `.add()`:
91
+
92
+ - Absolute seconds: `0.5`, `2.1`.
93
+ - Relative to end: `">+0.2"` (0.2s after previous), `"<"` (same time as previous), `"<+0.3"` (0.3s after previous's start).
94
+ - Named labels: `tl.addLabel("act2", 5); tl.from(".x", { y: 30 }, "act2");`
95
+
96
+ ### Nesting
97
+
98
+ HyperFrames auto-nests sub-composition timelines. **Do not** manually `tl.add(subTl)` — the framework wires sub-timelines into the parent at the sub-composition's `data-start`.
99
+
100
+ ### Playback
101
+
102
+ The player controls playback. Don't call `tl.play()`, `tl.pause()`, or `tl.reverse()` at construction time. `{ paused: true }` is required.
103
+
104
+ ## Stagger
105
+
106
+ ```js
107
+ // even distribution
108
+ tl.from(".card", { opacity: 0, y: 40, stagger: 0.1 });
109
+
110
+ // control total amount
111
+ tl.from(".card", { opacity: 0, stagger: { amount: 0.6, from: "center" } });
112
+
113
+ // deterministic "random" stagger (HyperFrames compositions must be deterministic)
114
+ tl.from(".dot", { opacity: 0, stagger: { each: 0.05, from: "random" } });
115
+ ```
116
+
117
+ `stagger.from`: `"start"` | `"end"` | `"center"` | `"edges"` | `"random"` | index | `[x, y]` for grid.
118
+
119
+ ## Performance
120
+
121
+ - Animate transforms (`x`, `y`, `scale`, `rotation`, `opacity`) — cheap, GPU-accelerated.
122
+ - Avoid animating `width`, `height`, `top`, `left`, `margin` — causes layout thrash.
123
+ - Avoid box-shadow or filter animations on large elements — expensive.
124
+ - `will-change` is rarely needed; GSAP handles promotion.
125
+
126
+ ## gsap.matchMedia (rarely needed in HyperFrames)
127
+
128
+ Compositions have fixed dimensions (`data-width`/`data-height`), so responsive breakpoints don't apply. You may still use `matchMedia` for `prefers-reduced-motion` when authoring UI previews, but it's not used in rendered video output.
129
+
130
+ ## Don't Do
131
+
132
+ - `repeat: -1` anywhere — breaks the capture engine.
133
+ - `Math.random()`, `Date.now()`, performance.now()` inside tween values — non-deterministic.
134
+ - `async` / `setTimeout` / `Promise` around timeline construction — the capture engine reads `window.__timelines` synchronously.
135
+ - Animate `visibility` or `display` directly — use `autoAlpha`.
136
+ - `gsap.set()` on clip elements that enter later in the timeline — they don't exist in the DOM at page-load. Use `tl.set(sel, vars, time)` inside the timeline.
@@ -0,0 +1,137 @@
1
+ # Troubleshooting
2
+
3
+ ## `HeadlessExperimental.beginFrame' wasn't found` (first thing to check)
4
+
5
+ **Symptom:** `npx hyperframes render` fails with:
6
+
7
+ ```
8
+ ✗ Render failed
9
+ Protocol error (HeadlessExperimental.beginFrame):
10
+ 'HeadlessExperimental.beginFrame' wasn't found
11
+ ```
12
+
13
+ **Cause:** Chromium 147+ removed the `HeadlessExperimental.beginFrame` CDP command. This affected sandbox environments (e.g., OpenClaw, some containerized agent hosts) that ship modern Chromium as the system browser. See [hyperframes#294](https://github.com/heygen-com/hyperframes/issues/294).
14
+
15
+ **Fix (permanent — preferred):** upgrade.
16
+
17
+ ```bash
18
+ npx hyperframes upgrade -y
19
+ # or
20
+ npm install -g hyperframes@latest
21
+ ```
22
+
23
+ `hyperframes >= 0.4.2` auto-detects whether the resolved browser supports `beginFrame` (checks for `chrome-headless-shell` in the binary path) and falls back to screenshot capture mode when it doesn't. Commit [`4c72ba4`](https://github.com/heygen-com/hyperframes/commit/4c72ba4a36ec2bd6733f7b9cb2a9e63f9fb234b9) (March 2026) shipped this auto-detect.
24
+
25
+ **Fix (escape hatch — if you can't upgrade):**
26
+
27
+ ```bash
28
+ export PRODUCER_FORCE_SCREENSHOT=true
29
+ npx hyperframes render
30
+ ```
31
+
32
+ This forces screenshot mode regardless of the binary. Screenshot mode is slightly slower but visually identical.
33
+
34
+ **Fix (prevent — recommended):** install `chrome-headless-shell` so the engine can use the fast BeginFrame path:
35
+
36
+ ```bash
37
+ npx puppeteer browsers install chrome-headless-shell
38
+ # or let the CLI do it
39
+ npx hyperframes browser --install
40
+ ```
41
+
42
+ `scripts/setup.sh` runs this automatically.
43
+
44
+ ## `npx hyperframes render` hangs for 120s then times out
45
+
46
+ **Cause:** the resolved browser is system Chrome (e.g., `/usr/bin/google-chrome`) and doesn't support the BeginFrame path, but auto-detect also missed it (older `hyperframes` version).
47
+
48
+ **Fix:**
49
+ 1. Check which binary is being used: `npx hyperframes browser --path`
50
+ 2. If it's system Chrome, either:
51
+ - Install `chrome-headless-shell`: `npx hyperframes browser --install`, OR
52
+ - Set the escape hatch: `export PRODUCER_FORCE_SCREENSHOT=true`, OR
53
+ - Upgrade: `npx hyperframes upgrade -y`
54
+
55
+ ## `ffmpeg: command not found`
56
+
57
+ Install FFmpeg via your system package manager:
58
+
59
+ | OS / distro | Command |
60
+ | --------------- | ----------------------------------- |
61
+ | Ubuntu / Debian | `sudo apt-get install -y ffmpeg` |
62
+ | Fedora / RHEL | `sudo dnf install -y ffmpeg` |
63
+ | Arch | `sudo pacman -S ffmpeg` |
64
+ | macOS | `brew install ffmpeg` |
65
+ | Windows | `winget install Gyan.FFmpeg` |
66
+
67
+ Verify: `ffmpeg -version`.
68
+
69
+ ## `Node version X is not supported`
70
+
71
+ HyperFrames requires Node.js >= 22. Check with `node --version`.
72
+
73
+ - **nvm:** `nvm install 22 && nvm use 22`
74
+ - **Homebrew (macOS):** `brew install node@22 && brew link --overwrite node@22`
75
+ - **apt:** follow [nodesource](https://github.com/nodesource/distributions) for Node 22 LTS.
76
+
77
+ ## `ENOSPC: no space left on device` or OOM kills during render
78
+
79
+ Renders are memory- and disk-hungry. Minimums:
80
+
81
+ - **RAM:** 4 GB free (8 GB recommended for 60fps / `--quality high`)
82
+ - **Disk:** 2 GB free scratch space — frames are written to `/tmp` during capture
83
+
84
+ Mitigations:
85
+ - Lower quality: `--quality draft`.
86
+ - Lower fps: `--fps 24`.
87
+ - Lower worker count: `--workers 1`.
88
+ - Set `TMPDIR` to a volume with more space: `export TMPDIR=/mnt/scratch`.
89
+
90
+ ## Lint passes but the render is blank / black frames
91
+
92
+ Check the browser console in `preview` — usually:
93
+ - A timeline was registered with the wrong key (`__timelines["typo"]` instead of `__timelines["root"]`).
94
+ - The root composition was wrapped in `<template>` (only sub-compositions use `<template>`).
95
+ - A script tag failed to load — check Network tab in preview.
96
+
97
+ Run `npx hyperframes lint --verbose` to see info-level findings.
98
+
99
+ ## Contrast warnings from `hyperframes validate`
100
+
101
+ ```
102
+ ⚠ WCAG AA contrast warnings (3):
103
+ · .subtitle "secondary text" — 2.67:1 (need 4.5:1, t=5.3s)
104
+ ```
105
+
106
+ - **Dark backgrounds:** brighten the failing color until it clears 4.5:1 (normal text) or 3:1 (large text — 24px+ or 19px+ bold).
107
+ - **Light backgrounds:** darken it.
108
+ - Stay within the palette family — don't invent a new color, adjust the existing one.
109
+ - Skip the check temporarily with `--no-contrast` if iterating rapidly, but clear it before delivery.
110
+
111
+ ## `Font family 'X' not supported by compiler`
112
+
113
+ The compiler embeds a curated set of web-safe + open-source fonts. If a font isn't supported, either:
114
+ - Swap to a supported alternative from the warning.
115
+ - Register a custom font via `@font-face` pointing to a `.woff2` in the project directory (the compiler embeds referenced `@font-face` files).
116
+
117
+ ## Video plays back muted or with no audio
118
+
119
+ Check:
120
+ - The `<video>` element has `muted playsinline` (required — browser autoplay policy).
121
+ - Audio is a **separate** `<audio>` element, not the video element.
122
+ - Audio `data-volume` is set (defaults to 1).
123
+ - The audio file is at the expected path — compositions load relative to their own directory.
124
+
125
+ ## Docker render fails on Linux with rootless Docker
126
+
127
+ Add `--privileged` or pass `--cap-add=SYS_ADMIN`:
128
+
129
+ ```bash
130
+ npx hyperframes render --docker --docker-args "--cap-add=SYS_ADMIN"
131
+ ```
132
+
133
+ The headless browser needs namespace permissions for sandboxing.
134
+
135
+ ## Bug reports
136
+
137
+ Include `npx hyperframes info` output + the full error log. File at [github.com/heygen-com/hyperframes](https://github.com/heygen-com/hyperframes/issues).