@mevdragon/vidfarm-devcli 0.14.0 → 0.15.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 (418) hide show
  1. package/.agents/skills/embedded-captions/CATALOG.md +93 -0
  2. package/.agents/skills/embedded-captions/SKILL.md +286 -0
  3. package/.agents/skills/embedded-captions/assets/brand/CDPR-fankit-terms.txt +35 -0
  4. package/.agents/skills/embedded-captions/assets/brand/cyberpunk-widths.json +115 -0
  5. package/.agents/skills/embedded-captions/assets/fonts/char-widths.json +2211 -0
  6. package/.agents/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +242 -0
  7. package/.agents/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +242 -0
  8. package/.agents/skills/embedded-captions/dna/README.md +148 -0
  9. package/.agents/skills/embedded-captions/dna/chrome.json +68 -0
  10. package/.agents/skills/embedded-captions/dna/cream.json +69 -0
  11. package/.agents/skills/embedded-captions/dna/documentary.json +62 -0
  12. package/.agents/skills/embedded-captions/dna/editorial.json +70 -0
  13. package/.agents/skills/embedded-captions/dna/glitch.json +82 -0
  14. package/.agents/skills/embedded-captions/dna/ink.json +65 -0
  15. package/.agents/skills/embedded-captions/dna/keynote.json +62 -0
  16. package/.agents/skills/embedded-captions/dna/loud.json +75 -0
  17. package/.agents/skills/embedded-captions/dna/neon.json +58 -0
  18. package/.agents/skills/embedded-captions/dna/velocity.json +89 -0
  19. package/.agents/skills/embedded-captions/modes/cinematic/README.md +48 -0
  20. package/.agents/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -0
  21. package/.agents/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -0
  22. package/.agents/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -0
  23. package/.agents/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -0
  24. package/.agents/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -0
  25. package/.agents/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -0
  26. package/.agents/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -0
  27. package/.agents/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -0
  28. package/.agents/skills/embedded-captions/modes/cinematic/engine.html +355 -0
  29. package/.agents/skills/embedded-captions/modes/standard/_anatomy.md +233 -0
  30. package/.agents/skills/embedded-captions/modes/standard/_motion.md +192 -0
  31. package/.agents/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -0
  32. package/.agents/skills/embedded-captions/references/aesthetic-principles.md +168 -0
  33. package/.agents/skills/embedded-captions/references/anti-patterns.md +188 -0
  34. package/.agents/skills/embedded-captions/references/bespoke-vs-presets.md +178 -0
  35. package/.agents/skills/embedded-captions/references/caption-grouping.md +130 -0
  36. package/.agents/skills/embedded-captions/references/composition-craft.md +522 -0
  37. package/.agents/skills/embedded-captions/references/direction-catalog.md +138 -0
  38. package/.agents/skills/embedded-captions/references/example-renders/champion.html +371 -0
  39. package/.agents/skills/embedded-captions/references/example-renders/memory-wall.html +334 -0
  40. package/.agents/skills/embedded-captions/references/failure-modes.md +145 -0
  41. package/.agents/skills/embedded-captions/references/layout-heuristics.md +238 -0
  42. package/.agents/skills/embedded-captions/references/motion-vocabulary.md +148 -0
  43. package/.agents/skills/embedded-captions/references/rail.md +68 -0
  44. package/.agents/skills/embedded-captions/references/reference-bar.md +47 -0
  45. package/.agents/skills/embedded-captions/references/scene-types.md +94 -0
  46. package/.agents/skills/embedded-captions/references/test-set.md +66 -0
  47. package/.agents/skills/embedded-captions/references/typographic-moves.md +266 -0
  48. package/.agents/skills/embedded-captions/references/typography-presets.md +63 -0
  49. package/.agents/skills/embedded-captions/scripts/audio-envelope.cjs +95 -0
  50. package/.agents/skills/embedded-captions/scripts/check-occlusion.cjs +250 -0
  51. package/.agents/skills/embedded-captions/scripts/check-overflow.cjs +194 -0
  52. package/.agents/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -0
  53. package/.agents/skills/embedded-captions/scripts/check-timing.cjs +173 -0
  54. package/.agents/skills/embedded-captions/scripts/fill-timings.cjs +124 -0
  55. package/.agents/skills/embedded-captions/scripts/fit-fonts.cjs +158 -0
  56. package/.agents/skills/embedded-captions/scripts/gen-stroke-path.py +46 -0
  57. package/.agents/skills/embedded-captions/scripts/inject-fonts.cjs +169 -0
  58. package/.agents/skills/embedded-captions/scripts/lib-dna.cjs +201 -0
  59. package/.agents/skills/embedded-captions/scripts/make-cinematic.cjs +1205 -0
  60. package/.agents/skills/embedded-captions/scripts/make-composition.cjs +404 -0
  61. package/.agents/skills/embedded-captions/scripts/make-theme.cjs +8781 -0
  62. package/.agents/skills/embedded-captions/scripts/matte.cjs +294 -0
  63. package/.agents/skills/embedded-captions/scripts/measure-layout.cjs +293 -0
  64. package/.agents/skills/embedded-captions/scripts/prepare.sh +39 -0
  65. package/.agents/skills/embedded-captions/scripts/preview-frames.cjs +268 -0
  66. package/.agents/skills/embedded-captions/scripts/render-and-composite.sh +509 -0
  67. package/.agents/skills/embedded-captions/scripts/render-theme.sh +34 -0
  68. package/.agents/skills/embedded-captions/scripts/safe-zones.cjs +813 -0
  69. package/.agents/skills/embedded-captions/scripts/transcribe.cjs +349 -0
  70. package/.agents/skills/embedded-captions/themes/PORTING.md +49 -0
  71. package/.agents/skills/embedded-captions/themes/README.md +244 -0
  72. package/.agents/skills/embedded-captions/themes/anchor.json +27 -0
  73. package/.agents/skills/embedded-captions/themes/arcade.json +51 -0
  74. package/.agents/skills/embedded-captions/themes/aurora.json +41 -0
  75. package/.agents/skills/embedded-captions/themes/biolume.json +35 -0
  76. package/.agents/skills/embedded-captions/themes/brush.json +74 -0
  77. package/.agents/skills/embedded-captions/themes/chalkboard.json +52 -0
  78. package/.agents/skills/embedded-captions/themes/dossier.json +56 -0
  79. package/.agents/skills/embedded-captions/themes/graffiti.json +62 -0
  80. package/.agents/skills/embedded-captions/themes/hologram.json +41 -0
  81. package/.agents/skills/embedded-captions/themes/inkwater.json +43 -0
  82. package/.agents/skills/embedded-captions/themes/laser.json +46 -0
  83. package/.agents/skills/embedded-captions/themes/lastpage.json +33 -0
  84. package/.agents/skills/embedded-captions/themes/neonsign.json +53 -0
  85. package/.agents/skills/embedded-captions/themes/nightcity.json +56 -0
  86. package/.agents/skills/embedded-captions/themes/ordnance.json +54 -0
  87. package/.agents/skills/embedded-captions/themes/papercut.json +37 -0
  88. package/.agents/skills/embedded-captions/themes/popup.json +46 -0
  89. package/.agents/skills/embedded-captions/themes/ransom.json +62 -0
  90. package/.agents/skills/embedded-captions/themes/scoreboard.json +54 -0
  91. package/.agents/skills/embedded-captions/themes/spectrum.json +46 -0
  92. package/.agents/skills/embedded-captions/themes/stardust.json +29 -0
  93. package/.agents/skills/embedded-captions/themes/stomp.json +43 -0
  94. package/.agents/skills/embedded-captions/themes/terminal.json +49 -0
  95. package/.agents/skills/embedded-captions/themes/thunder.json +44 -0
  96. package/.agents/skills/embedded-captions/themes/transit.json +44 -0
  97. package/.agents/skills/embedded-captions/themes/vhs.json +47 -0
  98. package/.agents/skills/faceless-explainer/SKILL.md +209 -0
  99. package/.agents/skills/faceless-explainer/references/cut-catalog.md +215 -0
  100. package/.agents/skills/faceless-explainer/references/motion-language.md +156 -0
  101. package/.agents/skills/faceless-explainer/references/story-design.md +248 -0
  102. package/.agents/skills/faceless-explainer/references/visual-design.md +146 -0
  103. package/.agents/skills/faceless-explainer/scripts/assemble-index.mjs +570 -0
  104. package/.agents/skills/faceless-explainer/scripts/audio.mjs +260 -0
  105. package/.agents/skills/faceless-explainer/scripts/build-frame.mjs +536 -0
  106. package/.agents/skills/faceless-explainer/scripts/captions.mjs +508 -0
  107. package/.agents/skills/faceless-explainer/scripts/lib/assets.mjs +55 -0
  108. package/.agents/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -0
  109. package/.agents/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -0
  110. package/.agents/skills/faceless-explainer/scripts/lib/tokens.mjs +204 -0
  111. package/.agents/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -0
  112. package/.agents/skills/faceless-explainer/scripts/lib/transitions.json +71 -0
  113. package/.agents/skills/faceless-explainer/scripts/transitions.mjs +320 -0
  114. package/.agents/skills/faceless-explainer/sub-agents/frame-worker.md +75 -0
  115. package/.agents/skills/flockposter/LICENSE +17 -0
  116. package/.agents/skills/flockposter/README.md +72 -0
  117. package/.agents/skills/flockposter/SKILL.md +562 -0
  118. package/.agents/skills/flockposter/examples/cli-instagram-reel.sh +21 -0
  119. package/.agents/skills/flockposter/examples/cli-multi-platform.json +69 -0
  120. package/.agents/skills/flockposter/examples/cli-tiktok-upload-only.sh +22 -0
  121. package/.agents/skills/flockposter/examples/cli-x-thread.sh +17 -0
  122. package/.agents/skills/flockposter/examples/cli-youtube-short.sh +21 -0
  123. package/.agents/skills/flockposter/examples/public-api-instagram-reel.json +28 -0
  124. package/.agents/skills/general-video/SKILL.md +143 -0
  125. package/.agents/skills/hyperframes/SKILL.md +160 -0
  126. package/.agents/skills/hyperframes-animation/SKILL.md +84 -0
  127. package/.agents/skills/hyperframes-animation/adapters/animate-text.md +64 -0
  128. package/.agents/skills/hyperframes-animation/adapters/animejs.md +114 -0
  129. package/.agents/skills/hyperframes-animation/adapters/css-animations.md +143 -0
  130. package/.agents/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +118 -0
  131. package/.agents/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -0
  132. package/.agents/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +96 -0
  133. package/.agents/skills/hyperframes-animation/adapters/gsap.md +105 -0
  134. package/.agents/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -0
  135. package/.agents/skills/hyperframes-animation/adapters/lottie.md +117 -0
  136. package/.agents/skills/hyperframes-animation/adapters/three.md +131 -0
  137. package/.agents/skills/hyperframes-animation/adapters/typegpu.md +178 -0
  138. package/.agents/skills/hyperframes-animation/adapters/waapi.md +101 -0
  139. package/.agents/skills/hyperframes-animation/blueprints/comparison-split.md +27 -0
  140. package/.agents/skills/hyperframes-animation/blueprints/constellation-hub.md +44 -0
  141. package/.agents/skills/hyperframes-animation/blueprints/cta-morph-press.md +28 -0
  142. package/.agents/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +57 -0
  143. package/.agents/skills/hyperframes-animation/blueprints/dataviz-countup.md +46 -0
  144. package/.agents/skills/hyperframes-animation/blueprints/device-surface-showcase.md +53 -0
  145. package/.agents/skills/hyperframes-animation/blueprints/grid-card-assemble.md +66 -0
  146. package/.agents/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +78 -0
  147. package/.agents/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +69 -0
  148. package/.agents/skills/hyperframes-animation/blueprints/overwhelm-surround.md +28 -0
  149. package/.agents/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -0
  150. package/.agents/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -0
  151. package/.agents/skills/hyperframes-animation/blueprints/titlecard-reveal.md +42 -0
  152. package/.agents/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -0
  153. package/.agents/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -0
  154. package/.agents/skills/hyperframes-animation/blueprints-index.md +146 -0
  155. package/.agents/skills/hyperframes-animation/examples/assets/avatars/02.avif +0 -0
  156. package/.agents/skills/hyperframes-animation/examples/assets/brands/github.avif +0 -0
  157. package/.agents/skills/hyperframes-animation/examples/assets/brands/nvidia.avif +0 -0
  158. package/.agents/skills/hyperframes-animation/examples/assets/brands/visa.avif +0 -0
  159. package/.agents/skills/hyperframes-animation/examples/assets/brands/zoominfo.avif +0 -0
  160. package/.agents/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -0
  161. package/.agents/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -0
  162. package/.agents/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -0
  163. package/.agents/skills/hyperframes-animation/examples/cta-morph-press.html +468 -0
  164. package/.agents/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -0
  165. package/.agents/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -0
  166. package/.agents/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -0
  167. package/.agents/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -0
  168. package/.agents/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -0
  169. package/.agents/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -0
  170. package/.agents/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -0
  171. package/.agents/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -0
  172. package/.agents/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -0
  173. package/.agents/skills/hyperframes-animation/rules/3d-page-scroll.md +227 -0
  174. package/.agents/skills/hyperframes-animation/rules/3d-text-depth-layers.md +297 -0
  175. package/.agents/skills/hyperframes-animation/rules/ai-tracking-box.md +382 -0
  176. package/.agents/skills/hyperframes-animation/rules/ambient-glow-bloom.md +305 -0
  177. package/.agents/skills/hyperframes-animation/rules/asr-keyword-glow.md +286 -0
  178. package/.agents/skills/hyperframes-animation/rules/avatar-cloud-network.md +371 -0
  179. package/.agents/skills/hyperframes-animation/rules/camera-cursor-tracking.md +246 -0
  180. package/.agents/skills/hyperframes-animation/rules/card-morph-anchor.md +267 -0
  181. package/.agents/skills/hyperframes-animation/rules/center-outward-expansion.md +227 -0
  182. package/.agents/skills/hyperframes-animation/rules/context-sensitive-cursor.md +257 -0
  183. package/.agents/skills/hyperframes-animation/rules/coordinate-target-zoom.md +332 -0
  184. package/.agents/skills/hyperframes-animation/rules/counting-dynamic-scale.md +283 -0
  185. package/.agents/skills/hyperframes-animation/rules/css-marker-patterns.md +373 -0
  186. package/.agents/skills/hyperframes-animation/rules/cursor-click-ripple.md +262 -0
  187. package/.agents/skills/hyperframes-animation/rules/depth-of-field-blur.md +313 -0
  188. package/.agents/skills/hyperframes-animation/rules/depth-scatter-assemble.md +303 -0
  189. package/.agents/skills/hyperframes-animation/rules/discrete-text-sequence.md +273 -0
  190. package/.agents/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +307 -0
  191. package/.agents/skills/hyperframes-animation/rules/gsap-effects.md +299 -0
  192. package/.agents/skills/hyperframes-animation/rules/hacker-flip-3d.md +223 -0
  193. package/.agents/skills/hyperframes-animation/rules/kinetic-beat-slam.md +183 -0
  194. package/.agents/skills/hyperframes-animation/rules/motion-blur-streak.md +328 -0
  195. package/.agents/skills/hyperframes-animation/rules/multi-phase-camera.md +273 -0
  196. package/.agents/skills/hyperframes-animation/rules/orbit-3d-entry.md +301 -0
  197. package/.agents/skills/hyperframes-animation/rules/physics-press-reaction.md +350 -0
  198. package/.agents/skills/hyperframes-animation/rules/press-release-spring.md +296 -0
  199. package/.agents/skills/hyperframes-animation/rules/reactive-displacement.md +277 -0
  200. package/.agents/skills/hyperframes-animation/rules/scale-swap-transition.md +298 -0
  201. package/.agents/skills/hyperframes-animation/rules/sine-wave-loop.md +278 -0
  202. package/.agents/skills/hyperframes-animation/rules/split-tilt-cards.md +277 -0
  203. package/.agents/skills/hyperframes-animation/rules/spring-pop-entrance.md +273 -0
  204. package/.agents/skills/hyperframes-animation/rules/stat-bars-and-fills.md +156 -0
  205. package/.agents/skills/hyperframes-animation/rules/svg-icon-enrichment.md +329 -0
  206. package/.agents/skills/hyperframes-animation/rules/svg-path-draw.md +274 -0
  207. package/.agents/skills/hyperframes-animation/rules/vertical-spring-ticker.md +239 -0
  208. package/.agents/skills/hyperframes-animation/rules/viewport-change.md +349 -0
  209. package/.agents/skills/hyperframes-animation/rules-index.md +86 -0
  210. package/.agents/skills/hyperframes-animation/scripts/animation-map.mjs +606 -0
  211. package/.agents/skills/hyperframes-animation/scripts/package-loader.mjs +288 -0
  212. package/.agents/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -0
  213. package/.agents/skills/hyperframes-animation/techniques.md +507 -0
  214. package/.agents/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +167 -0
  215. package/.agents/skills/hyperframes-animation/transitions/catalog.md +127 -0
  216. package/.agents/skills/hyperframes-animation/transitions/css-3d.md +12 -0
  217. package/.agents/skills/hyperframes-animation/transitions/css-blur.md +51 -0
  218. package/.agents/skills/hyperframes-animation/transitions/css-cover.md +43 -0
  219. package/.agents/skills/hyperframes-animation/transitions/css-destruction.md +95 -0
  220. package/.agents/skills/hyperframes-animation/transitions/css-dissolve.md +66 -0
  221. package/.agents/skills/hyperframes-animation/transitions/css-distortion.md +45 -0
  222. package/.agents/skills/hyperframes-animation/transitions/css-grid.md +10 -0
  223. package/.agents/skills/hyperframes-animation/transitions/css-light.md +49 -0
  224. package/.agents/skills/hyperframes-animation/transitions/css-mechanical.md +30 -0
  225. package/.agents/skills/hyperframes-animation/transitions/css-other.md +25 -0
  226. package/.agents/skills/hyperframes-animation/transitions/css-push.md +41 -0
  227. package/.agents/skills/hyperframes-animation/transitions/css-radial.md +37 -0
  228. package/.agents/skills/hyperframes-animation/transitions/css-scale.md +24 -0
  229. package/.agents/skills/hyperframes-animation/transitions/overview.md +153 -0
  230. package/.agents/skills/hyperframes-cli/SKILL.md +113 -0
  231. package/.agents/skills/hyperframes-cli/references/doctor-browser.md +45 -0
  232. package/.agents/skills/hyperframes-cli/references/init-and-scaffold.md +55 -0
  233. package/.agents/skills/hyperframes-cli/references/lambda.md +132 -0
  234. package/.agents/skills/hyperframes-cli/references/lint-validate-inspect.md +121 -0
  235. package/.agents/skills/hyperframes-cli/references/preview-render.md +149 -0
  236. package/.agents/skills/hyperframes-cli/references/upgrade-info-misc.md +75 -0
  237. package/.agents/skills/hyperframes-core/SKILL.md +78 -0
  238. package/.agents/skills/hyperframes-core/references/composition-patterns.md +263 -0
  239. package/.agents/skills/hyperframes-core/references/data-attributes.md +70 -0
  240. package/.agents/skills/hyperframes-core/references/determinism-rules.md +68 -0
  241. package/.agents/skills/hyperframes-core/references/full-screen-motion.md +62 -0
  242. package/.agents/skills/hyperframes-core/references/minimal-composition.md +66 -0
  243. package/.agents/skills/hyperframes-core/references/script-format.md +49 -0
  244. package/.agents/skills/hyperframes-core/references/storyboard-format.md +95 -0
  245. package/.agents/skills/hyperframes-core/references/sub-compositions.md +237 -0
  246. package/.agents/skills/hyperframes-core/references/subagent-dispatch.md +41 -0
  247. package/.agents/skills/hyperframes-core/references/tailwind.md +125 -0
  248. package/.agents/skills/hyperframes-core/references/tracks-and-clips.md +76 -0
  249. package/.agents/skills/hyperframes-core/references/variables-and-media.md +90 -0
  250. package/.agents/skills/hyperframes-creative/SKILL.md +70 -0
  251. package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -0
  252. package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -0
  253. package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
  254. package/.agents/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -0
  255. package/.agents/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -0
  256. package/.agents/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -0
  257. package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -0
  258. package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -0
  259. package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -0
  260. package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -0
  261. package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -0
  262. package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -0
  263. package/.agents/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -0
  264. package/.agents/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -0
  265. package/.agents/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -0
  266. package/.agents/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -0
  267. package/.agents/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -0
  268. package/.agents/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -0
  269. package/.agents/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -0
  270. package/.agents/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -0
  271. package/.agents/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -0
  272. package/.agents/skills/hyperframes-creative/frame-presets/claude/FRAME.md +277 -0
  273. package/.agents/skills/hyperframes-creative/frame-presets/claude/caption-skin.html +224 -0
  274. package/.agents/skills/hyperframes-creative/frame-presets/claude/frame-showcase.html +1439 -0
  275. package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -0
  276. package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -0
  277. package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
  278. package/.agents/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -0
  279. package/.agents/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -0
  280. package/.agents/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -0
  281. package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -0
  282. package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -0
  283. package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -0
  284. package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -0
  285. package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -0
  286. package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -0
  287. package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -0
  288. package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -0
  289. package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -0
  290. package/.agents/skills/hyperframes-creative/palettes/bold-energetic.md +14 -0
  291. package/.agents/skills/hyperframes-creative/palettes/clean-corporate.md +14 -0
  292. package/.agents/skills/hyperframes-creative/palettes/dark-premium.md +14 -0
  293. package/.agents/skills/hyperframes-creative/palettes/jewel-rich.md +14 -0
  294. package/.agents/skills/hyperframes-creative/palettes/monochrome.md +14 -0
  295. package/.agents/skills/hyperframes-creative/palettes/nature-earth.md +14 -0
  296. package/.agents/skills/hyperframes-creative/palettes/neon-electric.md +14 -0
  297. package/.agents/skills/hyperframes-creative/palettes/pastel-soft.md +14 -0
  298. package/.agents/skills/hyperframes-creative/palettes/warm-editorial.md +14 -0
  299. package/.agents/skills/hyperframes-creative/references/audio-reactive.md +76 -0
  300. package/.agents/skills/hyperframes-creative/references/beat-direction.md +164 -0
  301. package/.agents/skills/hyperframes-creative/references/composition-patterns.md +199 -0
  302. package/.agents/skills/hyperframes-creative/references/data-in-motion.md +19 -0
  303. package/.agents/skills/hyperframes-creative/references/design-adherence.md +19 -0
  304. package/.agents/skills/hyperframes-creative/references/design-picker.md +123 -0
  305. package/.agents/skills/hyperframes-creative/references/design-spec.md +55 -0
  306. package/.agents/skills/hyperframes-creative/references/house-style.md +73 -0
  307. package/.agents/skills/hyperframes-creative/references/motion-principles.md +150 -0
  308. package/.agents/skills/hyperframes-creative/references/narration.md +92 -0
  309. package/.agents/skills/hyperframes-creative/references/prompt-expansion.md +68 -0
  310. package/.agents/skills/hyperframes-creative/references/typography.md +218 -0
  311. package/.agents/skills/hyperframes-creative/references/video-composition.md +63 -0
  312. package/.agents/skills/hyperframes-creative/references/visual-styles.md +457 -0
  313. package/.agents/skills/hyperframes-creative/scripts/contrast-report.mjs +353 -0
  314. package/.agents/skills/hyperframes-creative/scripts/extract-audio-data.py +188 -0
  315. package/.agents/skills/hyperframes-creative/scripts/package-loader.mjs +288 -0
  316. package/.agents/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -0
  317. package/.agents/skills/hyperframes-creative/templates/design-picker.html +1432 -0
  318. package/.agents/skills/hyperframes-keyframes/SKILL.md +237 -0
  319. package/.agents/skills/hyperframes-keyframes/agents/openai.yaml +4 -0
  320. package/.agents/skills/hyperframes-keyframes/references/keyframe-patterns.md +106 -0
  321. package/.agents/skills/motion-graphics/SKILL.md +172 -0
  322. package/.agents/skills/motion-graphics/agents/builder.md +40 -0
  323. package/.agents/skills/motion-graphics/agents/director.md +53 -0
  324. package/.agents/skills/motion-graphics/agents/finalize.md +17 -0
  325. package/.agents/skills/motion-graphics/catalog-map.md +40 -0
  326. package/.agents/skills/motion-graphics/categories/asset-fusion/module.md +37 -0
  327. package/.agents/skills/motion-graphics/categories/charts/module.md +21 -0
  328. package/.agents/skills/motion-graphics/categories/kinetic-type/module.md +19 -0
  329. package/.agents/skills/motion-graphics/categories/logo-reveal/module.md +17 -0
  330. package/.agents/skills/motion-graphics/categories/lower-thirds/module.md +16 -0
  331. package/.agents/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -0
  332. package/.agents/skills/motion-graphics/categories/maps/module.md +61 -0
  333. package/.agents/skills/motion-graphics/categories/news/module.md +56 -0
  334. package/.agents/skills/motion-graphics/categories/stat/module.md +21 -0
  335. package/.agents/skills/motion-graphics/categories/tweet/module.md +16 -0
  336. package/.agents/skills/motion-graphics/categories/webpage/module.md +21 -0
  337. package/.agents/skills/motion-graphics/grounding/PROTOCOL.md +64 -0
  338. package/.agents/skills/motion-graphics/grounding/locate.mjs +227 -0
  339. package/.agents/skills/motion-graphics/phases/source/guide.md +21 -0
  340. package/.agents/skills/motion-graphics/references/builder-contract.md +38 -0
  341. package/.agents/skills/motion-graphics/references/motion-vocabulary.md +43 -0
  342. package/.agents/skills/motion-graphics/references/shot-plan-ir.md +54 -0
  343. package/.agents/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -0
  344. package/.agents/skills/product-launch-video/SKILL.md +208 -0
  345. package/.agents/skills/product-launch-video/references/cut-catalog.md +220 -0
  346. package/.agents/skills/product-launch-video/references/motion-language.md +156 -0
  347. package/.agents/skills/product-launch-video/references/story-design.md +373 -0
  348. package/.agents/skills/product-launch-video/references/visual-design.md +126 -0
  349. package/.agents/skills/product-launch-video/scripts/assemble-index.mjs +570 -0
  350. package/.agents/skills/product-launch-video/scripts/audio.mjs +260 -0
  351. package/.agents/skills/product-launch-video/scripts/build-frame.mjs +536 -0
  352. package/.agents/skills/product-launch-video/scripts/captions.mjs +508 -0
  353. package/.agents/skills/product-launch-video/scripts/lib/assets.mjs +55 -0
  354. package/.agents/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -0
  355. package/.agents/skills/product-launch-video/scripts/lib/pad-frame-duration.mjs +36 -0
  356. package/.agents/skills/product-launch-video/scripts/lib/pad-frame-duration.test.mjs +76 -0
  357. package/.agents/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -0
  358. package/.agents/skills/product-launch-video/scripts/lib/tokens.mjs +204 -0
  359. package/.agents/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -0
  360. package/.agents/skills/product-launch-video/scripts/lib/transitions.json +71 -0
  361. package/.agents/skills/product-launch-video/scripts/stage-assets.mjs +39 -0
  362. package/.agents/skills/product-launch-video/scripts/transitions.mjs +327 -0
  363. package/.agents/skills/product-launch-video/sub-agents/frame-worker.md +75 -0
  364. package/.agents/skills/slideshow/SKILL.md +550 -0
  365. package/.agents/skills/slideshow/references/standalone-harness.md +1020 -0
  366. package/.agents/skills/talking-head-recut/NOTICE.md +39 -0
  367. package/.agents/skills/talking-head-recut/SKILL.md +1195 -0
  368. package/.agents/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -0
  369. package/.agents/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -0
  370. package/.agents/skills/talking-head-recut/references/frames/clean.html +92 -0
  371. package/.agents/skills/talking-head-recut/references/frames/hairline.html +171 -0
  372. package/.agents/skills/talking-head-recut/references/frames/polaroid.html +131 -0
  373. package/.agents/skills/talking-head-recut/references/layouts/overlay.html +164 -0
  374. package/.agents/skills/talking-head-recut/references/layouts/pip.html +143 -0
  375. package/.agents/skills/talking-head-recut/references/layouts/split.html +121 -0
  376. package/.agents/skills/talking-head-recut/references/layouts/stack.html +109 -0
  377. package/.agents/skills/talking-head-recut/references/styles/academic.html +172 -0
  378. package/.agents/skills/talking-head-recut/references/styles/audit.html +170 -0
  379. package/.agents/skills/talking-head-recut/references/styles/editorial.html +189 -0
  380. package/.agents/skills/talking-head-recut/references/styles/geom.html +181 -0
  381. package/.agents/skills/talking-head-recut/references/styles/minimal.html +130 -0
  382. package/.agents/skills/talking-head-recut/references/styles/spotlight.html +142 -0
  383. package/.agents/skills/talking-head-recut/references/styles/swiss.html +188 -0
  384. package/.agents/skills/talking-head-recut/references/styles/terminal.html +196 -0
  385. package/.agents/skills/talking-head-recut/references/styles/whiteboard.html +170 -0
  386. package/.agents/skills/talking-head-recut/references/styles/xhs.html +206 -0
  387. package/.agents/skills/vidfarm-media/SKILL.md +85 -0
  388. package/.agents/skills/vidfarm-media/references/tts.md +54 -0
  389. package/.agents/skills/vidfarm-media/scripts/audio.mjs +628 -0
  390. package/.agents/skills/vidfarm-media/scripts/wait-bgm.mjs +31 -0
  391. package/.agents/skills/website-to-video/SKILL.md +145 -0
  392. package/.agents/skills/website-to-video/assets/sfx/CREDITS.md +35 -0
  393. package/.agents/skills/website-to-video/assets/sfx/manifest.json +97 -0
  394. package/.agents/skills/website-to-video/references/beat-builder-guide.md +263 -0
  395. package/.agents/skills/website-to-video/references/capabilities.md +713 -0
  396. package/.agents/skills/website-to-video/references/step-0-capture.md +55 -0
  397. package/.agents/skills/website-to-video/references/step-1-design.md +333 -0
  398. package/.agents/skills/website-to-video/references/step-2-brief.md +178 -0
  399. package/.agents/skills/website-to-video/references/step-3-storyboard.md +572 -0
  400. package/.agents/skills/website-to-video/references/step-4-vo.md +225 -0
  401. package/.agents/skills/website-to-video/references/step-5-build.md +483 -0
  402. package/.agents/skills/website-to-video/references/step-6-validate.md +341 -0
  403. package/.agents/skills/website-to-video/scripts/w2h-verify.mjs +759 -0
  404. package/SKILL.director.md +37 -0
  405. package/SKILL.platform.md +6 -1
  406. package/demo/dist/app.js +295 -11
  407. package/dist/src/app.js +317 -133
  408. package/dist/src/cli.js +529 -12
  409. package/dist/src/composition-runtime.js +262 -3
  410. package/dist/src/devcli/doctor.js +192 -0
  411. package/dist/src/devcli/hyperframes-cli.js +118 -0
  412. package/dist/src/devcli/skills.js +476 -0
  413. package/dist/src/devcli/stills.js +249 -0
  414. package/dist/src/editor-chat.js +255 -0
  415. package/dist/src/hyperframes/composition.js +5 -5
  416. package/dist/src/services/composition-lint.js +199 -0
  417. package/dist/src/services/hyperframes.js +67 -13
  418. package/package.json +2 -1
