@mevdragon/vidfarm-devcli 0.13.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 (427) 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 +60 -4
  405. package/SKILL.platform.md +7 -2
  406. package/demo/dist/app.css +1 -1
  407. package/demo/dist/app.js +485 -86
  408. package/dist/src/account-pages-legacy.js +9 -14
  409. package/dist/src/app.js +659 -159
  410. package/dist/src/cli.js +618 -17
  411. package/dist/src/composition-runtime.js +286 -6
  412. package/dist/src/devcli/composition-edit.js +176 -8
  413. package/dist/src/devcli/doctor.js +192 -0
  414. package/dist/src/devcli/hyperframes-cli.js +118 -0
  415. package/dist/src/devcli/skills.js +476 -0
  416. package/dist/src/devcli/stills.js +249 -0
  417. package/dist/src/devcli/transitions.js +205 -0
  418. package/dist/src/editor-chat.js +260 -4
  419. package/dist/src/frontend/template-editor-chat.js +6 -5
  420. package/dist/src/homepage.js +2 -48
  421. package/dist/src/hyperframes/composition.js +188 -7
  422. package/dist/src/services/composition-lint.js +199 -0
  423. package/dist/src/services/hyperframes.js +127 -28
  424. package/dist/src/services/serverless-records.js +7 -0
  425. package/dist/src/template-editor-shell.js +87 -48
  426. package/package.json +2 -1
  427. package/public/assets/page-runtime-client-app.js +31 -31
