zilmate 1.9.3 → 1.10.1

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 (306) hide show
  1. package/.agents/skills/ad-creative/SKILL.md +362 -0
  2. package/.agents/skills/ad-creative/evals/evals.json +90 -0
  3. package/.agents/skills/ad-creative/references/generative-tools.md +637 -0
  4. package/.agents/skills/ad-creative/references/platform-specs.md +213 -0
  5. package/.agents/skills/ai-seo/SKILL.md +489 -0
  6. package/.agents/skills/ai-seo/evals/evals.json +90 -0
  7. package/.agents/skills/ai-seo/references/content-patterns.md +285 -0
  8. package/.agents/skills/ai-seo/references/content-types.md +71 -0
  9. package/.agents/skills/ai-seo/references/okf.md +104 -0
  10. package/.agents/skills/ai-seo/references/platform-ranking-factors.md +154 -0
  11. package/.agents/skills/clerk-backend-api/SKILL.md +426 -0
  12. package/.agents/skills/clerk-backend-api/evals/evals.json +87 -0
  13. package/.agents/skills/clerk-backend-api/scripts/api-specs-context.sh +30 -0
  14. package/.agents/skills/clerk-backend-api/scripts/execute-request.sh +88 -0
  15. package/.agents/skills/clerk-backend-api/scripts/extract-endpoint-detail.sh +165 -0
  16. package/.agents/skills/clerk-backend-api/scripts/extract-tag-endpoints.sh +208 -0
  17. package/.agents/skills/clerk-backend-api/scripts/extract-tags.js +14 -0
  18. package/.agents/skills/copy-editing/SKILL.md +457 -0
  19. package/.agents/skills/copy-editing/evals/evals.json +89 -0
  20. package/.agents/skills/copy-editing/references/checklist.md +66 -0
  21. package/.agents/skills/copy-editing/references/content-refresh.md +38 -0
  22. package/.agents/skills/copy-editing/references/plain-english-alternatives.md +394 -0
  23. package/.agents/skills/hyperframes/SKILL.md +163 -0
  24. package/.agents/skills/hyperframes-cli/SKILL.md +109 -0
  25. package/.agents/skills/hyperframes-cli/references/doctor-browser.md +45 -0
  26. package/.agents/skills/hyperframes-cli/references/init-and-scaffold.md +51 -0
  27. package/.agents/skills/hyperframes-cli/references/lambda.md +132 -0
  28. package/.agents/skills/hyperframes-cli/references/lint-validate-inspect.md +121 -0
  29. package/.agents/skills/hyperframes-cli/references/preview-render.md +109 -0
  30. package/.agents/skills/hyperframes-cli/references/upgrade-info-misc.md +75 -0
  31. package/.agents/skills/hyperframes-media/SKILL.md +97 -0
  32. package/.agents/skills/hyperframes-media/assets/sfx/CREDITS.md +35 -0
  33. package/.agents/skills/hyperframes-media/assets/sfx/manifest.json +97 -0
  34. package/.agents/skills/hyperframes-media/references/bgm.md +72 -0
  35. package/.agents/skills/hyperframes-media/references/captions/authoring.md +159 -0
  36. package/.agents/skills/hyperframes-media/references/captions/motion.md +87 -0
  37. package/.agents/skills/hyperframes-media/references/captions/transcript-handling.md +97 -0
  38. package/.agents/skills/hyperframes-media/references/remove-background.md +143 -0
  39. package/.agents/skills/hyperframes-media/references/requirements.md +29 -0
  40. package/.agents/skills/hyperframes-media/references/sfx.md +42 -0
  41. package/.agents/skills/hyperframes-media/references/transcribe.md +52 -0
  42. package/.agents/skills/hyperframes-media/references/tts-to-captions.md +24 -0
  43. package/.agents/skills/hyperframes-media/references/tts.md +135 -0
  44. package/.agents/skills/hyperframes-media/scripts/audio.mjs +282 -0
  45. package/.agents/skills/hyperframes-media/scripts/heygen-tts.mjs +121 -0
  46. package/.agents/skills/hyperframes-media/scripts/lib/bgm.mjs +235 -0
  47. package/.agents/skills/hyperframes-media/scripts/lib/heygen.mjs +131 -0
  48. package/.agents/skills/hyperframes-media/scripts/lib/sfx.mjs +128 -0
  49. package/.agents/skills/hyperframes-media/scripts/lib/tts.mjs +220 -0
  50. package/.agents/skills/hyperframes-media/scripts/lyria-recipe.py +128 -0
  51. package/.agents/skills/hyperframes-media/scripts/wait-bgm.mjs +167 -0
  52. package/.agents/skills/hyperframes-registry/SKILL.md +101 -0
  53. package/.agents/skills/hyperframes-registry/examples/add-block.md +51 -0
  54. package/.agents/skills/hyperframes-registry/examples/add-component.md +73 -0
  55. package/.agents/skills/hyperframes-registry/references/contributing.md +166 -0
  56. package/.agents/skills/hyperframes-registry/references/demo-html-pattern.md +54 -0
  57. package/.agents/skills/hyperframes-registry/references/discovery.md +215 -0
  58. package/.agents/skills/hyperframes-registry/references/install-locations.md +45 -0
  59. package/.agents/skills/hyperframes-registry/references/templates.md +417 -0
  60. package/.agents/skills/hyperframes-registry/references/wiring-blocks.md +61 -0
  61. package/.agents/skills/hyperframes-registry/references/wiring-components.md +39 -0
  62. package/.agents/skills/marketing-psychology/SKILL.md +455 -0
  63. package/.agents/skills/marketing-psychology/evals/evals.json +88 -0
  64. package/.agents/skills/mintlify/SKILL.md +328 -0
  65. package/.agents/skills/product-launch-video/SKILL.md +206 -0
  66. package/.agents/skills/product-launch-video/references/cut-catalog.md +220 -0
  67. package/.agents/skills/product-launch-video/references/motion-language.md +156 -0
  68. package/.agents/skills/product-launch-video/references/story-design.md +373 -0
  69. package/.agents/skills/product-launch-video/references/visual-design.md +126 -0
  70. package/.agents/skills/product-launch-video/scripts/assemble-index.mjs +570 -0
  71. package/.agents/skills/product-launch-video/scripts/audio.mjs +253 -0
  72. package/.agents/skills/product-launch-video/scripts/build-frame.mjs +536 -0
  73. package/.agents/skills/product-launch-video/scripts/captions.mjs +508 -0
  74. package/.agents/skills/product-launch-video/scripts/lib/assets.mjs +55 -0
  75. package/.agents/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -0
  76. package/.agents/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -0
  77. package/.agents/skills/product-launch-video/scripts/lib/tokens.mjs +204 -0
  78. package/.agents/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -0
  79. package/.agents/skills/product-launch-video/scripts/lib/transitions.json +71 -0
  80. package/.agents/skills/product-launch-video/scripts/stage-assets.mjs +39 -0
  81. package/.agents/skills/product-launch-video/scripts/transitions.mjs +320 -0
  82. package/.agents/skills/product-launch-video/sub-agents/frame-worker.md +74 -0
  83. package/.agents/skills/prompt-engineering-patterns/SKILL.md +144 -0
  84. package/.agents/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
  85. package/.agents/skills/prompt-engineering-patterns/assets/prompt-template-library.md +264 -0
  86. package/.agents/skills/prompt-engineering-patterns/references/chain-of-thought.md +412 -0
  87. package/.agents/skills/prompt-engineering-patterns/references/details.md +338 -0
  88. package/.agents/skills/prompt-engineering-patterns/references/few-shot-learning.md +386 -0
  89. package/.agents/skills/prompt-engineering-patterns/references/prompt-optimization.md +428 -0
  90. package/.agents/skills/prompt-engineering-patterns/references/prompt-templates.md +484 -0
  91. package/.agents/skills/prompt-engineering-patterns/references/system-prompts.md +195 -0
  92. package/.agents/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
  93. package/.agents/skills/remotion-to-hyperframes/SKILL.md +127 -0
  94. package/.agents/skills/remotion-to-hyperframes/assets/.gitkeep +0 -0
  95. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/run.sh +249 -0
  96. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md +41 -0
  97. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json +26 -0
  98. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +61 -0
  99. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json +14 -0
  100. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/remotion.config.ts +13 -0
  101. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/Root.tsx +13 -0
  102. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/TitleCard.tsx +34 -0
  103. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/index.ts +4 -0
  104. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json +15 -0
  105. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md +54 -0
  106. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json +29 -0
  107. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +118 -0
  108. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json +14 -0
  109. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/remotion.config.ts +13 -0
  110. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/MultiScene.tsx +105 -0
  111. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/Root.tsx +13 -0
  112. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/index.ts +4 -0
  113. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json +15 -0
  114. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/setup.sh +34 -0
  115. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md +85 -0
  116. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +41 -0
  117. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +269 -0
  118. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json +15 -0
  119. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/remotion.config.ts +13 -0
  120. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Root.tsx +27 -0
  121. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Stargazed.tsx +37 -0
  122. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/AnimatedNumber.tsx +23 -0
  123. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/StatCard.tsx +59 -0
  124. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/UnderlinedText.tsx +47 -0
  125. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/index.ts +4 -0
  126. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/OutroScene.tsx +18 -0
  127. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/StatsScene.tsx +34 -0
  128. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/TitleScene.tsx +55 -0
  129. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json +15 -0
  130. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md +51 -0
  131. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/01-use-state.tsx +29 -0
  132. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/02-use-effect-deps.tsx +29 -0
  133. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.tsx +39 -0
  134. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx +30 -0
  135. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx +38 -0
  136. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/06-warnings-only.tsx +36 -0
  137. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/07-custom-hook.tsx +28 -0
  138. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx +41 -0
  139. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/expected.json +85 -0
  140. package/.agents/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/validate.sh +110 -0
  141. package/.agents/skills/remotion-to-hyperframes/references/api-map.md +142 -0
  142. package/.agents/skills/remotion-to-hyperframes/references/escape-hatch.md +115 -0
  143. package/.agents/skills/remotion-to-hyperframes/references/eval.md +140 -0
  144. package/.agents/skills/remotion-to-hyperframes/references/fonts.md +112 -0
  145. package/.agents/skills/remotion-to-hyperframes/references/limitations.md +136 -0
  146. package/.agents/skills/remotion-to-hyperframes/references/lottie.md +121 -0
  147. package/.agents/skills/remotion-to-hyperframes/references/media.md +149 -0
  148. package/.agents/skills/remotion-to-hyperframes/references/parameters.md +167 -0
  149. package/.agents/skills/remotion-to-hyperframes/references/sequencing.md +195 -0
  150. package/.agents/skills/remotion-to-hyperframes/references/timing.md +165 -0
  151. package/.agents/skills/remotion-to-hyperframes/references/transitions.md +114 -0
  152. package/.agents/skills/remotion-to-hyperframes/scripts/.gitkeep +0 -0
  153. package/.agents/skills/remotion-to-hyperframes/scripts/frame_strip.sh +107 -0
  154. package/.agents/skills/remotion-to-hyperframes/scripts/lint_source.py +358 -0
  155. package/.agents/skills/remotion-to-hyperframes/scripts/render_diff.sh +103 -0
  156. package/.agents/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx +50 -0
  157. package/.agents/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx +46 -0
  158. package/.agents/skills/remotion-to-hyperframes/scripts/tests/smoke.sh +90 -0
  159. package/.agents/skills/seo-audit/SKILL.md +497 -0
  160. package/.agents/skills/seo-audit/evals/evals.json +136 -0
  161. package/.agents/skills/seo-audit/references/ai-writing-detection.md +200 -0
  162. package/.agents/skills/seo-audit/references/international-seo.md +230 -0
  163. package/README.md +4 -2
  164. package/SDK.md +64 -1
  165. package/dist/agents/coding.agent.d.ts +632 -0
  166. package/dist/agents/coding.agent.d.ts.map +1 -1
  167. package/dist/agents/coding.agent.js +11 -3
  168. package/dist/agents/coding.agent.js.map +1 -1
  169. package/dist/agents/developer-helper.agent.d.ts +704 -0
  170. package/dist/agents/developer-helper.agent.d.ts.map +1 -1
  171. package/dist/agents/developer-helper.agent.js +6 -0
  172. package/dist/agents/developer-helper.agent.js.map +1 -1
  173. package/dist/agents/manager.d.ts +1009 -4
  174. package/dist/agents/manager.d.ts.map +1 -1
  175. package/dist/agents/manager.js +16 -5
  176. package/dist/agents/manager.js.map +1 -1
  177. package/dist/agents/security.agent.d.ts +157 -3
  178. package/dist/agents/security.agent.d.ts.map +1 -1
  179. package/dist/agents/security.agent.js +3 -0
  180. package/dist/agents/security.agent.js.map +1 -1
  181. package/dist/agents/swarm/main.js +1 -1
  182. package/dist/agents/swarm/main.js.map +1 -1
  183. package/dist/agents/swarm/registry.d.ts.map +1 -1
  184. package/dist/agents/swarm/registry.js +232 -26
  185. package/dist/agents/swarm/registry.js.map +1 -1
  186. package/dist/cli/chat.d.ts +1 -1
  187. package/dist/cli/chat.d.ts.map +1 -1
  188. package/dist/cli/chat.js +32 -10
  189. package/dist/cli/chat.js.map +1 -1
  190. package/dist/cli/doctor.d.ts +14 -0
  191. package/dist/cli/doctor.d.ts.map +1 -1
  192. package/dist/cli/doctor.js +91 -0
  193. package/dist/cli/doctor.js.map +1 -1
  194. package/dist/cli/format.d.ts +1 -0
  195. package/dist/cli/format.d.ts.map +1 -1
  196. package/dist/cli/format.js +68 -14
  197. package/dist/cli/format.js.map +1 -1
  198. package/dist/cli/menu.d.ts.map +1 -1
  199. package/dist/cli/menu.js +102 -0
  200. package/dist/cli/menu.js.map +1 -1
  201. package/dist/cli/setup.d.ts +10 -0
  202. package/dist/cli/setup.d.ts.map +1 -1
  203. package/dist/cli/setup.js +187 -3
  204. package/dist/cli/setup.js.map +1 -1
  205. package/dist/cli/update.d.ts +2 -0
  206. package/dist/cli/update.d.ts.map +1 -1
  207. package/dist/cli/update.js +89 -1
  208. package/dist/cli/update.js.map +1 -1
  209. package/dist/config/env.d.ts +12 -0
  210. package/dist/config/env.d.ts.map +1 -1
  211. package/dist/config/env.js +19 -5
  212. package/dist/config/env.js.map +1 -1
  213. package/dist/index.d.ts +1 -1
  214. package/dist/index.d.ts.map +1 -1
  215. package/dist/index.js +61 -5
  216. package/dist/index.js.map +1 -1
  217. package/dist/jobs/trigger-orchestrator.d.ts +5 -1
  218. package/dist/jobs/trigger-orchestrator.d.ts.map +1 -1
  219. package/dist/jobs/trigger-orchestrator.js +29 -9
  220. package/dist/jobs/trigger-orchestrator.js.map +1 -1
  221. package/dist/jobs/trigger-router.d.ts.map +1 -1
  222. package/dist/jobs/trigger-router.js +3 -2
  223. package/dist/jobs/trigger-router.js.map +1 -1
  224. package/dist/memory/corporate-wiki.d.ts +15 -0
  225. package/dist/memory/corporate-wiki.d.ts.map +1 -0
  226. package/dist/memory/corporate-wiki.js +152 -0
  227. package/dist/memory/corporate-wiki.js.map +1 -0
  228. package/dist/observability/doctor.d.ts.map +1 -1
  229. package/dist/observability/doctor.js +12 -4
  230. package/dist/observability/doctor.js.map +1 -1
  231. package/dist/pre-init.d.ts +2 -0
  232. package/dist/pre-init.d.ts.map +1 -0
  233. package/dist/pre-init.js +3 -0
  234. package/dist/pre-init.js.map +1 -0
  235. package/dist/runtime/chat-bridge.d.ts.map +1 -1
  236. package/dist/runtime/chat-bridge.js +33 -2
  237. package/dist/runtime/chat-bridge.js.map +1 -1
  238. package/dist/runtime/swarm.d.ts +0 -1
  239. package/dist/runtime/swarm.d.ts.map +1 -1
  240. package/dist/runtime/swarm.js +26 -15
  241. package/dist/runtime/swarm.js.map +1 -1
  242. package/dist/safety/approvals.d.ts +2 -2
  243. package/dist/safety/approvals.d.ts.map +1 -1
  244. package/dist/safety/approvals.js +47 -1
  245. package/dist/safety/approvals.js.map +1 -1
  246. package/dist/safety/redaction.d.ts.map +1 -1
  247. package/dist/safety/redaction.js +10 -0
  248. package/dist/safety/redaction.js.map +1 -1
  249. package/dist/server.d.ts +1 -0
  250. package/dist/server.d.ts.map +1 -1
  251. package/dist/server.js +1 -0
  252. package/dist/server.js.map +1 -1
  253. package/dist/tools/cloud.tool.d.ts +394 -0
  254. package/dist/tools/cloud.tool.d.ts.map +1 -0
  255. package/dist/tools/cloud.tool.js +784 -0
  256. package/dist/tools/cloud.tool.js.map +1 -0
  257. package/dist/tools/computer-use.tool.d.ts +6 -6
  258. package/dist/tools/corporate-wiki.tool.d.ts +22 -0
  259. package/dist/tools/corporate-wiki.tool.d.ts.map +1 -0
  260. package/dist/tools/corporate-wiki.tool.js +39 -0
  261. package/dist/tools/corporate-wiki.tool.js.map +1 -0
  262. package/dist/tools/desktop.tool.d.ts +96 -0
  263. package/dist/tools/desktop.tool.d.ts.map +1 -1
  264. package/dist/tools/desktop.tool.js +439 -0
  265. package/dist/tools/desktop.tool.js.map +1 -1
  266. package/dist/tools/devops.tool.d.ts +162 -0
  267. package/dist/tools/devops.tool.d.ts.map +1 -0
  268. package/dist/tools/devops.tool.js +377 -0
  269. package/dist/tools/devops.tool.js.map +1 -0
  270. package/dist/tools/multimedia.tool.d.ts +126 -0
  271. package/dist/tools/multimedia.tool.d.ts.map +1 -0
  272. package/dist/tools/multimedia.tool.js +533 -0
  273. package/dist/tools/multimedia.tool.js.map +1 -0
  274. package/dist/tools/osint.tool.d.ts +6 -6
  275. package/dist/tools/sandbox-dev.tool.d.ts +15 -0
  276. package/dist/tools/sandbox-dev.tool.d.ts.map +1 -0
  277. package/dist/tools/sandbox-dev.tool.js +139 -0
  278. package/dist/tools/sandbox-dev.tool.js.map +1 -0
  279. package/dist/tools/setup-assistant.tool.d.ts +1 -1
  280. package/dist/tools/shell.tool.d.ts +82 -0
  281. package/dist/tools/shell.tool.d.ts.map +1 -1
  282. package/dist/tools/shell.tool.js +192 -1
  283. package/dist/tools/shell.tool.js.map +1 -1
  284. package/dist/tools/swarm-ops.tool.d.ts +14 -0
  285. package/dist/tools/swarm-ops.tool.d.ts.map +1 -1
  286. package/dist/tools/swarm-ops.tool.js +44 -0
  287. package/dist/tools/swarm-ops.tool.js.map +1 -1
  288. package/dist/tools/sysops.tool.d.ts +157 -0
  289. package/dist/tools/sysops.tool.d.ts.map +1 -0
  290. package/dist/tools/sysops.tool.js +643 -0
  291. package/dist/tools/sysops.tool.js.map +1 -0
  292. package/dist/voice/cascade.d.ts +1 -0
  293. package/dist/voice/cascade.d.ts.map +1 -1
  294. package/dist/voice/cascade.js +16 -1
  295. package/dist/voice/cascade.js.map +1 -1
  296. package/dist/voice/deepgram.d.ts.map +1 -1
  297. package/dist/voice/deepgram.js +34 -2
  298. package/dist/voice/deepgram.js.map +1 -1
  299. package/dist/voice/terminal.d.ts +1 -0
  300. package/dist/voice/terminal.d.ts.map +1 -1
  301. package/dist/voice/terminal.js +28 -0
  302. package/dist/voice/terminal.js.map +1 -1
  303. package/dist/voice/types.d.ts +2 -0
  304. package/dist/voice/types.d.ts.map +1 -1
  305. package/package.json +9 -1
  306. package/scripts/release-github.mjs +23 -18
