@mevdragon/vidfarm-devcli 0.14.0 → 0.16.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 +37 -0
  405. package/SKILL.platform.md +6 -1
  406. package/demo/dist/app.css +1 -1
  407. package/demo/dist/app.js +369 -85
  408. package/dist/src/app.js +630 -140
  409. package/dist/src/cli.js +529 -12
  410. package/dist/src/composition-runtime.js +262 -3
  411. package/dist/src/config.js +13 -0
  412. package/dist/src/devcli/doctor.js +192 -0
  413. package/dist/src/devcli/hyperframes-cli.js +118 -0
  414. package/dist/src/devcli/skills.js +476 -0
  415. package/dist/src/devcli/stills.js +249 -0
  416. package/dist/src/editor-chat.js +256 -0
  417. package/dist/src/frontend/homepage-client.js +50 -1
  418. package/dist/src/frontend/homepage-shared.js +197 -0
  419. package/dist/src/frontend/homepage-store.js +10 -1
  420. package/dist/src/frontend/homepage-view.js +43 -5
  421. package/dist/src/homepage.js +51 -18
  422. package/dist/src/hyperframes/composition.js +5 -5
  423. package/dist/src/services/composition-lint.js +199 -0
  424. package/dist/src/services/hyperframes.js +67 -13
  425. package/dist/src/services/serverless-records.js +9 -0
  426. package/package.json +2 -1
  427. package/public/assets/homepage-client-app.js +23 -23