@@ -0,0 +1,286 @@
1
+ ---
2
+ name: asr-keyword-glow
3
+ description: Keywords glow + scale up when "spoken" — attack/sustain/release envelope synced to per-word timestamps. Even without real audio, hardcoded timings create a "narrator emphasis" effect.
4
+ metadata:
5
+ tags: asr, audio-sync, highlight, glow, keyword, text, speech, emphasis
6
+ ---
7
+
8
+ # ASR Keyword Glow
9
+
10
+ Words in a phrase visually activate (glow blur + scale) when "spoken," following an attack-sustain-release (ASR-like) envelope. In a real ASR pipeline these timings come from word-level transcript data; for promotional video, hardcode the timings to control emphasis pacing. The envelope leaves a subtle "rest glow" after the word, creating a breadcrumb of recent emphasis.
11
+
12
+ ## How It Works
13
+
14
+ Each word has `{ start, end }` timestamps. At each frame, compute the word's envelope value:
15
+
16
+ - **Pre-start** → 0 (not yet)
17
+ - **Start → peak** → attack (linear ramp 0 → 1)
18
+ - **Peak → end** → sustain (stays at 1)
19
+ - **End → end+release** → decay (1 → restLevel, typically 0.25)
20
+ - **After release** → restLevel (stays subtly highlighted)
21
+
22
+ The envelope drives `textShadow` blur radius AND `scale`. Higher blur + bigger scale = "speaking" emphasis.
23
+
24
+ ## HTML
25
+
26
+ ```html
27
+ <div
28
+ class="scene"
29
+ id="asr-scene"
30
+ data-composition-id="asr-scene"
31
+ data-start="0"
32
+ data-duration="6"
33
+ data-track-index="0"
34
+ >
35
+ <div class="phrase">
36
+ <!-- One <span class="word"> per word in {phrase}. data-word is a
37
+ stable key used to look up the word's ASR timing in JS. The
38
+ final word may be a {brandWord}, which gets longer emphasis
39
+ and the .brand modifier. -->
40
+ <span class="word" data-word="{w1Key}">{w1}</span>
41
+ <span class="word" data-word="{w2Key}">{w2}</span>
42
+ <!-- … -->
43
+ <span class="word brand" data-word="{brandKey}">{brandWord}</span>
44
+ </div>
45
+ </div>
46
+ ```
47
+
48
+ ## CSS
49
+
50
+ ```css
51
+ .scene {
52
+ position: relative;
53
+ width: 100%;
54
+ height: 100%;
55
+ display: grid;
56
+ place-items: center;
57
+ background: {sceneBackgroundColor};
58
+ font-family: {font};
59
+ }
60
+ .phrase {
61
+ display: flex;
62
+ flex-wrap: wrap;
63
+ gap: 24px;
64
+ justify-content: center;
65
+ max-width: 1700px;
66
+ font-size: 120px;
67
+ font-weight: 900;
68
+ letter-spacing: 2px;
69
+ color: {restColor};
70
+ text-align: center;
71
+ line-height: 1.2;
72
+ }
73
+ .word {
74
+ display: inline-block;
75
+ transform-origin: 50% 50%;
76
+ /* Initial subtle rest glow */
77
+ text-shadow: 0 0 0 {glowColorTransparent};
78
+ will-change: transform, text-shadow;
79
+ }
80
+ .word.brand {
81
+ color: {brandAccentColor};
82
+ letter-spacing: 12px;
83
+ text-transform: uppercase;
84
+ }
85
+ ```
86
+
87
+ ## GSAP Timeline
88
+
89
+ ```html
90
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
91
+ <script>
92
+ window.__timelines = window.__timelines || {};
93
+ const tl = gsap.timeline({ paused: true });
94
+
95
+ // Per-word "spoken" times — author these to control narrator pacing.
96
+ // Shape: { [wordKey]: { start, end } } in local seconds. One entry
97
+ // per <span class="word" data-word="…">. The brand word's window is
98
+ // typically 1.5-2× as long as a normal word.
99
+ const TIMINGS = {
100
+ // {w1Key}: { start: …, end: … },
101
+ // {w2Key}: { start: …, end: … },
102
+ // …
103
+ // {brandKey}: { start: …, end: … },
104
+ };
105
+
106
+ function envelope(time, start, end) {
107
+ const releaseEnd = end + RELEASE;
108
+ if (time < start) return 0;
109
+ if (time < end) {
110
+ // attack — linear ramp over ATTACK_DUR then sustain
111
+ const attack = Math.min((time - start) / ATTACK_DUR, 1);
112
+ return attack;
113
+ }
114
+ if (time < releaseEnd) {
115
+ // decay to rest level
116
+ const decay = (time - end) / RELEASE;
117
+ return 1 - decay * (1 - REST_LEVEL);
118
+ }
119
+ return REST_LEVEL;
120
+ }
121
+
122
+ const words = document.querySelectorAll(".word");
123
+
124
+ // Single driver — 0 → composition duration
125
+ const driver = { t: 0 };
126
+ tl.to(
127
+ driver,
128
+ {
129
+ t: SCENE_DURATION,
130
+ duration: SCENE_DURATION,
131
+ ease: "none",
132
+ onUpdate: () => {
133
+ words.forEach((el) => {
134
+ const word = el.dataset.word;
135
+ const timing = TIMINGS[word];
136
+ if (!timing) return;
137
+ const env = envelope(driver.t, timing.start, timing.end);
138
+ const blur = MAX_BLUR * env;
139
+ const scale = 1 + MAX_SCALE_BOOST * env;
140
+ el.style.textShadow = `0 0 ${blur}px ${glowColorRgba(env)}`;
141
+ el.style.transform = `scale(${scale})`;
142
+ });
143
+ },
144
+ },
145
+ 0,
146
+ );
147
+
148
+ window.__timelines["asr-scene"] = tl;
149
+ </script>
150
+ ```
151
+
152
+ `glowColorRgba(env)` returns the brand glow color with `env`-modulated alpha (e.g. `rgba({glowR}, {glowG}, {glowB}, ${GLOW_ALPHA_BASE + env * GLOW_ALPHA_RANGE})`).
153
+
154
+ ## Variations
155
+
156
+ ### Multi-octave glow (more dramatic peaks)
157
+
158
+ Combine the envelope-driven blur with a sin pulse during the sustain phase — high-emphasis words breathe at peak. The sine frequency `PULSE_HZ` controls how many breaths fit in the sustain window; amplitude `PULSE_AMPLITUDE` controls how visible the breath is.
159
+
160
+ ```js
161
+ const sustain = env * (1 + Math.sin(driver.t * PULSE_HZ) * PULSE_AMPLITUDE);
162
+ const blur = MAX_BLUR * sustain;
163
+ ```
164
+
165
+ ### Color shift on the peak
166
+
167
+ The active word lerps from `restColor` → `peakColor` as `env` rises, settling back to `restColor` at rest:
168
+
169
+ ```js
170
+ function lerpChannel(a, b, t) {
171
+ return Math.round(a + (b - a) * t);
172
+ }
173
+ el.style.color = `rgb(${lerpChannel(REST_RGB.r, PEAK_RGB.r, env)}, ${lerpChannel(REST_RGB.g, PEAK_RGB.g, env)}, ${lerpChannel(REST_RGB.b, PEAK_RGB.b, env)})`;
174
+ ```
175
+
176
+ ### Karaoke style (dim-rest + bright-active, RECOMMENDED for video narration)
177
+
178
+ Default amplitudes (small MAX_BLUR, small MAX_SCALE_BOOST, rest text full white) read as too subtle in video — the inactive words still dominate. Karaoke style fixes this: **inactive words rendered DIM**, active words **lerp toward bright white + larger scale**:
179
+
180
+ ```js
181
+ // Tunable constants — see How to Choose Values
182
+ // REST_RGB — dim color for inactive words
183
+ // ACTIVE_RGB — bright color at peak (non-brand)
184
+ // BRAND_RGB — bright color at peak (brand word)
185
+ // MAX_BLUR, MAX_SCALE_BOOST, REST_LEVEL all pushed higher than default
186
+
187
+ function lerpChannel(a, b, t) {
188
+ return Math.round(a + (b - a) * t);
189
+ }
190
+ function colorAt(env, isBrand) {
191
+ const target = isBrand ? BRAND_RGB : ACTIVE_RGB;
192
+ return `rgb(${lerpChannel(REST_RGB.r, target.r, env)}, ${lerpChannel(REST_RGB.g, target.g, env)}, ${lerpChannel(REST_RGB.b, target.b, env)})`;
193
+ }
194
+
195
+ // In onUpdate:
196
+ el.style.color = colorAt(env, el.classList.contains("brand"));
197
+ ```
198
+
199
+ Visual result: at any moment 1-2 words are bright + glowing (the spoken word + the recently-spoken one's lingering rest), and the rest of the phrase is dim. This is closer to actual karaoke / lyric video aesthetic than the subtle "everyone half-glowing" baseline.
200
+
201
+ When to use karaoke vs default: short narration phrases (5-10 words) where one word at a time should clearly POP → karaoke. Long dense text where many words emphasize subtly → default subtle. Karaoke pushes MAX_BLUR, MAX_SCALE_BOOST, and contrast between REST_RGB and ACTIVE_RGB; everything else is identical.
202
+
203
+ ### 3D pop-out
204
+
205
+ Combine envelope with `translateZ` for words to "lean toward camera" as they speak:
206
+
207
+ ```js
208
+ const popZ = env * MAX_POP_Z;
209
+ el.style.transform = `translateZ(${popZ}px) scale(${scale})`;
210
+ ```
211
+
212
+ Requires `perspective` on the parent.
213
+
214
+ ### From real ASR transcripts
215
+
216
+ For real ASR-driven scenes, replace hardcoded TIMINGS with transcript JSON (each entry has `word`, `start_ms`, `end_ms`). Convert to seconds and feed in identically. The shape `{ [wordKey]: { start, end } }` is the same whether hand-authored or derived from `hyperframes transcribe`.
217
+
218
+ ## How to Choose Values
219
+
220
+ - **TIMINGS** — per-word `{ start, end }` map. Author one entry per `.word` span.
221
+ - Shape: `{ wordKey: { start: number, end: number } }`, all seconds local to the scene.
222
+ - Constraints: monotonic non-overlap — every entry's `end < next entry's start` (overlapping windows make the envelope ambiguous).
223
+ - Brand word window: typically 1.5-2× the average non-brand word window so the brand sustains.
224
+ - **ATTACK_DUR** — seconds for the envelope to ramp 0 → 1 once a word starts.
225
+ - Range: 0.1-0.25 s
226
+ - Effects: shorter feels punchy and ASR-like; longer feels smoothed-out.
227
+ - Constraints: must be < (smallest word's end - start), otherwise the word never reaches 1.
228
+ - **RELEASE** — seconds for the envelope to decay 1 → REST_LEVEL after a word ends.
229
+ - Range: 0.2-0.5 s
230
+ - **REST_LEVEL** — held envelope value after RELEASE.
231
+ - Range: 0.15-0.4 (default style); 0.05-0.2 (karaoke style — dimmer rest).
232
+ - Effects: lower = quieter breadcrumb; higher = more recently-spoken words stay bright.
233
+ - Constraints: must be < 1; should be > 0 to preserve the breadcrumb.
234
+ - **MAX_BLUR** — peak `text-shadow` blur radius in px.
235
+ - Range: 15-25 px (default style); 30-45 px (karaoke style).
236
+ - Effects: bigger reads as "shouting"; smaller reads as "neutral narration".
237
+ - **MAX_SCALE_BOOST** — additive scale at peak (e.g. 0.08 ⇒ 1.0 → 1.08).
238
+ - Range: 0.03-0.10 (default style); 0.15-0.25 (karaoke style).
239
+ - Effects: bigger reads as "bouncy"; smaller reads as "just glowing".
240
+ - **SCENE_DURATION** — total seconds for the single driver tween.
241
+ - Constraints: must equal the scene's `data-duration` so the driver `t` reaches the end of TIMINGS in sync with HF's seek.
242
+ - **REST_RGB / ACTIVE_RGB / BRAND_RGB** (karaoke style) — discrete color choices, not numeric.
243
+ - REST_RGB: dim tone of the brand palette's neutral; should read as off-white-ish dim, not black.
244
+ - ACTIVE_RGB: brand text color at full readability.
245
+ - BRAND_RGB: brand accent color (often the same hue as the glow).
246
+ - **PULSE_HZ / PULSE_AMPLITUDE** (multi-octave variation) — sine breath frequency / depth.
247
+ - PULSE_HZ range: 4-10 rad/s; PULSE_AMPLITUDE range: 0.1-0.3.
248
+ - **MAX_POP_Z** (3D pop-out variation) — max Z translation at peak (px).
249
+ - Range: 20-60 px; requires parent `perspective`.
250
+
251
+ Ease family — discrete choice:
252
+
253
+ - Single linear driver (`ease: "none"`) so `t` maps 1:1 to scene time. Any other ease distorts the per-word envelope shape — do not change.
254
+
255
+ ## Key Principles
256
+
257
+ - **Envelope shape: attack-sustain-decay-rest** — never zero out after a word. The rest level (REST_LEVEL > 0) keeps the recently-spoken words subtly highlighted, creating a "breadcrumb" of attention.
258
+ - **Brand word gets longer emphasis (1.5-2× normal)** — the brand is the headline; let it sustain.
259
+ - **`display: inline-block`** on each word — required for `transform` to apply to `<span>`.
260
+ - **MAX_BLUR and MAX_SCALE_BOOST stay in their default-style ranges unless you commit to karaoke** — picking values between default and karaoke yields awkward "half-loud" emphasis.
261
+ - **Per-word `text-shadow`** (not `box-shadow`) — text-shadow is the glow around the GLYPH, which is what reads as "speaking emphasis." Box-shadow would glow around the inline-block bounding box (rectangle).
262
+ - **Single driver, multi-word onUpdate** — one tween that loops over all words. Don't create one tween per word — at 60+ words the timeline becomes unwieldy.
263
+ - **❗ Climax dwell ≥1s** — after the final word's emphasis, comp continues ≥1s. The last word IS the headline beat.
264
+
265
+ ## Critical Constraints
266
+
267
+ - **Timeline must be paused**: `gsap.timeline({ paused: true })`
268
+ - **Registry key = `data-composition-id`**
269
+ - **No CSS animation** on word elements
270
+ - **`display: inline-block`** on each `.word`
271
+ - **`will-change: transform, text-shadow`** on `.word`
272
+ - **Timings monotonic** (later start > earlier end) — overlapping words mess up the envelope
273
+
274
+ ## Combinations
275
+
276
+ - [3d-text-depth-layers.md](3d-text-depth-layers.md) — the active word gets depth-layered emphasis at peak
277
+ - [sine-wave-loop.md](sine-wave-loop.md) — non-active words breathe subtly between emphasis moments
278
+ - [context-sensitive-cursor.md](context-sensitive-cursor.md) — typewriter that types each word matching the ASR cadence
279
+
280
+ ## Pairs with HF skills
281
+
282
+ - `/hyperframes-animation` — single driver, multi-element envelope
283
+ - `/hyperframes-media` — `hyperframes transcribe` outputs real ASR data
284
+ - `/hyperframes-media` — pair with caption rendering
285
+ - `/hyperframes-core` — composition wiring
286
+ - `/hyperframes-cli` — `hyperframes lint`
@@ -0,0 +1,371 @@
1
+ ---
2
+ name: avatar-cloud-network
3
+ description: Avatars distributed on an elliptical ring connected by SVG dashed lines to a center hub — social proof "community" reveal with staggered entry.
4
+ metadata:
5
+ tags: avatar, cloud, network, social-proof, ellipse, connection, stagger
6
+ ---
7
+
8
+ # Avatar Cloud Network
9
+
10
+ Avatars arranged on an elliptical ring around a central element (logo / counter / brand). SVG dashed connection lines from center to each avatar. Staggered spring entry on avatars, then connection lines draw outward — communicates "community" or "social proof." Distinct from [orbit-3d-entry](orbit-3d-entry.md) (which continuously orbits) — avatar-cloud is a static composed reveal.
11
+
12
+ ## How It Works
13
+
14
+ Three rendering layers:
15
+
16
+ 1. **SVG connection lines** (z-index 1, behind everything) — line from center hub to each avatar's position
17
+ 2. **Avatars** (z-index 2) — `<div>` circles on elliptical positions
18
+ 3. **Center hub** (z-index 5) — brand counter or logo (sits ABOVE the lines that converge on it)
19
+
20
+ Animation phases:
21
+
22
+ - `HUB_FADE_START → HUB_FADE_START + HUB_FADE_DUR`: hub fades in
23
+ - `AVATAR_ENTRY_START → AVATAR_ENTRY_START + (AVATAR_COUNT − 1) × AVATAR_STAGGER + AVATAR_ENTRY_DUR`: avatars cascade in
24
+ - `LINES_START → LINES_START + (AVATAR_COUNT − 1) × LINE_STAGGER + LINES_DUR`: connection lines draw outward
25
+ - climax dwell: optional idle breathing on avatars (see Variations / sine-wave-loop)
26
+
27
+ ## HTML
28
+
29
+ ```html
30
+ <div
31
+ class="scene"
32
+ id="cloud-scene"
33
+ data-composition-id="cloud-scene"
34
+ data-start="0"
35
+ data-duration="4"
36
+ data-track-index="0"
37
+ >
38
+ <!-- Connection lines layer -->
39
+ <svg class="lines" viewBox="0 0 1920 1080" xmlns="http://www.w3.org/2000/svg">
40
+ <!-- Lines injected by script — center to each avatar -->
41
+ </svg>
42
+
43
+ <!-- Avatars + center hub -->
44
+ <div class="hub-wrap">
45
+ <div class="hub" id="hub">
46
+ <div class="hub-num" id="hub-num">{counterValue}</div>
47
+ <div class="hub-label">{counterLabel}</div>
48
+ </div>
49
+ <!-- Avatars injected by script — AVATAR_COUNT around the ellipse -->
50
+ </div>
51
+
52
+ <div class="brand">{footerLine}</div>
53
+ </div>
54
+ ```
55
+
56
+ Placeholder tokens:
57
+
58
+ - `{counterValue}` / `{counterLabel}` — the hub copy (numeric proof + category)
59
+ - `{footerLine}` — optional attribution line under the cloud
60
+ - `{avatar[i]}` — per-avatar image source (or emoji glyph if using the emoji variation below)
61
+
62
+ ## CSS
63
+
64
+ ```css
65
+ .scene {
66
+ position: relative;
67
+ width: 100%;
68
+ height: 100%;
69
+ background: {bgColor};
70
+ font-family: {font};
71
+ overflow: hidden;
72
+ }
73
+ .lines {
74
+ position: absolute;
75
+ inset: 0;
76
+ width: 100%;
77
+ height: 100%;
78
+ pointer-events: none;
79
+ z-index: 1;
80
+ }
81
+ .hub-wrap {
82
+ position: absolute;
83
+ inset: 0;
84
+ display: grid;
85
+ place-items: center;
86
+ }
87
+ .hub {
88
+ position: relative;
89
+ z-index: 5;
90
+ display: flex;
91
+ flex-direction: column;
92
+ align-items: center;
93
+ gap: 12px;
94
+ padding: 48px 64px;
95
+ border-radius: 28px;
96
+ background: {hubBg};
97
+ border: 1px solid {hubBorder};
98
+ }
99
+ .hub-num {
100
+ font-size: HUB_NUM_FONT_SIZE;
101
+ font-weight: 900;
102
+ color: {textColor};
103
+ letter-spacing: -4px;
104
+ line-height: 1;
105
+ font-variant-numeric: tabular-nums;
106
+ }
107
+ .hub-label {
108
+ font-size: HUB_LABEL_FONT_SIZE;
109
+ font-weight: 800;
110
+ letter-spacing: 12px;
111
+ color: {accentColor};
112
+ text-transform: uppercase;
113
+ }
114
+ .avatar {
115
+ position: absolute;
116
+ z-index: 2;
117
+ width: AVATAR_SIZE;
118
+ height: AVATAR_SIZE;
119
+ border-radius: 50%;
120
+ border: 3px solid {avatarBorder};
121
+ box-shadow:
122
+ 0 12px 32px rgba(0, 0, 0, 0.5),
123
+ 0 0 24px {avatarGlow};
124
+ display: grid;
125
+ place-items: center;
126
+ font-size: AVATAR_GLYPH_SIZE;
127
+ background: {avatarBg};
128
+ will-change: transform, opacity;
129
+ /* Top-left positioned by script; transform centers via -50% trick */
130
+ transform: translate(-50%, -50%);
131
+ }
132
+ .brand {
133
+ position: absolute;
134
+ bottom: 80px;
135
+ left: 50%;
136
+ transform: translateX(-50%);
137
+ font-size: BRAND_FONT_SIZE;
138
+ font-weight: 900;
139
+ letter-spacing: 14px;
140
+ color: {accentColor};
141
+ text-transform: uppercase;
142
+ }
143
+ ```
144
+
145
+ ## GSAP Timeline
146
+
147
+ ```html
148
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
149
+ <script>
150
+ window.__timelines = window.__timelines || {};
151
+ const tl = gsap.timeline({ paused: true });
152
+
153
+ // CENTER_X / CENTER_Y must match the hub's rendered center exactly.
154
+ // For a hub-wrap with place-items:center on a 1920×1080 canvas these are
155
+ // (compositionWidth/2, compositionHeight × CENTER_Y_FACTOR).
156
+ const SCREEN_CENTER = { x: CENTER_X, y: CENTER_Y };
157
+
158
+ const hubWrap = document.querySelector(".hub-wrap");
159
+ const linesSvg = document.querySelector(".lines");
160
+
161
+ // Build avatars + lines
162
+ const avatarPositions = [];
163
+ for (let i = 0; i < AVATAR_COUNT; i++) {
164
+ const angle = (i / AVATAR_COUNT) * Math.PI * 2 - Math.PI / 2; // start at top
165
+ const x = SCREEN_CENTER.x + Math.cos(angle) * RADIUS_X;
166
+ const y = SCREEN_CENTER.y + Math.sin(angle) * RADIUS_Y;
167
+ avatarPositions.push({ x, y, angle });
168
+
169
+ // Avatar
170
+ const av = document.createElement("div");
171
+ av.className = "avatar";
172
+ av.style.left = `${x}px`;
173
+ av.style.top = `${y}px`;
174
+ // assign avatar image / glyph from your authoring data (see {avatar[i]})
175
+ hubWrap.appendChild(av);
176
+
177
+ // Line from hub to avatar
178
+ const line = document.createElementNS("http://www.w3.org/2000/svg", "line");
179
+ line.setAttribute("x1", SCREEN_CENTER.x);
180
+ line.setAttribute("y1", SCREEN_CENTER.y);
181
+ line.setAttribute("x2", x);
182
+ line.setAttribute("y2", y);
183
+ line.setAttribute("stroke", "{lineColor}");
184
+ line.setAttribute("stroke-width", "2");
185
+ line.setAttribute("stroke-dasharray", "6 8");
186
+ const len = Math.hypot(x - SCREEN_CENTER.x, y - SCREEN_CENTER.y);
187
+ line.style.strokeDashoffset = String(len);
188
+ line.dataset.length = String(len);
189
+ line.dataset.index = String(i);
190
+ linesSvg.appendChild(line);
191
+ }
192
+
193
+ // Phase 1 — hub fade in
194
+ tl.from(
195
+ ".hub",
196
+ { opacity: 0, scale: 0.8, duration: HUB_FADE_DUR, ease: `back.out(${HUB_BOUNCE})` },
197
+ HUB_FADE_START,
198
+ );
199
+
200
+ // Phase 2 — avatars cascade-in (staggered spring)
201
+ const avatars = document.querySelectorAll(".avatar");
202
+ avatars.forEach((av, i) => {
203
+ tl.from(
204
+ av,
205
+ {
206
+ opacity: 0,
207
+ scale: 0,
208
+ duration: AVATAR_ENTRY_DUR,
209
+ ease: `back.out(${AVATAR_BOUNCE})`,
210
+ },
211
+ AVATAR_ENTRY_START + i * AVATAR_STAGGER,
212
+ );
213
+ });
214
+
215
+ // Phase 3 — connection lines draw outward (staggered) — starts after most avatars land
216
+ const lines = linesSvg.querySelectorAll("line");
217
+ lines.forEach((line, i) => {
218
+ tl.to(
219
+ line,
220
+ {
221
+ strokeDashoffset: 0,
222
+ duration: LINES_DUR,
223
+ ease: "power2.out",
224
+ },
225
+ LINES_START + i * LINE_STAGGER,
226
+ );
227
+ });
228
+
229
+ // Phase 4 — climax dwell (network fully formed), idle breathing on avatars
230
+ // (see sine-wave-loop.md for the multiplicative onUpdate form)
231
+ const breathDriver = { p: 0 };
232
+ tl.to(
233
+ breathDriver,
234
+ {
235
+ p: Math.PI * 2 * BREATH_CYCLES,
236
+ duration: BREATH_DUR,
237
+ ease: "none",
238
+ onUpdate: () => {
239
+ avatars.forEach((av, i) => {
240
+ const phase = breathDriver.p + (i / avatars.length) * Math.PI * 2;
241
+ const s = 1 + Math.sin(phase) * BREATH_AMP;
242
+ av.style.transform = `translate(-50%, -50%) scale(${s})`;
243
+ });
244
+ },
245
+ },
246
+ BREATH_START,
247
+ );
248
+
249
+ window.__timelines["cloud-scene"] = tl;
250
+ </script>
251
+ ```
252
+
253
+ ## How to Choose Values
254
+
255
+ ### Geometry
256
+
257
+ - **CENTER_X / CENTER_Y** — px coordinates of the hub center; lines and avatar positions derive from these.
258
+ - Constraints: **must equal the hub's actual rendered center** — when this rule is composed with another scene (e.g. a logo that has been recentered), `CENTER_X / CENTER_Y` must be baked from the same source as the hub's final position
259
+ - Reference: ../../examples/proof-logo-chain.html uses `(W/2, H × 0.47)` so the cloud sits slightly above the canvas midline
260
+ - **RADIUS_X / RADIUS_Y** — ellipse radii in px (RADIUS_X ≥ RADIUS_Y reads as perspective).
261
+ - Range: `RADIUS_X` ~ 20-30% of viewport width; `RADIUS_Y` ~ 18-25% of viewport height
262
+ - Constraints: `RADIUS_X / RADIUS_Y` ratio between 1.5 and 3.0 reads as natural depth; ratio = 1 (circle) reads as a flat 2D layout
263
+ - Reference: ../../examples/proof-logo-chain.html uses `W * 0.25` (`480px`) and `H * 0.22` (`237.6px`)
264
+ - **AVATAR_COUNT** — number of avatars distributed around the ring.
265
+ - Range: 8-12; fewer feels sparse, more clutters the ellipse
266
+ - Reference: ../../examples/proof-logo-chain.html uses `10`
267
+ - **AVATAR_SIZE / AVATAR_GLYPH_SIZE** — px diameter of each avatar circle and (optional) inner glyph size.
268
+ - Range: `AVATAR_SIZE` ~ 80-120 px at 1920 wide; small enough that 10+ avatars fit the ring without overlap
269
+ - **HUB_NUM_FONT_SIZE / HUB_LABEL_FONT_SIZE / BRAND_FONT_SIZE** — hub typography.
270
+ - Constraints: hub-num is the focal beat, sized 2-4× the label
271
+
272
+ ### Hub fade
273
+
274
+ - **HUB_FADE_START** — when the hub fades in.
275
+ - Range: usually `0` (the hub establishes the focal point); offset if the scene precedes with another beat
276
+ - **HUB_FADE_DUR** — hub fade-in duration.
277
+ - Range: 0.4-0.6s
278
+ - **HUB_BOUNCE** — `back.out(HUB_BOUNCE)` coefficient on the hub's scale entry.
279
+ - Range: 1.4 (subtle) → 1.8 (firm)
280
+
281
+ ### Avatar cascade
282
+
283
+ - **AVATAR_ENTRY_START** — when the first avatar pops in.
284
+ - Constraints: `≥ HUB_FADE_START + HUB_FADE_DUR × 0.6` so the hub is established before satellites arrive
285
+ - **AVATAR_ENTRY_DUR** — per-avatar scale-up duration.
286
+ - Range: 0.4-0.7s
287
+ - **AVATAR_STAGGER** — delay between consecutive avatar entries.
288
+ - Range: 0.06-0.10s; cascade reads as "joining"; simultaneous reads as "all already there"
289
+ - **AVATAR_BOUNCE** — `back.out(AVATAR_BOUNCE)` coefficient on each avatar's pop.
290
+ - Range: 1.4 (gentle) → 1.8 (firm); slightly firmer than hub for differentiation
291
+
292
+ ### Connection lines
293
+
294
+ - **LINES_START** — when the lines begin drawing outward.
295
+ - Constraints: `LINES_START + (AVATAR_COUNT − 1) × LINE_STAGGER` should overlap the last avatar's settle by ~0.1-0.2s so the drawing reads as a consequence of the avatars landing
296
+ - **LINES_DUR** — per-line draw duration (strokeDashoffset → 0).
297
+ - Range: 0.4-0.7s
298
+ - **LINE_STAGGER** — delay between consecutive lines starting.
299
+ - Range: 0.02-0.05s; tight stagger reads as a wave outward
300
+
301
+ ### Idle breathing
302
+
303
+ - **BREATH_START** — when idle breathing activates.
304
+ - Constraints: `≥ LINES_START + (AVATAR_COUNT − 1) × LINE_STAGGER + LINES_DUR + ~0.2s` (let the lines settle)
305
+ - **BREATH_DUR** — total duration of the breathing tween.
306
+ - Range: fills the remaining composition window
307
+ - **BREATH_CYCLES** — number of full sine cycles across `BREATH_DUR`.
308
+ - Range: 1.0-2.0; under 1 reads as a single sigh, over 2 starts to look anxious
309
+ - **BREATH_AMP** — sine amplitude on scale (multiplicative).
310
+ - Range: 0.02-0.06; smaller for headshots, larger for stylized glyphs
311
+
312
+ ### Color tokens
313
+
314
+ - **{bgColor}** — stage background (typically a dark gradient so the cloud reads as a constellation)
315
+ - **{textColor}** — hub-num color (primary copy)
316
+ - **{accentColor}** — hub-label + footer (the brand voice)
317
+ - **{hubBg} / {hubBorder}** — hub card surfaces; gradient + 1px border reads as elevated
318
+ - **{avatarBg} / {avatarBorder} / {avatarGlow}** — avatar circle styling; soft border + glow keeps them legible on dark backgrounds
319
+ - **{lineColor}** — SVG stroke color (translucent accent reads as networky)
320
+ - **{font}** — base typography stack
321
+
322
+ ## Variations
323
+
324
+ ### Avatar size variation (organic feel)
325
+
326
+ Vary avatar sizes by index — e.g. a small index-keyed array of sizes — so the ring doesn't read as rigidly repetitive.
327
+
328
+ ### Solid lines instead of dashed
329
+
330
+ Drop `stroke-dasharray` and use a solid stroke. Drop the dash-draw animation; lines fade in via opacity instead. More corporate, less networky.
331
+
332
+ ### Multi-orbit (concentric rings)
333
+
334
+ Two layers of avatars: smaller inner ring (fewer avatars, slightly larger size), larger outer ring (more, smaller). Lines connect ONLY inner ring to hub; outer ring is a "halo."
335
+
336
+ ### Country / role glyphs (geographic or persona spread)
337
+
338
+ Replace face images with flags / emoji / iconography. Reads as "global community" or "diverse roles."
339
+
340
+ ## Key Principles
341
+
342
+ - **Hub above lines (`z-index: 5` vs lines `z-index: 1`)** — lines should appear to terminate AT the hub edge, not pass through. Hub must be in front.
343
+ - **Lines drawn outward (dash offset 0)** — drawing FROM center is the visual narrative: "the hub connects to its community."
344
+ - **8-12 avatars** — fewer feels sparse, more clutters the ellipse.
345
+ - **`RADIUS_X > RADIUS_Y`** — horizontal ellipse reads as perspective; equal radii (circle) reads as 2D flat layout.
346
+ - **Avatar entry stagger 0.06-0.10s** — cascade reads as "joining"; simultaneous reads as "all already there."
347
+ - **Stagger lines AFTER avatars are mostly settled** — line draw starts ~0.1-0.2s before last avatar settles for overlap.
348
+ - **Idle breathing post-formation** — each avatar slightly out-of-phase. Holds the eye during climax dwell.
349
+ - **❗ Climax dwell ≥1s** — after lines complete, hold for ≥1s so the formed network is readable.
350
+
351
+ ## Critical Constraints
352
+
353
+ - **Timeline must be paused**: `gsap.timeline({ paused: true })`
354
+ - **Registry key = `data-composition-id`**
355
+ - **No CSS animation** on avatars or lines
356
+ - **`will-change: transform, opacity`** on avatars
357
+ - **SVG `pointer-events: none`** — decorative overlay
358
+ - **`getTotalLength()` not needed for straight lines** — use `Math.hypot` for line length (cheaper, exact)
359
+ - **Hub `z-index` > lines z-index** — explicit layering
360
+
361
+ ## Combinations
362
+
363
+ - [counting-dynamic-scale.md](counting-dynamic-scale.md) — the hub IS a growing counter
364
+ - [sine-wave-loop.md](sine-wave-loop.md) — avatar idle breathing pattern
365
+ - [3d-text-depth-layers.md](3d-text-depth-layers.md) — hub label with depth layers
366
+
367
+ ## Pairs with HF skills
368
+
369
+ - `/hyperframes-animation` — staggered spring entries + SVG dash draw
370
+ - `/hyperframes-core` — composition wiring
371
+ - `/hyperframes-cli` — `hyperframes lint`