@@ -0,0 +1,41 @@
1
+ # Tier 1 — title-card-fade
2
+
3
+ ## What it tests
4
+
5
+ The simplest non-trivial Remotion → HyperFrames translation. A single text
6
+ element fades in over the first 0.5 s, holds for 2.0 s, and fades out over
7
+ the last 0.5 s. No audio, no media, no custom components.
8
+
9
+ If a translation can't pass T1, it's broken on table-stakes basics:
10
+ `AbsoluteFill`, `useCurrentFrame`, `interpolate` with multi-segment input,
11
+ and the timing offset between Remotion's frame-based driver and HF's
12
+ paused-GSAP driver.
13
+
14
+ ## Translation walk-through
15
+
16
+ | Remotion | HyperFrames |
17
+ | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
18
+ | `<AbsoluteFill style={{ backgroundColor: "#0a0a0a" }}>` | `<body style="background: #0a0a0a">` + a positioned root div |
19
+ | `useCurrentFrame()` | dropped — HF seeks the timeline |
20
+ | `interpolate(frame, [0, 15, 75, 90], [0, 1, 1, 0])` at fps=30 | `gsap.timeline({ paused: true })` with three `.to()` calls at offsets 0s/0.5s/2.5s, each `ease: "none"` |
21
+ | `<div style={{ opacity }}>HELLO</div>` | static markup; opacity is animated by the timeline |
22
+
23
+ The Remotion→HF time conversion is `time = frame / fps`. So
24
+ `[0, 15, 75, 90]` at 30 fps becomes `[0, 0.5, 2.5, 3.0]` seconds.
25
+
26
+ ## How to render and evaluate
27
+
28
+ ```bash
29
+ # Render Remotion baseline
30
+ cd remotion-src && npm install && npm run render
31
+ # Renders to remotion-src/out/baseline.mp4
32
+
33
+ # Render HyperFrames translation
34
+ cd ../hf-src && npx hyperframes render --output ../hf.mp4
35
+
36
+ # Compare with the eval harness (from skill scripts/)
37
+ ../../../scripts/render_diff.sh ./remotion-src/out/baseline.mp4 ./hf.mp4 ./diff
38
+ ```
39
+
40
+ `expected.json` documents the SSIM threshold (0.95) for this fixture; the
41
+ calibrated mean against Remotion @ 4.0 with PNG/BT.709 output is 0.974.
@@ -0,0 +1,26 @@
1
+ {
2
+ "tier": 1,
3
+ "name": "title-card-fade",
4
+ "composition_id": "TitleCard",
5
+ "description": "Solid black background, single 'HELLO' element fades in 0-0.5s, holds 0.5-2.5s, fades out 2.5-3.0s. Tests the most basic Remotion → HyperFrames translation: a single AbsoluteFill, a single useCurrentFrame-driven interpolate, no audio, no media, no custom React components.",
6
+ "duration_seconds": 3,
7
+ "fps": 30,
8
+ "width": 1280,
9
+ "height": 720,
10
+ "ssim_threshold": 0.95,
11
+ "validation": {
12
+ "measured_mean_ssim": 0.974,
13
+ "measured_min_ssim": 0.972,
14
+ "measured_p05_ssim": 0.972,
15
+ "measured_p95_ssim": 0.983,
16
+ "measured_at": "2026-04-27",
17
+ "measured_against": "remotion@4.0 (PNG output, BT.709) vs hyperframes@0.4.15-alpha.1"
18
+ },
19
+ "translation_notes": [
20
+ "Remotion: AbsoluteFill → HF: position:absolute;inset:0 div",
21
+ "Remotion: interpolate(frame, [0,15,75,90], [0,1,1,0]) at fps=30 → HF: paused GSAP timeline with three keyframed tweens at 0s, 0.5s, 2.5s with ease:'none' (linear matches Remotion's default linear interpolation)",
22
+ "No fonts loaded; both renderers use system Helvetica/Arial fallback. The Linux fallback diverges between Remotion's bundled Chromium and HyperFrames' chrome-headless-shell — same fontWeight:800 renders perceptibly bolder in HF. This costs ~0.025 mean SSIM and is the dominant non-translation noise floor.",
23
+ "Remotion config must use setVideoImageFormat('png') + setColorSpace('bt709'); the JPEG default writes yuvj420p (full-range) which costs ~0.05 SSIM vs HF's yuv420p (limited-range)."
24
+ ],
25
+ "rationale": "Threshold 0.95 sits ~0.02 below measured p05. A real translation regression (wrong easing, wrong durations) drops mean SSIM by 0.05+. Encoder/font drift between CI runs is bounded at ~0.01."
26
+ }
@@ -0,0 +1,61 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <title>tier-1-title-card</title>
6
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js"></script>
7
+ <style>
8
+ html,
9
+ body {
10
+ margin: 0;
11
+ padding: 0;
12
+ width: 1280px;
13
+ height: 720px;
14
+ overflow: hidden;
15
+ background: #0a0a0a;
16
+ font-family: Helvetica, Arial, sans-serif;
17
+ }
18
+ .title {
19
+ position: absolute;
20
+ inset: 0;
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: center;
24
+ color: #ffffff;
25
+ font-size: 160px;
26
+ font-weight: 800;
27
+ letter-spacing: 0.05em;
28
+ opacity: 0;
29
+ }
30
+ </style>
31
+ </head>
32
+ <body>
33
+ <div
34
+ id="stage"
35
+ data-composition-id="tier-1-title-card"
36
+ data-start="0"
37
+ data-width="1280"
38
+ data-height="720"
39
+ data-duration="3"
40
+ data-fps="30"
41
+ >
42
+ <div id="title" class="clip" data-start="0" data-duration="3" data-track-index="0">
43
+ <div class="title">HELLO</div>
44
+ </div>
45
+
46
+ <script>
47
+ // Translation of Remotion's
48
+ // interpolate(frame, [0, 15, 75, 90], [0, 1, 1, 0]) at fps=30
49
+ // into a paused GSAP timeline keyed in seconds.
50
+ // Frame ranges → time ranges: 0/30=0, 15/30=0.5, 75/30=2.5, 90/30=3.0
51
+ const tl = gsap.timeline({ paused: true });
52
+ const target = document.querySelector("#title .title");
53
+ tl.to(target, { opacity: 1, duration: 0.5, ease: "none" }, 0);
54
+ tl.to(target, { opacity: 1, duration: 2.0, ease: "none" }, 0.5);
55
+ tl.to(target, { opacity: 0, duration: 0.5, ease: "none" }, 2.5);
56
+ window.__timelines = window.__timelines || {};
57
+ window.__timelines["tier-1-title-card"] = tl;
58
+ </script>
59
+ </div>
60
+ </body>
61
+ </html>
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "tier-1-title-card-remotion",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "render": "remotion render TitleCard out/baseline.mp4"
7
+ },
8
+ "dependencies": {
9
+ "@remotion/cli": "^4.0.0",
10
+ "react": "^18.3.1",
11
+ "react-dom": "^18.3.1",
12
+ "remotion": "^4.0.0"
13
+ }
14
+ }
@@ -0,0 +1,13 @@
1
+ import { Config } from "@remotion/cli/config";
2
+
3
+ // Match HyperFrames' default render so SSIM diffs measure translation
4
+ // fidelity, not encoder differences.
5
+ //
6
+ // setVideoImageFormat("png") avoids the JPEG limited-range/full-range
7
+ // colorspace flag (yuvj420p vs yuv420p) that otherwise costs ~0.05 SSIM.
8
+ //
9
+ // setColorSpace("bt709") matches HF's BT.709 SDR output.
10
+ Config.setVideoImageFormat("png");
11
+ Config.setColorSpace("bt709");
12
+ Config.setOverwriteOutput(true);
13
+ Config.setConcurrency(1);
@@ -0,0 +1,13 @@
1
+ import { Composition } from "remotion";
2
+ import { TitleCard } from "./TitleCard";
3
+
4
+ export const RemotionRoot = () => (
5
+ <Composition
6
+ id="TitleCard"
7
+ component={TitleCard}
8
+ durationInFrames={90}
9
+ fps={30}
10
+ width={1280}
11
+ height={720}
12
+ />
13
+ );
@@ -0,0 +1,34 @@
1
+ import { AbsoluteFill, interpolate, useCurrentFrame } from "remotion";
2
+
3
+ export const TitleCard = () => {
4
+ const frame = useCurrentFrame();
5
+
6
+ // Fade in 0-15, hold 15-75, fade out 75-90.
7
+ const opacity = interpolate(frame, [0, 15, 75, 90], [0, 1, 1, 0], {
8
+ extrapolateLeft: "clamp",
9
+ extrapolateRight: "clamp",
10
+ });
11
+
12
+ return (
13
+ <AbsoluteFill
14
+ style={{
15
+ backgroundColor: "#0a0a0a",
16
+ justifyContent: "center",
17
+ alignItems: "center",
18
+ fontFamily: "Helvetica, Arial, sans-serif",
19
+ }}
20
+ >
21
+ <div
22
+ style={{
23
+ fontSize: 160,
24
+ fontWeight: 800,
25
+ color: "#ffffff",
26
+ opacity,
27
+ letterSpacing: "0.05em",
28
+ }}
29
+ >
30
+ HELLO
31
+ </div>
32
+ </AbsoluteFill>
33
+ );
34
+ };
@@ -0,0 +1,4 @@
1
+ import { registerRoot } from "remotion";
2
+ import { RemotionRoot } from "./Root";
3
+
4
+ registerRoot(RemotionRoot);
@@ -0,0 +1,15 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2018",
4
+ "module": "ESNext",
5
+ "jsx": "react-jsx",
6
+ "strict": true,
7
+ "esModuleInterop": true,
8
+ "moduleResolution": "node",
9
+ "skipLibCheck": true,
10
+ "forceConsistentCasingInFileNames": true,
11
+ "resolveJsonModule": true,
12
+ "isolatedModules": true
13
+ },
14
+ "include": ["src"]
15
+ }
@@ -0,0 +1,54 @@
1
+ # Tier 2 — title-image-outro
2
+
3
+ ## What it tests
4
+
5
+ Three-scene composition. Each scene exercises a different Remotion idiom:
6
+
7
+ 1. **Scene 1 (0–2 s)** — TitleScene with `spring({damping:12, stiffness:100, mass:1})`
8
+ driving a `transform: scale()` on text. Tests the lossy `spring → GSAP ease` translation.
9
+ 2. **Scene 2 (2–4 s)** — ImageScene that fades in a `staticFile`-loaded image and
10
+ linearly scales it from 0.8 → 1.0. Tests asset paths + linear `interpolate`.
11
+ 3. **Scene 3 (4–6 s)** — OutroScene with a 1-s linear fade-in. Sanity check after
12
+ the harder scenes.
13
+
14
+ A silent 6-second WAV plays throughout at `volume={0.5}`. Tests `<Audio>` translation.
15
+
16
+ If a translation passes T2, the skill correctly handles `<Sequence>` boundaries,
17
+ `<Audio>` / `<Img>` / `staticFile`, and the Remotion `spring → GSAP ease` heuristic.
18
+
19
+ ## Translation walk-through
20
+
21
+ | Remotion | HyperFrames |
22
+ | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
23
+ | `<Sequence from={0} durationInFrames={60}>` | `<div data-start="0" data-duration="2" data-track-index="0">` |
24
+ | `spring({frame, fps, config: {damping:12, stiffness:100, mass:1}})` | `gsap.to(target, { scale: 1, duration: 0.7, ease: "back.out(1.4)" })` |
25
+ | `<Audio src={staticFile("music.wav")} volume={0.5} />` | `<audio src="assets/music.wav" data-start="0" data-duration="6" data-volume="0.5" data-track-index="1">` |
26
+ | `<Img src={staticFile("square.png")} />` | `<img src="assets/square.png">` (with setup.sh copying into both trees) |
27
+ | `interpolate(frame, [0, 15], [0, 1])` at 30 fps | `gsap.to(target, { opacity: 1, duration: 0.5, ease: "none" })` |
28
+
29
+ The scene crossfading is a HyperFrames idiom, not a Remotion one: at scene boundaries
30
+ we `gsap.set(scene, { opacity: 0 })` so the previous scene disappears at the
31
+ right time. Remotion does this implicitly by virtue of `<Sequence>`'s durationInFrames.
32
+
33
+ ## How to render and evaluate
34
+
35
+ ```bash
36
+ # 1. Generate the binary assets (PNG + WAV) via ffmpeg
37
+ ./setup.sh
38
+
39
+ # 2. Render Remotion baseline
40
+ cd remotion-src && npm install && npm run render
41
+
42
+ # 3. Render HyperFrames translation
43
+ cd ../hf-src && npx hyperframes render --output ../hf.mp4
44
+
45
+ # 4. Compare
46
+ ../../../scripts/render_diff.sh ./remotion-src/out/baseline.mp4 ./hf.mp4 ./diff
47
+ ```
48
+
49
+ ## Why threshold 0.95?
50
+
51
+ Same threshold as T1 (`expected.json` codifies it for the orchestrator). Spring → `back.out(1.4)`
52
+ came in cleaner than predicted during calibration — the validated mean is 0.985 against the
53
+ 0.95 gate. If the translation breaks anything else (spring overshoot wrong, stagger off,
54
+ asset path drift), mean SSIM will fall well below 0.95 — that's the failure signal.
@@ -0,0 +1,29 @@
1
+ {
2
+ "tier": 2,
3
+ "name": "title-image-outro",
4
+ "composition_id": "MultiScene",
5
+ "description": "Three-scene composition exercising Sequence, spring, interpolate, Audio, Img, and staticFile. Title scene uses Remotion's spring (translated to GSAP back.out as an approximation). Image scene scales an Img (from staticFile) with linear interpolate. Outro scene fades text in linearly. A silent WAV plays throughout at volume 0.5.",
6
+ "duration_seconds": 6,
7
+ "fps": 30,
8
+ "width": 1280,
9
+ "height": 720,
10
+ "ssim_threshold": 0.95,
11
+ "validation": {
12
+ "measured_mean_ssim": 0.985,
13
+ "measured_min_ssim": 0.963,
14
+ "measured_p05_ssim": 0.966,
15
+ "measured_p95_ssim": 0.999,
16
+ "measured_at": "2026-04-27",
17
+ "measured_against": "remotion@4.0 (PNG output, BT.709) vs hyperframes@0.4.15-alpha.1",
18
+ "notes": "Spring → back.out(1.4) translation came out cleaner than expected; mean 0.985 leaves substantial headroom over 0.95."
19
+ },
20
+ "translation_notes": [
21
+ "spring({damping:12, stiffness:100, mass:1}) → back.out(1.4) over 0.7s. Spring overshoot+settle and back.out's overshoot+settle have similar shape; budget ~0.02 SSIM for the late-tail curvature mismatch (validated lower than predicted in spec; original notes overestimated drift).",
22
+ "<Sequence from durationInFrames> → wrapping div with data-start/data-duration in seconds and explicit gsap.set(opacity, 0/1) at scene boundaries to crossfade in/out cleanly",
23
+ "<Audio src volume> → <audio data-start data-duration data-volume>",
24
+ "<Img src={staticFile('x')}> → <img src='assets/x'>; setup.sh copies the asset into both fixture trees",
25
+ "interpolate with default linear easing → ease:'none' in GSAP",
26
+ "Fonts again rely on system Helvetica/Arial; ~0.015 SSIM cost from AA differences"
27
+ ],
28
+ "rationale": "Threshold 0.95 sits ~0.015 below measured p05 (0.966). T2 actually validated cleaner than T1 because the lower title fontWeight (140px vs T1's 160px) shows less of the system-font fallback divergence."
29
+ }
@@ -0,0 +1,118 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <title>tier-2-multi-scene</title>
6
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js"></script>
7
+ <style>
8
+ html,
9
+ body {
10
+ margin: 0;
11
+ padding: 0;
12
+ width: 1280px;
13
+ height: 720px;
14
+ overflow: hidden;
15
+ background: #0a0a0a;
16
+ font-family: Helvetica, Arial, sans-serif;
17
+ }
18
+ .scene {
19
+ position: absolute;
20
+ inset: 0;
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: center;
24
+ opacity: 0;
25
+ }
26
+ .title {
27
+ font-size: 140px;
28
+ font-weight: 800;
29
+ color: #ffffff;
30
+ letter-spacing: 0.05em;
31
+ transform: scale(0);
32
+ }
33
+ .square {
34
+ width: 200px;
35
+ height: 200px;
36
+ opacity: 0;
37
+ transform: scale(0.8);
38
+ }
39
+ .outro {
40
+ font-size: 100px;
41
+ font-weight: 600;
42
+ color: #ffffff;
43
+ }
44
+ </style>
45
+ </head>
46
+ <body>
47
+ <div
48
+ id="stage"
49
+ data-composition-id="tier-2-multi-scene"
50
+ data-start="0"
51
+ data-width="1280"
52
+ data-height="720"
53
+ data-duration="6"
54
+ data-fps="30"
55
+ >
56
+ <div id="scene-1" class="scene clip" data-start="0" data-duration="2" data-track-index="0">
57
+ <div class="title">Welcome</div>
58
+ </div>
59
+
60
+ <div id="scene-2" class="scene clip" data-start="2" data-duration="2" data-track-index="0">
61
+ <img class="square" src="assets/square.png" alt="" />
62
+ </div>
63
+
64
+ <div id="scene-3" class="scene clip" data-start="4" data-duration="2" data-track-index="0">
65
+ <div class="outro">Goodbye</div>
66
+ </div>
67
+
68
+ <audio
69
+ id="bg-music"
70
+ data-start="0"
71
+ data-duration="6"
72
+ data-track-index="1"
73
+ data-volume="0.5"
74
+ src="assets/music.wav"
75
+ ></audio>
76
+
77
+ <script>
78
+ // Translation of Remotion's 3-Sequence MultiScene at fps=30, total 6s.
79
+ //
80
+ // Scene 1 (0-2s): TitleScene — spring scale on "Welcome".
81
+ // Remotion: spring({frame, fps, config: {damping:12, stiffness:100, mass:1}})
82
+ // GSAP equivalent: back.out(1.4) over ~0.7s. Spring → ease translation
83
+ // is approximate; expect minor differences in the tail of the curve.
84
+ //
85
+ // Scene 2 (2-4s): ImageScene — opacity 0→1 over 0-0.5s + scale 0.8→1.0 over 0-2.0s.
86
+ // Both Remotion interpolates use linear (default), match with ease:"none".
87
+ //
88
+ // Scene 3 (4-6s): OutroScene — opacity 0→1 over 4-5s, linear.
89
+
90
+ const tl = gsap.timeline({ paused: true });
91
+
92
+ // Scene 1 setup: opacity flick on so scene becomes visible at start
93
+ const scene1 = document.querySelector("#scene-1");
94
+ const title = scene1.querySelector(".title");
95
+ tl.set(scene1, { opacity: 1 }, 0);
96
+ tl.to(title, { scale: 1, duration: 0.7, ease: "back.out(1.4)" }, 0);
97
+ tl.set(scene1, { opacity: 0 }, 2);
98
+
99
+ // Scene 2
100
+ const scene2 = document.querySelector("#scene-2");
101
+ const square = scene2.querySelector(".square");
102
+ tl.set(scene2, { opacity: 1 }, 2);
103
+ tl.to(square, { opacity: 1, duration: 0.5, ease: "none" }, 2);
104
+ tl.to(square, { scale: 1.0, duration: 2.0, ease: "none" }, 2);
105
+ tl.set(scene2, { opacity: 0 }, 4);
106
+
107
+ // Scene 3
108
+ const scene3 = document.querySelector("#scene-3");
109
+ const outro = scene3.querySelector(".outro");
110
+ tl.set(scene3, { opacity: 1 }, 4);
111
+ tl.fromTo(outro, { opacity: 0 }, { opacity: 1, duration: 1.0, ease: "none" }, 4);
112
+
113
+ window.__timelines = window.__timelines || {};
114
+ window.__timelines["tier-2-multi-scene"] = tl;
115
+ </script>
116
+ </div>
117
+ </body>
118
+ </html>
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "tier-2-multi-scene-remotion",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "render": "remotion render MultiScene out/baseline.mp4"
7
+ },
8
+ "dependencies": {
9
+ "@remotion/cli": "^4.0.0",
10
+ "react": "^18.3.1",
11
+ "react-dom": "^18.3.1",
12
+ "remotion": "^4.0.0"
13
+ }
14
+ }
@@ -0,0 +1,13 @@
1
+ import { Config } from "@remotion/cli/config";
2
+
3
+ // Match HyperFrames' default render so SSIM diffs measure translation
4
+ // fidelity, not encoder differences.
5
+ //
6
+ // setVideoImageFormat("png") avoids the JPEG limited-range/full-range
7
+ // colorspace flag (yuvj420p vs yuv420p) that otherwise costs ~0.05 SSIM.
8
+ //
9
+ // setColorSpace("bt709") matches HF's BT.709 SDR output.
10
+ Config.setVideoImageFormat("png");
11
+ Config.setColorSpace("bt709");
12
+ Config.setOverwriteOutput(true);
13
+ Config.setConcurrency(1);
@@ -0,0 +1,105 @@
1
+ import {
2
+ AbsoluteFill,
3
+ Audio,
4
+ Img,
5
+ Sequence,
6
+ interpolate,
7
+ spring,
8
+ staticFile,
9
+ useCurrentFrame,
10
+ useVideoConfig,
11
+ } from "remotion";
12
+
13
+ const TitleScene = () => {
14
+ const frame = useCurrentFrame();
15
+ const { fps } = useVideoConfig();
16
+ const scale = spring({ frame, fps, config: { damping: 12, stiffness: 100, mass: 1 } });
17
+ return (
18
+ <AbsoluteFill
19
+ style={{
20
+ backgroundColor: "#0a0a0a",
21
+ justifyContent: "center",
22
+ alignItems: "center",
23
+ fontFamily: "Helvetica, Arial, sans-serif",
24
+ }}
25
+ >
26
+ <div
27
+ style={{
28
+ fontSize: 140,
29
+ fontWeight: 800,
30
+ color: "#ffffff",
31
+ transform: `scale(${scale})`,
32
+ letterSpacing: "0.05em",
33
+ }}
34
+ >
35
+ Welcome
36
+ </div>
37
+ </AbsoluteFill>
38
+ );
39
+ };
40
+
41
+ const ImageScene = () => {
42
+ const frame = useCurrentFrame();
43
+ const opacity = interpolate(frame, [0, 15], [0, 1], { extrapolateRight: "clamp" });
44
+ const scale = interpolate(frame, [0, 60], [0.8, 1.0], { extrapolateRight: "clamp" });
45
+ return (
46
+ <AbsoluteFill
47
+ style={{
48
+ backgroundColor: "#0a0a0a",
49
+ justifyContent: "center",
50
+ alignItems: "center",
51
+ }}
52
+ >
53
+ <Img
54
+ src={staticFile("square.png")}
55
+ style={{
56
+ width: 200,
57
+ height: 200,
58
+ opacity,
59
+ transform: `scale(${scale})`,
60
+ }}
61
+ />
62
+ </AbsoluteFill>
63
+ );
64
+ };
65
+
66
+ const OutroScene = () => {
67
+ const frame = useCurrentFrame();
68
+ const opacity = interpolate(frame, [0, 30], [0, 1], { extrapolateRight: "clamp" });
69
+ return (
70
+ <AbsoluteFill
71
+ style={{
72
+ backgroundColor: "#0a0a0a",
73
+ justifyContent: "center",
74
+ alignItems: "center",
75
+ fontFamily: "Helvetica, Arial, sans-serif",
76
+ }}
77
+ >
78
+ <div
79
+ style={{
80
+ fontSize: 100,
81
+ fontWeight: 600,
82
+ color: "#ffffff",
83
+ opacity,
84
+ }}
85
+ >
86
+ Goodbye
87
+ </div>
88
+ </AbsoluteFill>
89
+ );
90
+ };
91
+
92
+ export const MultiScene = () => (
93
+ <AbsoluteFill>
94
+ <Sequence from={0} durationInFrames={60}>
95
+ <TitleScene />
96
+ </Sequence>
97
+ <Sequence from={60} durationInFrames={60}>
98
+ <ImageScene />
99
+ </Sequence>
100
+ <Sequence from={120} durationInFrames={60}>
101
+ <OutroScene />
102
+ </Sequence>
103
+ <Audio src={staticFile("music.wav")} volume={0.5} />
104
+ </AbsoluteFill>
105
+ );
@@ -0,0 +1,13 @@
1
+ import { Composition } from "remotion";
2
+ import { MultiScene } from "./MultiScene";
3
+
4
+ export const RemotionRoot = () => (
5
+ <Composition
6
+ id="MultiScene"
7
+ component={MultiScene}
8
+ durationInFrames={180}
9
+ fps={30}
10
+ width={1280}
11
+ height={720}
12
+ />
13
+ );
@@ -0,0 +1,4 @@
1
+ import { registerRoot } from "remotion";
2
+ import { RemotionRoot } from "./Root";
3
+
4
+ registerRoot(RemotionRoot);
@@ -0,0 +1,15 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2018",
4
+ "module": "ESNext",
5
+ "jsx": "react-jsx",
6
+ "strict": true,
7
+ "esModuleInterop": true,
8
+ "moduleResolution": "node",
9
+ "skipLibCheck": true,
10
+ "forceConsistentCasingInFileNames": true,
11
+ "resolveJsonModule": true,
12
+ "isolatedModules": true
13
+ },
14
+ "include": ["src"]
15
+ }
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env bash
2
+ # setup.sh — generate the binary assets this fixture needs.
3
+ #
4
+ # Both Remotion and HyperFrames variants need a 200x200 blue PNG and a
5
+ # 6-second silent WAV. Generating them via ffmpeg keeps binaries out of
6
+ # the repo while still letting the fixture render reproducibly.
7
+ #
8
+ # Run from the fixture root: ./setup.sh
9
+
10
+ set -euo pipefail
11
+
12
+ THIS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+
14
+ if ! command -v ffmpeg >/dev/null 2>&1; then
15
+ echo "error: ffmpeg not on PATH" >&2
16
+ exit 2
17
+ fi
18
+
19
+ mkdir -p "$THIS_DIR/remotion-src/public" "$THIS_DIR/hf-src/assets"
20
+
21
+ # 200x200 solid blue PNG, ~200 bytes.
22
+ ffmpeg -y -hide_banner -loglevel error \
23
+ -f lavfi -i "color=color=#3066be:size=200x200" -frames:v 1 \
24
+ "$THIS_DIR/remotion-src/public/square.png"
25
+ cp "$THIS_DIR/remotion-src/public/square.png" "$THIS_DIR/hf-src/assets/square.png"
26
+
27
+ # 6-second silent WAV at 8 kHz mono. ~96 KB if checked in, but it is generated.
28
+ ffmpeg -y -hide_banner -loglevel error \
29
+ -f lavfi -i "anullsrc=cl=mono:r=8000" -t 6 -acodec pcm_s16le \
30
+ "$THIS_DIR/remotion-src/public/music.wav"
31
+ cp "$THIS_DIR/remotion-src/public/music.wav" "$THIS_DIR/hf-src/assets/music.wav"
32
+
33
+ echo "generated:"
34
+ ls -la "$THIS_DIR/remotion-src/public/" "$THIS_DIR/hf-src/assets/"