@@ -0,0 +1,273 @@
1
+ ---
2
+ name: discrete-text-sequence
3
+ description: Replace entire text states at frame thresholds for non-linear typing effects — typos, bulk additions, pauses, backspaces, simulated thinking.
4
+ metadata:
5
+ tags: text, typing, discrete, threshold, non-linear, sequence
6
+ ---
7
+
8
+ # Discrete Text Sequence
9
+
10
+ Instead of character-by-character typewriter, replace entire string states at time thresholds. Enables non-linear effects (typos, bulk additions, pauses, "thinking" gaps) that smooth per-char typing can't achieve.
11
+
12
+ ## How It Works
13
+
14
+ An array of `{ text, t }` pairs where `t` is a time in seconds. On every onUpdate, scan the array for the latest entry whose `t` has passed and render that text. The display jumps between states; no animation between them.
15
+
16
+ For continuous per-char typewriter (no pauses, no edits), use the **smooth-slice** variation at the bottom.
17
+
18
+ ## HTML
19
+
20
+ ```html
21
+ <div
22
+ class="scene"
23
+ id="seq-scene"
24
+ data-composition-id="seq-scene"
25
+ data-start="0"
26
+ data-duration="6"
27
+ data-track-index="0"
28
+ >
29
+ <div class="terminal">
30
+ <div class="prompt">$</div>
31
+ <div class="text-wrap">
32
+ <span class="text" id="text">|</span>
33
+ <span class="cursor" id="cursor">_</span>
34
+ </div>
35
+ </div>
36
+ </div>
37
+ ```
38
+
39
+ ## CSS
40
+
41
+ ```css
42
+ .scene {
43
+ position: relative;
44
+ width: 100%;
45
+ height: 100%;
46
+ display: grid;
47
+ place-items: center;
48
+ background: {bgColor};
49
+ font-family: {monoFont}; /* monospace is required — see Critical Constraints */
50
+ }
51
+ .terminal {
52
+ display: flex;
53
+ align-items: baseline;
54
+ gap: GUTTER;
55
+ font-weight: 800;
56
+ font-size: TERMINAL_FONT_SIZE;
57
+ color: {textColor};
58
+ }
59
+ .prompt {
60
+ color: {accentColor};
61
+ }
62
+ .text-wrap {
63
+ display: inline-flex;
64
+ align-items: baseline;
65
+ /* Fixed-width container prevents the right side from jittering as
66
+ content changes length. Choose width ≥ longest state's width. */
67
+ min-width: TEXT_WRAP_MIN_WIDTH;
68
+ white-space: nowrap;
69
+ }
70
+ .text {
71
+ color: {textColor};
72
+ }
73
+ .cursor {
74
+ display: inline-block;
75
+ width: CURSOR_WIDTH;
76
+ color: {accentColor};
77
+ margin-left: CURSOR_GAP;
78
+ }
79
+ ```
80
+
81
+ ## GSAP Timeline + Discrete State Logic
82
+
83
+ ```html
84
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
85
+ <script>
86
+ window.__timelines = window.__timelines || {};
87
+
88
+ // SEQUENCE — each entry shows from t to the NEXT entry's t.
89
+ // Non-linear: typos, corrections, bulk additions, pauses.
90
+ // Shape (one realization):
91
+ // [warm-up keystrokes] → [typo] → [backspaces back to fork] →
92
+ // [bulk-paste of the corrected continuation] → [completion mark]
93
+ const SEQUENCE = [
94
+ { t: 0.0, text: "" },
95
+ { t: T_K1, text: "{p1}" }, // first keystrokes (~3-5 chars, 0.1-0.2s apart)
96
+ { t: T_K2, text: "{p1 + ' ' + p2_typo}" }, // continuation containing a typo
97
+ { t: T_BS, text: "{p1 + ' ' + p2_partial}" }, // backspace(s) — peel back to the fork
98
+ { t: T_BULK, text: "{fullCorrectedText}" }, // bulk paste — replaces several chars at once
99
+ { t: T_DONE, text: "{fullCorrectedText + ' ✓'}" }, // completion marker
100
+ ];
101
+
102
+ // Reverse-search for the latest entry whose t has passed.
103
+ function textAt(time) {
104
+ for (let i = SEQUENCE.length - 1; i >= 0; i--) {
105
+ if (time >= SEQUENCE[i].t) return SEQUENCE[i].text;
106
+ }
107
+ return "";
108
+ }
109
+
110
+ const textEl = document.getElementById("text");
111
+ const cursorEl = document.getElementById("cursor");
112
+ const tl = gsap.timeline({ paused: true });
113
+
114
+ // Drive the discrete display via a 0→TOTAL_DURATION tween's onUpdate
115
+ const driver = { t: 0 };
116
+ tl.to(
117
+ driver,
118
+ {
119
+ t: TOTAL_DURATION,
120
+ duration: TOTAL_DURATION,
121
+ ease: "none",
122
+ onUpdate: () => {
123
+ textEl.textContent = textAt(driver.t);
124
+ },
125
+ },
126
+ 0,
127
+ );
128
+
129
+ // Cursor blink — deterministic via sin, not CSS animation
130
+ const blinkDriver = { p: 0 };
131
+ tl.to(
132
+ blinkDriver,
133
+ {
134
+ p: Math.PI * 2 * BLINK_CYCLES, // BLINK_CYCLES = blinks across composition
135
+ duration: TOTAL_DURATION,
136
+ ease: "none",
137
+ onUpdate: () => {
138
+ cursorEl.style.opacity = Math.sin(blinkDriver.p) > 0 ? "1" : "0";
139
+ },
140
+ },
141
+ 0,
142
+ );
143
+
144
+ window.__timelines["seq-scene"] = tl;
145
+ </script>
146
+ ```
147
+
148
+ ## Variations
149
+
150
+ ### Smooth character slice (continuous typewriter — no pauses, no edits)
151
+
152
+ For straight-forward typewriter without the non-linear chaos:
153
+
154
+ ```js
155
+ const fullText = "{fullPhrase}";
156
+ const len = { v: 0 };
157
+ tl.to(
158
+ len,
159
+ {
160
+ v: fullText.length,
161
+ duration: TYPE_DUR,
162
+ ease: "power1.inOut",
163
+ onUpdate: () => {
164
+ textEl.textContent = fullText.substring(0, Math.floor(len.v));
165
+ },
166
+ },
167
+ 0,
168
+ );
169
+ ```
170
+
171
+ This is faster to author but produces a uniform "machine-typed" feel — missing the human-typing realism.
172
+
173
+ ### Thinking pause (extended hold on a key state)
174
+
175
+ Insert a state that holds for `THINK_HOLD_DUR` seconds without changes — feels like the user paused to think:
176
+
177
+ ```js
178
+ { t: T_PRE_PAUSE, text: '{partialPhrase}' }, // last state before the pause
179
+ // ... no entries for THINK_HOLD_DUR seconds ...
180
+ { t: T_PRE_PAUSE + THINK_HOLD_DUR, text: '{resumedPhrase}' },
181
+ ```
182
+
183
+ ### State pulse on completion
184
+
185
+ When the final state lands (e.g. "✓"), pulse-scale the line briefly for emphasis:
186
+
187
+ ```js
188
+ tl.to(
189
+ ".text",
190
+ { scale: COMPLETION_PULSE_SCALE, duration: COMPLETION_PULSE_DUR, yoyo: true, repeat: 1 },
191
+ T_DONE,
192
+ );
193
+ ```
194
+
195
+ ### Per-state color shift
196
+
197
+ Color-code states by phase (e.g. dim during edit, success color after the completion marker, optional warning color on typo):
198
+
199
+ ```js
200
+ // In onUpdate after setting textContent:
201
+ if (driver.t > T_DONE) textEl.style.color = "{successColor}";
202
+ else if (driver.t < T_K2)
203
+ textEl.style.color = "{textColor}"; // normal typing
204
+ else textEl.style.color = "{mutedColor}"; // mid-edit dim
205
+ ```
206
+
207
+ ## How to Choose Values
208
+
209
+ ### Layout
210
+
211
+ - **TERMINAL_FONT_SIZE** — font size of the typing line.
212
+ - Range: 48-96 px for full-bleed compositions; smaller for terminal-style detail
213
+ - Constraints: combined with `TEXT_WRAP_MIN_WIDTH` must fit within viewport
214
+ - **TEXT_WRAP_MIN_WIDTH** — fixed-width container holding the text.
215
+ - Constraints: must be `≥ widthOf(longest SEQUENCE state) at TERMINAL_FONT_SIZE`. Measure with a hidden probe after `document.fonts.ready` if unsure
216
+ - Effects: too small → right edge jitters as states change length; too large → unused horizontal whitespace pads the composition
217
+ - **GUTTER** — flex gap between prompt glyph (`$`, `>`) and text.
218
+ - Range: ~0.3-0.5× `TERMINAL_FONT_SIZE`
219
+ - **CURSOR_WIDTH / CURSOR_GAP** — block cursor dimensions.
220
+ - Range: width ~0.3× `TERMINAL_FONT_SIZE`; gap small (single-digit px) so the cursor feels attached to the text
221
+
222
+ ### Sequence timing
223
+
224
+ - **TOTAL_DURATION** — composition length.
225
+ - Constraints: must be ≥ `T_DONE` + ~1s climax dwell so viewer sees the completion marker
226
+ - **T_K1 / T_K2 / T_BS / T_BULK / T_DONE** — milestone timestamps within the SEQUENCE.
227
+ - Range: keystrokes 0.06-0.20s apart for "human typing"; pauses 0.3-0.6s at natural word breaks; bulk paste jumps multiple characters in a single entry
228
+ - Constraints: monotonically increasing; `T_DONE ≤ TOTAL_DURATION - dwell`
229
+ - **TYPE_DUR** (smooth-slice variation) — total typing duration for continuous typewriter.
230
+ - Range: `chars × 0.06s` (fast) to `chars × 0.12s` (relaxed)
231
+ - **THINK_HOLD_DUR** (thinking-pause variation) — hold time between two SEQUENCE states.
232
+ - Range: 0.8-2.0s; under 0.5s reads as a stutter rather than thought
233
+ - **COMPLETION_PULSE_SCALE / COMPLETION_PULSE_DUR** (pulse variation).
234
+ - Range: scale 1.03-1.08 (subtle), duration 0.15-0.30s
235
+
236
+ ### Cursor
237
+
238
+ - **BLINK_CYCLES** — number of full blink cycles across `TOTAL_DURATION`.
239
+ - Range: `TOTAL_DURATION / 0.8s ≤ BLINK_CYCLES ≤ TOTAL_DURATION / 0.5s` (cycle every 0.5-0.8s reads as a natural cursor)
240
+
241
+ ### Color tokens
242
+
243
+ - **{bgColor} / {textColor} / {accentColor} / {successColor} / {mutedColor}** — discrete choices, not numeric ranges. Pick from the composition's palette; the prompt + cursor share `{accentColor}` so they read as the same "system" element.
244
+
245
+ ## Key Principles
246
+
247
+ - **Threshold sequence drives realism** — group fast successive keystrokes (0.1-0.2s apart), then pause on word breaks (0.3-0.5s), bulk-paste in single jumps (one entry replaces many chars), include a typo or two for human-typing feel
248
+ - **Reverse-search the array each frame** — O(n) per frame, where n is small (≤30 typical). Don't try to index by frame; the sequence is sparse
249
+ - **Fixed-width container is mandatory** — without `min-width`, the right edge of the text wrap jitters as state length changes. Set width ≥ longest expected state
250
+ - **Cursor must be deterministic** — sin-based or sequence-driven blink, NOT a CSS animation. HF seeks frame-by-frame; CSS animations desync
251
+ - **No `transition` on the text element** — discrete jumps should be INSTANT. A CSS transition turns the jump into a smear and ruins the "typing" feel
252
+ - **❗ Distinguish discrete from smooth** — if your effect is "type each character, no edits" → use the smooth-slice variation. Discrete sequence is overkill for that case. Use discrete only when you need non-linear states (typos, pauses, bulk paste)
253
+
254
+ ## Critical Constraints
255
+
256
+ - **Timeline must be paused**: `gsap.timeline({ paused: true })`
257
+ - **Registry key = `data-composition-id`**
258
+ - **No CSS `transition`** on the text or any of its parents
259
+ - **Cursor `display: inline-block`** — `display: inline` ignores width/transform
260
+ - **Monospace font** for terminal-style effects — proportional fonts cause visual jitter even with fixed-width container
261
+ - **Whitespace: nowrap** on text wrap — wrapping mid-state breaks the illusion
262
+
263
+ ## Combinations
264
+
265
+ - [3d-text-depth-layers.md](3d-text-depth-layers.md) — discrete text rendered with layered depth (heavy, dramatic)
266
+ - [counting-dynamic-scale.md](counting-dynamic-scale.md) — discrete text for the LABEL while counter animates smoothly
267
+ - [press-release-spring.md](press-release-spring.md) — after the sequence completes, the line "presses" like a button confirming success
268
+
269
+ ## Pairs with HF skills
270
+
271
+ - `/hyperframes-animation` — onUpdate-driven discrete state lookup
272
+ - `/hyperframes-core` — composition wiring
273
+ - `/hyperframes-cli` — `hyperframes lint`
@@ -0,0 +1,307 @@
1
+ ---
2
+ name: dynamic-content-sequencing
3
+ description: Auto-calculate timeline start/end times from content length + per-item duration config — longer content gets more screen time without hardcoded numbers.
4
+ metadata:
5
+ tags: timeline, sequencing, dynamic, duration, content-aware, utility
6
+ ---
7
+
8
+ # Dynamic Content Sequencing
9
+
10
+ A utility pattern (not a motion rule in itself) for scenes that show a SEQUENCE of items (cards, phrases, stats). Each item's duration is calculated from its content length + a per-item config; the sequencer assigns absolute start/end times automatically. Distinct from [discrete-text-sequence](discrete-text-sequence.md) (which is one text element changing states) — this rule swaps between distinct content blocks.
11
+
12
+ ## How It Works
13
+
14
+ 1. Define a content array — each entry has `{ text, speedFactor, hold }` (or arbitrary fields)
15
+ 2. Pre-compute absolute start times: `start[i] = sum of durations 0..i-1`
16
+ 3. In onUpdate, find which entry is active (last entry whose `start ≤ time`) and render it
17
+
18
+ The "dynamic" part: items with longer text get more screen time (formula: `baseDuration + textLength * msPerChar`). No hardcoded `from` / `durationInFrames` per item.
19
+
20
+ ## HTML
21
+
22
+ ```html
23
+ <div
24
+ class="scene"
25
+ id="seq-scene"
26
+ data-composition-id="seq-scene"
27
+ data-start="0"
28
+ data-duration="{DURATION}"
29
+ data-track-index="0"
30
+ >
31
+ <div class="display">
32
+ <div class="eyebrow" id="eyebrow">{eyebrow}</div>
33
+ <div class="title" id="title"></div>
34
+ <div class="body" id="body"></div>
35
+ <div class="progress-bar"><div class="progress-fill" id="progress-fill"></div></div>
36
+ </div>
37
+ <div class="brand">— {Brand}</div>
38
+ </div>
39
+ ```
40
+
41
+ ## CSS
42
+
43
+ Placeholders: `{font}` is the project sans-serif stack; `{bgColor1}`/`{bgColor2}` make the dark backdrop gradient; `{accentColor}` highlights the eyebrow / brand / progress fill; `{textColor}` is the primary readable foreground.
44
+
45
+ ```css
46
+ .scene {
47
+ position: relative;
48
+ width: 100%;
49
+ height: 100%;
50
+ display: grid;
51
+ place-items: center;
52
+ background: radial-gradient(ellipse at center, {bgColor1} 0%, {bgColor2} 70%);
53
+ font-family: {font};
54
+ }
55
+ .display {
56
+ display: flex;
57
+ flex-direction: column;
58
+ align-items: center;
59
+ gap: 32px;
60
+ text-align: center;
61
+ max-width: 1400px;
62
+ }
63
+ .eyebrow {
64
+ font-size: 32px;
65
+ font-weight: 800;
66
+ letter-spacing: 14px;
67
+ color: {accentColor};
68
+ text-transform: uppercase;
69
+ }
70
+ .title {
71
+ font-size: 120px;
72
+ font-weight: 900;
73
+ letter-spacing: -2px;
74
+ line-height: 1;
75
+ color: {textColor};
76
+ }
77
+ .body {
78
+ font-size: 48px;
79
+ font-weight: 500;
80
+ line-height: 1.4;
81
+ color: {accentColor};
82
+ opacity: 0.9;
83
+ min-height: 160px; /* reserve space so layout doesn't jump */
84
+ }
85
+ .progress-bar {
86
+ width: 600px;
87
+ height: 4px;
88
+ background: {accentColor}26; /* ~15% alpha */
89
+ border-radius: 2px;
90
+ margin-top: 16px;
91
+ overflow: hidden;
92
+ }
93
+ .progress-fill {
94
+ height: 100%;
95
+ background: linear-gradient(90deg, {accentColor} 0%, {accentColor2} 100%);
96
+ width: 0%;
97
+ }
98
+ .brand {
99
+ position: absolute;
100
+ bottom: 80px;
101
+ left: 50%;
102
+ transform: translateX(-50%);
103
+ font-size: 32px;
104
+ font-weight: 900;
105
+ letter-spacing: 12px;
106
+ color: {accentColor};
107
+ }
108
+ ```
109
+
110
+ ## GSAP Timeline
111
+
112
+ ```html
113
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
114
+ <script>
115
+ window.__timelines = window.__timelines || {};
116
+ const tl = gsap.timeline({ paused: true });
117
+
118
+ // Content array — N entries, each with its own pacing config.
119
+ // Shape: short eyebrow label, short title, longer body sentence, plus per-entry pacing.
120
+ // The final entry typically uses a larger `hold` (closing beat).
121
+ const CONTENT = [
122
+ {
123
+ eyebrow: "{eyebrow1}",
124
+ title: "{title1}",
125
+ body: "{body1}",
126
+ speedFactor: SPEED_FACTOR,
127
+ hold: HOLD_MID,
128
+ },
129
+ {
130
+ eyebrow: "{eyebrow2}",
131
+ title: "{title2}",
132
+ body: "{body2}",
133
+ speedFactor: SPEED_FACTOR,
134
+ hold: HOLD_MID,
135
+ },
136
+ // …
137
+ {
138
+ eyebrow: "{eyebrowN}",
139
+ title: "{titleN}",
140
+ body: "{bodyN}",
141
+ speedFactor: SPEED_FACTOR,
142
+ hold: HOLD_FINAL,
143
+ },
144
+ ];
145
+
146
+ // Pre-compute absolute start times.
147
+ // Duration per entry: BASE_DURATION + body.length * SEC_PER_CHAR + entry.hold seconds.
148
+ // BASE_DURATION, SEC_PER_CHAR documented in How to Choose Values.
149
+ let cumulative = 0;
150
+ const TIMELINE = CONTENT.map((entry) => {
151
+ const dur = BASE_DURATION + entry.body.length * SEC_PER_CHAR + entry.hold;
152
+ const start = cumulative;
153
+ cumulative += dur;
154
+ return { ...entry, start, end: cumulative };
155
+ });
156
+
157
+ // Reverse-search current entry
158
+ function entryAt(time) {
159
+ for (let i = TIMELINE.length - 1; i >= 0; i--) {
160
+ if (time >= TIMELINE[i].start) return TIMELINE[i];
161
+ }
162
+ return TIMELINE[0];
163
+ }
164
+
165
+ const eyebrowEl = document.getElementById("eyebrow");
166
+ const titleEl = document.getElementById("title");
167
+ const bodyEl = document.getElementById("body");
168
+ const progressEl = document.getElementById("progress-fill");
169
+
170
+ const TOTAL_DURATION = cumulative + TAIL_PAD;
171
+ const driver = { t: 0 };
172
+ let lastTitle = "";
173
+
174
+ tl.to(
175
+ driver,
176
+ {
177
+ t: TOTAL_DURATION,
178
+ duration: TOTAL_DURATION,
179
+ ease: "none",
180
+ onUpdate: () => {
181
+ const entry = entryAt(driver.t);
182
+ // Only swap content on transitions (avoid per-frame DOM thrash)
183
+ if (entry.title !== lastTitle) {
184
+ eyebrowEl.textContent = entry.eyebrow;
185
+ titleEl.textContent = entry.title;
186
+ bodyEl.textContent = entry.body;
187
+ lastTitle = entry.title;
188
+ }
189
+ // Progress bar fills 0% → 100% as composition advances
190
+ progressEl.style.width = `${(driver.t / TOTAL_DURATION) * 100}%`;
191
+ },
192
+ },
193
+ 0,
194
+ );
195
+
196
+ window.__timelines["seq-scene"] = tl;
197
+ </script>
198
+ ```
199
+
200
+ ## Variations
201
+
202
+ ### Crossfade between items (not hard cut)
203
+
204
+ Add `overlap` to the find function — return BOTH the previous and next entry during the overlap window, render with crossfade opacity:
205
+
206
+ ```js
207
+ function activeEntries(time, overlap = 0.3) {
208
+ const result = [];
209
+ TIMELINE.forEach((e) => {
210
+ if (time >= e.start - overlap && time <= e.end + overlap) result.push(e);
211
+ });
212
+ return result;
213
+ }
214
+ ```
215
+
216
+ Then render the two adjacent entries with computed opacities based on distance from boundary.
217
+
218
+ ### Per-item motion variation
219
+
220
+ Each entry has its own motion style. Map `entry.style` to one of the existing rules: chapter 1 uses [3d-text-depth-layers](3d-text-depth-layers.md), chapter 2 uses [hacker-flip-3d](hacker-flip-3d.md), chapter 3 uses [counting-dynamic-scale](counting-dynamic-scale.md). The sequencer just orchestrates timing; per-entry rendering uses the appropriate rule.
221
+
222
+ ### Auto-extend composition duration
223
+
224
+ If you don't know upfront how long the sequence will be (dynamic content count), bind `data-duration` to the computed `TOTAL_DURATION`. Do this in script BEFORE the timeline registers:
225
+
226
+ ```js
227
+ document
228
+ .querySelector("[data-composition-id]")
229
+ .setAttribute("data-duration", String(Math.ceil(TOTAL_DURATION)));
230
+ ```
231
+
232
+ (Caveat: HF reads `data-duration` at composition load; setting after init may not take effect — author the duration manually based on a rough TOTAL calc.)
233
+
234
+ ## Key Principles
235
+
236
+ - **Pre-compute timeline once, not per-frame** — building absolute start/end at script init means onUpdate is O(log n) reverse-search, not O(n²).
237
+ - **Per-item duration formula: `BASE_DURATION + body.length × SEC_PER_CHAR + hold`** — longer text needs more reading time. The formula is the load-bearing teaching of this rule; ranges for each const are in How to Choose Values.
238
+ - **Reserve `min-height` on body element** — content height varies per item; without reservation, layout jumps and downstream elements (progress bar, brand) jitter.
239
+ - **DOM update on transition, not every frame** — track `lastTitle` (or whatever key) and only call `textContent =` when it changes. Per-frame textContent assignment causes flicker in HF render.
240
+ - **Optional progress indicator** — a thin bar at the bottom showing 0-100% completes the "this is a sequence" framing.
241
+ - **Climax dwell longer than mid-sequence dwell** — the outro's `hold` (HOLD_FINAL) should exceed the in-sequence `hold` (HOLD_MID) so the final brand/CTA lands.
242
+
243
+ ## How to Choose Values
244
+
245
+ - **BASE_DURATION** — minimum visible time of an entry regardless of content length
246
+ - Range: 0.6-1.5 s
247
+ - Effects: low end snaps through short entries too fast for the eye; high end stalls on short titles
248
+ - Constraints: ensures even one-word entries have time to read
249
+ - Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
250
+
251
+ - **SEC_PER_CHAR** — extra time added per body character
252
+ - Range: 0.03-0.06 s/char (≈ 17-33 chars/sec read pace for video)
253
+ - Effects: low end feels rushed for paragraph-style bodies; high end feels slow when bodies are short
254
+ - Constraints: should be uniform across the sequence so the pace reads as one engine; for languages with wider characters, lean to the high end
255
+ - Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
256
+
257
+ - **HOLD_MID** — dwell after the typing of a non-final entry completes
258
+ - Range: 0.5-1.0 s
259
+ - Effects: low end feels rushed; high end feels lazy
260
+ - Constraints: `HOLD_MID < HOLD_FINAL`
261
+ - Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
262
+
263
+ - **HOLD_FINAL** — dwell on the last entry (outro / climax)
264
+ - Range: 1.0-2.0 s
265
+ - Effects: low end truncates the closing beat; high end overstays
266
+ - Constraints: must exceed HOLD_MID by a clear margin so the close reads as a beat, not another mid-sequence pause
267
+ - Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
268
+
269
+ - **SPEED_FACTOR** — per-entry pacing multiplier
270
+ - Range: 0.5-2.0 (default 1.0)
271
+ - Effects: <1 stretches an entry's body-driven duration (good for high-density passages); >1 compresses it
272
+ - Constraints: discrete choice — use 1.0 unless one entry needs special pacing; if every entry uses the same factor, fold it into SEC_PER_CHAR instead
273
+ - Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
274
+
275
+ - **TAIL_PAD** — seconds added to `TOTAL_DURATION` after the last entry's `end`
276
+ - Range: 0.0-1.0 s
277
+ - Effects: 0 ends the driver exactly at the last `hold` completion; >0 leaves a quiet beat (useful before a transition to the next composition)
278
+ - Constraints: if downstream is another composition, prefer 0 and handle the breath at the composition seam
279
+ - Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
280
+
281
+ - **CONTENT length (N)** — number of entries in the sequence
282
+ - Range: 3-6 entries
283
+ - Effects: <3 isn't a sequence (use a static scene); >6 drags
284
+ - Constraints: each entry's `title` must fit one line at the chosen `.title` fontSize; bodies should fit within `min-height` after wrapping
285
+ - Reference: see `../../examples/messaging-multi-phrase.html` (and any blueprint that uses this rule)
286
+
287
+ ## Critical Constraints
288
+
289
+ - **Timeline must be paused**: `gsap.timeline({ paused: true })`
290
+ - **Registry key = `data-composition-id`**
291
+ - **Pre-compute the TIMELINE array** — don't recompute in onUpdate
292
+ - **`min-height` on body** for layout stability
293
+ - **DOM swap only on entry transition** — use lastTitle/lastKey guard
294
+ - **Sequential only** — for parallel tracks, use a different reduction (this rule is sequential)
295
+
296
+ ## Combinations
297
+
298
+ - [discrete-text-sequence.md](discrete-text-sequence.md) — per-entry typewriter on the body
299
+ - [context-sensitive-cursor.md](context-sensitive-cursor.md) — cursor color per chapter segment
300
+ - [vertical-spring-ticker.md](vertical-spring-ticker.md) — animated word transitions between items (instead of hard cut)
301
+ - [scale-swap-transition.md](scale-swap-transition.md) — visual morph between entries
302
+
303
+ ## Pairs with HF skills
304
+
305
+ - `/hyperframes-animation` — single driver, reverse-search dispatch
306
+ - `/hyperframes-core` — composition wiring
307
+ - `/hyperframes-cli` — `hyperframes lint`