@@ -0,0 +1,299 @@
1
+ # GSAP Effects for HyperFrames
2
+
3
+ Drop-in animation patterns. Each effect is self-contained (HTML + CSS + JS) and follows the HyperFrames seek-driven contract — deterministic, no randomness, timeline registered on `window.__timelines`.
4
+
5
+ ## Index
6
+
7
+ - [Typewriter](#typewriter) — character-by-character text reveal with optional cursor / backspace / word rotation
8
+ - [Audio Visualizer](#audio-visualizer) — pre-extract audio data, drive Canvas/DOM rendering from the timeline
9
+
10
+ ---
11
+
12
+ ## Typewriter
13
+
14
+ Reveal text character by character using GSAP's TextPlugin.
15
+
16
+ ### Required Plugin
17
+
18
+ ```html
19
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
20
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/TextPlugin.min.js"></script>
21
+ <script>
22
+ gsap.registerPlugin(TextPlugin);
23
+ </script>
24
+ ```
25
+
26
+ ### Basic Typewriter
27
+
28
+ ```js
29
+ const text = "Hello, world!";
30
+ const cps = 10; // chars per second: 3-5 dramatic, 8-12 conversational, 15-20 energetic
31
+ tl.to(
32
+ "#typed-text",
33
+ { text: { value: text }, duration: text.length / cps, ease: "none" },
34
+ startTime,
35
+ );
36
+ ```
37
+
38
+ ### With Blinking Cursor
39
+
40
+ Three rules:
41
+
42
+ 1. **One cursor visible at a time** — hide previous before showing next.
43
+ 2. **Cursor must blink when idle** — after typing, during pauses.
44
+ 3. **No gap between text and cursor** — elements must be flush in HTML.
45
+
46
+ ```html
47
+ <span id="typed-text"></span><span id="cursor" class="cursor-blink">|</span>
48
+ ```
49
+
50
+ ```css
51
+ @keyframes blink {
52
+ 0%,
53
+ 100% {
54
+ opacity: 1;
55
+ }
56
+ 50% {
57
+ opacity: 0;
58
+ }
59
+ }
60
+ .cursor-blink {
61
+ animation: blink 0.8s step-end infinite;
62
+ }
63
+ .cursor-solid {
64
+ animation: none;
65
+ opacity: 1;
66
+ }
67
+ .cursor-hide {
68
+ animation: none;
69
+ opacity: 0;
70
+ }
71
+ ```
72
+
73
+ Pattern: blink → solid (typing starts) → type → solid → blink (typing done).
74
+
75
+ ```js
76
+ tl.call(() => cursor.classList.replace("cursor-blink", "cursor-solid"), [], startTime);
77
+ tl.to("#typed-text", { text: { value: text }, duration: dur, ease: "none" }, startTime);
78
+ tl.call(() => cursor.classList.replace("cursor-solid", "cursor-blink"), [], startTime + dur);
79
+ ```
80
+
81
+ ### Backspacing
82
+
83
+ TextPlugin removes from front — wrong for backspace. Use manual substring removal:
84
+
85
+ ```js
86
+ function backspace(tl, selector, word, startTime, cps) {
87
+ const el = document.querySelector(selector);
88
+ const interval = 1 / cps;
89
+ for (let i = word.length - 1; i >= 0; i--) {
90
+ tl.call(
91
+ () => {
92
+ el.textContent = word.slice(0, i);
93
+ },
94
+ [],
95
+ startTime + (word.length - i) * interval,
96
+ );
97
+ }
98
+ return word.length * interval;
99
+ }
100
+ ```
101
+
102
+ ### Spacing With Static Text
103
+
104
+ When a typewriter word sits next to static text, use `margin-left` on a wrapper span. Don't use flex `gap` (it spaces the cursor from the text) and don't put a trailing space in the static text (it collapses when the dynamic span is empty).
105
+
106
+ ```html
107
+ <div style="display:flex; align-items:baseline;">
108
+ <span style="font-size:40px; color:#555;">Ship something</span>
109
+ <span style="margin-left:14px;"><span id="word"></span><span id="cursor">|</span></span>
110
+ </div>
111
+ ```
112
+
113
+ ### Word Rotation
114
+
115
+ Type → hold → backspace → next word. Cursor blinks during every idle moment (holds, after backspace).
116
+
117
+ ```js
118
+ let offset = 0;
119
+ words.forEach((word, i) => {
120
+ const typeDur = word.length / 10;
121
+ tl.call(() => cursor.classList.replace("cursor-blink", "cursor-solid"), [], offset);
122
+ tl.to("#typed-text", { text: { value: word }, duration: typeDur, ease: "none" }, offset);
123
+ tl.call(() => cursor.classList.replace("cursor-solid", "cursor-blink"), [], offset + typeDur);
124
+ offset += typeDur + 1.5; // hold
125
+
126
+ if (i < words.length - 1) {
127
+ tl.call(() => cursor.classList.replace("cursor-blink", "cursor-solid"), [], offset);
128
+ const clearDur = backspace(tl, "#typed-text", word, offset, 20);
129
+ tl.call(() => cursor.classList.replace("cursor-solid", "cursor-blink"), [], offset + clearDur);
130
+ offset += clearDur + 0.3;
131
+ }
132
+ });
133
+ ```
134
+
135
+ ### Appending Words
136
+
137
+ Build a sentence word-by-word into the same element:
138
+
139
+ ```js
140
+ let accumulated = "";
141
+ let offset = 0;
142
+ words.forEach((word) => {
143
+ const target = accumulated + (accumulated ? " " : "") + word;
144
+ const newChars = target.length - accumulated.length;
145
+ tl.to("#typed-text", { text: { value: target }, duration: newChars / 10, ease: "none" }, offset);
146
+ accumulated = target;
147
+ offset += newChars / 10 + 0.3;
148
+ });
149
+ ```
150
+
151
+ ### Multi-Line Cursor Handoff
152
+
153
+ Handing off between typewriter lines: hide previous → blink new → pause → solid when typing. Never go `hidden → solid` (skips the idle blink).
154
+
155
+ ```js
156
+ tl.call(
157
+ () => {
158
+ prevCursor.classList.replace("cursor-blink", "cursor-hide");
159
+ nextCursor.classList.replace("cursor-hide", "cursor-blink");
160
+ },
161
+ [],
162
+ handoffTime,
163
+ );
164
+
165
+ const typeStart = handoffTime + 0.5; // brief blink pause
166
+ tl.call(() => nextCursor.classList.replace("cursor-blink", "cursor-solid"), [], typeStart);
167
+ tl.to("#next-text", { text: { value: text }, duration: dur, ease: "none" }, typeStart);
168
+ tl.call(() => nextCursor.classList.replace("cursor-solid", "cursor-blink"), [], typeStart + dur);
169
+ ```
170
+
171
+ ### Timing Guide
172
+
173
+ | CPS | Feel | Good for |
174
+ | ----- | ---------------- | -------------------------- |
175
+ | 3-5 | Slow, deliberate | Dramatic reveals, suspense |
176
+ | 8-12 | Natural typing | Dialogue, narration |
177
+ | 15-20 | Fast, energetic | Tech demos, code |
178
+ | 30+ | Near-instant | Filling long blocks |
179
+
180
+ ---
181
+
182
+ ## Audio Visualizer
183
+
184
+ Pre-extract audio data, drive Canvas / DOM rendering from a single `tl.call(...)` per frame. **Do not** use the Web Audio API at render time — there's no playback during seek.
185
+
186
+ ### Extract Audio Data
187
+
188
+ Use the bundled extractor (requires `ffmpeg` and Python `numpy`):
189
+
190
+ ```bash
191
+ python skills/hyperframes-creative/scripts/extract-audio-data.py audio.mp3 -o audio-data.json
192
+ python skills/hyperframes-creative/scripts/extract-audio-data.py video.mp4 --fps 30 --bands 16 -o audio-data.json
193
+ ```
194
+
195
+ ### Data Format
196
+
197
+ ```json
198
+ {
199
+ "fps": 30,
200
+ "totalFrames": 5415,
201
+ "frames": [{ "time": 0.0, "rms": 0.42, "bands": [0.8, 0.6, 0.3] }]
202
+ }
203
+ ```
204
+
205
+ - **`rms`** (0-1) — overall loudness, normalized across the track.
206
+ - **`bands[]`** (0-1) — frequency magnitudes. Index 0 = bass, higher index = treble. Each band normalized independently.
207
+
208
+ ### Loading the Data (Synchronously)
209
+
210
+ ```js
211
+ // Option A — inline (small files, under ~500 KB)
212
+ var AUDIO_DATA = {
213
+ /* paste audio-data.json contents */
214
+ };
215
+
216
+ // Option B — sync XHR (large files; must be synchronous for deterministic timeline construction)
217
+ var xhr = new XMLHttpRequest();
218
+ xhr.open("GET", "audio-data.json", false);
219
+ xhr.send();
220
+ var AUDIO_DATA = JSON.parse(xhr.responseText);
221
+ ```
222
+
223
+ **Do NOT use async `fetch()`.** HyperFrames reads `window.__timelines` synchronously after page load — building the timeline inside `.then()` means the timeline isn't ready when capture starts.
224
+
225
+ ### Driving the Timeline
226
+
227
+ **Canvas 2D** — most common (bars, waveforms, circles, gradients):
228
+
229
+ ```js
230
+ const canvas = document.getElementById("viz");
231
+ const ctx = canvas.getContext("2d");
232
+
233
+ for (let f = 0; f < AUDIO_DATA.totalFrames; f++) {
234
+ tl.call(
235
+ () => {
236
+ const frame = AUDIO_DATA.frames[f];
237
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
238
+ // draw using frame.rms and frame.bands
239
+ },
240
+ [],
241
+ f / AUDIO_DATA.fps,
242
+ );
243
+ }
244
+ ```
245
+
246
+ **WebGL / Three.js** — HyperFrames patches `THREE.Clock` for deterministic time. Update uniforms from audio data each frame.
247
+
248
+ **DOM elements** — fine for fewer than ~20 elements, slower than Canvas for many.
249
+
250
+ ### Smoothing
251
+
252
+ ```js
253
+ let prev = null;
254
+ const smoothing = 0.25; // 0.1-0.2 snappy, 0.3-0.5 flowing
255
+ function smooth(f) {
256
+ const raw = AUDIO_DATA.frames[f];
257
+ if (!prev) {
258
+ prev = { rms: raw.rms, bands: [...raw.bands] };
259
+ return prev;
260
+ }
261
+ prev = {
262
+ rms: prev.rms * smoothing + raw.rms * (1 - smoothing),
263
+ bands: raw.bands.map((b, i) => prev.bands[i] * smoothing + b * (1 - smoothing)),
264
+ };
265
+ return prev;
266
+ }
267
+ ```
268
+
269
+ ### Spatial Mapping
270
+
271
+ - **Horizontal**: bass left, treble right (iterate bands left-to-right)
272
+ - **Vertical**: bass bottom, treble top
273
+ - **Circular**: bass at 12 o'clock, wrap clockwise; mirror for a full circle
274
+
275
+ ### Motion Principles
276
+
277
+ - **Bass drives big moves** — scale, glow, position shifts.
278
+ - **Treble drives detail** — shimmer, flicker, edge effects.
279
+ - **RMS drives globals** — background brightness, overall energy.
280
+ - Pick 2-3 properties to animate. More looks noisy.
281
+ - Keep minimums above zero — quiet sections still need life.
282
+
283
+ ### Band Count
284
+
285
+ | Bands | Detail | Good for |
286
+ | ----- | --------- | -------------------------- |
287
+ | 4 | Low | Background glow, pulsing |
288
+ | 8 | Medium | Bar charts, basic spectrum |
289
+ | 16 | High | Detailed EQ (default) |
290
+ | 32 | Very high | Dense radial layouts |
291
+
292
+ ### Layering
293
+
294
+ Layer multiple canvases with CSS `z-index` for depth — a background layer driven by bass/rms and a foreground layer driven by individual bands creates depth without per-element complexity.
295
+
296
+ ```html
297
+ <canvas id="bg-layer" style="position:absolute;top:0;left:0;z-index:1;"></canvas>
298
+ <canvas id="main-layer" style="position:absolute;top:0;left:0;z-index:2;"></canvas>
299
+ ```
@@ -0,0 +1,223 @@
1
+ ---
2
+ name: hacker-flip-3d
3
+ description: Character-level 3D rotation with random glyph substitution for a decryption reveal effect.
4
+ metadata:
5
+ tags: text, 3d, reveal, decode, hacker, randomization, perspective
6
+ ---
7
+
8
+ # Hacker Flip 3D Reveal
9
+
10
+ Characters flip down from 90° in 3D while cycling through random glyphs, then settle on the target character. Creates a "decryption" or airport flap-display reveal.
11
+
12
+ ## How It Works
13
+
14
+ Each character gets its own per-char tween from `rotateX: 90deg` (hidden) to `rotateX: 0deg` (revealed), staggered across the word. During the flip:
15
+
16
+ 1. **Phase A (0 → ~`REVEAL_THRESHOLD` progress)**: character displays a randomly-substituted glyph that flickers (changes every `FLICKER_RATE` frames)
17
+ 2. **Phase B (`REVEAL_THRESHOLD` → 1.0 progress)**: character displays the REAL target character, settling into its final upright position
18
+
19
+ The `REVEAL_THRESHOLD` separates "scrambled" from "revealed" — by the time the flip is mostly done, viewer sees the correct letter clicking into place.
20
+
21
+ ## HTML
22
+
23
+ ```html
24
+ <div
25
+ class="scene"
26
+ id="hacker-flip-scene"
27
+ data-composition-id="hacker-flip-scene"
28
+ data-start="0"
29
+ data-duration="3"
30
+ data-track-index="0"
31
+ >
32
+ <div class="hacker-text-wrap" id="hacker-text" data-target="{phrase}">
33
+ <!-- Per-char spans get injected by setup script below.
34
+ Ghost placeholder (data-ghost) is rendered identically to reserve width. -->
35
+ </div>
36
+ </div>
37
+ ```
38
+
39
+ `{phrase}` is the target word the flip resolves to (typically a brand or short label).
40
+
41
+ ## CSS
42
+
43
+ ```css
44
+ .scene {
45
+ position: relative;
46
+ width: 100%;
47
+ height: 100%;
48
+ display: grid;
49
+ place-items: center;
50
+ background: {bgColor};
51
+ perspective: 1500px; /* REQUIRED — without this rotateX renders flat */
52
+ }
53
+
54
+ .hacker-text-wrap {
55
+ font-family: {monoFont}; /* monospace recommended so flicker glyphs hold width */
56
+ font-weight: 900;
57
+ font-size: HACKER_FONT_SIZE;
58
+ color: {textColor};
59
+ letter-spacing: 4px;
60
+ display: flex;
61
+ /* Ghost / live chars are absolutely stacked; container reserves layout width */
62
+ position: relative;
63
+ }
64
+
65
+ .hacker-char {
66
+ display: inline-block;
67
+ /* Hinge at the bottom edge — flap-display look */
68
+ transform-origin: bottom;
69
+ transform-style: preserve-3d;
70
+ /* Will-change improves render perf */
71
+ will-change: transform, opacity;
72
+ }
73
+
74
+ /* Ghost placeholder is hidden but reserves width for variable-glyph fonts.
75
+ Without this, narrow target glyphs collapse width when displayed and
76
+ characters shift horizontally during flicker. */
77
+ .hacker-ghost {
78
+ opacity: 0;
79
+ pointer-events: none;
80
+ }
81
+ ```
82
+
83
+ ## GSAP Timeline + Random Glyph Logic
84
+
85
+ ```html
86
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
87
+ <script>
88
+ window.__timelines = window.__timelines || {};
89
+
90
+ const wrap = document.getElementById("hacker-text");
91
+ const targetWord = wrap.dataset.target;
92
+ const GLYPHS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%&*";
93
+
94
+ // Build live chars + ghost placeholders (ghost keeps layout width stable)
95
+ wrap.innerHTML = "";
96
+ const ghostRow = document.createElement("div");
97
+ ghostRow.className = "hacker-ghost";
98
+ ghostRow.style.display = "inline-flex";
99
+ ghostRow.style.position = "absolute";
100
+ ghostRow.style.left = "0";
101
+ ghostRow.style.top = "0";
102
+ ghostRow.textContent = targetWord;
103
+ wrap.appendChild(ghostRow);
104
+
105
+ const charEls = [];
106
+ const liveRow = document.createElement("div");
107
+ liveRow.style.display = "inline-flex";
108
+ liveRow.style.position = "relative";
109
+ for (const ch of targetWord) {
110
+ const span = document.createElement("span");
111
+ span.className = "hacker-char";
112
+ span.textContent = ch === " " ? " " : ch;
113
+ span.dataset.target = ch;
114
+ liveRow.appendChild(span);
115
+ charEls.push(span);
116
+ }
117
+ wrap.appendChild(liveRow);
118
+
119
+ // Deterministic "random" — seeded by char index + frame group so the same
120
+ // frame always yields the same glyph (HF seek determinism).
121
+ function pseudoGlyph(seed) {
122
+ const h = ((seed * 9301 + 49297) % 233280) / 233280;
123
+ return GLYPHS[Math.floor(h * GLYPHS.length)];
124
+ }
125
+
126
+ const tl = gsap.timeline({ paused: true });
127
+
128
+ // Per-char flip — stagger across the word
129
+ charEls.forEach((el, i) => {
130
+ const state = { p: 0 };
131
+ tl.to(
132
+ state,
133
+ {
134
+ p: 1,
135
+ duration: FLIP_DURATION,
136
+ ease: "power3.out",
137
+ onUpdate: () => {
138
+ // Phase A: random glyph flickering. Phase B: real character.
139
+ const progress = state.p;
140
+ if (progress < REVEAL_THRESHOLD) {
141
+ // Update glyph every FLICKER_RATE worth of progress
142
+ const flickerSeed = i * 1000 + Math.floor(progress * 100);
143
+ el.textContent = pseudoGlyph(flickerSeed);
144
+ } else {
145
+ el.textContent = el.dataset.target === " " ? " " : el.dataset.target;
146
+ }
147
+ // Flip rotateX from 90 (down) to 0 (upright)
148
+ const rotateX = 90 - progress * 90;
149
+ const opacity = Math.min(1, progress * 2);
150
+ el.style.transform = `rotateX(${rotateX}deg)`;
151
+ el.style.opacity = opacity;
152
+ },
153
+ },
154
+ i * CHAR_STAGGER,
155
+ );
156
+ });
157
+
158
+ window.__timelines["hacker-flip-scene"] = tl;
159
+ </script>
160
+ ```
161
+
162
+ ## How to Choose Values
163
+
164
+ - **HACKER_FONT_SIZE** — font-size of the flip text in px.
165
+ - Range: 6-10% of viewport min-dimension; the flip text is the focal beat, scale accordingly
166
+ - Constraints: ghost row must use the identical size so layout width stays stable mid-flicker
167
+ - Reference: ../../examples/proof-logo-chain.html uses `163px` at 1920×1080
168
+ - **FLIP_DURATION** — per-character flip tween duration.
169
+ - Range: 0.4-1.0s; under 0.4s the random-glyph phase has no time to flicker, over 1.0s drags
170
+ - Effects: shorter feels snappy and modern; longer feels mechanical / typewriter
171
+ - Reference: ../../examples/proof-logo-chain.html uses `0.55s`
172
+ - **CHAR_STAGGER** — delay between consecutive characters starting their flips, in seconds.
173
+ - Range: 0.03-0.08s; too fast and chars overlap visually, too slow and the effect feels labored
174
+ - Constraints: total decode time = `CHAR_STAGGER × (charCount − 1) + FLIP_DURATION`; ensure this fits the phase budget
175
+ - Reference: ../../examples/proof-logo-chain.html uses `0.033s` (≈2 frames at 60fps)
176
+ - **REVEAL_THRESHOLD** — progress at which a glyph swaps from random → real.
177
+ - Range: 0.5-0.7; lower reveals too early (no decode tension), higher feels like a hard reveal at the end
178
+ - Effects: this is a discrete tuning of when the eye locks onto the real letter
179
+ - Reference: ../../examples/proof-logo-chain.html uses `0.6`
180
+ - **FLICKER_RATE** — frames between glyph reshuffles during the random phase.
181
+ - Range: 3-6; lower than 3 looks like noise, higher than 6 looks like discrete typing instead of flicker
182
+ - Constraints: must be ≥ ~3 frames (see Critical Constraints)
183
+ - Reference: ../../examples/proof-logo-chain.html uses an equivalent of `3` (one shuffle every 3 internal-clock frames)
184
+ - **{bgColor} / {textColor}** — stage background and live-character color tokens.
185
+ - **{monoFont}** — monospace family preferred so flicker glyphs don't change width per swap; if a proportional font is required, the ghost placeholder makes the cost recoverable.
186
+ - **{phrase}** — the target word the flip resolves to. Length feeds the total decode duration via `CHAR_STAGGER`.
187
+
188
+ ## Variations
189
+
190
+ - **Top-down hinge** — swap `transform-origin: bottom` to `top` for a falling-flap look.
191
+ - **Center spin** — `transform-origin: center` reads as a barrel roll, not a flap.
192
+ - **Number-only pool** — restrict `GLYPHS` to digits for a price / countdown decode.
193
+ - **Two-pass decode** — chain two `FLIP_DURATION` tweens with different glyph pools (e.g. symbols → letters → real) for a longer reveal.
194
+
195
+ ## Key Principles
196
+
197
+ - **Threshold at ~`REVEAL_THRESHOLD`** for swap from random → real glyph — close enough to settled that viewer's eye catches the right letter
198
+ - **Hinge at `transform-origin: bottom`** for flap-display look (vs `top` for top-down, vs `center` for spin)
199
+ - **Deterministic random** via seeded hash — HF runtime seeks frame-by-frame, so the same frame must show the same glyph (no `Math.random()`)
200
+ - **Ghost placeholder** sits behind the live chars with identical content + same font, reserving width — without it, narrow glyphs shift the layout mid-flicker
201
+ - **Stagger in the 0.04-0.08s range** per char — too fast and chars overlap visually, too slow and effect feels labored
202
+ - **Center the flip dead-center via `display: grid; place-items: center;`** on the scene root — and DO NOT add decorative headers/footers (timestamp lines, "// AUTH" tags, small status dots). The flip text IS the focal beat; surrounding clutter dilutes it. If a secondary label is necessary, promote it to BIG typography in the same stacked layout (56-72px caps + tracking), not a tiny corner annotation.
203
+
204
+ ## Critical Constraints
205
+
206
+ - **`perspective` on scene root REQUIRED** — without parent perspective, `rotateX` looks like a 2D scale, not a 3D flip
207
+ - **`transform-style: preserve-3d` on each char** — keeps 3D context intact when chars have their own transforms
208
+ - **Timeline must be paused**: `gsap.timeline({ paused: true })`
209
+ - **Registry key = `data-composition-id`**
210
+ - **Deterministic randomness**: don't use `Math.random()`. Use a seed derived from char index + frame group so seek determinism holds
211
+ - **`onUpdate` writes to DOM**: HF seeks every frame, so this runs many times — keep work O(1) per char per frame
212
+ - **Flicker rate ≥ ~3 frames per glyph swap**: faster looks like noise, slower looks like discrete typing
213
+
214
+ ## Combinations
215
+
216
+ - [card-morph-anchor.md](card-morph-anchor.md) — pair: hacker-flip reveals a phrase, then card morphs into the next shot
217
+ - [counting-dynamic-scale.md](counting-dynamic-scale.md) — counterpart for numeric reveals (text vs number)
218
+
219
+ ## Pairs with HF skills
220
+
221
+ - `/hyperframes-animation` — timeline + per-char stagger + `onUpdate`
222
+ - `/hyperframes-core` — composition wiring
223
+ - `/hyperframes-cli` — `hyperframes lint`