@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,729 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=1920, height=1080" />
6
+ <title>Scene 01 — Counting Icon Burst</title>
7
+
8
+ <!--
9
+ HyperFrames composition.tsx.
10
+
11
+ Choreography (4 phases, 3.5 seconds total):
12
+ 0.00 – 0.17s Background visible with dark overlay; nothing else
13
+ 0.17 – 0.57s Four enriched icons enter staggered, clustered at startOffset 0.4
14
+ (clock 0.17s · scissors 0.30s · video 0.43s · play 0.57s)
15
+ 0.47 – 1.47s Counter "0 → 90" with growing font size (0.20W → 0.42W);
16
+ icons expand outward from 40% to 100% position
17
+ 0.50 – 2.33s Camera focus phase: scale 0.92 → 1.0
18
+ 2.33 – 3.50s Camera push phase: scale 1.0 → 1.08
19
+ 1.27s Percent symbol pops in with own spring
20
+
21
+ Continuous motion (running from t=0, gated by icon visibility):
22
+ Clock minute hand: linear rotation 420° over 3.5s
23
+ Scissors: ±15° sine oscillation, period ~1.7s
24
+ Cutting line: stroke-dashoffset drifts -200 over 3.5s
25
+ Video record dot: opacity + scale phase-offset sine pulses
26
+ Play triangle: scale pulse ±8%, period ~2.6s
27
+ ease + duration (no shared driver needed, just identical timing)
28
+ - Counter text + number scale are emitted as seek-safe timeline keyframes
29
+ - Background: local Pexels MP4 plus dark overlay
30
+ - Per-icon entry uses GSAP fromTo on a nested .icon-entry wrapper
31
+ so it never overwrites the .icon-pos expansion tween
32
+ -->
33
+
34
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
35
+
36
+ <style>
37
+ :root {
38
+ --bg-dark: #060812;
39
+ --text-primary: #ffffff;
40
+ --accent-yellow: #edcb50;
41
+ --record-red: #ef4444;
42
+ }
43
+ * {
44
+ margin: 0;
45
+ padding: 0;
46
+ box-sizing: border-box;
47
+ }
48
+ html,
49
+ body {
50
+ margin: 0;
51
+ width: 1920px;
52
+ height: 1080px;
53
+ overflow: hidden;
54
+ background: var(--bg-dark);
55
+ font-family:
56
+ "Inter",
57
+ system-ui,
58
+ -apple-system,
59
+ sans-serif;
60
+ color: var(--text-primary);
61
+ }
62
+
63
+ /* ============================================================
64
+ BACKGROUND (static gradient)
65
+ ============================================================ */
66
+ .bg {
67
+ position: absolute;
68
+ inset: 0;
69
+ transform-origin: center center;
70
+ will-change: transform;
71
+ background:
72
+ radial-gradient(ellipse at 30% 30%, rgba(80, 100, 200, 0.25), transparent 60%),
73
+ radial-gradient(ellipse at 70% 70%, rgba(180, 80, 150, 0.2), transparent 60%),
74
+ linear-gradient(135deg, #0a0d1f 0%, #1a0d20 100%);
75
+ }
76
+ .bg-overlay {
77
+ position: absolute;
78
+ inset: 0;
79
+ background: rgba(0, 0, 0, 0.66);
80
+ }
81
+
82
+ /* ============================================================
83
+ CAMERA WRAPPER (GSAP-managed scale phases)
84
+ ============================================================ */
85
+ .camera {
86
+ position: absolute;
87
+ inset: 0;
88
+ transform-origin: center center;
89
+ will-change: transform;
90
+ }
91
+
92
+ /* ============================================================
93
+ ICONS — two nested wrappers per icon.
94
+ .icon-pos is positioned at TARGET; GSAP x/y shifts toward center.
95
+ .icon-entry tweens scale/opacity/rotation.
96
+ ============================================================ */
97
+ .icons-stage {
98
+ position: absolute;
99
+ inset: 0;
100
+ }
101
+ .icon-pos {
102
+ position: absolute;
103
+ width: 180px;
104
+ height: 180px;
105
+ will-change: transform;
106
+ }
107
+ .icon-entry {
108
+ width: 100%;
109
+ height: 100%;
110
+ display: flex;
111
+ align-items: center;
112
+ justify-content: center;
113
+ will-change: transform, opacity;
114
+ /* initial scale(0) + opacity(0) set by GSAP fromTo */
115
+ }
116
+ .icon-svg {
117
+ width: 100%;
118
+ height: 100%;
119
+ display: block;
120
+ }
121
+
122
+ /* SVG inner elements — class hooks for GSAP tweens */
123
+ .clock-hand-min {
124
+ transform-box: view-box;
125
+ }
126
+ .scissor-upper,
127
+ .scissor-lower {
128
+ transform-origin: 12px 12px;
129
+ }
130
+ .play-tri {
131
+ transform-origin: 12px 12px;
132
+ }
133
+ .record-dot {
134
+ transform-origin: 19px 8px;
135
+ }
136
+ .play-ring {
137
+ transform-origin: 12px 12px;
138
+ transform: rotate(-90deg);
139
+ }
140
+
141
+ /* ============================================================
142
+ COUNTER (absolute center, 3D entry)
143
+ ============================================================ */
144
+ .counter-stage {
145
+ position: absolute;
146
+ inset: 0;
147
+ display: flex;
148
+ align-items: center;
149
+ justify-content: center;
150
+ perspective: 2000px;
151
+ perspective-origin: center center;
152
+ }
153
+ .counter-3d {
154
+ display: flex;
155
+ align-items: baseline;
156
+ justify-content: center;
157
+ transform-style: preserve-3d;
158
+ will-change: transform, opacity;
159
+ opacity: 0; /* GSAP entry fades in */
160
+ }
161
+ .counter-number {
162
+ font-size: 806px; /* W × 0.42 — final size, GSAP scales from 0.20W */
163
+ font-weight: 900;
164
+ letter-spacing: -0.04em;
165
+ line-height: 0.9;
166
+ font-variant-numeric: tabular-nums; /* prevents 1→2 digit jitter */
167
+ color: var(--text-primary);
168
+ display: inline-block;
169
+ transform-origin: center bottom;
170
+ will-change: transform;
171
+ }
172
+ .counter-percent {
173
+ font-size: 269px; /* W × 0.14 */
174
+ font-weight: 700;
175
+ letter-spacing: -0.02em;
176
+ color: var(--accent-yellow);
177
+ margin-left: 16px;
178
+ display: inline-block;
179
+ will-change: transform, opacity;
180
+ opacity: 0; /* GSAP entry tweens in later */
181
+ }
182
+
183
+ /* ============================================================
184
+ VIGNETTE
185
+ ============================================================ */
186
+ .vignette {
187
+ position: absolute;
188
+ inset: 0;
189
+ background: radial-gradient(ellipse at center, transparent 50%, rgba(0, 0, 0, 0.5) 100%);
190
+ pointer-events: none;
191
+ z-index: 400;
192
+ }
193
+ </style>
194
+ </head>
195
+ <body>
196
+ <div
197
+ id="root"
198
+ data-composition-id="main"
199
+ data-start="0"
200
+ data-duration="3.5"
201
+ data-width="1920"
202
+ data-height="1080"
203
+ >
204
+ <div class="bg"></div>
205
+ <div class="bg-overlay"></div>
206
+
207
+ <div
208
+ class="camera clip"
209
+ data-start="0"
210
+ data-duration="3.5"
211
+ data-track-index="1"
212
+ id="camera-stage"
213
+ >
214
+ <div class="icons-stage">
215
+ <!-- Clock -->
216
+ <div class="icon-pos clock-pos" id="clock-pos">
217
+ <div class="icon-entry clock-entry">
218
+ <svg
219
+ class="icon-svg"
220
+ viewBox="0 0 24 24"
221
+ xmlns="http://www.w3.org/2000/svg"
222
+ aria-hidden="true"
223
+ >
224
+ <circle
225
+ class="clock-ring"
226
+ cx="12"
227
+ cy="12"
228
+ r="9"
229
+ fill="none"
230
+ stroke="white"
231
+ stroke-width="2"
232
+ stroke-dasharray="56.5"
233
+ stroke-dashoffset="56.5"
234
+ />
235
+ <line
236
+ x1="12"
237
+ y1="12"
238
+ x2="12"
239
+ y2="8"
240
+ stroke="white"
241
+ stroke-width="2"
242
+ stroke-linecap="round"
243
+ />
244
+ <line
245
+ class="clock-hand-min"
246
+ x1="12"
247
+ y1="12"
248
+ x2="12"
249
+ y2="6"
250
+ stroke="#edcb50"
251
+ stroke-width="2"
252
+ stroke-linecap="round"
253
+ />
254
+ <circle cx="12" cy="12" r="1.5" fill="#edcb50" />
255
+ </svg>
256
+ </div>
257
+ </div>
258
+
259
+ <!-- Scissors -->
260
+ <div class="icon-pos scissors-pos" id="scissors-pos">
261
+ <div class="icon-entry scissors-entry">
262
+ <svg
263
+ class="icon-svg"
264
+ viewBox="0 0 24 24"
265
+ xmlns="http://www.w3.org/2000/svg"
266
+ aria-hidden="true"
267
+ >
268
+ <g class="scissor-upper">
269
+ <path
270
+ d="M12 10.5L4.5 3L6.5 3L14 10.5"
271
+ stroke="white"
272
+ stroke-width="2"
273
+ stroke-linecap="round"
274
+ fill="none"
275
+ />
276
+ <circle cx="6" cy="6" r="2.5" fill="none" stroke="white" stroke-width="1.5" />
277
+ </g>
278
+ <g class="scissor-lower">
279
+ <path
280
+ d="M12 13.5L4.5 21L6.5 21L14 13.5"
281
+ stroke="white"
282
+ stroke-width="2"
283
+ stroke-linecap="round"
284
+ fill="none"
285
+ />
286
+ <circle cx="6" cy="18" r="2.5" fill="none" stroke="white" stroke-width="1.5" />
287
+ </g>
288
+ <line
289
+ class="cutting-line"
290
+ x1="14"
291
+ y1="12"
292
+ x2="20"
293
+ y2="12"
294
+ stroke="#edcb50"
295
+ stroke-width="2"
296
+ stroke-linecap="round"
297
+ stroke-dasharray="4 2"
298
+ />
299
+ </svg>
300
+ </div>
301
+ </div>
302
+
303
+ <!-- Video -->
304
+ <div class="icon-pos video-pos" id="video-pos">
305
+ <div class="icon-entry video-entry">
306
+ <svg
307
+ class="icon-svg"
308
+ viewBox="0 0 24 24"
309
+ xmlns="http://www.w3.org/2000/svg"
310
+ aria-hidden="true"
311
+ >
312
+ <rect
313
+ class="video-frame"
314
+ x="3"
315
+ y="5"
316
+ width="14"
317
+ height="14"
318
+ rx="2"
319
+ stroke="white"
320
+ stroke-width="2"
321
+ fill="none"
322
+ stroke-dasharray="56"
323
+ stroke-dashoffset="56"
324
+ />
325
+ <path d="M8 9L13 12L8 15V9Z" fill="white" />
326
+ <circle class="record-dot" cx="19" cy="8" r="2.5" fill="#ef4444" />
327
+ </svg>
328
+ </div>
329
+ </div>
330
+
331
+ <!-- Play -->
332
+ <div class="icon-pos play-pos" id="play-pos">
333
+ <div class="icon-entry play-entry">
334
+ <svg
335
+ class="icon-svg"
336
+ viewBox="0 0 24 24"
337
+ xmlns="http://www.w3.org/2000/svg"
338
+ aria-hidden="true"
339
+ >
340
+ <circle
341
+ class="play-ring"
342
+ cx="12"
343
+ cy="12"
344
+ r="9"
345
+ fill="none"
346
+ stroke="white"
347
+ stroke-width="2"
348
+ stroke-dasharray="56.5"
349
+ stroke-dashoffset="56.5"
350
+ />
351
+ <circle cx="12" cy="12" r="7" fill="rgba(255,255,255,0.05)" />
352
+ <path class="play-tri" d="M10 8L16 12L10 16V8Z" fill="#edcb50" />
353
+ </svg>
354
+ </div>
355
+ </div>
356
+ </div>
357
+ <!-- /.icons-stage -->
358
+
359
+ <div class="counter-stage">
360
+ <div class="counter-3d" id="counter-3d">
361
+ <span class="counter-number" id="counter-number">0</span
362
+ ><span class="counter-percent" id="counter-percent">%</span>
363
+ </div>
364
+ </div>
365
+ </div>
366
+ <!-- /.camera -->
367
+
368
+ <div class="vignette"></div>
369
+ </div>
370
+
371
+ <script>
372
+ /* ================================================================
373
+ CONSTANTS
374
+ ================================================================ */
375
+ const W = 1920,
376
+ H = 1080;
377
+ const ICON_SIZE = 180;
378
+ const CENTER_X = W / 2 - ICON_SIZE / 2; // 870
379
+ const CENTER_Y = H / 2 - ICON_SIZE / 2; // 450
380
+
381
+ const TIMING = {
382
+ // Phase 2 — icon entries (staggered)
383
+ clockEntryAt: 0.17,
384
+ scissorsEntryAt: 0.3,
385
+ videoEntryAt: 0.43,
386
+ playEntryAt: 0.57,
387
+ entryDur: 0.55,
388
+
389
+ // Phase 3 — count + expansion (shared start, dur, ease)
390
+ countAt: 0.47,
391
+ countDur: 1.0,
392
+ startOffset: 0.4,
393
+
394
+ // Counter 3D entry (slightly earlier than count starts)
395
+ counterEntryAt: 0.27,
396
+ counterEntryDur: 0.7,
397
+
398
+ // Percent symbol entry
399
+ percentEntryAt: 1.27,
400
+ percentEntryDur: 0.55,
401
+
402
+ // Phase 4 — camera
403
+ cameraFocusAt: 0.5,
404
+ cameraFocusDur: 1.83,
405
+ cameraPushAt: 2.33,
406
+ cameraPushDur: 1.17,
407
+ };
408
+
409
+ const ICONS = [
410
+ {
411
+ name: "clock",
412
+ sel: "#clock-pos",
413
+ targetX: W * 0.06,
414
+ targetY: H * 0.18,
415
+ delay: TIMING.clockEntryAt,
416
+ entryRotation: -180,
417
+ entryEase: "back.out(1.5)",
418
+ },
419
+ {
420
+ name: "scissors",
421
+ sel: "#scissors-pos",
422
+ targetX: W * 0.85,
423
+ targetY: H * 0.2,
424
+ delay: TIMING.scissorsEntryAt,
425
+ entryRotation: 0,
426
+ entryEase: "back.out(1.5)",
427
+ },
428
+ {
429
+ name: "video",
430
+ sel: "#video-pos",
431
+ targetX: W * 0.04,
432
+ targetY: H * 0.68,
433
+ delay: TIMING.videoEntryAt,
434
+ entryRotation: 0,
435
+ entryEase: "back.out(1.4)",
436
+ },
437
+ {
438
+ name: "play",
439
+ sel: "#play-pos",
440
+ targetX: W * 0.88,
441
+ targetY: H * 0.65,
442
+ delay: TIMING.playEntryAt,
443
+ entryRotation: 90,
444
+ entryEase: "back.out(1.5)",
445
+ },
446
+ ];
447
+
448
+ /* ================================================================
449
+ SET ICON TARGET POSITIONS + INITIAL EXPANSION OFFSETS
450
+ ================================================================ */
451
+ ICONS.forEach(({ sel, targetX, targetY }) => {
452
+ const el = document.querySelector(sel);
453
+ el.style.left = targetX + "px";
454
+ el.style.top = targetY + "px";
455
+
456
+ // Initial offset for START_OFFSET = 0.4:
457
+ // position = target + (center - target) * (1 - 0.4) = target + 0.6 * (center - target)
458
+ const offsetX = (CENTER_X - targetX) * (1 - TIMING.startOffset);
459
+ const offsetY = (CENTER_Y - targetY) * (1 - TIMING.startOffset);
460
+ gsap.set(el, { x: offsetX, y: offsetY });
461
+ });
462
+
463
+ /* Set initial entry state on each .icon-entry */
464
+ ICONS.forEach(({ name, entryRotation }) => {
465
+ gsap.set(`.${name}-entry`, {
466
+ scale: 0,
467
+ opacity: 0,
468
+ rotation: entryRotation,
469
+ });
470
+ });
471
+
472
+ /* Set initial background and camera scale + subtle pan baseline */
473
+ gsap.set(".bg", { scale: 1.05 });
474
+ gsap.set(".camera", { scale: 0.92, x: 0, y: 2 });
475
+ gsap.set("#counter-number", { scale: 0.2 / 0.42 });
476
+
477
+ /* ================================================================
478
+ TIMELINE
479
+ ================================================================ */
480
+ window.__timelines = window.__timelines || {};
481
+ const tl = gsap.timeline({ paused: true });
482
+ window.__timelines["main"] = tl;
483
+
484
+ tl.to(
485
+ ".bg",
486
+ {
487
+ scale: 1.07,
488
+ x: 6,
489
+ y: -4,
490
+ duration: 3.5,
491
+ ease: "sine.inOut",
492
+ },
493
+ 0,
494
+ );
495
+
496
+ /* ----------------------------------------------------------------
497
+ PHASE 2: Icon entries (staggered)
498
+ ---------------------------------------------------------------- */
499
+ ICONS.forEach(({ name, delay, entryEase }) => {
500
+ // Scale + opacity + rotation entry
501
+ tl.to(
502
+ `.${name}-entry`,
503
+ {
504
+ scale: 1,
505
+ opacity: 0.85,
506
+ rotation: 0,
507
+ duration: TIMING.entryDur,
508
+ ease: entryEase,
509
+ },
510
+ delay,
511
+ );
512
+ });
513
+
514
+ // Stroke-draw the outline circles/rect on clock, video, and play during their entries
515
+ tl.to(
516
+ ".clock-ring",
517
+ {
518
+ attr: { "stroke-dashoffset": 0 },
519
+ duration: TIMING.entryDur,
520
+ ease: "power2.out",
521
+ },
522
+ TIMING.clockEntryAt,
523
+ );
524
+
525
+ tl.to(
526
+ ".video-frame",
527
+ {
528
+ attr: { "stroke-dashoffset": 0 },
529
+ duration: TIMING.entryDur,
530
+ ease: "power2.out",
531
+ },
532
+ TIMING.videoEntryAt,
533
+ );
534
+
535
+ tl.to(
536
+ ".play-ring",
537
+ {
538
+ attr: { "stroke-dashoffset": 0 },
539
+ duration: TIMING.entryDur,
540
+ ease: "power2.out",
541
+ },
542
+ TIMING.playEntryAt,
543
+ );
544
+
545
+ /* ----------------------------------------------------------------
546
+ PHASE 3: Counter (with 3D entry) + expansion
547
+ ---------------------------------------------------------------- */
548
+ // Counter 3D entry — translateZ + rotateY + scale + opacity, in parallel.
549
+ tl.fromTo(
550
+ "#counter-3d",
551
+ { rotationY: 10, scale: 0.7, z: -300, opacity: 0 },
552
+ {
553
+ rotationY: 0,
554
+ scale: 1.0,
555
+ z: 0,
556
+ opacity: 1,
557
+ duration: TIMING.counterEntryDur,
558
+ ease: "power3.out",
559
+ },
560
+ TIMING.counterEntryAt,
561
+ );
562
+
563
+ // Counter number + apparent size. Use discrete frame keyframes so
564
+ // HyperFrames can seek directly to any sampled time.
565
+ const counterEl = document.querySelector("#counter-number");
566
+ const COUNT_STEPS = 30;
567
+ const COUNT_START_SCALE = 0.2 / 0.42;
568
+
569
+ for (let i = 0; i <= COUNT_STEPS; i += 1) {
570
+ const p = i / COUNT_STEPS;
571
+ const eased = 1 - Math.pow(1 - p, 2.5);
572
+ const number = Math.round(eased * 90);
573
+ const scale = COUNT_START_SCALE + eased * (1 - COUNT_START_SCALE);
574
+
575
+ tl.set(
576
+ counterEl,
577
+ {
578
+ textContent: String(number),
579
+ scale,
580
+ },
581
+ TIMING.countAt + p * TIMING.countDur,
582
+ );
583
+ }
584
+
585
+ // Percent symbol enters later with its own spring.
586
+ tl.fromTo(
587
+ "#counter-percent",
588
+ { x: 60, rotation: 20, scale: 0.4, opacity: 0 },
589
+ {
590
+ x: 0,
591
+ rotation: 0,
592
+ scale: 1.0,
593
+ opacity: 1,
594
+ duration: TIMING.percentEntryDur,
595
+ ease: "back.out(1.4)",
596
+ },
597
+ TIMING.percentEntryAt,
598
+ );
599
+
600
+ // Icon expansion — per-icon, same start/dur/ease as counter for lock-step sync.
601
+ ICONS.forEach(({ sel }) => {
602
+ tl.to(
603
+ sel,
604
+ {
605
+ x: 0,
606
+ y: 0,
607
+ duration: TIMING.countDur,
608
+ ease: "power2.out",
609
+ },
610
+ TIMING.countAt,
611
+ );
612
+ });
613
+
614
+ /* ----------------------------------------------------------------
615
+ PHASE 4: Multi-phase camera
616
+ ---------------------------------------------------------------- */
617
+ tl.to(
618
+ ".camera",
619
+ {
620
+ scale: 1.0,
621
+ duration: TIMING.cameraFocusDur,
622
+ ease: "power2.out",
623
+ },
624
+ TIMING.cameraFocusAt,
625
+ );
626
+
627
+ tl.to(
628
+ ".camera",
629
+ {
630
+ scale: 1.08,
631
+ duration: TIMING.cameraPushDur,
632
+ ease: "power2.out",
633
+ },
634
+ TIMING.cameraPushAt,
635
+ );
636
+
637
+ // Subtle deterministic pan from the the source camera micro-movement.
638
+ tl.to(
639
+ ".camera",
640
+ {
641
+ x: 3,
642
+ y: 1.6,
643
+ duration: 3.5,
644
+ ease: "sine.inOut",
645
+ },
646
+ 0,
647
+ );
648
+
649
+ /* ----------------------------------------------------------------
650
+ CONTINUOUS INTERNAL SVG MOTION
651
+ All four icons' inner animations are derived from tl.time() in
652
+ a single shared onUpdate. Cheaper than 4-5 separate onUpdates,
653
+ easier to inspect.
654
+ ---------------------------------------------------------------- */
655
+ const SCISSOR_SPEED = 0.12 * 30; // = 3.6 rad/sec (sin freq)
656
+ const SCISSOR_AMP = 15;
657
+ const REC_OPACITY_SPEED = 0.15 * 30; // = 4.5 rad/sec
658
+ const REC_SCALE_SPEED = 0.1 * 30; // = 3.0 rad/sec
659
+ const REC_OPACITY_AMP = 0.3;
660
+ const REC_OPACITY_BASE = 0.7;
661
+ const REC_SCALE_AMP = 0.15;
662
+ const PLAY_PULSE_SPEED = 0.08 * 30; // = 2.4 rad/sec
663
+ const PLAY_PULSE_AMP = 0.08;
664
+ const CUTTING_FLOW_SPEED = 0.5 * 30; // = 15 units/sec (for stroke-dashoffset)
665
+
666
+ const scissorUpper = document.querySelector(".scissor-upper");
667
+ const scissorLower = document.querySelector(".scissor-lower");
668
+ const recordDot = document.querySelector(".record-dot");
669
+ const playTri = document.querySelector(".play-tri");
670
+ const cuttingLine = document.querySelector(".cutting-line");
671
+
672
+ tl.to(
673
+ { tick: 0 },
674
+ {
675
+ tick: 1,
676
+ duration: 3.5,
677
+ ease: "none",
678
+ onUpdate: function () {
679
+ const t = tl.time();
680
+
681
+ // Scissors — symmetric oscillation, anchored to scissors delay
682
+ const sciT = t - TIMING.scissorsEntryAt;
683
+ const sciAngle = sciT > 0 ? Math.sin(sciT * SCISSOR_SPEED) * SCISSOR_AMP : 0;
684
+ gsap.set(scissorUpper, { rotation: sciAngle });
685
+ gsap.set(scissorLower, { rotation: -sciAngle });
686
+
687
+ // Cutting line — linear dash flow (negative = leftward drift)
688
+ const cutT = t - TIMING.scissorsEntryAt;
689
+ if (cutT > 0) {
690
+ gsap.set(cuttingLine, {
691
+ attr: { "stroke-dashoffset": -cutT * CUTTING_FLOW_SPEED },
692
+ });
693
+ }
694
+
695
+ // Record dot — phase-offset opacity and scale
696
+ const recT = t - TIMING.videoEntryAt;
697
+ if (recT > 0) {
698
+ const recOpacity =
699
+ Math.sin(recT * REC_OPACITY_SPEED) * REC_OPACITY_AMP + REC_OPACITY_BASE;
700
+ const recScale = 1 + Math.sin(recT * REC_SCALE_SPEED) * REC_SCALE_AMP;
701
+ gsap.set(recordDot, { opacity: recOpacity, scale: recScale });
702
+ }
703
+
704
+ // Play triangle — gentle scale pulse
705
+ const playT = t - TIMING.playEntryAt;
706
+ if (playT > 0) {
707
+ const playScale = 1 + Math.sin(playT * PLAY_PULSE_SPEED) * PLAY_PULSE_AMP;
708
+ gsap.set(playTri, { scale: playScale });
709
+ }
710
+ },
711
+ },
712
+ 0,
713
+ );
714
+
715
+ /* Clock minute hand — linear rotation, anchored to clock entry */
716
+ tl.fromTo(
717
+ ".clock-hand-min",
718
+ { rotation: 0, svgOrigin: "12 12" },
719
+ {
720
+ rotation: 420, // 120 deg/sec × 3.5s, scaled for visible motion
721
+ svgOrigin: "12 12",
722
+ duration: 3.5 - TIMING.clockEntryAt,
723
+ ease: "none",
724
+ },
725
+ TIMING.clockEntryAt,
726
+ );
727
+ </script>
728
+ </body>
729
+ </html>