@openvidstudio/mcp-server 0.1.0 → 1.4.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 (1885) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +63 -0
  3. package/dist/api.d.ts +28 -0
  4. package/dist/api.js +35 -0
  5. package/dist/audioTick.d.ts +33 -0
  6. package/dist/audioTick.js +117 -0
  7. package/dist/beats.d.ts +126 -3
  8. package/dist/canvasExplainer.d.ts +198 -0
  9. package/dist/canvasExplainer.js +661 -0
  10. package/dist/canvasValidate.d.ts +76 -0
  11. package/dist/canvasValidate.js +263 -0
  12. package/dist/capture.d.ts +33 -0
  13. package/dist/capture.js +97 -1
  14. package/dist/config.d.ts +52 -0
  15. package/dist/config.js +29 -1
  16. package/dist/facts.d.ts +45 -0
  17. package/dist/facts.js +124 -0
  18. package/dist/frameDiff.d.ts +74 -0
  19. package/dist/frameDiff.js +120 -0
  20. package/dist/install.d.ts +63 -0
  21. package/dist/install.js +225 -0
  22. package/dist/jobs.d.ts +37 -0
  23. package/dist/jobs.js +72 -0
  24. package/dist/lessonArc.d.ts +68 -0
  25. package/dist/lessonArc.js +188 -0
  26. package/dist/paths.d.ts +10 -0
  27. package/dist/paths.js +11 -1
  28. package/dist/primitives/registry.d.ts +43 -0
  29. package/dist/primitives/registry.js +729 -0
  30. package/dist/remotionBridge.d.ts +138 -0
  31. package/dist/remotionBridge.js +364 -0
  32. package/dist/renderCache.d.ts +178 -0
  33. package/dist/renderCache.js +371 -0
  34. package/dist/scenes/castToSteps.d.ts +49 -0
  35. package/dist/scenes/castToSteps.js +69 -0
  36. package/dist/scenes/cursorPoints.d.ts +43 -0
  37. package/dist/scenes/cursorPoints.js +125 -0
  38. package/dist/scenes/repoInfo.d.ts +17 -0
  39. package/dist/scenes/repoInfo.js +122 -0
  40. package/dist/scenes/templates.d.ts +77 -2
  41. package/dist/scenes/templates.js +349 -71
  42. package/dist/scenes/videoDuration.d.ts +15 -0
  43. package/dist/scenes/videoDuration.js +30 -0
  44. package/dist/server.d.ts +2 -1
  45. package/dist/server.js +19 -1
  46. package/dist/stdio.js +12 -4
  47. package/dist/tools/captureDesktop.d.ts +30 -0
  48. package/dist/tools/captureDesktop.js +225 -0
  49. package/dist/tools/captureMobile.d.ts +18 -0
  50. package/dist/tools/captureMobile.js +176 -0
  51. package/dist/tools/captureScreenRecording.d.ts +102 -2
  52. package/dist/tools/captureScreenRecording.js +310 -12
  53. package/dist/tools/captureScreenshot.d.ts +126 -2
  54. package/dist/tools/captureScreenshot.js +308 -24
  55. package/dist/tools/captureTerminal.d.ts +50 -0
  56. package/dist/tools/captureTerminal.js +156 -0
  57. package/dist/tools/checkScript.d.ts +105 -0
  58. package/dist/tools/checkScript.js +456 -0
  59. package/dist/tools/collectFacts.d.ts +82 -0
  60. package/dist/tools/collectFacts.js +210 -0
  61. package/dist/tools/composeScore.d.ts +156 -0
  62. package/dist/tools/composeScore.js +330 -0
  63. package/dist/tools/contactSheet.d.ts +19 -1
  64. package/dist/tools/contactSheet.js +53 -14
  65. package/dist/tools/diffBeats.d.ts +48 -0
  66. package/dist/tools/diffBeats.js +226 -0
  67. package/dist/tools/docsDrift.d.ts +84 -0
  68. package/dist/tools/docsDrift.js +275 -0
  69. package/dist/tools/exportRendition.d.ts +283 -0
  70. package/dist/tools/exportRendition.js +688 -0
  71. package/dist/tools/extractBrand.d.ts +32 -0
  72. package/dist/tools/extractBrand.js +541 -0
  73. package/dist/tools/finalizeVideo.d.ts +94 -0
  74. package/dist/tools/finalizeVideo.js +300 -0
  75. package/dist/tools/fitBeats.d.ts +69 -0
  76. package/dist/tools/fitBeats.js +229 -0
  77. package/dist/tools/generateNarration.d.ts +98 -1
  78. package/dist/tools/generateNarration.js +274 -66
  79. package/dist/tools/importHiggsfieldClip.js +16 -0
  80. package/dist/tools/index.js +57 -0
  81. package/dist/tools/initProject.d.ts +12 -1
  82. package/dist/tools/initProject.js +80 -2
  83. package/dist/tools/jobStatus.d.ts +14 -0
  84. package/dist/tools/jobStatus.js +37 -0
  85. package/dist/tools/mcp.d.ts +9 -0
  86. package/dist/tools/mcp.js +66 -4
  87. package/dist/tools/motionPrimitives.d.ts +46 -0
  88. package/dist/tools/motionPrimitives.js +128 -0
  89. package/dist/tools/musicCues.d.ts +43 -0
  90. package/dist/tools/musicCues.js +252 -0
  91. package/dist/tools/musicLibrary.d.ts +80 -0
  92. package/dist/tools/musicLibrary.js +614 -0
  93. package/dist/tools/planBeats.d.ts +35 -0
  94. package/dist/tools/planBeats.js +98 -5
  95. package/dist/tools/planProduction.d.ts +77 -0
  96. package/dist/tools/planProduction.js +303 -0
  97. package/dist/tools/planShots.d.ts +79 -0
  98. package/dist/tools/planShots.js +427 -0
  99. package/dist/tools/preflight.d.ts +43 -0
  100. package/dist/tools/preflight.js +203 -16
  101. package/dist/tools/qcCapture.d.ts +38 -0
  102. package/dist/tools/qcCapture.js +206 -0
  103. package/dist/tools/qcExtractFrames.d.ts +36 -6
  104. package/dist/tools/qcExtractFrames.js +81 -28
  105. package/dist/tools/reformatVertical.d.ts +112 -0
  106. package/dist/tools/reformatVertical.js +260 -0
  107. package/dist/tools/releaseDiff.d.ts +96 -0
  108. package/dist/tools/releaseDiff.js +319 -0
  109. package/dist/tools/renderCanvasExplainer.d.ts +2 -0
  110. package/dist/tools/renderCanvasExplainer.js +56 -0
  111. package/dist/tools/renderStills.d.ts +138 -0
  112. package/dist/tools/renderStills.js +399 -0
  113. package/dist/tools/renderVideo.d.ts +70 -1
  114. package/dist/tools/renderVideo.js +362 -5
  115. package/dist/tools/scaffoldScene.d.ts +29 -4
  116. package/dist/tools/scaffoldScene.js +218 -16
  117. package/dist/tools/soundEffects.d.ts +49 -0
  118. package/dist/tools/soundEffects.js +383 -0
  119. package/dist/tools/stitchComposition.d.ts +105 -6
  120. package/dist/tools/stitchComposition.js +416 -50
  121. package/dist/tools/validateBeats.d.ts +28 -0
  122. package/dist/tools/validateBeats.js +357 -23
  123. package/dist/tools/validateCanvasExplainer.d.ts +2 -0
  124. package/dist/tools/validateCanvasExplainer.js +35 -0
  125. package/dist/tools/validateScenes.d.ts +71 -3
  126. package/dist/tools/validateScenes.js +348 -34
  127. package/dist/tools/validateScenesRender.d.ts +186 -0
  128. package/dist/tools/validateScenesRender.js +772 -0
  129. package/dist/tools/visualRegression.d.ts +72 -0
  130. package/dist/tools/visualRegression.js +192 -0
  131. package/dist/tools/writeBeatsFile.d.ts +1 -0
  132. package/dist/tools/writeBeatsFile.js +4 -2
  133. package/dist/tools/writeBrief.d.ts +155 -0
  134. package/dist/tools/writeBrief.js +344 -0
  135. package/dist/tools/writeDescription.d.ts +58 -0
  136. package/dist/tools/writeDescription.js +503 -0
  137. package/dist/util.d.ts +7 -12
  138. package/dist/util.js +14 -48
  139. package/docs/API.md +1351 -344
  140. package/docs/CAPTURE.md +182 -0
  141. package/docs/CREATIVE.md +217 -0
  142. package/docs/NARRATION.md +252 -111
  143. package/docs/OVERVIEW.md +30 -3
  144. package/docs/PIPELINE.md +433 -7
  145. package/docs/PLANNING.md +309 -19
  146. package/docs/PRESETS.md +153 -0
  147. package/docs/SCRIPT.md +194 -0
  148. package/docs/STYLE.md +74 -9
  149. package/docs/SUPERNOVA.md +191 -0
  150. package/docs/TOOLS.md +55 -0
  151. package/package.json +60 -54
  152. package/py/compose-score.py +1032 -0
  153. package/py/edge-words.py +57 -0
  154. package/templates/default/.agents/skills/remotion-best-practices/SKILL.md +59 -0
  155. package/templates/default/.agents/skills/remotion-best-practices/agents/openai.yaml +7 -0
  156. package/templates/default/.agents/skills/remotion-best-practices/assets/remotion-icon.png +0 -0
  157. package/templates/default/.agents/skills/remotion-best-practices/remotion-captions/REFERENCE.md +36 -0
  158. package/templates/default/.agents/skills/remotion-best-practices/remotion-captions/agents/openai.yaml +7 -0
  159. package/templates/default/.agents/skills/remotion-best-practices/remotion-captions/assets/remotion-icon.png +0 -0
  160. package/templates/default/.agents/skills/remotion-best-practices/remotion-captions/display-captions.md +190 -0
  161. package/templates/default/.agents/skills/remotion-best-practices/remotion-captions/import-srt-captions.md +73 -0
  162. package/templates/default/.agents/skills/remotion-best-practices/remotion-captions/transcribe-captions.md +70 -0
  163. package/templates/default/.agents/skills/remotion-best-practices/remotion-create/REFERENCE.md +68 -0
  164. package/templates/default/.agents/skills/remotion-best-practices/remotion-create/agents/openai.yaml +7 -0
  165. package/templates/default/.agents/skills/remotion-best-practices/remotion-create/assets/remotion-icon.png +0 -0
  166. package/templates/default/.agents/skills/remotion-best-practices/remotion-create/tailwind.md +11 -0
  167. package/templates/default/.agents/skills/remotion-best-practices/remotion-create/video-layout.md +9 -0
  168. package/templates/default/.agents/skills/remotion-best-practices/remotion-docs/REFERENCE.md +46 -0
  169. package/templates/default/.agents/skills/remotion-best-practices/remotion-docs/agents/openai.yaml +7 -0
  170. package/templates/default/.agents/skills/remotion-best-practices/remotion-docs/assets/remotion-icon.png +0 -0
  171. package/templates/default/.agents/skills/remotion-best-practices/remotion-interactivity/REFERENCE.md +247 -0
  172. package/templates/default/.agents/skills/remotion-best-practices/remotion-interactivity/agents/openai.yaml +7 -0
  173. package/templates/default/.agents/skills/remotion-best-practices/remotion-interactivity/assets/remotion-icon.png +0 -0
  174. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/REFERENCE.md +36 -0
  175. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/agents/openai.yaml +7 -0
  176. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/assets/remotion-icon.png +0 -0
  177. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  178. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  179. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  180. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  181. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  182. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  183. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  184. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  185. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  186. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  187. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  188. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  189. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  190. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  191. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  192. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  193. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  194. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  195. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  196. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  197. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  198. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  199. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  200. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  201. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  202. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  203. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  204. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  205. package/templates/default/.agents/skills/remotion-best-practices/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  206. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/3d.md +86 -0
  207. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/REFERENCE.md +365 -0
  208. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/agents/openai.yaml +7 -0
  209. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/assets/remotion-icon.png +0 -0
  210. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/audio-visualization.md +198 -0
  211. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/audio.md +171 -0
  212. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/calculate-metadata.md +136 -0
  213. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/compositions.md +117 -0
  214. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/cropping.md +34 -0
  215. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/effects.md +251 -0
  216. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/embedding-videos.md +173 -0
  217. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/ffmpeg.md +38 -0
  218. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/gifs.md +187 -0
  219. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/google-fonts.md +76 -0
  220. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/html-in-canvas.md +128 -0
  221. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/images.md +73 -0
  222. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/light-leaks.md +106 -0
  223. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/local-fonts.md +69 -0
  224. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/lottie.md +73 -0
  225. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/measuring-dom-nodes.md +38 -0
  226. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/measuring-text.md +146 -0
  227. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/multi-scene-video.md +81 -0
  228. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/parameters.md +111 -0
  229. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/REFERENCE.md +36 -0
  230. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  231. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  232. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  233. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  234. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  235. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  236. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  237. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  238. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  239. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  240. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  241. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  242. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  243. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  244. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  245. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  246. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  247. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  248. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  249. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  250. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  251. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  252. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  253. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  254. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  255. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  256. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  257. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  258. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  259. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  260. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  261. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/sequencing.md +169 -0
  262. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/sfx.md +51 -0
  263. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/silence-detection.md +71 -0
  264. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/text-highlights.md +56 -0
  265. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/timing.md +111 -0
  266. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/transitions.md +239 -0
  267. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/video-editing.md +90 -0
  268. package/templates/default/.agents/skills/remotion-best-practices/remotion-markup/voiceover.md +99 -0
  269. package/templates/default/.agents/skills/remotion-best-practices/remotion-multimedia/REFERENCE.md +20 -0
  270. package/templates/default/.agents/skills/remotion-best-practices/remotion-multimedia/agents/openai.yaml +7 -0
  271. package/templates/default/.agents/skills/remotion-best-practices/remotion-multimedia/assets/remotion-icon.png +0 -0
  272. package/templates/default/.agents/skills/remotion-best-practices/remotion-multimedia/get-audio-duration.md +56 -0
  273. package/templates/default/.agents/skills/remotion-best-practices/remotion-multimedia/get-video-dimensions.md +66 -0
  274. package/templates/default/.agents/skills/remotion-best-practices/remotion-multimedia/get-video-duration.md +58 -0
  275. package/templates/default/.agents/skills/remotion-best-practices/remotion-render/REFERENCE.md +27 -0
  276. package/templates/default/.agents/skills/remotion-best-practices/remotion-render/agents/openai.yaml +7 -0
  277. package/templates/default/.agents/skills/remotion-best-practices/remotion-render/assets/remotion-icon.png +0 -0
  278. package/templates/default/.agents/skills/remotion-best-practices/remotion-render/transparent-videos.md +106 -0
  279. package/templates/default/.agents/skills/remotion-best-practices/remotion-saas/REFERENCE.md +33 -0
  280. package/templates/default/.agents/skills/remotion-best-practices/remotion-saas/agents/openai.yaml +7 -0
  281. package/templates/default/.agents/skills/remotion-best-practices/remotion-saas/assets/remotion-icon.png +0 -0
  282. package/templates/default/.agents/skills/remotion-best-practices/remotion-saas/framework.md +21 -0
  283. package/templates/default/.agents/skills/remotion-best-practices/remotion-saas/player.md +33 -0
  284. package/templates/default/.agents/skills/remotion-best-practices/remotion-saas/rendering.md +69 -0
  285. package/templates/default/.agents/skills/remotion-best-practices/remotion-studio/REFERENCE.md +24 -0
  286. package/templates/default/.agents/skills/remotion-best-practices/remotion-studio/agents/openai.yaml +7 -0
  287. package/templates/default/.agents/skills/remotion-best-practices/remotion-studio/assets/remotion-icon.png +0 -0
  288. package/templates/default/.agents/skills/remotion-best-practices/remotion-upgrade/REFERENCE.md +31 -0
  289. package/templates/default/.agents/skills/remotion-best-practices/remotion-upgrade/agents/openai.yaml +7 -0
  290. package/templates/default/.agents/skills/remotion-best-practices/remotion-upgrade/assets/remotion-icon.png +0 -0
  291. package/templates/default/.agents/skills/remotion-captions/SKILL.md +36 -0
  292. package/templates/default/.agents/skills/remotion-captions/agents/openai.yaml +7 -0
  293. package/templates/default/.agents/skills/remotion-captions/assets/remotion-icon.png +0 -0
  294. package/templates/default/.agents/skills/remotion-captions/display-captions.md +190 -0
  295. package/templates/default/.agents/skills/remotion-captions/import-srt-captions.md +73 -0
  296. package/templates/default/.agents/skills/remotion-captions/transcribe-captions.md +70 -0
  297. package/templates/default/.agents/skills/remotion-create/SKILL.md +68 -0
  298. package/templates/default/.agents/skills/remotion-create/agents/openai.yaml +7 -0
  299. package/templates/default/.agents/skills/remotion-create/assets/remotion-icon.png +0 -0
  300. package/templates/default/.agents/skills/remotion-create/tailwind.md +11 -0
  301. package/templates/default/.agents/skills/remotion-create/video-layout.md +9 -0
  302. package/templates/default/.agents/skills/remotion-docs/SKILL.md +46 -0
  303. package/templates/default/.agents/skills/remotion-docs/agents/openai.yaml +7 -0
  304. package/templates/default/.agents/skills/remotion-docs/assets/remotion-icon.png +0 -0
  305. package/templates/default/.agents/skills/remotion-interactivity/SKILL.md +247 -0
  306. package/templates/default/.agents/skills/remotion-interactivity/agents/openai.yaml +7 -0
  307. package/templates/default/.agents/skills/remotion-interactivity/assets/remotion-icon.png +0 -0
  308. package/templates/default/.agents/skills/remotion-maps/SKILL.md +36 -0
  309. package/templates/default/.agents/skills/remotion-maps/agents/openai.yaml +7 -0
  310. package/templates/default/.agents/skills/remotion-maps/assets/remotion-icon.png +0 -0
  311. package/templates/default/.agents/skills/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  312. package/templates/default/.agents/skills/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  313. package/templates/default/.agents/skills/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  314. package/templates/default/.agents/skills/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  315. package/templates/default/.agents/skills/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  316. package/templates/default/.agents/skills/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  317. package/templates/default/.agents/skills/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  318. package/templates/default/.agents/skills/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  319. package/templates/default/.agents/skills/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  320. package/templates/default/.agents/skills/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  321. package/templates/default/.agents/skills/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  322. package/templates/default/.agents/skills/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  323. package/templates/default/.agents/skills/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  324. package/templates/default/.agents/skills/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  325. package/templates/default/.agents/skills/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  326. package/templates/default/.agents/skills/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  327. package/templates/default/.agents/skills/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  328. package/templates/default/.agents/skills/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  329. package/templates/default/.agents/skills/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  330. package/templates/default/.agents/skills/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  331. package/templates/default/.agents/skills/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  332. package/templates/default/.agents/skills/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  333. package/templates/default/.agents/skills/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  334. package/templates/default/.agents/skills/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  335. package/templates/default/.agents/skills/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  336. package/templates/default/.agents/skills/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  337. package/templates/default/.agents/skills/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  338. package/templates/default/.agents/skills/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  339. package/templates/default/.agents/skills/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  340. package/templates/default/.agents/skills/remotion-markup/3d.md +86 -0
  341. package/templates/default/.agents/skills/remotion-markup/SKILL.md +365 -0
  342. package/templates/default/.agents/skills/remotion-markup/agents/openai.yaml +7 -0
  343. package/templates/default/.agents/skills/remotion-markup/assets/remotion-icon.png +0 -0
  344. package/templates/default/.agents/skills/remotion-markup/audio-visualization.md +198 -0
  345. package/templates/default/.agents/skills/remotion-markup/audio.md +171 -0
  346. package/templates/default/.agents/skills/remotion-markup/calculate-metadata.md +136 -0
  347. package/templates/default/.agents/skills/remotion-markup/compositions.md +117 -0
  348. package/templates/default/.agents/skills/remotion-markup/cropping.md +34 -0
  349. package/templates/default/.agents/skills/remotion-markup/effects.md +251 -0
  350. package/templates/default/.agents/skills/remotion-markup/embedding-videos.md +173 -0
  351. package/templates/default/.agents/skills/remotion-markup/ffmpeg.md +38 -0
  352. package/templates/default/.agents/skills/remotion-markup/gifs.md +187 -0
  353. package/templates/default/.agents/skills/remotion-markup/google-fonts.md +76 -0
  354. package/templates/default/.agents/skills/remotion-markup/html-in-canvas.md +128 -0
  355. package/templates/default/.agents/skills/remotion-markup/images.md +73 -0
  356. package/templates/default/.agents/skills/remotion-markup/light-leaks.md +106 -0
  357. package/templates/default/.agents/skills/remotion-markup/local-fonts.md +69 -0
  358. package/templates/default/.agents/skills/remotion-markup/lottie.md +73 -0
  359. package/templates/default/.agents/skills/remotion-markup/measuring-dom-nodes.md +38 -0
  360. package/templates/default/.agents/skills/remotion-markup/measuring-text.md +146 -0
  361. package/templates/default/.agents/skills/remotion-markup/multi-scene-video.md +81 -0
  362. package/templates/default/.agents/skills/remotion-markup/parameters.md +111 -0
  363. package/templates/default/.agents/skills/remotion-markup/remotion-maps/REFERENCE.md +36 -0
  364. package/templates/default/.agents/skills/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  365. package/templates/default/.agents/skills/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  366. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  367. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  368. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  369. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  370. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  371. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  372. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  373. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  374. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  375. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  376. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  377. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  378. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  379. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  380. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  381. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  382. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  383. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  384. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  385. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  386. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  387. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  388. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  389. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  390. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  391. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  392. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  393. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  394. package/templates/default/.agents/skills/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  395. package/templates/default/.agents/skills/remotion-markup/sequencing.md +169 -0
  396. package/templates/default/.agents/skills/remotion-markup/sfx.md +51 -0
  397. package/templates/default/.agents/skills/remotion-markup/silence-detection.md +71 -0
  398. package/templates/default/.agents/skills/remotion-markup/text-highlights.md +56 -0
  399. package/templates/default/.agents/skills/remotion-markup/timing.md +111 -0
  400. package/templates/default/.agents/skills/remotion-markup/transitions.md +239 -0
  401. package/templates/default/.agents/skills/remotion-markup/video-editing.md +90 -0
  402. package/templates/default/.agents/skills/remotion-markup/voiceover.md +99 -0
  403. package/templates/default/.agents/skills/remotion-multimedia/SKILL.md +20 -0
  404. package/templates/default/.agents/skills/remotion-multimedia/agents/openai.yaml +7 -0
  405. package/templates/default/.agents/skills/remotion-multimedia/assets/remotion-icon.png +0 -0
  406. package/templates/default/.agents/skills/remotion-multimedia/get-audio-duration.md +56 -0
  407. package/templates/default/.agents/skills/remotion-multimedia/get-video-dimensions.md +66 -0
  408. package/templates/default/.agents/skills/remotion-multimedia/get-video-duration.md +58 -0
  409. package/templates/default/.agents/skills/remotion-render/SKILL.md +27 -0
  410. package/templates/default/.agents/skills/remotion-render/agents/openai.yaml +7 -0
  411. package/templates/default/.agents/skills/remotion-render/assets/remotion-icon.png +0 -0
  412. package/templates/default/.agents/skills/remotion-render/transparent-videos.md +106 -0
  413. package/templates/default/.agents/skills/remotion-saas/SKILL.md +33 -0
  414. package/templates/default/.agents/skills/remotion-saas/agents/openai.yaml +7 -0
  415. package/templates/default/.agents/skills/remotion-saas/assets/remotion-icon.png +0 -0
  416. package/templates/default/.agents/skills/remotion-saas/framework.md +21 -0
  417. package/templates/default/.agents/skills/remotion-saas/player.md +33 -0
  418. package/templates/default/.agents/skills/remotion-saas/rendering.md +69 -0
  419. package/templates/default/.agents/skills/remotion-studio/SKILL.md +24 -0
  420. package/templates/default/.agents/skills/remotion-studio/agents/openai.yaml +7 -0
  421. package/templates/default/.agents/skills/remotion-studio/assets/remotion-icon.png +0 -0
  422. package/templates/default/.agents/skills/remotion-upgrade/SKILL.md +31 -0
  423. package/templates/default/.agents/skills/remotion-upgrade/agents/openai.yaml +7 -0
  424. package/templates/default/.agents/skills/remotion-upgrade/assets/remotion-icon.png +0 -0
  425. package/templates/default/.claude/skills/remotion-best-practices/SKILL.md +59 -0
  426. package/templates/default/.claude/skills/remotion-best-practices/agents/openai.yaml +7 -0
  427. package/templates/default/.claude/skills/remotion-best-practices/assets/remotion-icon.png +0 -0
  428. package/templates/default/.claude/skills/remotion-best-practices/remotion-captions/REFERENCE.md +36 -0
  429. package/templates/default/.claude/skills/remotion-best-practices/remotion-captions/agents/openai.yaml +7 -0
  430. package/templates/default/.claude/skills/remotion-best-practices/remotion-captions/assets/remotion-icon.png +0 -0
  431. package/templates/default/.claude/skills/remotion-best-practices/remotion-captions/display-captions.md +190 -0
  432. package/templates/default/.claude/skills/remotion-best-practices/remotion-captions/import-srt-captions.md +73 -0
  433. package/templates/default/.claude/skills/remotion-best-practices/remotion-captions/transcribe-captions.md +70 -0
  434. package/templates/default/.claude/skills/remotion-best-practices/remotion-create/REFERENCE.md +68 -0
  435. package/templates/default/.claude/skills/remotion-best-practices/remotion-create/agents/openai.yaml +7 -0
  436. package/templates/default/.claude/skills/remotion-best-practices/remotion-create/assets/remotion-icon.png +0 -0
  437. package/templates/default/.claude/skills/remotion-best-practices/remotion-create/tailwind.md +11 -0
  438. package/templates/default/.claude/skills/remotion-best-practices/remotion-create/video-layout.md +9 -0
  439. package/templates/default/.claude/skills/remotion-best-practices/remotion-docs/REFERENCE.md +46 -0
  440. package/templates/default/.claude/skills/remotion-best-practices/remotion-docs/agents/openai.yaml +7 -0
  441. package/templates/default/.claude/skills/remotion-best-practices/remotion-docs/assets/remotion-icon.png +0 -0
  442. package/templates/default/.claude/skills/remotion-best-practices/remotion-interactivity/REFERENCE.md +247 -0
  443. package/templates/default/.claude/skills/remotion-best-practices/remotion-interactivity/agents/openai.yaml +7 -0
  444. package/templates/default/.claude/skills/remotion-best-practices/remotion-interactivity/assets/remotion-icon.png +0 -0
  445. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/REFERENCE.md +36 -0
  446. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/agents/openai.yaml +7 -0
  447. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/assets/remotion-icon.png +0 -0
  448. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  449. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  450. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  451. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  452. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  453. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  454. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  455. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  456. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  457. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  458. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  459. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  460. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  461. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  462. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  463. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  464. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  465. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  466. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  467. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  468. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  469. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  470. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  471. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  472. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  473. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  474. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  475. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  476. package/templates/default/.claude/skills/remotion-best-practices/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  477. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/3d.md +86 -0
  478. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/REFERENCE.md +365 -0
  479. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/agents/openai.yaml +7 -0
  480. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/assets/remotion-icon.png +0 -0
  481. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/audio-visualization.md +198 -0
  482. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/audio.md +171 -0
  483. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/calculate-metadata.md +136 -0
  484. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/compositions.md +117 -0
  485. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/cropping.md +34 -0
  486. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/effects.md +251 -0
  487. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/embedding-videos.md +173 -0
  488. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/ffmpeg.md +38 -0
  489. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/gifs.md +187 -0
  490. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/google-fonts.md +76 -0
  491. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/html-in-canvas.md +128 -0
  492. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/images.md +73 -0
  493. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/light-leaks.md +106 -0
  494. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/local-fonts.md +69 -0
  495. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/lottie.md +73 -0
  496. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/measuring-dom-nodes.md +38 -0
  497. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/measuring-text.md +146 -0
  498. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/multi-scene-video.md +81 -0
  499. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/parameters.md +111 -0
  500. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/REFERENCE.md +36 -0
  501. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  502. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  503. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  504. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  505. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  506. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  507. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  508. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  509. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  510. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  511. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  512. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  513. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  514. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  515. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  516. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  517. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  518. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  519. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  520. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  521. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  522. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  523. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  524. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  525. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  526. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  527. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  528. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  529. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  530. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  531. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  532. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/sequencing.md +169 -0
  533. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/sfx.md +51 -0
  534. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/silence-detection.md +71 -0
  535. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/text-highlights.md +56 -0
  536. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/timing.md +111 -0
  537. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/transitions.md +239 -0
  538. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/video-editing.md +90 -0
  539. package/templates/default/.claude/skills/remotion-best-practices/remotion-markup/voiceover.md +99 -0
  540. package/templates/default/.claude/skills/remotion-best-practices/remotion-multimedia/REFERENCE.md +20 -0
  541. package/templates/default/.claude/skills/remotion-best-practices/remotion-multimedia/agents/openai.yaml +7 -0
  542. package/templates/default/.claude/skills/remotion-best-practices/remotion-multimedia/assets/remotion-icon.png +0 -0
  543. package/templates/default/.claude/skills/remotion-best-practices/remotion-multimedia/get-audio-duration.md +56 -0
  544. package/templates/default/.claude/skills/remotion-best-practices/remotion-multimedia/get-video-dimensions.md +66 -0
  545. package/templates/default/.claude/skills/remotion-best-practices/remotion-multimedia/get-video-duration.md +58 -0
  546. package/templates/default/.claude/skills/remotion-best-practices/remotion-render/REFERENCE.md +27 -0
  547. package/templates/default/.claude/skills/remotion-best-practices/remotion-render/agents/openai.yaml +7 -0
  548. package/templates/default/.claude/skills/remotion-best-practices/remotion-render/assets/remotion-icon.png +0 -0
  549. package/templates/default/.claude/skills/remotion-best-practices/remotion-render/transparent-videos.md +106 -0
  550. package/templates/default/.claude/skills/remotion-best-practices/remotion-saas/REFERENCE.md +33 -0
  551. package/templates/default/.claude/skills/remotion-best-practices/remotion-saas/agents/openai.yaml +7 -0
  552. package/templates/default/.claude/skills/remotion-best-practices/remotion-saas/assets/remotion-icon.png +0 -0
  553. package/templates/default/.claude/skills/remotion-best-practices/remotion-saas/framework.md +21 -0
  554. package/templates/default/.claude/skills/remotion-best-practices/remotion-saas/player.md +33 -0
  555. package/templates/default/.claude/skills/remotion-best-practices/remotion-saas/rendering.md +69 -0
  556. package/templates/default/.claude/skills/remotion-best-practices/remotion-studio/REFERENCE.md +24 -0
  557. package/templates/default/.claude/skills/remotion-best-practices/remotion-studio/agents/openai.yaml +7 -0
  558. package/templates/default/.claude/skills/remotion-best-practices/remotion-studio/assets/remotion-icon.png +0 -0
  559. package/templates/default/.claude/skills/remotion-best-practices/remotion-upgrade/REFERENCE.md +31 -0
  560. package/templates/default/.claude/skills/remotion-best-practices/remotion-upgrade/agents/openai.yaml +7 -0
  561. package/templates/default/.claude/skills/remotion-best-practices/remotion-upgrade/assets/remotion-icon.png +0 -0
  562. package/templates/default/.claude/skills/remotion-captions/SKILL.md +36 -0
  563. package/templates/default/.claude/skills/remotion-captions/agents/openai.yaml +7 -0
  564. package/templates/default/.claude/skills/remotion-captions/assets/remotion-icon.png +0 -0
  565. package/templates/default/.claude/skills/remotion-captions/display-captions.md +190 -0
  566. package/templates/default/.claude/skills/remotion-captions/import-srt-captions.md +73 -0
  567. package/templates/default/.claude/skills/remotion-captions/transcribe-captions.md +70 -0
  568. package/templates/default/.claude/skills/remotion-create/SKILL.md +68 -0
  569. package/templates/default/.claude/skills/remotion-create/agents/openai.yaml +7 -0
  570. package/templates/default/.claude/skills/remotion-create/assets/remotion-icon.png +0 -0
  571. package/templates/default/.claude/skills/remotion-create/tailwind.md +11 -0
  572. package/templates/default/.claude/skills/remotion-create/video-layout.md +9 -0
  573. package/templates/default/.claude/skills/remotion-docs/SKILL.md +46 -0
  574. package/templates/default/.claude/skills/remotion-docs/agents/openai.yaml +7 -0
  575. package/templates/default/.claude/skills/remotion-docs/assets/remotion-icon.png +0 -0
  576. package/templates/default/.claude/skills/remotion-interactivity/SKILL.md +247 -0
  577. package/templates/default/.claude/skills/remotion-interactivity/agents/openai.yaml +7 -0
  578. package/templates/default/.claude/skills/remotion-interactivity/assets/remotion-icon.png +0 -0
  579. package/templates/default/.claude/skills/remotion-maps/SKILL.md +36 -0
  580. package/templates/default/.claude/skills/remotion-maps/agents/openai.yaml +7 -0
  581. package/templates/default/.claude/skills/remotion-maps/assets/remotion-icon.png +0 -0
  582. package/templates/default/.claude/skills/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  583. package/templates/default/.claude/skills/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  584. package/templates/default/.claude/skills/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  585. package/templates/default/.claude/skills/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  586. package/templates/default/.claude/skills/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  587. package/templates/default/.claude/skills/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  588. package/templates/default/.claude/skills/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  589. package/templates/default/.claude/skills/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  590. package/templates/default/.claude/skills/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  591. package/templates/default/.claude/skills/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  592. package/templates/default/.claude/skills/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  593. package/templates/default/.claude/skills/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  594. package/templates/default/.claude/skills/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  595. package/templates/default/.claude/skills/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  596. package/templates/default/.claude/skills/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  597. package/templates/default/.claude/skills/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  598. package/templates/default/.claude/skills/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  599. package/templates/default/.claude/skills/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  600. package/templates/default/.claude/skills/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  601. package/templates/default/.claude/skills/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  602. package/templates/default/.claude/skills/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  603. package/templates/default/.claude/skills/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  604. package/templates/default/.claude/skills/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  605. package/templates/default/.claude/skills/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  606. package/templates/default/.claude/skills/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  607. package/templates/default/.claude/skills/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  608. package/templates/default/.claude/skills/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  609. package/templates/default/.claude/skills/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  610. package/templates/default/.claude/skills/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  611. package/templates/default/.claude/skills/remotion-markup/3d.md +86 -0
  612. package/templates/default/.claude/skills/remotion-markup/SKILL.md +365 -0
  613. package/templates/default/.claude/skills/remotion-markup/agents/openai.yaml +7 -0
  614. package/templates/default/.claude/skills/remotion-markup/assets/remotion-icon.png +0 -0
  615. package/templates/default/.claude/skills/remotion-markup/audio-visualization.md +198 -0
  616. package/templates/default/.claude/skills/remotion-markup/audio.md +171 -0
  617. package/templates/default/.claude/skills/remotion-markup/calculate-metadata.md +136 -0
  618. package/templates/default/.claude/skills/remotion-markup/compositions.md +117 -0
  619. package/templates/default/.claude/skills/remotion-markup/cropping.md +34 -0
  620. package/templates/default/.claude/skills/remotion-markup/effects.md +251 -0
  621. package/templates/default/.claude/skills/remotion-markup/embedding-videos.md +173 -0
  622. package/templates/default/.claude/skills/remotion-markup/ffmpeg.md +38 -0
  623. package/templates/default/.claude/skills/remotion-markup/gifs.md +187 -0
  624. package/templates/default/.claude/skills/remotion-markup/google-fonts.md +76 -0
  625. package/templates/default/.claude/skills/remotion-markup/html-in-canvas.md +128 -0
  626. package/templates/default/.claude/skills/remotion-markup/images.md +73 -0
  627. package/templates/default/.claude/skills/remotion-markup/light-leaks.md +106 -0
  628. package/templates/default/.claude/skills/remotion-markup/local-fonts.md +69 -0
  629. package/templates/default/.claude/skills/remotion-markup/lottie.md +73 -0
  630. package/templates/default/.claude/skills/remotion-markup/measuring-dom-nodes.md +38 -0
  631. package/templates/default/.claude/skills/remotion-markup/measuring-text.md +146 -0
  632. package/templates/default/.claude/skills/remotion-markup/multi-scene-video.md +81 -0
  633. package/templates/default/.claude/skills/remotion-markup/parameters.md +111 -0
  634. package/templates/default/.claude/skills/remotion-markup/remotion-maps/REFERENCE.md +36 -0
  635. package/templates/default/.claude/skills/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  636. package/templates/default/.claude/skills/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  637. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  638. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  639. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  640. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  641. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  642. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  643. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  644. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  645. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  646. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  647. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  648. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  649. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  650. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  651. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  652. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  653. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  654. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  655. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  656. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  657. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  658. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  659. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  660. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  661. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  662. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  663. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  664. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  665. package/templates/default/.claude/skills/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  666. package/templates/default/.claude/skills/remotion-markup/sequencing.md +169 -0
  667. package/templates/default/.claude/skills/remotion-markup/sfx.md +51 -0
  668. package/templates/default/.claude/skills/remotion-markup/silence-detection.md +71 -0
  669. package/templates/default/.claude/skills/remotion-markup/text-highlights.md +56 -0
  670. package/templates/default/.claude/skills/remotion-markup/timing.md +111 -0
  671. package/templates/default/.claude/skills/remotion-markup/transitions.md +239 -0
  672. package/templates/default/.claude/skills/remotion-markup/video-editing.md +90 -0
  673. package/templates/default/.claude/skills/remotion-markup/voiceover.md +99 -0
  674. package/templates/default/.claude/skills/remotion-multimedia/SKILL.md +20 -0
  675. package/templates/default/.claude/skills/remotion-multimedia/agents/openai.yaml +7 -0
  676. package/templates/default/.claude/skills/remotion-multimedia/assets/remotion-icon.png +0 -0
  677. package/templates/default/.claude/skills/remotion-multimedia/get-audio-duration.md +56 -0
  678. package/templates/default/.claude/skills/remotion-multimedia/get-video-dimensions.md +66 -0
  679. package/templates/default/.claude/skills/remotion-multimedia/get-video-duration.md +58 -0
  680. package/templates/default/.claude/skills/remotion-render/SKILL.md +27 -0
  681. package/templates/default/.claude/skills/remotion-render/agents/openai.yaml +7 -0
  682. package/templates/default/.claude/skills/remotion-render/assets/remotion-icon.png +0 -0
  683. package/templates/default/.claude/skills/remotion-render/transparent-videos.md +106 -0
  684. package/templates/default/.claude/skills/remotion-saas/SKILL.md +33 -0
  685. package/templates/default/.claude/skills/remotion-saas/agents/openai.yaml +7 -0
  686. package/templates/default/.claude/skills/remotion-saas/assets/remotion-icon.png +0 -0
  687. package/templates/default/.claude/skills/remotion-saas/framework.md +21 -0
  688. package/templates/default/.claude/skills/remotion-saas/player.md +33 -0
  689. package/templates/default/.claude/skills/remotion-saas/rendering.md +69 -0
  690. package/templates/default/.claude/skills/remotion-studio/SKILL.md +24 -0
  691. package/templates/default/.claude/skills/remotion-studio/agents/openai.yaml +7 -0
  692. package/templates/default/.claude/skills/remotion-studio/assets/remotion-icon.png +0 -0
  693. package/templates/default/.claude/skills/remotion-upgrade/SKILL.md +31 -0
  694. package/templates/default/.claude/skills/remotion-upgrade/agents/openai.yaml +7 -0
  695. package/templates/default/.claude/skills/remotion-upgrade/assets/remotion-icon.png +0 -0
  696. package/templates/default/.cursor/skills/remotion-best-practices/SKILL.md +59 -0
  697. package/templates/default/.cursor/skills/remotion-best-practices/agents/openai.yaml +7 -0
  698. package/templates/default/.cursor/skills/remotion-best-practices/assets/remotion-icon.png +0 -0
  699. package/templates/default/.cursor/skills/remotion-best-practices/remotion-captions/REFERENCE.md +36 -0
  700. package/templates/default/.cursor/skills/remotion-best-practices/remotion-captions/agents/openai.yaml +7 -0
  701. package/templates/default/.cursor/skills/remotion-best-practices/remotion-captions/assets/remotion-icon.png +0 -0
  702. package/templates/default/.cursor/skills/remotion-best-practices/remotion-captions/display-captions.md +190 -0
  703. package/templates/default/.cursor/skills/remotion-best-practices/remotion-captions/import-srt-captions.md +73 -0
  704. package/templates/default/.cursor/skills/remotion-best-practices/remotion-captions/transcribe-captions.md +70 -0
  705. package/templates/default/.cursor/skills/remotion-best-practices/remotion-create/REFERENCE.md +68 -0
  706. package/templates/default/.cursor/skills/remotion-best-practices/remotion-create/agents/openai.yaml +7 -0
  707. package/templates/default/.cursor/skills/remotion-best-practices/remotion-create/assets/remotion-icon.png +0 -0
  708. package/templates/default/.cursor/skills/remotion-best-practices/remotion-create/tailwind.md +11 -0
  709. package/templates/default/.cursor/skills/remotion-best-practices/remotion-create/video-layout.md +9 -0
  710. package/templates/default/.cursor/skills/remotion-best-practices/remotion-docs/REFERENCE.md +46 -0
  711. package/templates/default/.cursor/skills/remotion-best-practices/remotion-docs/agents/openai.yaml +7 -0
  712. package/templates/default/.cursor/skills/remotion-best-practices/remotion-docs/assets/remotion-icon.png +0 -0
  713. package/templates/default/.cursor/skills/remotion-best-practices/remotion-interactivity/REFERENCE.md +247 -0
  714. package/templates/default/.cursor/skills/remotion-best-practices/remotion-interactivity/agents/openai.yaml +7 -0
  715. package/templates/default/.cursor/skills/remotion-best-practices/remotion-interactivity/assets/remotion-icon.png +0 -0
  716. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/REFERENCE.md +36 -0
  717. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/agents/openai.yaml +7 -0
  718. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/assets/remotion-icon.png +0 -0
  719. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  720. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  721. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  722. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  723. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  724. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  725. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  726. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  727. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  728. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  729. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  730. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  731. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  732. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  733. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  734. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  735. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  736. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  737. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  738. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  739. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  740. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  741. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  742. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  743. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  744. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  745. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  746. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  747. package/templates/default/.cursor/skills/remotion-best-practices/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  748. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/3d.md +86 -0
  749. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/REFERENCE.md +365 -0
  750. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/agents/openai.yaml +7 -0
  751. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/assets/remotion-icon.png +0 -0
  752. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/audio-visualization.md +198 -0
  753. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/audio.md +171 -0
  754. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/calculate-metadata.md +136 -0
  755. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/compositions.md +117 -0
  756. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/cropping.md +34 -0
  757. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/effects.md +251 -0
  758. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/embedding-videos.md +173 -0
  759. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/ffmpeg.md +38 -0
  760. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/gifs.md +187 -0
  761. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/google-fonts.md +76 -0
  762. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/html-in-canvas.md +128 -0
  763. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/images.md +73 -0
  764. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/light-leaks.md +106 -0
  765. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/local-fonts.md +69 -0
  766. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/lottie.md +73 -0
  767. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/measuring-dom-nodes.md +38 -0
  768. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/measuring-text.md +146 -0
  769. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/multi-scene-video.md +81 -0
  770. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/parameters.md +111 -0
  771. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/REFERENCE.md +36 -0
  772. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  773. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  774. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  775. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  776. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  777. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  778. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  779. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  780. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  781. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  782. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  783. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  784. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  785. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  786. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  787. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  788. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  789. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  790. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  791. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  792. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  793. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  794. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  795. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  796. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  797. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  798. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  799. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  800. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  801. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  802. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  803. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/sequencing.md +169 -0
  804. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/sfx.md +51 -0
  805. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/silence-detection.md +71 -0
  806. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/text-highlights.md +56 -0
  807. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/timing.md +111 -0
  808. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/transitions.md +239 -0
  809. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/video-editing.md +90 -0
  810. package/templates/default/.cursor/skills/remotion-best-practices/remotion-markup/voiceover.md +99 -0
  811. package/templates/default/.cursor/skills/remotion-best-practices/remotion-multimedia/REFERENCE.md +20 -0
  812. package/templates/default/.cursor/skills/remotion-best-practices/remotion-multimedia/agents/openai.yaml +7 -0
  813. package/templates/default/.cursor/skills/remotion-best-practices/remotion-multimedia/assets/remotion-icon.png +0 -0
  814. package/templates/default/.cursor/skills/remotion-best-practices/remotion-multimedia/get-audio-duration.md +56 -0
  815. package/templates/default/.cursor/skills/remotion-best-practices/remotion-multimedia/get-video-dimensions.md +66 -0
  816. package/templates/default/.cursor/skills/remotion-best-practices/remotion-multimedia/get-video-duration.md +58 -0
  817. package/templates/default/.cursor/skills/remotion-best-practices/remotion-render/REFERENCE.md +27 -0
  818. package/templates/default/.cursor/skills/remotion-best-practices/remotion-render/agents/openai.yaml +7 -0
  819. package/templates/default/.cursor/skills/remotion-best-practices/remotion-render/assets/remotion-icon.png +0 -0
  820. package/templates/default/.cursor/skills/remotion-best-practices/remotion-render/transparent-videos.md +106 -0
  821. package/templates/default/.cursor/skills/remotion-best-practices/remotion-saas/REFERENCE.md +33 -0
  822. package/templates/default/.cursor/skills/remotion-best-practices/remotion-saas/agents/openai.yaml +7 -0
  823. package/templates/default/.cursor/skills/remotion-best-practices/remotion-saas/assets/remotion-icon.png +0 -0
  824. package/templates/default/.cursor/skills/remotion-best-practices/remotion-saas/framework.md +21 -0
  825. package/templates/default/.cursor/skills/remotion-best-practices/remotion-saas/player.md +33 -0
  826. package/templates/default/.cursor/skills/remotion-best-practices/remotion-saas/rendering.md +69 -0
  827. package/templates/default/.cursor/skills/remotion-best-practices/remotion-studio/REFERENCE.md +24 -0
  828. package/templates/default/.cursor/skills/remotion-best-practices/remotion-studio/agents/openai.yaml +7 -0
  829. package/templates/default/.cursor/skills/remotion-best-practices/remotion-studio/assets/remotion-icon.png +0 -0
  830. package/templates/default/.cursor/skills/remotion-best-practices/remotion-upgrade/REFERENCE.md +31 -0
  831. package/templates/default/.cursor/skills/remotion-best-practices/remotion-upgrade/agents/openai.yaml +7 -0
  832. package/templates/default/.cursor/skills/remotion-best-practices/remotion-upgrade/assets/remotion-icon.png +0 -0
  833. package/templates/default/.cursor/skills/remotion-captions/SKILL.md +36 -0
  834. package/templates/default/.cursor/skills/remotion-captions/agents/openai.yaml +7 -0
  835. package/templates/default/.cursor/skills/remotion-captions/assets/remotion-icon.png +0 -0
  836. package/templates/default/.cursor/skills/remotion-captions/display-captions.md +190 -0
  837. package/templates/default/.cursor/skills/remotion-captions/import-srt-captions.md +73 -0
  838. package/templates/default/.cursor/skills/remotion-captions/transcribe-captions.md +70 -0
  839. package/templates/default/.cursor/skills/remotion-create/SKILL.md +68 -0
  840. package/templates/default/.cursor/skills/remotion-create/agents/openai.yaml +7 -0
  841. package/templates/default/.cursor/skills/remotion-create/assets/remotion-icon.png +0 -0
  842. package/templates/default/.cursor/skills/remotion-create/tailwind.md +11 -0
  843. package/templates/default/.cursor/skills/remotion-create/video-layout.md +9 -0
  844. package/templates/default/.cursor/skills/remotion-docs/SKILL.md +46 -0
  845. package/templates/default/.cursor/skills/remotion-docs/agents/openai.yaml +7 -0
  846. package/templates/default/.cursor/skills/remotion-docs/assets/remotion-icon.png +0 -0
  847. package/templates/default/.cursor/skills/remotion-interactivity/SKILL.md +247 -0
  848. package/templates/default/.cursor/skills/remotion-interactivity/agents/openai.yaml +7 -0
  849. package/templates/default/.cursor/skills/remotion-interactivity/assets/remotion-icon.png +0 -0
  850. package/templates/default/.cursor/skills/remotion-maps/SKILL.md +36 -0
  851. package/templates/default/.cursor/skills/remotion-maps/agents/openai.yaml +7 -0
  852. package/templates/default/.cursor/skills/remotion-maps/assets/remotion-icon.png +0 -0
  853. package/templates/default/.cursor/skills/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  854. package/templates/default/.cursor/skills/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  855. package/templates/default/.cursor/skills/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  856. package/templates/default/.cursor/skills/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  857. package/templates/default/.cursor/skills/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  858. package/templates/default/.cursor/skills/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  859. package/templates/default/.cursor/skills/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  860. package/templates/default/.cursor/skills/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  861. package/templates/default/.cursor/skills/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  862. package/templates/default/.cursor/skills/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  863. package/templates/default/.cursor/skills/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  864. package/templates/default/.cursor/skills/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  865. package/templates/default/.cursor/skills/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  866. package/templates/default/.cursor/skills/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  867. package/templates/default/.cursor/skills/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  868. package/templates/default/.cursor/skills/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  869. package/templates/default/.cursor/skills/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  870. package/templates/default/.cursor/skills/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  871. package/templates/default/.cursor/skills/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  872. package/templates/default/.cursor/skills/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  873. package/templates/default/.cursor/skills/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  874. package/templates/default/.cursor/skills/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  875. package/templates/default/.cursor/skills/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  876. package/templates/default/.cursor/skills/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  877. package/templates/default/.cursor/skills/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  878. package/templates/default/.cursor/skills/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  879. package/templates/default/.cursor/skills/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  880. package/templates/default/.cursor/skills/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  881. package/templates/default/.cursor/skills/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  882. package/templates/default/.cursor/skills/remotion-markup/3d.md +86 -0
  883. package/templates/default/.cursor/skills/remotion-markup/SKILL.md +365 -0
  884. package/templates/default/.cursor/skills/remotion-markup/agents/openai.yaml +7 -0
  885. package/templates/default/.cursor/skills/remotion-markup/assets/remotion-icon.png +0 -0
  886. package/templates/default/.cursor/skills/remotion-markup/audio-visualization.md +198 -0
  887. package/templates/default/.cursor/skills/remotion-markup/audio.md +171 -0
  888. package/templates/default/.cursor/skills/remotion-markup/calculate-metadata.md +136 -0
  889. package/templates/default/.cursor/skills/remotion-markup/compositions.md +117 -0
  890. package/templates/default/.cursor/skills/remotion-markup/cropping.md +34 -0
  891. package/templates/default/.cursor/skills/remotion-markup/effects.md +251 -0
  892. package/templates/default/.cursor/skills/remotion-markup/embedding-videos.md +173 -0
  893. package/templates/default/.cursor/skills/remotion-markup/ffmpeg.md +38 -0
  894. package/templates/default/.cursor/skills/remotion-markup/gifs.md +187 -0
  895. package/templates/default/.cursor/skills/remotion-markup/google-fonts.md +76 -0
  896. package/templates/default/.cursor/skills/remotion-markup/html-in-canvas.md +128 -0
  897. package/templates/default/.cursor/skills/remotion-markup/images.md +73 -0
  898. package/templates/default/.cursor/skills/remotion-markup/light-leaks.md +106 -0
  899. package/templates/default/.cursor/skills/remotion-markup/local-fonts.md +69 -0
  900. package/templates/default/.cursor/skills/remotion-markup/lottie.md +73 -0
  901. package/templates/default/.cursor/skills/remotion-markup/measuring-dom-nodes.md +38 -0
  902. package/templates/default/.cursor/skills/remotion-markup/measuring-text.md +146 -0
  903. package/templates/default/.cursor/skills/remotion-markup/multi-scene-video.md +81 -0
  904. package/templates/default/.cursor/skills/remotion-markup/parameters.md +111 -0
  905. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/REFERENCE.md +36 -0
  906. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  907. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  908. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  909. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  910. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  911. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  912. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  913. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  914. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  915. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  916. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  917. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  918. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  919. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  920. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  921. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  922. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  923. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  924. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  925. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  926. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  927. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  928. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  929. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  930. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  931. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  932. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  933. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  934. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  935. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  936. package/templates/default/.cursor/skills/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  937. package/templates/default/.cursor/skills/remotion-markup/sequencing.md +169 -0
  938. package/templates/default/.cursor/skills/remotion-markup/sfx.md +51 -0
  939. package/templates/default/.cursor/skills/remotion-markup/silence-detection.md +71 -0
  940. package/templates/default/.cursor/skills/remotion-markup/text-highlights.md +56 -0
  941. package/templates/default/.cursor/skills/remotion-markup/timing.md +111 -0
  942. package/templates/default/.cursor/skills/remotion-markup/transitions.md +239 -0
  943. package/templates/default/.cursor/skills/remotion-markup/video-editing.md +90 -0
  944. package/templates/default/.cursor/skills/remotion-markup/voiceover.md +99 -0
  945. package/templates/default/.cursor/skills/remotion-multimedia/SKILL.md +20 -0
  946. package/templates/default/.cursor/skills/remotion-multimedia/agents/openai.yaml +7 -0
  947. package/templates/default/.cursor/skills/remotion-multimedia/assets/remotion-icon.png +0 -0
  948. package/templates/default/.cursor/skills/remotion-multimedia/get-audio-duration.md +56 -0
  949. package/templates/default/.cursor/skills/remotion-multimedia/get-video-dimensions.md +66 -0
  950. package/templates/default/.cursor/skills/remotion-multimedia/get-video-duration.md +58 -0
  951. package/templates/default/.cursor/skills/remotion-render/SKILL.md +27 -0
  952. package/templates/default/.cursor/skills/remotion-render/agents/openai.yaml +7 -0
  953. package/templates/default/.cursor/skills/remotion-render/assets/remotion-icon.png +0 -0
  954. package/templates/default/.cursor/skills/remotion-render/transparent-videos.md +106 -0
  955. package/templates/default/.cursor/skills/remotion-saas/SKILL.md +33 -0
  956. package/templates/default/.cursor/skills/remotion-saas/agents/openai.yaml +7 -0
  957. package/templates/default/.cursor/skills/remotion-saas/assets/remotion-icon.png +0 -0
  958. package/templates/default/.cursor/skills/remotion-saas/framework.md +21 -0
  959. package/templates/default/.cursor/skills/remotion-saas/player.md +33 -0
  960. package/templates/default/.cursor/skills/remotion-saas/rendering.md +69 -0
  961. package/templates/default/.cursor/skills/remotion-studio/SKILL.md +24 -0
  962. package/templates/default/.cursor/skills/remotion-studio/agents/openai.yaml +7 -0
  963. package/templates/default/.cursor/skills/remotion-studio/assets/remotion-icon.png +0 -0
  964. package/templates/default/.cursor/skills/remotion-upgrade/SKILL.md +31 -0
  965. package/templates/default/.cursor/skills/remotion-upgrade/agents/openai.yaml +7 -0
  966. package/templates/default/.cursor/skills/remotion-upgrade/assets/remotion-icon.png +0 -0
  967. package/templates/default/.github/skills/remotion-best-practices/SKILL.md +59 -0
  968. package/templates/default/.github/skills/remotion-best-practices/agents/openai.yaml +7 -0
  969. package/templates/default/.github/skills/remotion-best-practices/assets/remotion-icon.png +0 -0
  970. package/templates/default/.github/skills/remotion-best-practices/remotion-captions/REFERENCE.md +36 -0
  971. package/templates/default/.github/skills/remotion-best-practices/remotion-captions/agents/openai.yaml +7 -0
  972. package/templates/default/.github/skills/remotion-best-practices/remotion-captions/assets/remotion-icon.png +0 -0
  973. package/templates/default/.github/skills/remotion-best-practices/remotion-captions/display-captions.md +190 -0
  974. package/templates/default/.github/skills/remotion-best-practices/remotion-captions/import-srt-captions.md +73 -0
  975. package/templates/default/.github/skills/remotion-best-practices/remotion-captions/transcribe-captions.md +70 -0
  976. package/templates/default/.github/skills/remotion-best-practices/remotion-create/REFERENCE.md +68 -0
  977. package/templates/default/.github/skills/remotion-best-practices/remotion-create/agents/openai.yaml +7 -0
  978. package/templates/default/.github/skills/remotion-best-practices/remotion-create/assets/remotion-icon.png +0 -0
  979. package/templates/default/.github/skills/remotion-best-practices/remotion-create/tailwind.md +11 -0
  980. package/templates/default/.github/skills/remotion-best-practices/remotion-create/video-layout.md +9 -0
  981. package/templates/default/.github/skills/remotion-best-practices/remotion-docs/REFERENCE.md +46 -0
  982. package/templates/default/.github/skills/remotion-best-practices/remotion-docs/agents/openai.yaml +7 -0
  983. package/templates/default/.github/skills/remotion-best-practices/remotion-docs/assets/remotion-icon.png +0 -0
  984. package/templates/default/.github/skills/remotion-best-practices/remotion-interactivity/REFERENCE.md +247 -0
  985. package/templates/default/.github/skills/remotion-best-practices/remotion-interactivity/agents/openai.yaml +7 -0
  986. package/templates/default/.github/skills/remotion-best-practices/remotion-interactivity/assets/remotion-icon.png +0 -0
  987. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/REFERENCE.md +36 -0
  988. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/agents/openai.yaml +7 -0
  989. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/assets/remotion-icon.png +0 -0
  990. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  991. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  992. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  993. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  994. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  995. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  996. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  997. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  998. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  999. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  1000. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  1001. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  1002. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  1003. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  1004. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  1005. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  1006. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  1007. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  1008. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  1009. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  1010. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  1011. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  1012. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  1013. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  1014. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  1015. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  1016. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  1017. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  1018. package/templates/default/.github/skills/remotion-best-practices/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  1019. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/3d.md +86 -0
  1020. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/REFERENCE.md +365 -0
  1021. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/agents/openai.yaml +7 -0
  1022. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/assets/remotion-icon.png +0 -0
  1023. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/audio-visualization.md +198 -0
  1024. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/audio.md +171 -0
  1025. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/calculate-metadata.md +136 -0
  1026. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/compositions.md +117 -0
  1027. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/cropping.md +34 -0
  1028. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/effects.md +251 -0
  1029. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/embedding-videos.md +173 -0
  1030. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/ffmpeg.md +38 -0
  1031. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/gifs.md +187 -0
  1032. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/google-fonts.md +76 -0
  1033. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/html-in-canvas.md +128 -0
  1034. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/images.md +73 -0
  1035. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/light-leaks.md +106 -0
  1036. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/local-fonts.md +69 -0
  1037. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/lottie.md +73 -0
  1038. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/measuring-dom-nodes.md +38 -0
  1039. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/measuring-text.md +146 -0
  1040. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/multi-scene-video.md +81 -0
  1041. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/parameters.md +111 -0
  1042. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/REFERENCE.md +36 -0
  1043. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  1044. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  1045. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  1046. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  1047. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  1048. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  1049. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  1050. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  1051. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  1052. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  1053. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  1054. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  1055. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  1056. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  1057. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  1058. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  1059. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  1060. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  1061. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  1062. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  1063. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  1064. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  1065. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  1066. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  1067. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  1068. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  1069. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  1070. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  1071. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  1072. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  1073. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  1074. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/sequencing.md +169 -0
  1075. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/sfx.md +51 -0
  1076. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/silence-detection.md +71 -0
  1077. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/text-highlights.md +56 -0
  1078. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/timing.md +111 -0
  1079. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/transitions.md +239 -0
  1080. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/video-editing.md +90 -0
  1081. package/templates/default/.github/skills/remotion-best-practices/remotion-markup/voiceover.md +99 -0
  1082. package/templates/default/.github/skills/remotion-best-practices/remotion-multimedia/REFERENCE.md +20 -0
  1083. package/templates/default/.github/skills/remotion-best-practices/remotion-multimedia/agents/openai.yaml +7 -0
  1084. package/templates/default/.github/skills/remotion-best-practices/remotion-multimedia/assets/remotion-icon.png +0 -0
  1085. package/templates/default/.github/skills/remotion-best-practices/remotion-multimedia/get-audio-duration.md +56 -0
  1086. package/templates/default/.github/skills/remotion-best-practices/remotion-multimedia/get-video-dimensions.md +66 -0
  1087. package/templates/default/.github/skills/remotion-best-practices/remotion-multimedia/get-video-duration.md +58 -0
  1088. package/templates/default/.github/skills/remotion-best-practices/remotion-render/REFERENCE.md +27 -0
  1089. package/templates/default/.github/skills/remotion-best-practices/remotion-render/agents/openai.yaml +7 -0
  1090. package/templates/default/.github/skills/remotion-best-practices/remotion-render/assets/remotion-icon.png +0 -0
  1091. package/templates/default/.github/skills/remotion-best-practices/remotion-render/transparent-videos.md +106 -0
  1092. package/templates/default/.github/skills/remotion-best-practices/remotion-saas/REFERENCE.md +33 -0
  1093. package/templates/default/.github/skills/remotion-best-practices/remotion-saas/agents/openai.yaml +7 -0
  1094. package/templates/default/.github/skills/remotion-best-practices/remotion-saas/assets/remotion-icon.png +0 -0
  1095. package/templates/default/.github/skills/remotion-best-practices/remotion-saas/framework.md +21 -0
  1096. package/templates/default/.github/skills/remotion-best-practices/remotion-saas/player.md +33 -0
  1097. package/templates/default/.github/skills/remotion-best-practices/remotion-saas/rendering.md +69 -0
  1098. package/templates/default/.github/skills/remotion-best-practices/remotion-studio/REFERENCE.md +24 -0
  1099. package/templates/default/.github/skills/remotion-best-practices/remotion-studio/agents/openai.yaml +7 -0
  1100. package/templates/default/.github/skills/remotion-best-practices/remotion-studio/assets/remotion-icon.png +0 -0
  1101. package/templates/default/.github/skills/remotion-best-practices/remotion-upgrade/REFERENCE.md +31 -0
  1102. package/templates/default/.github/skills/remotion-best-practices/remotion-upgrade/agents/openai.yaml +7 -0
  1103. package/templates/default/.github/skills/remotion-best-practices/remotion-upgrade/assets/remotion-icon.png +0 -0
  1104. package/templates/default/.github/skills/remotion-captions/SKILL.md +36 -0
  1105. package/templates/default/.github/skills/remotion-captions/agents/openai.yaml +7 -0
  1106. package/templates/default/.github/skills/remotion-captions/assets/remotion-icon.png +0 -0
  1107. package/templates/default/.github/skills/remotion-captions/display-captions.md +190 -0
  1108. package/templates/default/.github/skills/remotion-captions/import-srt-captions.md +73 -0
  1109. package/templates/default/.github/skills/remotion-captions/transcribe-captions.md +70 -0
  1110. package/templates/default/.github/skills/remotion-create/SKILL.md +68 -0
  1111. package/templates/default/.github/skills/remotion-create/agents/openai.yaml +7 -0
  1112. package/templates/default/.github/skills/remotion-create/assets/remotion-icon.png +0 -0
  1113. package/templates/default/.github/skills/remotion-create/tailwind.md +11 -0
  1114. package/templates/default/.github/skills/remotion-create/video-layout.md +9 -0
  1115. package/templates/default/.github/skills/remotion-docs/SKILL.md +46 -0
  1116. package/templates/default/.github/skills/remotion-docs/agents/openai.yaml +7 -0
  1117. package/templates/default/.github/skills/remotion-docs/assets/remotion-icon.png +0 -0
  1118. package/templates/default/.github/skills/remotion-interactivity/SKILL.md +247 -0
  1119. package/templates/default/.github/skills/remotion-interactivity/agents/openai.yaml +7 -0
  1120. package/templates/default/.github/skills/remotion-interactivity/assets/remotion-icon.png +0 -0
  1121. package/templates/default/.github/skills/remotion-maps/SKILL.md +36 -0
  1122. package/templates/default/.github/skills/remotion-maps/agents/openai.yaml +7 -0
  1123. package/templates/default/.github/skills/remotion-maps/assets/remotion-icon.png +0 -0
  1124. package/templates/default/.github/skills/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  1125. package/templates/default/.github/skills/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  1126. package/templates/default/.github/skills/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  1127. package/templates/default/.github/skills/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  1128. package/templates/default/.github/skills/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  1129. package/templates/default/.github/skills/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  1130. package/templates/default/.github/skills/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  1131. package/templates/default/.github/skills/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  1132. package/templates/default/.github/skills/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  1133. package/templates/default/.github/skills/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  1134. package/templates/default/.github/skills/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  1135. package/templates/default/.github/skills/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  1136. package/templates/default/.github/skills/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  1137. package/templates/default/.github/skills/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  1138. package/templates/default/.github/skills/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  1139. package/templates/default/.github/skills/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  1140. package/templates/default/.github/skills/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  1141. package/templates/default/.github/skills/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  1142. package/templates/default/.github/skills/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  1143. package/templates/default/.github/skills/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  1144. package/templates/default/.github/skills/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  1145. package/templates/default/.github/skills/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  1146. package/templates/default/.github/skills/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  1147. package/templates/default/.github/skills/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  1148. package/templates/default/.github/skills/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  1149. package/templates/default/.github/skills/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  1150. package/templates/default/.github/skills/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  1151. package/templates/default/.github/skills/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  1152. package/templates/default/.github/skills/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  1153. package/templates/default/.github/skills/remotion-markup/3d.md +86 -0
  1154. package/templates/default/.github/skills/remotion-markup/SKILL.md +365 -0
  1155. package/templates/default/.github/skills/remotion-markup/agents/openai.yaml +7 -0
  1156. package/templates/default/.github/skills/remotion-markup/assets/remotion-icon.png +0 -0
  1157. package/templates/default/.github/skills/remotion-markup/audio-visualization.md +198 -0
  1158. package/templates/default/.github/skills/remotion-markup/audio.md +171 -0
  1159. package/templates/default/.github/skills/remotion-markup/calculate-metadata.md +136 -0
  1160. package/templates/default/.github/skills/remotion-markup/compositions.md +117 -0
  1161. package/templates/default/.github/skills/remotion-markup/cropping.md +34 -0
  1162. package/templates/default/.github/skills/remotion-markup/effects.md +251 -0
  1163. package/templates/default/.github/skills/remotion-markup/embedding-videos.md +173 -0
  1164. package/templates/default/.github/skills/remotion-markup/ffmpeg.md +38 -0
  1165. package/templates/default/.github/skills/remotion-markup/gifs.md +187 -0
  1166. package/templates/default/.github/skills/remotion-markup/google-fonts.md +76 -0
  1167. package/templates/default/.github/skills/remotion-markup/html-in-canvas.md +128 -0
  1168. package/templates/default/.github/skills/remotion-markup/images.md +73 -0
  1169. package/templates/default/.github/skills/remotion-markup/light-leaks.md +106 -0
  1170. package/templates/default/.github/skills/remotion-markup/local-fonts.md +69 -0
  1171. package/templates/default/.github/skills/remotion-markup/lottie.md +73 -0
  1172. package/templates/default/.github/skills/remotion-markup/measuring-dom-nodes.md +38 -0
  1173. package/templates/default/.github/skills/remotion-markup/measuring-text.md +146 -0
  1174. package/templates/default/.github/skills/remotion-markup/multi-scene-video.md +81 -0
  1175. package/templates/default/.github/skills/remotion-markup/parameters.md +111 -0
  1176. package/templates/default/.github/skills/remotion-markup/remotion-maps/REFERENCE.md +36 -0
  1177. package/templates/default/.github/skills/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  1178. package/templates/default/.github/skills/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  1179. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  1180. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  1181. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  1182. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  1183. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  1184. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  1185. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  1186. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  1187. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  1188. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  1189. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  1190. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  1191. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  1192. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  1193. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  1194. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  1195. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  1196. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  1197. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  1198. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  1199. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  1200. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  1201. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  1202. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  1203. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  1204. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  1205. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  1206. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  1207. package/templates/default/.github/skills/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  1208. package/templates/default/.github/skills/remotion-markup/sequencing.md +169 -0
  1209. package/templates/default/.github/skills/remotion-markup/sfx.md +51 -0
  1210. package/templates/default/.github/skills/remotion-markup/silence-detection.md +71 -0
  1211. package/templates/default/.github/skills/remotion-markup/text-highlights.md +56 -0
  1212. package/templates/default/.github/skills/remotion-markup/timing.md +111 -0
  1213. package/templates/default/.github/skills/remotion-markup/transitions.md +239 -0
  1214. package/templates/default/.github/skills/remotion-markup/video-editing.md +90 -0
  1215. package/templates/default/.github/skills/remotion-markup/voiceover.md +99 -0
  1216. package/templates/default/.github/skills/remotion-multimedia/SKILL.md +20 -0
  1217. package/templates/default/.github/skills/remotion-multimedia/agents/openai.yaml +7 -0
  1218. package/templates/default/.github/skills/remotion-multimedia/assets/remotion-icon.png +0 -0
  1219. package/templates/default/.github/skills/remotion-multimedia/get-audio-duration.md +56 -0
  1220. package/templates/default/.github/skills/remotion-multimedia/get-video-dimensions.md +66 -0
  1221. package/templates/default/.github/skills/remotion-multimedia/get-video-duration.md +58 -0
  1222. package/templates/default/.github/skills/remotion-render/SKILL.md +27 -0
  1223. package/templates/default/.github/skills/remotion-render/agents/openai.yaml +7 -0
  1224. package/templates/default/.github/skills/remotion-render/assets/remotion-icon.png +0 -0
  1225. package/templates/default/.github/skills/remotion-render/transparent-videos.md +106 -0
  1226. package/templates/default/.github/skills/remotion-saas/SKILL.md +33 -0
  1227. package/templates/default/.github/skills/remotion-saas/agents/openai.yaml +7 -0
  1228. package/templates/default/.github/skills/remotion-saas/assets/remotion-icon.png +0 -0
  1229. package/templates/default/.github/skills/remotion-saas/framework.md +21 -0
  1230. package/templates/default/.github/skills/remotion-saas/player.md +33 -0
  1231. package/templates/default/.github/skills/remotion-saas/rendering.md +69 -0
  1232. package/templates/default/.github/skills/remotion-studio/SKILL.md +24 -0
  1233. package/templates/default/.github/skills/remotion-studio/agents/openai.yaml +7 -0
  1234. package/templates/default/.github/skills/remotion-studio/assets/remotion-icon.png +0 -0
  1235. package/templates/default/.github/skills/remotion-upgrade/SKILL.md +31 -0
  1236. package/templates/default/.github/skills/remotion-upgrade/agents/openai.yaml +7 -0
  1237. package/templates/default/.github/skills/remotion-upgrade/assets/remotion-icon.png +0 -0
  1238. package/templates/default/.github/workflows/visual-regression.yml +69 -0
  1239. package/templates/default/.opencode/skills/remotion-best-practices/SKILL.md +59 -0
  1240. package/templates/default/.opencode/skills/remotion-best-practices/agents/openai.yaml +7 -0
  1241. package/templates/default/.opencode/skills/remotion-best-practices/assets/remotion-icon.png +0 -0
  1242. package/templates/default/.opencode/skills/remotion-best-practices/remotion-captions/REFERENCE.md +36 -0
  1243. package/templates/default/.opencode/skills/remotion-best-practices/remotion-captions/agents/openai.yaml +7 -0
  1244. package/templates/default/.opencode/skills/remotion-best-practices/remotion-captions/assets/remotion-icon.png +0 -0
  1245. package/templates/default/.opencode/skills/remotion-best-practices/remotion-captions/display-captions.md +190 -0
  1246. package/templates/default/.opencode/skills/remotion-best-practices/remotion-captions/import-srt-captions.md +73 -0
  1247. package/templates/default/.opencode/skills/remotion-best-practices/remotion-captions/transcribe-captions.md +70 -0
  1248. package/templates/default/.opencode/skills/remotion-best-practices/remotion-create/REFERENCE.md +68 -0
  1249. package/templates/default/.opencode/skills/remotion-best-practices/remotion-create/agents/openai.yaml +7 -0
  1250. package/templates/default/.opencode/skills/remotion-best-practices/remotion-create/assets/remotion-icon.png +0 -0
  1251. package/templates/default/.opencode/skills/remotion-best-practices/remotion-create/tailwind.md +11 -0
  1252. package/templates/default/.opencode/skills/remotion-best-practices/remotion-create/video-layout.md +9 -0
  1253. package/templates/default/.opencode/skills/remotion-best-practices/remotion-docs/REFERENCE.md +46 -0
  1254. package/templates/default/.opencode/skills/remotion-best-practices/remotion-docs/agents/openai.yaml +7 -0
  1255. package/templates/default/.opencode/skills/remotion-best-practices/remotion-docs/assets/remotion-icon.png +0 -0
  1256. package/templates/default/.opencode/skills/remotion-best-practices/remotion-interactivity/REFERENCE.md +247 -0
  1257. package/templates/default/.opencode/skills/remotion-best-practices/remotion-interactivity/agents/openai.yaml +7 -0
  1258. package/templates/default/.opencode/skills/remotion-best-practices/remotion-interactivity/assets/remotion-icon.png +0 -0
  1259. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/REFERENCE.md +36 -0
  1260. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/agents/openai.yaml +7 -0
  1261. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/assets/remotion-icon.png +0 -0
  1262. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  1263. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  1264. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  1265. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  1266. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  1267. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  1268. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  1269. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  1270. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  1271. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  1272. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  1273. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  1274. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  1275. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  1276. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  1277. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  1278. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  1279. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  1280. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  1281. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  1282. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  1283. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  1284. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  1285. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  1286. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  1287. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  1288. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  1289. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  1290. package/templates/default/.opencode/skills/remotion-best-practices/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  1291. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/3d.md +86 -0
  1292. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/REFERENCE.md +365 -0
  1293. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/agents/openai.yaml +7 -0
  1294. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/assets/remotion-icon.png +0 -0
  1295. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/audio-visualization.md +198 -0
  1296. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/audio.md +171 -0
  1297. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/calculate-metadata.md +136 -0
  1298. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/compositions.md +117 -0
  1299. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/cropping.md +34 -0
  1300. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/effects.md +251 -0
  1301. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/embedding-videos.md +173 -0
  1302. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/ffmpeg.md +38 -0
  1303. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/gifs.md +187 -0
  1304. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/google-fonts.md +76 -0
  1305. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/html-in-canvas.md +128 -0
  1306. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/images.md +73 -0
  1307. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/light-leaks.md +106 -0
  1308. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/local-fonts.md +69 -0
  1309. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/lottie.md +73 -0
  1310. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/measuring-dom-nodes.md +38 -0
  1311. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/measuring-text.md +146 -0
  1312. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/multi-scene-video.md +81 -0
  1313. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/parameters.md +111 -0
  1314. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/REFERENCE.md +36 -0
  1315. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  1316. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  1317. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  1318. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  1319. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  1320. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  1321. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  1322. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  1323. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  1324. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  1325. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  1326. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  1327. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  1328. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  1329. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  1330. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  1331. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  1332. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  1333. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  1334. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  1335. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  1336. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  1337. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  1338. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  1339. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  1340. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  1341. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  1342. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  1343. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  1344. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  1345. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  1346. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/sequencing.md +169 -0
  1347. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/sfx.md +51 -0
  1348. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/silence-detection.md +71 -0
  1349. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/text-highlights.md +56 -0
  1350. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/timing.md +111 -0
  1351. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/transitions.md +239 -0
  1352. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/video-editing.md +90 -0
  1353. package/templates/default/.opencode/skills/remotion-best-practices/remotion-markup/voiceover.md +99 -0
  1354. package/templates/default/.opencode/skills/remotion-best-practices/remotion-multimedia/REFERENCE.md +20 -0
  1355. package/templates/default/.opencode/skills/remotion-best-practices/remotion-multimedia/agents/openai.yaml +7 -0
  1356. package/templates/default/.opencode/skills/remotion-best-practices/remotion-multimedia/assets/remotion-icon.png +0 -0
  1357. package/templates/default/.opencode/skills/remotion-best-practices/remotion-multimedia/get-audio-duration.md +56 -0
  1358. package/templates/default/.opencode/skills/remotion-best-practices/remotion-multimedia/get-video-dimensions.md +66 -0
  1359. package/templates/default/.opencode/skills/remotion-best-practices/remotion-multimedia/get-video-duration.md +58 -0
  1360. package/templates/default/.opencode/skills/remotion-best-practices/remotion-render/REFERENCE.md +27 -0
  1361. package/templates/default/.opencode/skills/remotion-best-practices/remotion-render/agents/openai.yaml +7 -0
  1362. package/templates/default/.opencode/skills/remotion-best-practices/remotion-render/assets/remotion-icon.png +0 -0
  1363. package/templates/default/.opencode/skills/remotion-best-practices/remotion-render/transparent-videos.md +106 -0
  1364. package/templates/default/.opencode/skills/remotion-best-practices/remotion-saas/REFERENCE.md +33 -0
  1365. package/templates/default/.opencode/skills/remotion-best-practices/remotion-saas/agents/openai.yaml +7 -0
  1366. package/templates/default/.opencode/skills/remotion-best-practices/remotion-saas/assets/remotion-icon.png +0 -0
  1367. package/templates/default/.opencode/skills/remotion-best-practices/remotion-saas/framework.md +21 -0
  1368. package/templates/default/.opencode/skills/remotion-best-practices/remotion-saas/player.md +33 -0
  1369. package/templates/default/.opencode/skills/remotion-best-practices/remotion-saas/rendering.md +69 -0
  1370. package/templates/default/.opencode/skills/remotion-best-practices/remotion-studio/REFERENCE.md +24 -0
  1371. package/templates/default/.opencode/skills/remotion-best-practices/remotion-studio/agents/openai.yaml +7 -0
  1372. package/templates/default/.opencode/skills/remotion-best-practices/remotion-studio/assets/remotion-icon.png +0 -0
  1373. package/templates/default/.opencode/skills/remotion-best-practices/remotion-upgrade/REFERENCE.md +31 -0
  1374. package/templates/default/.opencode/skills/remotion-best-practices/remotion-upgrade/agents/openai.yaml +7 -0
  1375. package/templates/default/.opencode/skills/remotion-best-practices/remotion-upgrade/assets/remotion-icon.png +0 -0
  1376. package/templates/default/.opencode/skills/remotion-captions/SKILL.md +36 -0
  1377. package/templates/default/.opencode/skills/remotion-captions/agents/openai.yaml +7 -0
  1378. package/templates/default/.opencode/skills/remotion-captions/assets/remotion-icon.png +0 -0
  1379. package/templates/default/.opencode/skills/remotion-captions/display-captions.md +190 -0
  1380. package/templates/default/.opencode/skills/remotion-captions/import-srt-captions.md +73 -0
  1381. package/templates/default/.opencode/skills/remotion-captions/transcribe-captions.md +70 -0
  1382. package/templates/default/.opencode/skills/remotion-create/SKILL.md +68 -0
  1383. package/templates/default/.opencode/skills/remotion-create/agents/openai.yaml +7 -0
  1384. package/templates/default/.opencode/skills/remotion-create/assets/remotion-icon.png +0 -0
  1385. package/templates/default/.opencode/skills/remotion-create/tailwind.md +11 -0
  1386. package/templates/default/.opencode/skills/remotion-create/video-layout.md +9 -0
  1387. package/templates/default/.opencode/skills/remotion-docs/SKILL.md +46 -0
  1388. package/templates/default/.opencode/skills/remotion-docs/agents/openai.yaml +7 -0
  1389. package/templates/default/.opencode/skills/remotion-docs/assets/remotion-icon.png +0 -0
  1390. package/templates/default/.opencode/skills/remotion-interactivity/SKILL.md +247 -0
  1391. package/templates/default/.opencode/skills/remotion-interactivity/agents/openai.yaml +7 -0
  1392. package/templates/default/.opencode/skills/remotion-interactivity/assets/remotion-icon.png +0 -0
  1393. package/templates/default/.opencode/skills/remotion-maps/SKILL.md +36 -0
  1394. package/templates/default/.opencode/skills/remotion-maps/agents/openai.yaml +7 -0
  1395. package/templates/default/.opencode/skills/remotion-maps/assets/remotion-icon.png +0 -0
  1396. package/templates/default/.opencode/skills/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  1397. package/templates/default/.opencode/skills/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  1398. package/templates/default/.opencode/skills/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  1399. package/templates/default/.opencode/skills/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  1400. package/templates/default/.opencode/skills/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  1401. package/templates/default/.opencode/skills/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  1402. package/templates/default/.opencode/skills/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  1403. package/templates/default/.opencode/skills/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  1404. package/templates/default/.opencode/skills/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  1405. package/templates/default/.opencode/skills/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  1406. package/templates/default/.opencode/skills/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  1407. package/templates/default/.opencode/skills/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  1408. package/templates/default/.opencode/skills/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  1409. package/templates/default/.opencode/skills/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  1410. package/templates/default/.opencode/skills/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  1411. package/templates/default/.opencode/skills/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  1412. package/templates/default/.opencode/skills/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  1413. package/templates/default/.opencode/skills/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  1414. package/templates/default/.opencode/skills/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  1415. package/templates/default/.opencode/skills/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  1416. package/templates/default/.opencode/skills/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  1417. package/templates/default/.opencode/skills/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  1418. package/templates/default/.opencode/skills/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  1419. package/templates/default/.opencode/skills/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  1420. package/templates/default/.opencode/skills/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  1421. package/templates/default/.opencode/skills/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  1422. package/templates/default/.opencode/skills/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  1423. package/templates/default/.opencode/skills/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  1424. package/templates/default/.opencode/skills/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  1425. package/templates/default/.opencode/skills/remotion-markup/3d.md +86 -0
  1426. package/templates/default/.opencode/skills/remotion-markup/SKILL.md +365 -0
  1427. package/templates/default/.opencode/skills/remotion-markup/agents/openai.yaml +7 -0
  1428. package/templates/default/.opencode/skills/remotion-markup/assets/remotion-icon.png +0 -0
  1429. package/templates/default/.opencode/skills/remotion-markup/audio-visualization.md +198 -0
  1430. package/templates/default/.opencode/skills/remotion-markup/audio.md +171 -0
  1431. package/templates/default/.opencode/skills/remotion-markup/calculate-metadata.md +136 -0
  1432. package/templates/default/.opencode/skills/remotion-markup/compositions.md +117 -0
  1433. package/templates/default/.opencode/skills/remotion-markup/cropping.md +34 -0
  1434. package/templates/default/.opencode/skills/remotion-markup/effects.md +251 -0
  1435. package/templates/default/.opencode/skills/remotion-markup/embedding-videos.md +173 -0
  1436. package/templates/default/.opencode/skills/remotion-markup/ffmpeg.md +38 -0
  1437. package/templates/default/.opencode/skills/remotion-markup/gifs.md +187 -0
  1438. package/templates/default/.opencode/skills/remotion-markup/google-fonts.md +76 -0
  1439. package/templates/default/.opencode/skills/remotion-markup/html-in-canvas.md +128 -0
  1440. package/templates/default/.opencode/skills/remotion-markup/images.md +73 -0
  1441. package/templates/default/.opencode/skills/remotion-markup/light-leaks.md +106 -0
  1442. package/templates/default/.opencode/skills/remotion-markup/local-fonts.md +69 -0
  1443. package/templates/default/.opencode/skills/remotion-markup/lottie.md +73 -0
  1444. package/templates/default/.opencode/skills/remotion-markup/measuring-dom-nodes.md +38 -0
  1445. package/templates/default/.opencode/skills/remotion-markup/measuring-text.md +146 -0
  1446. package/templates/default/.opencode/skills/remotion-markup/multi-scene-video.md +81 -0
  1447. package/templates/default/.opencode/skills/remotion-markup/parameters.md +111 -0
  1448. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/REFERENCE.md +36 -0
  1449. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  1450. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  1451. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  1452. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  1453. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  1454. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  1455. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  1456. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  1457. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  1458. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  1459. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  1460. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  1461. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  1462. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  1463. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  1464. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  1465. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  1466. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  1467. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  1468. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  1469. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  1470. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  1471. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  1472. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  1473. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  1474. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  1475. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  1476. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  1477. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  1478. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  1479. package/templates/default/.opencode/skills/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  1480. package/templates/default/.opencode/skills/remotion-markup/sequencing.md +169 -0
  1481. package/templates/default/.opencode/skills/remotion-markup/sfx.md +51 -0
  1482. package/templates/default/.opencode/skills/remotion-markup/silence-detection.md +71 -0
  1483. package/templates/default/.opencode/skills/remotion-markup/text-highlights.md +56 -0
  1484. package/templates/default/.opencode/skills/remotion-markup/timing.md +111 -0
  1485. package/templates/default/.opencode/skills/remotion-markup/transitions.md +239 -0
  1486. package/templates/default/.opencode/skills/remotion-markup/video-editing.md +90 -0
  1487. package/templates/default/.opencode/skills/remotion-markup/voiceover.md +99 -0
  1488. package/templates/default/.opencode/skills/remotion-multimedia/SKILL.md +20 -0
  1489. package/templates/default/.opencode/skills/remotion-multimedia/agents/openai.yaml +7 -0
  1490. package/templates/default/.opencode/skills/remotion-multimedia/assets/remotion-icon.png +0 -0
  1491. package/templates/default/.opencode/skills/remotion-multimedia/get-audio-duration.md +56 -0
  1492. package/templates/default/.opencode/skills/remotion-multimedia/get-video-dimensions.md +66 -0
  1493. package/templates/default/.opencode/skills/remotion-multimedia/get-video-duration.md +58 -0
  1494. package/templates/default/.opencode/skills/remotion-render/SKILL.md +27 -0
  1495. package/templates/default/.opencode/skills/remotion-render/agents/openai.yaml +7 -0
  1496. package/templates/default/.opencode/skills/remotion-render/assets/remotion-icon.png +0 -0
  1497. package/templates/default/.opencode/skills/remotion-render/transparent-videos.md +106 -0
  1498. package/templates/default/.opencode/skills/remotion-saas/SKILL.md +33 -0
  1499. package/templates/default/.opencode/skills/remotion-saas/agents/openai.yaml +7 -0
  1500. package/templates/default/.opencode/skills/remotion-saas/assets/remotion-icon.png +0 -0
  1501. package/templates/default/.opencode/skills/remotion-saas/framework.md +21 -0
  1502. package/templates/default/.opencode/skills/remotion-saas/player.md +33 -0
  1503. package/templates/default/.opencode/skills/remotion-saas/rendering.md +69 -0
  1504. package/templates/default/.opencode/skills/remotion-studio/SKILL.md +24 -0
  1505. package/templates/default/.opencode/skills/remotion-studio/agents/openai.yaml +7 -0
  1506. package/templates/default/.opencode/skills/remotion-studio/assets/remotion-icon.png +0 -0
  1507. package/templates/default/.opencode/skills/remotion-upgrade/SKILL.md +31 -0
  1508. package/templates/default/.opencode/skills/remotion-upgrade/agents/openai.yaml +7 -0
  1509. package/templates/default/.opencode/skills/remotion-upgrade/assets/remotion-icon.png +0 -0
  1510. package/templates/default/.windsurf/skills/remotion-best-practices/SKILL.md +59 -0
  1511. package/templates/default/.windsurf/skills/remotion-best-practices/agents/openai.yaml +7 -0
  1512. package/templates/default/.windsurf/skills/remotion-best-practices/assets/remotion-icon.png +0 -0
  1513. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-captions/REFERENCE.md +36 -0
  1514. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-captions/agents/openai.yaml +7 -0
  1515. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-captions/assets/remotion-icon.png +0 -0
  1516. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-captions/display-captions.md +190 -0
  1517. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-captions/import-srt-captions.md +73 -0
  1518. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-captions/transcribe-captions.md +70 -0
  1519. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-create/REFERENCE.md +68 -0
  1520. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-create/agents/openai.yaml +7 -0
  1521. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-create/assets/remotion-icon.png +0 -0
  1522. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-create/tailwind.md +11 -0
  1523. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-create/video-layout.md +9 -0
  1524. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-docs/REFERENCE.md +46 -0
  1525. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-docs/agents/openai.yaml +7 -0
  1526. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-docs/assets/remotion-icon.png +0 -0
  1527. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-interactivity/REFERENCE.md +247 -0
  1528. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-interactivity/agents/openai.yaml +7 -0
  1529. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-interactivity/assets/remotion-icon.png +0 -0
  1530. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/REFERENCE.md +36 -0
  1531. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/agents/openai.yaml +7 -0
  1532. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/assets/remotion-icon.png +0 -0
  1533. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  1534. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  1535. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  1536. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  1537. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  1538. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  1539. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  1540. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  1541. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  1542. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  1543. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  1544. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  1545. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  1546. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  1547. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  1548. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  1549. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  1550. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  1551. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  1552. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  1553. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  1554. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  1555. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  1556. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  1557. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  1558. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  1559. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  1560. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  1561. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  1562. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/3d.md +86 -0
  1563. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/REFERENCE.md +365 -0
  1564. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/agents/openai.yaml +7 -0
  1565. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/assets/remotion-icon.png +0 -0
  1566. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/audio-visualization.md +198 -0
  1567. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/audio.md +171 -0
  1568. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/calculate-metadata.md +136 -0
  1569. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/compositions.md +117 -0
  1570. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/cropping.md +34 -0
  1571. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/effects.md +251 -0
  1572. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/embedding-videos.md +173 -0
  1573. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/ffmpeg.md +38 -0
  1574. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/gifs.md +187 -0
  1575. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/google-fonts.md +76 -0
  1576. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/html-in-canvas.md +128 -0
  1577. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/images.md +73 -0
  1578. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/light-leaks.md +106 -0
  1579. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/local-fonts.md +69 -0
  1580. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/lottie.md +73 -0
  1581. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/measuring-dom-nodes.md +38 -0
  1582. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/measuring-text.md +146 -0
  1583. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/multi-scene-video.md +81 -0
  1584. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/parameters.md +111 -0
  1585. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/REFERENCE.md +36 -0
  1586. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  1587. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  1588. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  1589. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  1590. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  1591. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  1592. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  1593. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  1594. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  1595. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  1596. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  1597. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  1598. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  1599. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  1600. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  1601. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  1602. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  1603. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  1604. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  1605. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  1606. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  1607. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  1608. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  1609. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  1610. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  1611. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  1612. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  1613. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  1614. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  1615. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  1616. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  1617. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/sequencing.md +169 -0
  1618. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/sfx.md +51 -0
  1619. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/silence-detection.md +71 -0
  1620. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/text-highlights.md +56 -0
  1621. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/timing.md +111 -0
  1622. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/transitions.md +239 -0
  1623. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/video-editing.md +90 -0
  1624. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-markup/voiceover.md +99 -0
  1625. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-multimedia/REFERENCE.md +20 -0
  1626. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-multimedia/agents/openai.yaml +7 -0
  1627. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-multimedia/assets/remotion-icon.png +0 -0
  1628. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-multimedia/get-audio-duration.md +56 -0
  1629. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-multimedia/get-video-dimensions.md +66 -0
  1630. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-multimedia/get-video-duration.md +58 -0
  1631. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-render/REFERENCE.md +27 -0
  1632. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-render/agents/openai.yaml +7 -0
  1633. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-render/assets/remotion-icon.png +0 -0
  1634. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-render/transparent-videos.md +106 -0
  1635. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-saas/REFERENCE.md +33 -0
  1636. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-saas/agents/openai.yaml +7 -0
  1637. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-saas/assets/remotion-icon.png +0 -0
  1638. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-saas/framework.md +21 -0
  1639. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-saas/player.md +33 -0
  1640. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-saas/rendering.md +69 -0
  1641. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-studio/REFERENCE.md +24 -0
  1642. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-studio/agents/openai.yaml +7 -0
  1643. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-studio/assets/remotion-icon.png +0 -0
  1644. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-upgrade/REFERENCE.md +31 -0
  1645. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-upgrade/agents/openai.yaml +7 -0
  1646. package/templates/default/.windsurf/skills/remotion-best-practices/remotion-upgrade/assets/remotion-icon.png +0 -0
  1647. package/templates/default/.windsurf/skills/remotion-captions/SKILL.md +36 -0
  1648. package/templates/default/.windsurf/skills/remotion-captions/agents/openai.yaml +7 -0
  1649. package/templates/default/.windsurf/skills/remotion-captions/assets/remotion-icon.png +0 -0
  1650. package/templates/default/.windsurf/skills/remotion-captions/display-captions.md +190 -0
  1651. package/templates/default/.windsurf/skills/remotion-captions/import-srt-captions.md +73 -0
  1652. package/templates/default/.windsurf/skills/remotion-captions/transcribe-captions.md +70 -0
  1653. package/templates/default/.windsurf/skills/remotion-create/SKILL.md +68 -0
  1654. package/templates/default/.windsurf/skills/remotion-create/agents/openai.yaml +7 -0
  1655. package/templates/default/.windsurf/skills/remotion-create/assets/remotion-icon.png +0 -0
  1656. package/templates/default/.windsurf/skills/remotion-create/tailwind.md +11 -0
  1657. package/templates/default/.windsurf/skills/remotion-create/video-layout.md +9 -0
  1658. package/templates/default/.windsurf/skills/remotion-docs/SKILL.md +46 -0
  1659. package/templates/default/.windsurf/skills/remotion-docs/agents/openai.yaml +7 -0
  1660. package/templates/default/.windsurf/skills/remotion-docs/assets/remotion-icon.png +0 -0
  1661. package/templates/default/.windsurf/skills/remotion-interactivity/SKILL.md +247 -0
  1662. package/templates/default/.windsurf/skills/remotion-interactivity/agents/openai.yaml +7 -0
  1663. package/templates/default/.windsurf/skills/remotion-interactivity/assets/remotion-icon.png +0 -0
  1664. package/templates/default/.windsurf/skills/remotion-maps/SKILL.md +36 -0
  1665. package/templates/default/.windsurf/skills/remotion-maps/agents/openai.yaml +7 -0
  1666. package/templates/default/.windsurf/skills/remotion-maps/assets/remotion-icon.png +0 -0
  1667. package/templates/default/.windsurf/skills/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  1668. package/templates/default/.windsurf/skills/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  1669. package/templates/default/.windsurf/skills/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  1670. package/templates/default/.windsurf/skills/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  1671. package/templates/default/.windsurf/skills/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  1672. package/templates/default/.windsurf/skills/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  1673. package/templates/default/.windsurf/skills/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  1674. package/templates/default/.windsurf/skills/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  1675. package/templates/default/.windsurf/skills/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  1676. package/templates/default/.windsurf/skills/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  1677. package/templates/default/.windsurf/skills/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  1678. package/templates/default/.windsurf/skills/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  1679. package/templates/default/.windsurf/skills/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  1680. package/templates/default/.windsurf/skills/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  1681. package/templates/default/.windsurf/skills/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  1682. package/templates/default/.windsurf/skills/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  1683. package/templates/default/.windsurf/skills/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  1684. package/templates/default/.windsurf/skills/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  1685. package/templates/default/.windsurf/skills/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  1686. package/templates/default/.windsurf/skills/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  1687. package/templates/default/.windsurf/skills/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  1688. package/templates/default/.windsurf/skills/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  1689. package/templates/default/.windsurf/skills/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  1690. package/templates/default/.windsurf/skills/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  1691. package/templates/default/.windsurf/skills/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  1692. package/templates/default/.windsurf/skills/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  1693. package/templates/default/.windsurf/skills/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  1694. package/templates/default/.windsurf/skills/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  1695. package/templates/default/.windsurf/skills/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  1696. package/templates/default/.windsurf/skills/remotion-markup/3d.md +86 -0
  1697. package/templates/default/.windsurf/skills/remotion-markup/SKILL.md +365 -0
  1698. package/templates/default/.windsurf/skills/remotion-markup/agents/openai.yaml +7 -0
  1699. package/templates/default/.windsurf/skills/remotion-markup/assets/remotion-icon.png +0 -0
  1700. package/templates/default/.windsurf/skills/remotion-markup/audio-visualization.md +198 -0
  1701. package/templates/default/.windsurf/skills/remotion-markup/audio.md +171 -0
  1702. package/templates/default/.windsurf/skills/remotion-markup/calculate-metadata.md +136 -0
  1703. package/templates/default/.windsurf/skills/remotion-markup/compositions.md +117 -0
  1704. package/templates/default/.windsurf/skills/remotion-markup/cropping.md +34 -0
  1705. package/templates/default/.windsurf/skills/remotion-markup/effects.md +251 -0
  1706. package/templates/default/.windsurf/skills/remotion-markup/embedding-videos.md +173 -0
  1707. package/templates/default/.windsurf/skills/remotion-markup/ffmpeg.md +38 -0
  1708. package/templates/default/.windsurf/skills/remotion-markup/gifs.md +187 -0
  1709. package/templates/default/.windsurf/skills/remotion-markup/google-fonts.md +76 -0
  1710. package/templates/default/.windsurf/skills/remotion-markup/html-in-canvas.md +128 -0
  1711. package/templates/default/.windsurf/skills/remotion-markup/images.md +73 -0
  1712. package/templates/default/.windsurf/skills/remotion-markup/light-leaks.md +106 -0
  1713. package/templates/default/.windsurf/skills/remotion-markup/local-fonts.md +69 -0
  1714. package/templates/default/.windsurf/skills/remotion-markup/lottie.md +73 -0
  1715. package/templates/default/.windsurf/skills/remotion-markup/measuring-dom-nodes.md +38 -0
  1716. package/templates/default/.windsurf/skills/remotion-markup/measuring-text.md +146 -0
  1717. package/templates/default/.windsurf/skills/remotion-markup/multi-scene-video.md +81 -0
  1718. package/templates/default/.windsurf/skills/remotion-markup/parameters.md +111 -0
  1719. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/REFERENCE.md +36 -0
  1720. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  1721. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  1722. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  1723. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  1724. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  1725. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  1726. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  1727. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  1728. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  1729. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  1730. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  1731. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  1732. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  1733. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  1734. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  1735. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  1736. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  1737. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  1738. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  1739. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  1740. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  1741. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  1742. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  1743. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  1744. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  1745. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  1746. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  1747. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  1748. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  1749. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  1750. package/templates/default/.windsurf/skills/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  1751. package/templates/default/.windsurf/skills/remotion-markup/sequencing.md +169 -0
  1752. package/templates/default/.windsurf/skills/remotion-markup/sfx.md +51 -0
  1753. package/templates/default/.windsurf/skills/remotion-markup/silence-detection.md +71 -0
  1754. package/templates/default/.windsurf/skills/remotion-markup/text-highlights.md +56 -0
  1755. package/templates/default/.windsurf/skills/remotion-markup/timing.md +111 -0
  1756. package/templates/default/.windsurf/skills/remotion-markup/transitions.md +239 -0
  1757. package/templates/default/.windsurf/skills/remotion-markup/video-editing.md +90 -0
  1758. package/templates/default/.windsurf/skills/remotion-markup/voiceover.md +99 -0
  1759. package/templates/default/.windsurf/skills/remotion-multimedia/SKILL.md +20 -0
  1760. package/templates/default/.windsurf/skills/remotion-multimedia/agents/openai.yaml +7 -0
  1761. package/templates/default/.windsurf/skills/remotion-multimedia/assets/remotion-icon.png +0 -0
  1762. package/templates/default/.windsurf/skills/remotion-multimedia/get-audio-duration.md +56 -0
  1763. package/templates/default/.windsurf/skills/remotion-multimedia/get-video-dimensions.md +66 -0
  1764. package/templates/default/.windsurf/skills/remotion-multimedia/get-video-duration.md +58 -0
  1765. package/templates/default/.windsurf/skills/remotion-render/SKILL.md +27 -0
  1766. package/templates/default/.windsurf/skills/remotion-render/agents/openai.yaml +7 -0
  1767. package/templates/default/.windsurf/skills/remotion-render/assets/remotion-icon.png +0 -0
  1768. package/templates/default/.windsurf/skills/remotion-render/transparent-videos.md +106 -0
  1769. package/templates/default/.windsurf/skills/remotion-saas/SKILL.md +33 -0
  1770. package/templates/default/.windsurf/skills/remotion-saas/agents/openai.yaml +7 -0
  1771. package/templates/default/.windsurf/skills/remotion-saas/assets/remotion-icon.png +0 -0
  1772. package/templates/default/.windsurf/skills/remotion-saas/framework.md +21 -0
  1773. package/templates/default/.windsurf/skills/remotion-saas/player.md +33 -0
  1774. package/templates/default/.windsurf/skills/remotion-saas/rendering.md +69 -0
  1775. package/templates/default/.windsurf/skills/remotion-studio/SKILL.md +24 -0
  1776. package/templates/default/.windsurf/skills/remotion-studio/agents/openai.yaml +7 -0
  1777. package/templates/default/.windsurf/skills/remotion-studio/assets/remotion-icon.png +0 -0
  1778. package/templates/default/.windsurf/skills/remotion-upgrade/SKILL.md +31 -0
  1779. package/templates/default/.windsurf/skills/remotion-upgrade/agents/openai.yaml +7 -0
  1780. package/templates/default/.windsurf/skills/remotion-upgrade/assets/remotion-icon.png +0 -0
  1781. package/templates/default/AGENTS.md +61 -0
  1782. package/templates/default/CLAUDE.md +49 -8
  1783. package/templates/default/openvidstudio-core/package.json +16 -12
  1784. package/templates/default/openvidstudio-core/scripts/gen-fonts.sh +31 -0
  1785. package/templates/default/openvidstudio-core/scripts/gen-sfx.sh +2 -20
  1786. package/templates/default/openvidstudio-core/src/ChecklistPanel.tsx +2 -5
  1787. package/templates/default/openvidstudio-core/src/CinematicScene.tsx +14 -6
  1788. package/templates/default/openvidstudio-core/src/CursorActor.tsx +59 -15
  1789. package/templates/default/openvidstudio-core/src/DirectedShot.tsx +294 -0
  1790. package/templates/default/openvidstudio-core/src/KineticText.tsx +84 -17
  1791. package/templates/default/openvidstudio-core/src/LayeredShot.tsx +80 -0
  1792. package/templates/default/openvidstudio-core/src/RepoCta.tsx +21 -15
  1793. package/templates/default/openvidstudio-core/src/TerminalReplay.tsx +2 -5
  1794. package/templates/default/openvidstudio-core/src/TransitionOverlay.tsx +194 -0
  1795. package/templates/default/openvidstudio-core/src/atmosphere.tsx +109 -0
  1796. package/templates/default/openvidstudio-core/src/camera.tsx +72 -12
  1797. package/templates/default/openvidstudio-core/src/designSystem.ts +179 -0
  1798. package/templates/default/openvidstudio-core/src/handheld.tsx +116 -0
  1799. package/templates/default/openvidstudio-core/src/index.ts +69 -7
  1800. package/templates/default/openvidstudio-core/src/kinetic.tsx +152 -0
  1801. package/templates/default/openvidstudio-core/src/localFonts.ts +67 -0
  1802. package/templates/default/openvidstudio-core/src/motion.ts +6 -0
  1803. package/templates/default/openvidstudio-core/src/motionBlur.tsx +35 -0
  1804. package/templates/default/openvidstudio-core/src/musicClock.tsx +171 -0
  1805. package/templates/default/openvidstudio-core/src/narrationWords.tsx +85 -0
  1806. package/templates/default/openvidstudio-core/src/panels.tsx +367 -0
  1807. package/templates/default/openvidstudio-core/src/pixel.tsx +285 -0
  1808. package/templates/default/openvidstudio-core/src/sfx.tsx +77 -30
  1809. package/templates/default/openvidstudio-core/src/shots.ts +114 -0
  1810. package/templates/default/openvidstudio-core/src/tokens.ts +51 -2
  1811. package/templates/default/openvidstudio-stem/package.json +41 -0
  1812. package/templates/default/openvidstudio-stem/public/fonts/SPACE-GROTESK-LICENSE.txt +93 -0
  1813. package/templates/default/openvidstudio-stem/public/fonts/space-grotesk-latin-500-normal.woff2 +0 -0
  1814. package/templates/default/openvidstudio-stem/public/fonts/space-grotesk-latin-700-normal.woff2 +0 -0
  1815. package/templates/default/openvidstudio-stem/public/mathjax/MATHJAX-LICENSE.txt +202 -0
  1816. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/accents-other.js +1 -0
  1817. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/accents.js +1 -0
  1818. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/arrows.js +1 -0
  1819. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/calligraphic.js +1 -0
  1820. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/cyrillic.js +1 -0
  1821. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/double-struck.js +1 -0
  1822. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/fraktur.js +1 -0
  1823. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/greek.js +1 -0
  1824. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/latin-b.js +1 -0
  1825. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/latin-bi.js +1 -0
  1826. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/latin-i.js +1 -0
  1827. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/latin-m.js +1 -0
  1828. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/latin.js +1 -0
  1829. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/math-other.js +1 -0
  1830. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/monospace.js +1 -0
  1831. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/phonetics.js +1 -0
  1832. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/sans-serif.js +1 -0
  1833. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/script.js +1 -0
  1834. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/shapes.js +1 -0
  1835. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/stretchy.js +1 -0
  1836. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/symbols-other.js +1 -0
  1837. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/symbols.js +1 -0
  1838. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/up-int.js +1 -0
  1839. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg/dynamic/variants.js +1 -0
  1840. package/templates/default/openvidstudio-stem/public/mathjax/fira/svg.js +1 -0
  1841. package/templates/default/openvidstudio-stem/public/mathjax/tex-svg-nofont.js +1 -0
  1842. package/templates/default/openvidstudio-stem/src/ArrayViz.tsx +118 -0
  1843. package/templates/default/openvidstudio-stem/src/ComplexityCurve.tsx +108 -0
  1844. package/templates/default/openvidstudio-stem/src/Derivation.tsx +334 -0
  1845. package/templates/default/openvidstudio-stem/src/Equation.tsx +132 -0
  1846. package/templates/default/openvidstudio-stem/src/FreeBody.tsx +152 -0
  1847. package/templates/default/openvidstudio-stem/src/GraphViz.tsx +249 -0
  1848. package/templates/default/openvidstudio-stem/src/LessonCaptions.tsx +135 -0
  1849. package/templates/default/openvidstudio-stem/src/MatrixGrid.tsx +187 -0
  1850. package/templates/default/openvidstudio-stem/src/Nova.tsx +104 -0
  1851. package/templates/default/openvidstudio-stem/src/Orbit.tsx +241 -0
  1852. package/templates/default/openvidstudio-stem/src/Spark.tsx +69 -0
  1853. package/templates/default/openvidstudio-stem/src/TreeViz.tsx +241 -0
  1854. package/templates/default/openvidstudio-stem/src/VectorField.tsx +231 -0
  1855. package/templates/default/openvidstudio-stem/src/Wave.tsx +234 -0
  1856. package/templates/default/openvidstudio-stem/src/designSystem.ts +76 -0
  1857. package/templates/default/openvidstudio-stem/src/glow.tsx +52 -0
  1858. package/templates/default/openvidstudio-stem/src/graph.tsx +331 -0
  1859. package/templates/default/openvidstudio-stem/src/index.ts +61 -0
  1860. package/templates/default/openvidstudio-stem/src/localFonts.ts +40 -0
  1861. package/templates/default/openvidstudio-stem/src/mathjax.ts +79 -0
  1862. package/templates/default/openvidstudio-stem/src/paths.ts +148 -0
  1863. package/templates/default/output/.gitignore +3 -0
  1864. package/templates/default/output/README.md +9 -0
  1865. package/templates/default/package.json +19 -13
  1866. package/templates/default/public/fonts/inter-latin-400-normal.woff2 +0 -0
  1867. package/templates/default/public/fonts/inter-latin-500-normal.woff2 +0 -0
  1868. package/templates/default/public/fonts/inter-latin-700-normal.woff2 +0 -0
  1869. package/templates/default/public/fonts/inter-latin-800-normal.woff2 +0 -0
  1870. package/templates/default/public/fonts/inter-latin-900-normal.woff2 +0 -0
  1871. package/templates/default/public/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  1872. package/templates/default/public/fonts/jetbrains-mono-latin-700-normal.woff2 +0 -0
  1873. package/templates/default/public/imported_audios/README.md +14 -0
  1874. package/templates/default/public/sfx/CREDITS.md +49 -0
  1875. package/templates/default/public/sfx/bong.wav +0 -0
  1876. package/templates/default/public/sfx/click.wav +0 -0
  1877. package/templates/default/public/sfx/click_soft.wav +0 -0
  1878. package/templates/default/public/sfx/drop.wav +0 -0
  1879. package/templates/default/public/sfx/typing-effect.mp3 +0 -0
  1880. package/templates/default/scripts/visual-regression.mjs +69 -0
  1881. package/templates/default/src/PreflightBenchmark.tsx +49 -0
  1882. package/templates/default/public/sfx/key_a.wav +0 -0
  1883. package/templates/default/public/sfx/key_b.wav +0 -0
  1884. package/templates/default/public/sfx/key_c.wav +0 -0
  1885. package/templates/default/public/sfx/key_enter.wav +0 -0
package/docs/API.md CHANGED
@@ -1,344 +1,1351 @@
1
- # API.md: everything `@openvidstudio/core` exports
2
-
3
- Written because the alternative is reading the library source. If you are an agent
4
- about to write a scene, this file has every prop you need and you should not have to
5
- open `packages/core/src`.
6
-
7
- Import everything from the package root:
8
-
9
- ```tsx
10
- import { CinematicScene, Layer, TerminalReplay, E, color } from "@openvidstudio/core";
11
- ```
12
-
13
- ---
14
-
15
- ## Scene wrapper
16
-
17
- ### `CinematicScene`
18
-
19
- Wraps every scene. Grain, vignette and colour grade are always on, and the camera rig
20
- lives inside it. Nothing renders outside one.
21
-
22
- | Prop | Type | Default | Notes |
23
- |---|---|---|---|
24
- | `camera` | `CamKeyframe[]` | required | At least two, or nothing moves |
25
- | `stageWidth` | `number` | `1920` | |
26
- | `stageHeight` | `number` | `1080` | |
27
- | `variant` | `"dark" \| "light"` | `"dark"` | |
28
- | `grain` | `number` | `0.05` | |
29
- | `vignette` | `number` | `0.32` | |
30
- | `overlay` | `ReactNode` | | Screen space, not camera transformed. Captions and title cards go here |
31
- | `children` | `ReactNode` | required | |
32
-
33
- **The overlay is not optional knowledge.** Anything inside `children` moves with the
34
- camera, so a caption placed there drifts off screen as the shot pushes in. Captions,
35
- title cards and dips belong in `overlay`.
36
-
37
- ---
38
-
39
- ## Camera
40
-
41
- ### `CamKeyframe`
42
-
43
- ```ts
44
- type CamKeyframe = {
45
- frame: number;
46
- x: number; // focal point on the stage, lands at frame centre
47
- y: number;
48
- scale: number; // 1 = stage px equals output px, 1.6 = 160% close up
49
- rotX?: number;
50
- rotY?: number;
51
- rotZ?: number;
52
- easing?: (t: number) => number; // easing INTO this keyframe
53
- };
54
- ```
55
-
56
- **The one thing that catches everyone.** The visible area is the stage divided by
57
- `scale`. At `scale: 1.4` only 1371x771 of a 1920x1080 stage is on screen, so content
58
- laid out at full stage width is cropped at the frame edge, and the render does not
59
- warn. The binding number is the scene's **highest** scale, not its first.
60
-
61
- Rules of thumb:
62
-
63
- - Real captures: 1.2 to 2.5. STYLE.md requires the camera to sit inside the UI
64
- rather than showing a flat full-screen grab.
65
- - Constructed panels: 1.04 to 1.15. They are already built at stage size, so they
66
- need a gentle push, not a zoom.
67
- - Run `validate_scenes` and it will tell you which scenes are cropping.
68
-
69
- ### `Layer`
70
-
71
- | Prop | Type | Default | Notes |
72
- |---|---|---|---|
73
- | `depth` | `number` | `0` | Parallax and blur. `0` is the focal plane |
74
- | `maxBlur` | `number` | `10` | Blur in px at `depth` 1 |
75
- | `style` | `CSSProperties` | | |
76
-
77
- One focal plane per shot. Put background elements on a non-zero depth so they blur.
78
-
79
- ### `CameraRig`, `useCamera`
80
-
81
- `CinematicScene` sets these up for you. Reach for them only when building a scene
82
- that needs the camera state directly.
83
-
84
- ---
85
-
86
- ## Motion
87
-
88
- ### `E` and `SPRING`
89
-
90
- ```ts
91
- E.cinematic // default move: slow out, soft landing
92
- E.whip // aggressive, for cuts and fast pans
93
- E.drift // gentle ambient motion inside a shot
94
- E.snap // snappy UI reaction, button press, blip reveal
95
-
96
- SPRING.soft SPRING.pop SPRING.heavy
97
- ```
98
-
99
- **Linear easing fails QC.** There is no linear preset on purpose.
100
-
101
- ### `tween`, `pop`, `jitter`, `staggerDelay`
102
-
103
- ```ts
104
- tween(frame, [fromFrame, toFrame], [fromValue, toValue], E.cinematic): number
105
- pop(frame, fps, atFrame): number // spring entrance scalar
106
- jitter(seed, n): number // deterministic 0..1, same every render
107
- staggerDelay(index, step = 3): number // 3 frames at 30fps is 100ms
108
- ```
109
-
110
- `jitter` is deterministic. Never use `Math.random()` in a scene: every frame renders
111
- in a separate process and random values differ per frame, which shows up as flicker.
112
-
113
- ---
114
-
115
- ## Text
116
-
117
- ### `TitleSlam`
118
-
119
- | Prop | Type | Default |
120
- |---|---|---|
121
- | `text` | `string` | required |
122
- | `at` | `number` | required |
123
- | `fontSize` | `number` | `120` |
124
- | `color` | `string` | `color.textPrimary` |
125
- | `glowColor` | `string` | |
126
- | `align` | `"center" \| "left"` | `"center"` |
127
- | `sfx` | `boolean` | `true` |
128
-
129
- Per word entrance. Renders nothing before `at`.
130
-
131
- ### `Caption`
132
-
133
- | Prop | Type | Default |
134
- |---|---|---|
135
- | `text` | `string` | required |
136
- | `at` | `number` | required |
137
- | `out` | `number` | |
138
- | `fontSize` | `number` | `34` |
139
-
140
- Sits 84px from the bottom. Put it in `overlay`, not `children`.
141
-
142
- ---
143
-
144
- ## Panels
145
-
146
- ### `BrowserFrame`
147
-
148
- | Prop | Type | Default |
149
- |---|---|---|
150
- | `url` | `string` | required |
151
- | `width` | `number` | `1360` |
152
- | `height` | `number` | `850` |
153
- | `dark` | `boolean` | `true` |
154
- | `children` | `ReactNode` | required |
155
-
156
- Chrome bar is 56px, so `height` must be the capture height plus 56 or the page is
157
- letterboxed. `scaffold_scene` computes this from the real PNG for you.
158
-
159
- Screenshots may only appear inside a `BrowserFrame`. Recordings and AI clips must
160
- not: wrapping generated footage in browser chrome makes it look like a captured
161
- page, which STYLE.md's provenance rule forbids.
162
-
163
- ### `CodePanel`
164
-
165
- | Prop | Type | Default |
166
- |---|---|---|
167
- | `title` | `string` | required |
168
- | `lines` | `CodeLine[]` | required |
169
- | `width` | `number` | `860` |
170
- | `height` | `number` | `640` |
171
- | `fontSize` | `number` | `22` |
172
- | `scroll` | `number` | `0` | px translateY, drive with a tween |
173
- | `highlight` | `number[]` | `[]` | 0-based line indexes |
174
-
175
- ```ts
176
- type Token = { t: string; c?: "kw" | "str" | "fn" | "cm" | "num" | "plain" };
177
- type CodeLine = Token[];
178
- ```
179
-
180
- ```tsx
181
- lines={[
182
- [{ t: "{", c: "plain" }],
183
- [{ t: ' "name"', c: "str" }, { t: ": ", c: "plain" }, { t: '"value"', c: "str" }],
184
- ]}
185
- ```
186
-
187
- ### `ChecklistPanel`
188
-
189
- | Prop | Type | Default |
190
- |---|---|---|
191
- | `title` | `string` | `"Community Standards"` |
192
- | `items` | `ChecklistItem[]` | required |
193
- | `width` | `number` | `760` |
194
- | `fontSize` | `number` | `27` |
195
- | `sfx` | `boolean` | `true` |
196
-
197
- ```ts
198
- type ChecklistItem = { label: string; flipAt?: number }; // omit flipAt to stay unchecked
199
- ```
200
-
201
- `flipAt` is an absolute scene frame.
202
-
203
- ### `TerminalReplay`
204
-
205
- | Prop | Type | Default |
206
- |---|---|---|
207
- | `steps` | `TermStep[]` | required |
208
- | `title` | `string` | `"Project"` |
209
- | `width` | `number` | `1280` |
210
- | `fontSize` | `number` | `26` |
211
- | `cps` | `number` | `16` | characters per second |
212
- | `sfx` | `boolean` | `true` |
213
- | `trailingPrompt` | `boolean` | `true` |
214
-
215
- ```ts
216
- type TermLine = { text: string; color?: string; glow?: boolean; bold?: boolean };
217
- type TermStep =
218
- | { type: "cmd"; text: string }
219
- | { type: "out"; lines: TermLine[]; stagger?: number; preDelay?: number }
220
- | { type: "pause"; frames: number };
221
- ```
222
-
223
- Terminals are always this component, never a screen recording of a terminal.
224
-
225
- `computeTerminalTimeline(steps, fps, cps)` returns `{ items, totalFrames }`, so camera
226
- keyframes can land frame-exact on content events rather than being guessed.
227
-
228
- ### `CursorActor`
229
-
230
- | Prop | Type | Default |
231
- |---|---|---|
232
- | `path` | `CursorKeyframe[]` | required |
233
- | `clicks` | `number[]` | `[]` | frames where a click ring fires |
234
- | `scale` | `number` | `1.6` |
235
- | `sfx` | `boolean` | `true` |
236
-
237
- ```ts
238
- type CursorKeyframe = { frame: number; x: number; y: number };
239
- ```
240
-
241
- Coordinates are stage space. Movement is eased automatically; never linear.
242
-
243
- ### `RepoCta`
244
-
245
- | Prop | Type | Default |
246
- |---|---|---|
247
- | `owner` | `string` | required |
248
- | `name` | `string` | required |
249
- | `description` | `string` | required |
250
- | `chips` | `string[]` | required |
251
- | `titleText` | `string` | required |
252
- | `durationInFrames` | `number` | `270` |
253
-
254
- A whole scene, not a panel. Do not wrap it in a `CinematicScene`; it brings its own.
255
- No star action by default.
256
-
257
- ---
258
-
259
- ## Sound
260
-
261
- All synthesized by `scripts/gen-sfx.sh` with ffmpeg, so a rendered video carries no
262
- third-party audio rights. Regenerate with `bash scripts/gen-sfx.sh`.
263
-
264
- | Component | Props | Use |
265
- |---|---|---|
266
- | `KeySound` | `at`, `seed?`, `volume?` (0.16) | One keystroke |
267
- | `TypingSfx` | `charFrames`, `volume?` | One key per typed character |
268
- | `EnterKey` | `at`, `volume?` (0.2) | End of a typed command |
269
- | `Click` | `at`, `volume?` | Cursor click |
270
- | `Whoosh` | `at`, `volume?` | Camera move or cut |
271
- | `Blip` | `at`, `volume?` (0.3) | UI reveal |
272
- | `SuccessChime` | `at`, `volume?` (0.35) | Completion |
273
- | `Bell` | `at`, `volume?` (0.3) | Heavier completion |
274
- | `MusicBed` | `durationInFrames`, `volume?` (0.16) | Ambient bed, loops |
275
-
276
- `TerminalReplay` emits its own typing sounds. Pass `sfx={false}` to silence it.
277
-
278
- Narration is separate: `generate_narration` writes
279
- `public/audio/vo/<beatId>.mp3` and `stitch_composition` picks it up.
280
-
281
- ---
282
-
283
- ## Look pass
284
-
285
- `FilmGrain`, `Vignette`, `ColorGrade`, `LookPass`. `CinematicScene` applies these, so
286
- reach for them only when compositing outside a scene.
287
-
288
- ---
289
-
290
- ## Tokens
291
-
292
- ```ts
293
- color.bg0 color.bg1 color.panel color.panelBorder
294
- color.textPrimary color.textSecondary
295
- color.accent color.accentAlt color.success color.warn color.danger
296
- color.lightBg color.lightCard color.lightShadow
297
-
298
- font.ui // "Inter"
299
- font.mono // "JetBrains Mono"
300
-
301
- radius.window // 12
302
- radius.card // 10
303
- radius.pill // 999
304
-
305
- glow(color, strength = 1) // returns { textShadow }
306
- panelShadow(dark = true) // returns a box-shadow string
307
- ```
308
-
309
- Use tokens rather than literal hex, so a per-video theme can override them.
310
-
311
- ---
312
-
313
- ## A scene, end to end
314
-
315
- ```tsx
316
- import React from "react";
317
- import { CinematicScene, Layer, TerminalReplay, Caption, color, E } from "@openvidstudio/core";
318
-
319
- export const Install: React.FC = () => (
320
- <CinematicScene
321
- camera={[
322
- { frame: 0, x: 960, y: 540, scale: 1.05, rotZ: -0.4 },
323
- { frame: 300, x: 960, y: 548, scale: 1.15, rotZ: 0.35, easing: E.drift },
324
- ]}
325
- overlay={<Caption text="one command" at={40} out={240} />}
326
- >
327
- <Layer depth={0}>
328
- <div style={{ position: "absolute", inset: 0, display: "flex",
329
- alignItems: "center", justifyContent: "center" }}>
330
- <TerminalReplay
331
- width={1400}
332
- steps={[
333
- { type: "cmd", text: "npx -y @openvidstudio/mcp-server" },
334
- { type: "out", lines: [{ text: "connected over stdio", color: color.success, glow: true }] },
335
- ]}
336
- />
337
- </div>
338
- </Layer>
339
- </CinematicScene>
340
- );
341
- ```
342
-
343
- Two keyframes so it moves, content centred inside the safe area, caption in the
344
- overlay, tokens instead of hex.
1
+ # API.md: everything `@openvidstudio/core` exports
2
+
3
+ Written because the alternative is reading the library source. If you are an agent
4
+ about to write a scene, this file has every prop you need and you should not have to
5
+ open `packages/core/src`.
6
+
7
+ These are **building blocks**, not a template. At peak and mid creative level the agent is
8
+ expected to compose scenes from them against the video's own `design.ts`, and to write its
9
+ own component when the brief's motif needs something the library does not have. Every
10
+ primitive below has a still, rendered for real by `scripts/build-api-gallery.mjs`. The MCP
11
+ tools are listed in [TOOLS.md](TOOLS.md).
12
+
13
+ Import everything from the package root:
14
+
15
+ ```tsx
16
+ import { CinematicScene, Layer, TerminalReplay, E, color } from "@openvidstudio/core";
17
+ ```
18
+
19
+ ---
20
+
21
+ ## Scene wrapper
22
+
23
+ ### `CinematicScene`
24
+
25
+ Wraps every scene. Grain, vignette and colour grade are always on, and the camera rig
26
+ lives inside it. Nothing renders outside one.
27
+
28
+ | Prop | Type | Default | Notes |
29
+ |---|---|---|---|
30
+ | `camera` | `CamKeyframe[]` | required | At least two, or nothing moves |
31
+ | `stageWidth` | `number` | composition width | 1920 in 16:9, 1080 in a 9:16 reel. Camera x/y are in stage px, so the centre is 960,540 or 540,960 |
32
+ | `stageHeight` | `number` | composition height | |
33
+ | `variant` | `"dark" \| "light"` | `"dark"` | |
34
+ | `grain` | `number` | `0.05` | |
35
+ | `vignette` | `number` | `0.32` | |
36
+ | `overlay` | `ReactNode` | | Screen space, not camera transformed. Captions and title cards go here |
37
+ | `children` | `ReactNode` | required | |
38
+
39
+ **The overlay is not optional knowledge.** Anything inside `children` moves with the
40
+ camera, so a caption placed there drifts off screen as the shot pushes in. Captions,
41
+ title cards and dips belong in `overlay`.
42
+
43
+ ---
44
+
45
+ ## Camera
46
+
47
+ ### `CamKeyframe`
48
+
49
+ ```ts
50
+ type CamKeyframe = {
51
+ frame: number;
52
+ x: number; // focal point on the stage, lands at frame centre
53
+ y: number;
54
+ scale: number; // 1 = stage px equals output px, 1.6 = 160% close up
55
+ rotX?: number;
56
+ rotY?: number;
57
+ rotZ?: number;
58
+ easing?: (t: number) => number; // easing INTO this keyframe
59
+ };
60
+ ```
61
+
62
+ **The one thing that catches everyone.** The visible area is the stage divided by
63
+ `scale`. At `scale: 1.4` only 1371x771 of a 1920x1080 stage is on screen, so content
64
+ laid out at full stage width is cropped at the frame edge, and the render does not
65
+ warn. The binding number is the scene's **highest** scale, not its first.
66
+
67
+ Rules of thumb:
68
+
69
+ - Real captures with text: 1.05 to 1.6. STYLE.md requires the camera to sit inside the UI
70
+ rather than showing a flat full-screen grab, but past 1.6 the product text goes soft.
71
+ Captures without text to read can push further.
72
+ - Constructed panels: 1.04 to 1.15. They are already built at stage size, so they
73
+ need a gentle push, not a zoom.
74
+ - Run `validate_scenes` and it will tell you which scenes are cropping. That is a read of
75
+ the source. Pass `render: true` (after `stitch_composition`) to measure the real rendered
76
+ frames instead: cropped text, text below the design system's minimum size, on-screen text
77
+ that takes longer to read than the beat lasts (3 words/sec), and beats that never change.
78
+
79
+ ### `Layer`
80
+
81
+ | Prop | Type | Default | Notes |
82
+ |---|---|---|---|
83
+ | `depth` | `number` | `0` | Distance from the focal plane. `0` is the focal plane, positive is behind it, negative is in front |
84
+ | `maxBlur` | `number` | `10` | Blur in px at `|depth|` 1, scaled by `|depth|`. `0` turns the depth blur off |
85
+ | `style` | `CSSProperties` | | |
86
+
87
+ Depth is a place in space. A layer is moved back (or forward) by `depth * 170` px and scaled
88
+ about the stage centre so it looks the same size, so with the camera still on the stage centre
89
+ every depth shows the same picture. When the camera pans, the rig's perspective does the rest:
90
+ a layer at depth 1 moves 0.89 as far as the focal plane, depth 2 about 0.80, and a layer at
91
+ depth -1 moves 1.14 times as far. Depth also orders layers: one behind stays behind however the
92
+ JSX is ordered. A Layer has to be a direct child of the rig's stage (a plain wrapper `div`
93
+ in between flattens the depth).
94
+
95
+ One focal plane per shot. Blur on a layer softens any text in it, so pass `maxBlur={0}` to a
96
+ layer that carries text.
97
+
98
+ ### `CameraRig`, `useCamera`
99
+
100
+ `CinematicScene` sets these up for you. Reach for them only when building a scene
101
+ that needs the camera state directly.
102
+
103
+ `CameraRig` also takes `viewportWidth` and `viewportHeight`, the size of the window the camera
104
+ looks through (default: the composition's size). A rig nested in a smaller box, such as
105
+ `DirectedShot`, passes that box's size. `resolveCamera(keyframes, frame)` returns the camera
106
+ state the rig renders at a frame, for code that needs to know where the camera is without
107
+ rendering.
108
+
109
+ `useCamera()` returns the camera state plus `stageWidth` and `stageHeight` (type `CameraInfo`), or
110
+ `null` outside a rig. `projectToScreen(camera, viewportWidth, viewportHeight, x, y)` returns where
111
+ a stage point lands on screen, through the same rotation, scale and perspective the rig applies.
112
+
113
+ ### `DirectedShot`
114
+
115
+ A nested camera rig that turns a flat capture into a directed move: a push-in on one point,
116
+ an optional tilt, optional depth of field and motion blur, handheld sway, and a cursor, all in
117
+ the capture's own pixel space. It owns its own `CameraRig`, so it sits inside a `CinematicScene`
118
+ (or anywhere) without touching that scene's camera.
119
+
120
+ ```tsx
121
+ <DirectedShot
122
+ src={staticFile("images/dashboard.png")}
123
+ focus={{ x: 1560, y: 280 }}
124
+ push={1.9}
125
+ tilt={{ y: -4, x: 2 }}
126
+ move={{ from: 0, to: 70 }}
127
+ cursor={{ path: [{ frame: 0, x: 900, y: 600 }, { frame: 55, x: 1500, y: 300 }], clicks: [60] }}
128
+ />
129
+ ```
130
+
131
+ | Prop | Type | Default | Notes |
132
+ |---|---|---|---|
133
+ | `src` | `string` | | Image URL, usually `staticFile("images/<beat>.png")`. Use `children` for anything else |
134
+ | `focus` | `{ x, y }` | the middle | The point in the capture, in capture pixels, the move pushes into |
135
+ | `push` | `number` | `1.4` | End zoom relative to fitting the whole capture in the box. `1` holds the full frame. Keep it at or under `1.6` when the capture has text |
136
+ | `shot` | `ShotName` | | A named move (see Shots below). It supplies zoom, start and end position, tilt, easing and length; `push`, `tilt` and `move` given explicitly win |
137
+ | `tilt` | `{ x?, y?, z? }` | | Rotation in degrees at the end of the move. 2 to 6 reads as depth |
138
+ | `move` | `{ from?, to?, easing? }` | `0` to `90` | Frames, local to the scene. Defaults to `E.cinematic`; a `shot` sets its own length |
139
+ | `depthOfField` | `number` | `0` | Blur in px away from the focal point. Off by default: blur smears product text. Never use it on a shot whose text has to be read |
140
+ | `protect` | `{ x, y, width, height }[]` | | Regions of the capture, in capture pixels, that stay sharp under `depthOfField`. Hard edged, and they follow the camera through a push and a tilt |
141
+ | `rackTo` | `{ x, y }` | | Rack focus: the sharp region slides from `focus` to this point, in capture pixels, across the move |
142
+ | `blur` | `boolean \| { shutterAngle?, samples? }` | on for `whip`, else off | Motion blur while the camera moves, and only then. `true` is a 180 degree shutter with 8 samples. Costs `samples` times the render work for those frames |
143
+ | `handheld` | `number` | `0` | Handheld sway, the largest drift in px at 1080p. 3 to 8 reads as a person holding the camera |
144
+ | `shake` | `number[]` | | Local frames of impacts. The shot jolts 12px (at 1080p) on each and settles within about 24 frames |
145
+ | `cursor` | `{ path, clicks? }` | | A `CursorActor` path and click frames, in capture pixels. The cursor sits above the blur layers and is never blurred |
146
+ | `captureWidth`, `captureHeight` | `number` | `1920`, `1080` | The capture's natural size |
147
+ | `width`, `height` | `number` | the composition | The box the shot fills |
148
+
149
+ The move starts on the whole capture and ends pushed in on `focus`. The end centre is clamped
150
+ so the camera never leaves the capture (empty stage reads as a mistake). Sway and shake move the
151
+ whole shot, cursor included, and the shot is scaled up slightly so the shift never shows an edge;
152
+ with neither set, nothing extra is rendered.
153
+
154
+ `directedKeyframes({ W, H, captureWidth, captureHeight, focus?, push?, tilt?, move?, shot? })`
155
+ returns the two camera keyframes a `DirectedShot` renders with, so `resolveCamera` can read the
156
+ camera at any frame without mounting the component.
157
+
158
+ | Start of the move | End of the move |
159
+ |---|---|
160
+ | ![DirectedShot at frame 0: the whole capture](img/api/directedshot-start.png) | ![DirectedShot at the end of the move: pushed in on the Done column and tilted, with its text sharp and the cursor on the target](img/api/directedshot-end.png) |
161
+
162
+ ### Shots: `resolveShot`, `SHOT_NAMES`
163
+
164
+ `<DirectedShot shot="whip" />` applies a named move. Each is plain data from a pure function, so a
165
+ scene can read it too: `resolveShot(name, { focus?, push?, captureWidth?, captureHeight? })` returns
166
+ `{ startScale, endScale, startFocus, endFocus, startTilt, tilt, easing, moveFrames, blur }`
167
+ (zoom relative to fitting the whole capture, camera positions in capture pixels, tilt in degrees).
168
+ `push` overrides the preset's zoom.
169
+
170
+ | Shot | The move | Zoom | Frames |
171
+ |---|---|---|---|
172
+ | `pushIn` | From the whole capture in to the focus. The default workhorse | 1 to 1.4 | 90 |
173
+ | `pullOut` | Starts close on the focus and backs out to the whole capture, to reveal context | 1.5 to 1 | 90 |
174
+ | `pan` | Same zoom throughout; the camera slides sideways onto the focus with a slight yaw | 1.35 | 75 |
175
+ | `whip` | A fast slide in from the side, `E.whip` easing, motion blur on | 1.5 | 18 |
176
+ | `orbit` | The camera swings around the focus: `rotY` goes from -5 to +5 degrees | 1.15 to 1.35 | 120 |
177
+ | `dutch` | A push that rolls the horizon off level, 3.5 degrees | 1 to 1.35 | 90 |
178
+ | `hold` | The whole capture with a 2% creep so it is never dead. For action inside the frame: a cursor, typing | 1 to 1.02 | 60 |
179
+ | `drift` | Ambient: a long, small move toward the focus with a sub-degree wander in the tilt | 1 to 1.06 | 150 |
180
+
181
+ Each move, caught half way through (the dashboard capture, focus on the Done column):
182
+
183
+ | | | |
184
+ |---|---|---|
185
+ | ![pushIn half way: the board partly zoomed toward the Done column](img/api/shot-pushin.png) `pushIn` | ![pullOut half way: backing away from the Done column to reveal the board](img/api/shot-pullout.png) `pullOut` | ![pan half way: the camera sliding sideways onto the Done column with a slight yaw](img/api/shot-pan.png) `pan` |
186
+ | ![whip mid move: the board streaked sideways by motion blur](img/api/shot-whip.png) `whip` | ![orbit half way: the board seen from a slight angle, swinging around the Done column](img/api/shot-orbit.png) `orbit` | ![dutch half way: a push in with the horizon rolled off level](img/api/shot-dutch.png) `dutch` |
187
+
188
+ ### `LayeredShot`
189
+
190
+ ![LayeredShot mid push and tilt: the Done column's first card floats in front of the board and has slid against it](img/api/layeredshot.png)
191
+
192
+ A `DirectedShot` whose picture is a stack of layers instead of one flat image: a background plus
193
+ the elements that float above it, each at its own depth, so a push and a tilt make them slide
194
+ against each other. At rest the stack composites to the same picture as the flat capture. Takes
195
+ every `DirectedShot` prop except `src` and `children`, plus:
196
+
197
+ | Prop | Type | Default | Notes |
198
+ |---|---|---|---|
199
+ | `manifest` | `{ width, height, background, layers }` | | The capture's size, the flat background URL and the layers |
200
+ | `background`, `layers` | `string`, `ShotLayer[]` | | Instead of `manifest`; give `captureWidth` and `captureHeight` too |
201
+ | `backgroundDepth` | `number` | `1` | Depth of the background plane, a notch behind the focal plane |
202
+ | `maxBlur` | `number` | `0` | Blur per unit of depth, in px. Off, because the layers are real UI |
203
+
204
+ ```ts
205
+ type ShotLayer = { src: string; x: number; y: number; width: number; height: number; depth: number };
206
+ // x, y, width, height in capture pixels; depth > 0 is behind the focal plane, < 0 in front
207
+ ```
208
+
209
+ ### `MotionBlur`
210
+
211
+ ![A rounded blue card with two text lines, moving fast to the right, smeared into a streak at its leading and trailing edges](img/api/motionblur.png)
212
+
213
+ Wraps children in Remotion's `CameraMotionBlur`, but only for the frames of a window. Outside it the
214
+ children render directly, as if the wrapper were not there.
215
+
216
+ | Prop | Type | Default | Notes |
217
+ |---|---|---|---|
218
+ | `from` | `number` | `0` | First frame of the window, local to the scene |
219
+ | `to` | `number` | never | Last frame of the window, inclusive |
220
+ | `shutterAngle` | `number` | `180` | Degrees, 0 to 360. Larger smears more |
221
+ | `samples` | `number` | `8` | Sub-frame renders blended. More is smoother and slower |
222
+
223
+ ### Handheld and impact shake
224
+
225
+ Small deterministic camera motion, as pure functions and hooks. `DirectedShot` uses them for its
226
+ `handheld` and `shake` props; use them directly to move anything else.
227
+
228
+ ```ts
229
+ handheldOffset(frame, amount, seed = 1): { x, y, rot } // px and degrees; |x|, |y| <= amount
230
+ useHandheld(amount, { holds?, seed?, ramp? }): { x, y, rot } // scaled to the composition height
231
+ impactShake(frame, impactFrames, { amplitude = 12, decay = 8 }): { x, y, rot }
232
+ useImpactShake(impactFrames, { amplitude?, decay? }): { x, y, rot }
233
+ ```
234
+
235
+ Sway is two unrelated sines per axis, so the path does not repeat. `holds` is a list of
236
+ `[from, to]` frame windows where `useHandheld` is exactly zero (the camera is set down while a
237
+ cursor clicks or a block of text is read), easing in and out over `ramp` frames (default 6).
238
+ Shake is exactly zero before an impact frame, at full `amplitude` on it, and below 5% of it
239
+ after `3 * decay` frames. All of it is a function of the frame, never `Math.random()`.
240
+
241
+ ---
242
+
243
+ ## Motion
244
+
245
+ ### `E` and `SPRING`
246
+
247
+ ```ts
248
+ E.cinematic // default move: slow out, soft landing
249
+ E.whip // aggressive, for cuts and fast pans
250
+ E.drift // gentle ambient motion inside a shot
251
+ E.snap // snappy UI reaction, button press, blip reveal
252
+ E.sine // symmetric ease in and out along a sine: calm, even, no hard push
253
+ E.expo // symmetric ease in and out along an exponential: still at the ends, fast through the middle
254
+
255
+ SPRING.soft SPRING.pop SPRING.heavy
256
+ ```
257
+
258
+ **Linear easing fails QC.** There is no linear preset on purpose.
259
+
260
+ ### `tween`, `pop`, `jitter`, `staggerDelay`
261
+
262
+ ```ts
263
+ tween(frame, [fromFrame, toFrame], [fromValue, toValue], E.cinematic): number
264
+ pop(frame, fps, atFrame): number // spring entrance scalar
265
+ jitter(seed, n): number // deterministic 0..1, same every render
266
+ staggerDelay(index, step = 3): number // 3 frames at 30fps is 100ms
267
+ ```
268
+
269
+ `jitter` is deterministic. Never use `Math.random()` in a scene: every frame renders
270
+ in a separate process and random values differ per frame, which shows up as flicker.
271
+
272
+ ---
273
+
274
+ ## Text
275
+
276
+ ### `TitleSlam`
277
+
278
+ | Prop | Type | Default |
279
+ |---|---|---|
280
+ | `text` | `string` | required |
281
+ | `at` | `number` | required |
282
+ | `fontSize` | `number` | `120` |
283
+ | `color` | `string` | `color.textPrimary` |
284
+ | `glowColor` | `string` | |
285
+ | `align` | `"center" \| "left"` | `"center"` |
286
+ | `sfx` | `boolean` | `false` |
287
+
288
+ Per word entrance. Renders nothing before `at`. `sfx` adds a blip per word; it is off by
289
+ default because a blip every few frames sounds like a ticking clock under a title.
290
+
291
+ ### `Caption`
292
+
293
+ | Prop | Type | Default |
294
+ |---|---|---|
295
+ | `text` | `string` | required |
296
+ | `at` | `number` | required |
297
+ | `out` | `number` | |
298
+ | `fontSize` | `number` | `34` |
299
+ | `position` | `"bottom" \| "top" \| "left" \| "right" \| "auto"` | `"bottom"` |
300
+ | `avoid` | `{ x, y, width, height }` | |
301
+
302
+ Sits 84px from the chosen edge. Put it in `overlay`, not `children`. Vary `position` from scene to
303
+ scene; the same spot in every scene covers the same part of the product every time.
304
+
305
+ - `"auto"` with `avoid` (the part of the frame that carries the product, in composition pixels)
306
+ takes the edge with the most free room beside that rect, counting only edges where the card fits.
307
+ Ties go bottom, top, right, left. With no `avoid` it stays at the bottom.
308
+ - The reveal is always finished within 8 frames of `at`, however many words there are: the
309
+ per-word stagger shrinks as the caption grows (2 frames for short ones), so no frame a reviewer
310
+ lands on shows a half-typed line.
311
+ - The card is at most `min(1400, 0.9 * composition width)` wide, so it fits a 1080 wide
312
+ vertical frame. `"left"` and `"right"` use a column of `min(640, 0.34 * width)`.
313
+ - `captionLayout(position, avoid, width, height, fontSize)` returns `{ side, maxWidth }`, the
314
+ rule above as a function.
315
+
316
+ ---
317
+
318
+ ## Panels
319
+
320
+ ### `BrowserFrame`
321
+
322
+ | Prop | Type | Default |
323
+ |---|---|---|
324
+ | `url` | `string` | required |
325
+ | `width` | `number` | `1360` |
326
+ | `height` | `number` | `850` |
327
+ | `dark` | `boolean` | `true` |
328
+ | `children` | `ReactNode` | required |
329
+
330
+ Chrome bar is 56px, so `height` must be the capture height plus 56 or the page is
331
+ letterboxed. `scaffold_scene` computes this from the real PNG for you.
332
+
333
+ Screenshots may only appear inside a `BrowserFrame`. Recordings and AI clips must
334
+ not: wrapping generated footage in browser chrome makes it look like a captured
335
+ page, which STYLE.md's provenance rule forbids.
336
+
337
+ ### `CodePanel`
338
+
339
+ | Prop | Type | Default |
340
+ |---|---|---|
341
+ | `title` | `string` | required |
342
+ | `lines` | `CodeLine[]` | required |
343
+ | `width` | `number` | `860` |
344
+ | `height` | `number` | `640` |
345
+ | `fontSize` | `number` | `22` |
346
+ | `scroll` | `number` | `0` | px translateY, drive with a tween |
347
+ | `highlight` | `number[]` | `[]` | 0-based line indexes |
348
+
349
+ ```ts
350
+ type Token = { t: string; c?: "kw" | "str" | "fn" | "cm" | "num" | "plain" };
351
+ type CodeLine = Token[];
352
+ ```
353
+
354
+ ```tsx
355
+ lines={[
356
+ [{ t: "{", c: "plain" }],
357
+ [{ t: ' "name"', c: "str" }, { t: ": ", c: "plain" }, { t: '"value"', c: "str" }],
358
+ ]}
359
+ ```
360
+
361
+ ### `ChecklistPanel`
362
+
363
+ | Prop | Type | Default |
364
+ |---|---|---|
365
+ | `title` | `string` | `"Community Standards"` |
366
+ | `items` | `ChecklistItem[]` | required |
367
+ | `width` | `number` | `760` |
368
+ | `fontSize` | `number` | `27` |
369
+ | `sfx` | `boolean` | `true` |
370
+
371
+ ```ts
372
+ type ChecklistItem = { label: string; flipAt?: number }; // omit flipAt to stay unchecked
373
+ ```
374
+
375
+ `flipAt` is an absolute scene frame.
376
+
377
+ ### `TerminalReplay`
378
+
379
+ | Prop | Type | Default |
380
+ |---|---|---|
381
+ | `steps` | `TermStep[]` | required |
382
+ | `title` | `string` | `"Project"` |
383
+ | `width` | `number` | `1280` |
384
+ | `fontSize` | `number` | `26` |
385
+ | `cps` | `number` | `16` | characters per second |
386
+ | `sfx` | `boolean` | `true` |
387
+ | `trailingPrompt` | `boolean` | `true` |
388
+
389
+ ```ts
390
+ type TermLine = { text: string; color?: string; glow?: boolean; bold?: boolean };
391
+ type TermStep =
392
+ | { type: "cmd"; text: string }
393
+ | { type: "out"; lines: TermLine[]; stagger?: number; preDelay?: number }
394
+ | { type: "pause"; frames: number };
395
+ ```
396
+
397
+ Terminals are always this component, never a screen recording of a terminal.
398
+
399
+ `computeTerminalTimeline(steps, fps, cps)` returns `{ items, totalFrames }`, so camera
400
+ keyframes can land frame-exact on content events rather than being guessed.
401
+
402
+ ### `CursorActor`
403
+
404
+ | Prop | Type | Default |
405
+ |---|---|---|
406
+ | `path` | `CursorKeyframe[]` | required |
407
+ | `clicks` | `number[]` | `[]` | frames where a click ring fires |
408
+ | `scale` | `number` | `1.6` |
409
+ | `sfx` | `boolean` | `true` |
410
+
411
+ ```ts
412
+ type CursorKeyframe = { frame: number; x: number; y: number };
413
+ ```
414
+
415
+ Coordinates are stage space. Movement is eased automatically; never linear. Each segment bows
416
+ sideways by up to 6% of its length (the side alternates from one segment to the next) and swings
417
+ 2.5% of its length past the target before settling, so the cursor moves like a hand. Progress
418
+ along the segment still follows `E.cinematic`, and on a keyframe's own frame the cursor is exactly
419
+ on the keyframe, so a click ring lands on its target. `cursorPositionAt(path, frame)` returns the
420
+ position `CursorActor` draws at a frame.
421
+
422
+ ### `RepoCta`
423
+
424
+ | Prop | Type | Default |
425
+ |---|---|---|
426
+ | `owner` | `string` | required |
427
+ | `name` | `string` | required |
428
+ | `description` | `string` | required |
429
+ | `chips` | `string[]` | required |
430
+ | `titleText` | `string` | required |
431
+ | `durationInFrames` | `number` | `270` |
432
+
433
+ A whole scene, not a panel. Do not wrap it in a `CinematicScene`; it brings its own.
434
+ No star action by default. Laid out from the composition size, so the card is centred in
435
+ 1920x1080 and in a 1080x1920 reel.
436
+
437
+ ---
438
+
439
+ ## Sound
440
+
441
+ Synthesized by `scripts/gen-sfx.sh` with ffmpeg, except `typing-effect.mp3`, a
442
+ copyright-free recording, so a rendered video carries no third-party audio rights.
443
+ Regenerate the synthesized files with `bash scripts/gen-sfx.sh`.
444
+
445
+ | Component | Props | Use |
446
+ |---|---|---|
447
+ | `TypingSfx` | `charFrames`, `volume?` (1) | The typing recording, played across each typed run |
448
+ | `Click` | `at`, `volume?` | Cursor click |
449
+ | `Whoosh` | `at`, `volume?` | Camera move or cut |
450
+ | `Blip` | `at`, `volume?` (0.3) | UI reveal |
451
+ | `SuccessChime` | `at`, `volume?` (0.35) | Completion |
452
+ | `Bell` | `at`, `volume?` (0.3) | Heavier completion |
453
+ | `MusicBed` | `durationInFrames`, `volume?` (0.16) | Ambient bed, loops |
454
+
455
+ `TerminalReplay` emits its own typing sounds. Pass `sfx={false}` to silence it.
456
+
457
+ Narration is separate: `generate_narration` writes
458
+ `public/audio/vo/<beatId>.mp3` and `stitch_composition` picks it up.
459
+
460
+ ---
461
+
462
+ ## Music clock
463
+
464
+ The score's grid as scene-local frames, so a cut, a reveal or a glow can land on the music.
465
+ `stitch_composition` copies the bed's `<stem>.cues.json` next to the composition and mounts
466
+ `MusicClockProvider` with each beat's start frame; a scene just asks for its own beat.
467
+
468
+ ```tsx
469
+ const clock = useMusicClock("reveal"); // the beat id, exactly as in beats.json
470
+ const hit = clock.at(8); // first downbeat of bar 8, as a frame local to this scene
471
+ const glow = clock.beatPulse(); // 1 on each beat, decaying to 0 before the next
472
+ if (clock.onDownbeat()) { /* a bar starts on this frame */ }
473
+ ```
474
+
475
+ ![useMusicClock: on a downbeat the pulse is full](img/api/musicclock-downbeat.png)
476
+ ![...three frames later it has decayed](img/api/musicclock-decay.png)
477
+
478
+ Bars count from 0 at the start of the track, in 4/4 (what `compose_score` writes), and the bed
479
+ is mounted at composition frame 0. `useMusicClock(beatId)` must be called inside that beat's
480
+ scene, because the pulse helpers read the scene's current frame.
481
+
482
+ | Member | Notes |
483
+ |---|---|
484
+ | `at(bar, beat?)` | Scene-local frame of that bar and beat (`beat` may be fractional: `at(8, 2.5)`). Rounded to the nearest frame; negative when it is before the scene starts |
485
+ | `position(frame)` | `{ bar, beat }` a scene-local frame falls in |
486
+ | `impact(label)` | Scene-local frame of the score's impact point with that label, or `null` |
487
+ | `sectionAt(frame)` | The section label a frame falls in, or `null` without sections |
488
+ | `beatPulse({ decay?, strongOnly? })` | 1 on a beat, decaying to 0 over `decay` (0.6) of a beat; `strongOnly` pulses on downbeats only |
489
+ | `onBeat()`, `onDownbeat()` | True on the frame a beat or a bar starts, using the same rounding as `at` |
490
+ | `available`, `bpm`, `framesPerBeat`, `framesPerBar` | `available` is false when the bed has no cues file; the clock then runs a 120 bpm grid so a scene still renders |
491
+
492
+ `createMusicClock({ cues, fps, sceneStartFrame, frame })` is the pure core, for tests.
493
+ `plan_beats` with `snapToBars` plans beat boundaries onto the same downbeats.
494
+
495
+ ---
496
+
497
+ ## Narration words
498
+
499
+ When each word of a beat's narration is said, for a scene that points at the word being spoken.
500
+ `generate_narration` (edge-tts engine) writes `public/audio/vo/<beatId>.words.json`, `stitch_composition`
501
+ copies it next to the composition and mounts it with `NarrationWordsProvider`. See NARRATION.md.
502
+
503
+ ### `useNarrationWords(beatId)`
504
+
505
+ Call it inside the scene of beat `beatId`.
506
+
507
+ | Member | Type | Notes |
508
+ |---|---|---|
509
+ | `available` | `boolean` | False when the beat has no timings (another engine, or none generated) |
510
+ | `words` | `{ word, startMs, endMs }[]` | In the clip as written |
511
+ | `wordAt(frame?)` | `{ index, word, speaking } \| null` | The word being said at a scene-local frame (default: the current one), or in a pause the last one said (`speaking: false`). `null` before the first word |
512
+ | `frameOfWord(index)` | `number \| null` | The scene-local frame word `index` starts on, rounded to the nearest frame |
513
+
514
+ `createNarrationWords(words, fps, frame?)` is the same thing without Remotion, for tests.
515
+
516
+ ---
517
+
518
+ ## Look pass
519
+
520
+ `FilmGrain`, `Vignette`, `ColorGrade`, `LookPass`. `CinematicScene` applies these, so
521
+ reach for them only when compositing outside a scene.
522
+
523
+ ---
524
+
525
+ ## Tokens
526
+
527
+ ```ts
528
+ color.bg0 color.bg1 color.panel color.panelBorder
529
+ color.textPrimary color.textSecondary
530
+ color.accent color.accentAlt color.success color.warn color.danger
531
+ color.lightBg color.lightCard color.lightShadow
532
+
533
+ font.ui // "Inter"
534
+ font.mono // "JetBrains Mono"
535
+
536
+ radius.window // 12
537
+ radius.card // 10
538
+ radius.pill // 999
539
+
540
+ glow(color, strength = 1) // returns { textShadow }
541
+ panelShadow(dark = true) // returns a box-shadow string
542
+ ```
543
+
544
+ Use tokens rather than literal hex, so a per-video theme can override them.
545
+
546
+ ---
547
+
548
+ ## Design system
549
+
550
+ ### `defineDesignSystem(overrides?)`
551
+
552
+ Builds one video's `DesignSystem`: palette, type scale, layout grid, a signature
553
+ motif, a motion personality, a transition vocabulary and a texture pass. Call it
554
+ once in that video's own `src/videos/<name>/design.ts`:
555
+
556
+ ```ts
557
+ export const design = defineDesignSystem({
558
+ motif: "pixel-grid",
559
+ motion: { cameraEnergy: "energetic" },
560
+ });
561
+ ```
562
+
563
+ Anything omitted falls back to the current brand tokens (`color`/`font`, already
564
+ brand-applied if `extract_brand` ran) and STYLE.md's own defaults. The result is a
565
+ plain object, frozen at the point `design.ts` is imported, not a live binding: a
566
+ later `applyBrand` call never reaches into an already-built `DesignSystem`.
567
+
568
+ | Field | Type | Notes |
569
+ |---|---|---|
570
+ | `color`, `font` | tokens | Seeded from the current brand tokens |
571
+ | `typeScale` | `{ display, headline, body, mono: [min, max] }` | px |
572
+ | `grid` | `{ marginX, marginTop, marginBottom }` | px. Default 150 / 130 / 110 at 1920x1080; scaled to `stage` when one is passed (84 / 231 / 196 at 1080x1920). An explicit `grid` wins |
573
+ | `stage` (input only) | `{ width, height }` | The frame the video renders at, default 1920x1080. Pass `{ width: 1080, height: 1920 }` in a native vertical project. Not stored on the result |
574
+ | `motif` | `"pixel-grid" \| "rounded-soft" \| "geometric" \| "editorial" \| "void-spark"` | Default `"rounded-soft"`. `"void-spark"` is Supernova mode's |
575
+ | `motion` | `{ easing, staggerMs, cameraEnergy, cutRhythmSeconds }` | `easing` names an `E.*` preset by string, not a function reference, so the system stays JSON-serializable |
576
+ | `transitions` | `string[]` | Preference order, default `["cut", "whip", "fade", "push", "wipe", "light-leak"]` |
577
+ | `texture` | `{ grainOpacity, vignetteStrength }` | STYLE.md's default ranges |
578
+
579
+ ### `contrastRatio(hexA, hexB)`
580
+
581
+ WCAG relative-luminance contrast ratio, 1 (no contrast) to 21 (black on white).
582
+ Reach for it directly when a bespoke scene picks a text colour against a
583
+ background the design system doesn't already pair.
584
+
585
+ Several primitives below take an optional `design?: DesignSystem` prop: pass
586
+ that video's own `design` export and they read palette, motif and motion from
587
+ it instead of the package's global tokens.
588
+
589
+ ---
590
+
591
+ ## Kinetic text
592
+
593
+ ### `Words`
594
+
595
+ ![Words: a masked word reveal with one accented word](img/api/words.png)
596
+
597
+ Per-word masked reveal. Never a plain opacity fade (STYLE.md): each word clips
598
+ in from below on its own stagger, and clips back out the same way if `out` is
599
+ set.
600
+
601
+ | Prop | Type | Default | Notes |
602
+ |---|---|---|---|
603
+ | `text` | `string` | required | Split on spaces, one reveal per word |
604
+ | `at` | `number` | required | Frame the first word starts |
605
+ | `out` | `number` | | Frame the exit starts. Omit to leave the line on screen |
606
+ | `size` | `number` | `72` | |
607
+ | `weight` | `number` | `800` | |
608
+ | `color` | `string` | `color.textPrimary` | |
609
+ | `accent` | `Record<number, string>` | `{}` | Word index to accent colour, for one word landing harder than the rest |
610
+ | `stagger` | `number` | | Frames between word starts. Explicit value always wins |
611
+ | `design` | `DesignSystem` | | Without `stagger`, reads `design.motion.staggerMs` at the composition's fps; with neither, falls back to 3 frames |
612
+ | `align` | `"left" \| "center" \| "right"` | `"left"` | |
613
+ | `font`, `tracking`, `lineHeight`, `maxWidth`, `glow`, `italic`, `style` | | | |
614
+
615
+ ### `useTyped(text, at, cps?)`
616
+
617
+ Typewriter hook. Returns `{ visible, done, charFrames, end }`: the visible slice
618
+ of `text` at the current frame, plus the per-character reveal frames, so a
619
+ caller can drive `TypingSfx` off the exact same numbers the visible text uses.
620
+ `cps` defaults to 22 characters per second.
621
+
622
+ ### `Caret`
623
+
624
+ ![useTyped and Caret: a typed command with a blinking caret in a Window](img/api/typed-caret.png)
625
+
626
+ | Prop | Type | Default |
627
+ |---|---|---|
628
+ | `h` | `number` | `40` |
629
+ | `color` | `string` | `color.textPrimary` |
630
+ | `blink` | `boolean` | `true` |
631
+
632
+ Blinking text caret, sized to a line height. Pair with `useTyped` for a typed line.
633
+
634
+ ---
635
+
636
+ ## Pixel-grid family
637
+
638
+ ### `DotText`
639
+
640
+ ![DotText: 5x7 dot-matrix text](img/api/dottext.png)
641
+
642
+ 5x7 dot-matrix text, built pixel by pixel rather than drawn with a font file.
643
+
644
+ | Prop | Type | Default | Notes |
645
+ |---|---|---|---|
646
+ | `text` | `string` | required | Uppercased; unsupported characters render as a blank cell |
647
+ | `at` | `number` | required | |
648
+ | `px` | `number` | `14` | px per cell |
649
+ | `colors` | `string[] \| "cycle"` | `"cycle"` | `"cycle"` uses the token/design accent, accentAlt, success, warn four |
650
+ | `solid` | `string` | | Overrides `colors` with one flat colour for every pixel |
651
+ | `build` | `"scatter" \| "wipe" \| "none"` | `"wipe"` | |
652
+ | `out` | `number` | | Frame the exit starts |
653
+ | `glow` | `number` | `0.6` | |
654
+ | `seed` | `number` | `3` | |
655
+
656
+ ### `PixelLogo`
657
+
658
+ ![PixelLogo: a four-square mark assembled from its own rects](img/api/pixellogo.png)
659
+
660
+ Assembles a pixel-grid logo from its own rect shapes, each flying in from a ring
661
+ around the mark (`build="scatter"`) or rendered flat (`build="none"`). The ring's
662
+ centre and spread come from the shapes' own bounding box, so this works for any
663
+ pixel-grid logo.
664
+
665
+ | Prop | Type | Default | Notes |
666
+ |---|---|---|---|
667
+ | `shapes` | `PixelShape[]` | required | `{ x, y, width, height, color }`, the same shape `extract_brand` already produces for an SVG rect |
668
+ | `at` | `number` | required | |
669
+ | `scale` | `number` | `1` | Output px per source (viewBox) unit |
670
+ | `build` | `"scatter" \| "none"` | `"scatter"` | |
671
+ | `glow` | `number` | `0.9` | |
672
+ | `out` | `number` | | Frame the exit starts |
673
+ | `seed` | `number` | `5` | |
674
+ | `style` | `CSSProperties` | | |
675
+
676
+ ### `PixelWipe`
677
+
678
+ ![PixelWipe: a pixel-grid transition part-way through clearing](img/api/pixelwipe.png)
679
+
680
+ Transition pair, pixel-grid's natural home but usable standalone. Call both
681
+ ends of a cut with the same `cell`/`seed` so the out and the following in read
682
+ as one continuous move across the cut.
683
+
684
+ | Prop | Type | Default | Notes |
685
+ |---|---|---|---|
686
+ | `mode` | `"in" \| "out"` | required | `"in"`: starts fully covered, clears. `"out"`: finishes covered at the scene's last frame |
687
+ | `at` | `number` | | Defaults to frame 0 (`in`) or `durationInFrames - dur - 1` (`out`) |
688
+ | `dur` | `number` | `12` | |
689
+ | `cell` | `number` | `60` | |
690
+ | `seed` | `number` | `1` | |
691
+ | `bg`, `tint` | | | Default to `design`'s colours if `design` is passed, else the package tokens |
692
+ | `design` | `DesignSystem` | | Optional; only informs the default tint and background |
693
+
694
+ ---
695
+
696
+ ## Backgrounds and transitions
697
+
698
+ | Component | Props | Notes |
699
+ |---|---|---|
700
+ | `Atmosphere` | `intensity?` (1), `colors?`, `seed?` (2) | Soft drifting radial colour fields behind everything, one blob per colour |
701
+ | `DotGrid` | `gap?` (36), `color?` (`#ffffff`), `opacity?` (0.05), `w?`, `h?` (composition size) | Faint texture pass behind a constructed (non-capture) panel. Covers the whole frame by default, 1080x1920 included |
702
+ | `Flash` | `at`, `color?` (`#ffffff`), `strength?` (0.55), `dur?` (10) | Brief exposure flash on a hard hit |
703
+ | `Black` | `from`, `to?` | Holds solid black. Omit `to` to hold forever |
704
+ | `Letterbox` | `amount?` (1) | Bars for a cinematic moment. `amount` scales the bar height, 1 = 64/1080 of the frame height (64px at 1080, about 114px at 1920 tall) |
705
+ | `TransitionOverlay` | `type` (`"fade"`, `"whip"`, `"push"`, `"wipe"`, `"light-leak"`), `length?` | A transition drawn over a hard cut, in the colour tokens. Mount it in a `Sequence` that starts `length / 2` frames before the cut (`layout="none"`): it peaks on the cut frame and is clear on its first and last frames. `length` is its total frames and defaults to the Sequence's. `stitch_composition` does this for every beat whose `transition` is not `"cut"`, so a scene rarely mounts one by hand |
706
+
707
+ | | |
708
+ |---|---|
709
+ | ![Atmosphere: drifting colour fields](img/api/atmosphere.png) `Atmosphere` | ![DotGrid: a faint dot texture behind a Glass panel](img/api/dotgrid.png) `DotGrid` |
710
+ | ![Flash: the frame during an exposure flash](img/api/flash.png) `Flash` | ![Letterbox: cinematic bars](img/api/letterbox.png) `Letterbox` |
711
+ | ![Black: a solid black frame, with the scene held under it](img/api/black.png) `Black` | |
712
+
713
+ `TransitionOverlay`, one still per type, a few frames into the cut (a blue "before" scene turning into a dark "after" one;
714
+ the light leak is at its peak on the cut itself):
715
+
716
+ | | | |
717
+ |---|---|---|
718
+ | ![fade: the blue scene dimming toward the dark one](img/api/transitionoverlay-fade.png) `fade` | ![whip: a streaked, blurred sweep across the frame as one scene is thrown aside](img/api/transitionoverlay-whip.png) `whip` | ![push: a thin blue strip of the old scene left on the left as the dark scene pushes in](img/api/transitionoverlay-push.png) `push` |
719
+ | ![wipe: an angled edge with a bright line sweeping across, dark scene on the left and blue scene on the right](img/api/transitionoverlay-wipe.png) `wipe` | ![light-leak: a warm wash of light bleeding across the cut](img/api/transitionoverlay-light-leak.png) `light-leak` | |
720
+
721
+ ---
722
+
723
+ ## UI chrome
724
+
725
+ ### `Window`
726
+
727
+ ![Window with JsonView: real JSON revealed line by line](img/api/window-jsonview.png)
728
+
729
+ | Prop | Type | Default | Notes |
730
+ |---|---|---|---|
731
+ | `title` | `string` | | Omit for no title bar |
732
+ | `width` | `number` | required | |
733
+ | `height` | `number` | | |
734
+ | `light` | `boolean` | | Light chrome instead of the dark default, matches `BrowserFrame`'s light mode |
735
+ | `glow` | `string` | | Hex colour for an outer glow, when this window is the shot's focal point |
736
+ | `titleRight` | `ReactNode` | | |
737
+ | `children` | `ReactNode` | required | |
738
+
739
+ ### `JsonView`
740
+
741
+ Syntax-coloured JSON of a real object, revealed line by line. An actually-rendered
742
+ view, not a screenshot of a JSON blob (the same ground-truth bias as `TerminalReplay`
743
+ being DOM text instead of a recorded terminal).
744
+
745
+ | Prop | Type | Default | Notes |
746
+ |---|---|---|---|
747
+ | `value` | `unknown` | required | `JSON.stringify(value, null, 2)`, line by line |
748
+ | `at` | `number` | `0` | |
749
+ | `perLine` | `number` | `1.2` | Frames between each line's reveal |
750
+ | `fontSize` | `number` | `20` | |
751
+ | `highlight` | `(line, i) => string \| undefined` | | Returns a hex accent to highlight a line with |
752
+ | `maxLines` | `number` | `400` | |
753
+ | `scroll` | `number` | `0` | |
754
+
755
+ ### `Check`, `Cross`
756
+
757
+ ![Check and Cross inside a Glass panel](img/api/check-cross-glass.png)
758
+
759
+ | Prop | Type | Default |
760
+ |---|---|---|
761
+ | `size` | `number` | required |
762
+ | `color` | `string` | `color.success` (`Check`) / `color.danger` (`Cross`) |
763
+ | `at` | `number` | `0`, `Check` only (draws its tick stroke in) |
764
+
765
+ ### `ToolChip`
766
+
767
+ ![ToolChip with a finished check, and two Pills](img/api/toolchip-pill.png)
768
+
769
+ | Prop | Type | Default | Notes |
770
+ |---|---|---|---|
771
+ | `name` | `string` | required | |
772
+ | `at` | `number` | required | |
773
+ | `doneAt` | `number` | | Swaps the spinner for a `Check` once passed |
774
+ | `color` | `string` | `color.accent` | |
775
+ | `size` | `number` | `20` | |
776
+
777
+ "▸ tool_name" chip: spinner while running, a check once done.
778
+
779
+ ### `Pill`
780
+
781
+ | Prop | Type | Default |
782
+ |---|---|---|
783
+ | `children` | `ReactNode` | required |
784
+ | `color` | `string` | `color.textSecondary` |
785
+ | `size` | `number` | `18` |
786
+ | `style` | `CSSProperties` | |
787
+
788
+ ### `Glass`
789
+
790
+ | Prop | Type | Default |
791
+ |---|---|---|
792
+ | `children` | `ReactNode` | required |
793
+ | `style` | `CSSProperties` | |
794
+ | `pad` | `number` | `28` |
795
+
796
+ Frosted glass panel: `backdrop-filter: blur`, for a floating card over motion.
797
+
798
+ ### `ChapterHud`
799
+
800
+ ![ChapterHud: the chapter label top left and the progress rail along the bottom](img/api/chapterhud.png)
801
+
802
+ Screen space, meant for a scene's `overlay` (like `Caption`), not camera-transformed.
803
+ A dot-matrix chapter number and label top-left, a progress rail bottom.
804
+
805
+ | Prop | Type | Default | Notes |
806
+ |---|---|---|---|
807
+ | `chapters` | `Chapter[]` | required | `{ label: string }` |
808
+ | `activeIndex` | `number` | required | |
809
+ | `firstFrame` | `boolean` | `true` | True during this chapter's own opening stretch (plays the label-in and rail fill-in); false just holds the rail filled |
810
+ | `at` | `number` | `4` | |
811
+ | `fillDurationInFrames` | `number` | `90` | Pass the chapter's own duration so the fill lands exactly as it ends |
812
+ | `design` | `DesignSystem` | | Reads `grid.marginBottom` and palette from it when passed |
813
+ | `accentColor` | `string` | | Overrides `design`'s or the token success colour |
814
+
815
+ ---
816
+
817
+ ## A scene, end to end
818
+
819
+ ```tsx
820
+ import React from "react";
821
+ import { CinematicScene, Layer, TerminalReplay, Caption, color, E } from "@openvidstudio/core";
822
+
823
+ export const Install: React.FC = () => (
824
+ <CinematicScene
825
+ camera={[
826
+ { frame: 0, x: 960, y: 540, scale: 1.05, rotZ: -0.4 },
827
+ { frame: 300, x: 960, y: 548, scale: 1.15, rotZ: 0.35, easing: E.drift },
828
+ ]}
829
+ overlay={<Caption text="one command" at={40} out={240} />}
830
+ >
831
+ <Layer depth={0}>
832
+ <div style={{ position: "absolute", inset: 0, display: "flex",
833
+ alignItems: "center", justifyContent: "center" }}>
834
+ <TerminalReplay
835
+ width={1400}
836
+ steps={[
837
+ { type: "cmd", text: "node packages/mcp-server/dist/stdio.js" },
838
+ { type: "out", lines: [{ text: "connected over stdio", color: color.success, glow: true }] },
839
+ ]}
840
+ />
841
+ </div>
842
+ </Layer>
843
+ </CinematicScene>
844
+ );
845
+ ```
846
+
847
+ Two keyframes so it moves, content centred inside the safe area, caption in the
848
+ overlay, tokens instead of hex.
849
+
850
+ ---
851
+
852
+ ## Catalog primitives
853
+
854
+ Small components that are not in `@openvidstudio/core` but are in the motion primitives catalog:
855
+ `catalog_motion_primitives` finds one and `add_motion_primitive` copies its source into the video's
856
+ `primitives/` folder, where it is yours to edit. Each imports only `react`, `remotion` and core.
857
+
858
+ ### `CollageBroll`
859
+
860
+ ![A red paper field with two cardstock cards, halftone figures on them, a green arrow between and a yellow disc above](img/api/collagebroll.png)
861
+
862
+ A halftone paper-collage b-roll beat for an abstract idea between screen captures, made in code: free, and
863
+ nothing in it is invented footage. A flat colour field, black and white halftone cut-outs, a few cardstock accents,
864
+ thin cream keylines, soft low-opacity shadows and fine paper grain. Pieces assemble structure first (structure,
865
+ then people or key cards, then connectors, then the result): each enters from empty space on a spring, in a set
866
+ order, with no fade and no zoom. It is inspired by the look of the MIT-licensed `gbro-collage-broll` skill, which
867
+ generates it with a paid model API; this is written from scratch and calls no model.
868
+
869
+ | Prop | Type | Default | Notes |
870
+ |---|---|---|---|
871
+ | `pieces` | `CollagePiece[]` | required | See below |
872
+ | `background` | `string` | `#D9503F` | The flat colour field |
873
+ | `order` | `("structure" \| "people" \| "connector" \| "result")[]` | that order | The order the roles arrive in; within a role, as listed |
874
+ | `at` | `number` | `0` | Composition frame the first piece starts to move. Before it the frame is the empty field |
875
+ | `stagger` | `number` | `10` | Frames between one piece starting and the next |
876
+
877
+ A piece is `{ src | shape, x, y, width, aspect?, rotation?, tone?, role? }`: `x`, `y` and `width` are fractions of the
878
+ frame (so it follows the frame size); `src` is an image (`staticFile(...)`) cut out in halftone; `shape` is
879
+ `"card"`, `"circle"`, `"person"` or `"arrow"`; `tone` is `"halftone"` (default), `"red"`, `"blue"`, `"yellow"`,
880
+ `"green"` or `"cream"`; `role` says when it arrives (default `"structure"`).
881
+
882
+ ## Supernova: `@openvidstudio/stem`
883
+
884
+ The primitives for STEM lesson videos (production mode `"supernova"`, 1080x1920). A project made
885
+ with `init_project` `mode: "supernova"` can import them; a standard project cannot. Everything here is
886
+ a pure function of the frame, takes its sizes from `useVideoConfig()` and uses no random numbers.
887
+ Stills are 540x960, rendered for real by `scripts/build-api-gallery.mjs`.
888
+
889
+ ```tsx
890
+ import { Spark, Nova, supernovaDesignSystem } from "@openvidstudio/stem";
891
+ ```
892
+
893
+ ### `supernovaDesignSystem(subject)`
894
+
895
+ The Void + Spark design system for one subject (`"math" | "physics" | "cs" | "chemistry" | "biology"`):
896
+ a flat dark Void (`#07060B`, panels `#0E0C16`, hairline at 5% white), warm white text (`#F3EFE6`, never
897
+ pure white, dim `#8C8799`), one accent per subject (math `#5CC8FF`, physics `#FFB347` with ember
898
+ `#FF7A3D`, cs `#B58CFF`, chemistry `#FF4D5E`, biology `#7CFFB2`), the `"void-spark"` motif, and a layout
899
+ grid that keeps key content clear of the Reels interface (108 / 270 / 420). `design.display` is the
900
+ display face, Space Grotesk; the body face is Inter. Both load from local files.
901
+
902
+ ### `Spark`
903
+
904
+ ![A glowing amber point at the head of a fading arc, a launch trail on the Void](img/api/stem-spark.png)
905
+
906
+ A luminous point: a bright core, a soft bloom and a fading trail. The pen, the pointer and the particle
907
+ of a lesson, with one on screen at a time.
908
+
909
+ | Prop | Type | Default | Notes |
910
+ |---|---|---|---|
911
+ | `path` | `Path \| Keyframe[]` | required | `(t) => ({ x, y })` with `t` in frames since `at`, or keyframes `{ frame, x, y, easing? }` (held at the ends, eased between) |
912
+ | `at` | `number` | `0` | Composition frame it appears. Nothing is drawn before it |
913
+ | `trail` | `number` | `18` | Frames of tail. Brighter near the head |
914
+ | `color` | `string` | the subject's accent | |
915
+ | `subject` | `Subject` | `"math"` | Picks the default colour |
916
+ | `size` | `number` | 1.4% of the shorter side | Radius of the core, px |
917
+
918
+ Behaviours are helpers that return a `Path`, so they compose: `trace(curve | points, { duration })`,
919
+ `carry(fn, from, to, { duration, map? })` (the Spark rides `y = fn(x)`; `map` is a graph-to-screen
920
+ mapping), `orbit(target, radius, { period })`, `split(parent, n, { at, spread })` (n paths),
921
+ `fall(g, { x, y, vx, vy }, { floorY? })` and `walk(points, { hop, hold })`.
922
+
923
+ ### `Nova`
924
+
925
+ ![A thin shockwave ring part-way out, particles converging on a blurred line of text that is still condensing](img/api/stem-nova.png)
926
+
927
+ The payoff, once per video, on the aha sentence. Nothing before `at`; then a three-frame flash, a thin
928
+ shockwave ring that decelerates and fades, and the `children` condense from particles. Leave a beat of
929
+ silence in the narration before it.
930
+
931
+ | Prop | Type | Default | Notes |
932
+ |---|---|---|---|
933
+ | `at` | `number` | | Composition frame of the flash. Or: |
934
+ | `beatId`, `impact` | `string` | | Take the frame from `useMusicClock(beatId).impact(impact)`, the score's named impact |
935
+ | `origin` | `{ x, y }` | frame centre | |
936
+ | `color`, `subject` | | the subject's accent | |
937
+ | `duration` | `number` | `60` | Frames from the flash until the content is fully formed |
938
+ | `children` | node | | The payoff. Fully formed by `at + duration` |
939
+
940
+ ### `Equation`
941
+
942
+ ![The quadratic formula in sans-serif maths on the Void, at 1080x1920](img/api/stem-equation.png)
943
+
944
+ An equation typeset in sans-serif maths and revealed term by term: each top-level term fades in and rises
945
+ a little, one after the next, as a pure function of the frame (never a fade of the whole thing).
946
+
947
+ | Prop | Type | Default | Notes |
948
+ |---|---|---|---|
949
+ | `tex` | `string` | required | The equation as TeX |
950
+ | `spoken` | `string` | **required** | The equation as it is said, in plain words: "x squared plus one". Required by the types (and at runtime), and exposed on the element as `data-spoken`, so `check_script` can compare it with the narration of the beat |
951
+ | `at` | `number` | `0` | Composition frame the first term appears |
952
+ | `stagger` | `number` | `7` | Frames between one term and the next |
953
+ | `size` | `number` | 8.5% of the shorter side | Font size in px |
954
+ | `color` | `string` | the Void's warm white | |
955
+ | `center` | `{ x, y }` | frame centre | |
956
+
957
+ Terms are the children of the equation's top-level row, so `\frac{d}{dx}\left(x^{2}+1\right)=2x` reveals as
958
+ the fraction, `(`, `x²`, `+`, `1`, `)`, `=`, `2`, `x`. A fully revealed equation is pixel for pixel the same as
959
+ the unrevealed one. `texToSvg(tex)` gives the SVG markup directly.
960
+
961
+ **Why MathJax 4 with the Fira font, not KaTeX.** The visible goal is sans-serif maths, which is the biggest
962
+ break from the usual serif look. Measured on the same three equations at 1080 wide (MathJax and Fira first,
963
+ then KaTeX with `\mathsf`, the closest it gets):
964
+
965
+ ![Three equations in sans-serif maths, MathJax with the Fira font: a derivative of x squared plus one, the quadratic formula and an integral](img/supernova/maths-mathjax-fira.png)
966
+
967
+ | | MathJax 4 + Fira (SVG) | KaTeX 0.19 |
968
+ |---|---|---|
969
+ | Look | Sans throughout: math italics, Greek, `sin` and `cos` in one family | Hybrid: `\mathsf` makes Latin letters upright sans, but `sin`, `cos`, `theta` and every operator stay serif, and variables lose their italics |
970
+ | Offline | Runs from the project's `public/mathjax/` (copied by `init_project`), no font files, glyphs are vector paths | Needs its CSS and about six font files shipped and loaded |
971
+ | Size | about 1.3MB of scripts, plus 2.2MB of Fira glyph ranges loaded on demand | about 360KB |
972
+ | Time | 3 equations typeset in about 140ms after a one-off start-up of about 0.5s | 3 equations in 6ms |
973
+ | Determinism | Same TeX, same markup, so a frame is a pure function of the frame | Same |
974
+
975
+ ![The same equations in KaTeX with \mathsf: serif sin, cos and theta, upright variables](img/supernova/maths-katex.png)
976
+
977
+ MathJax costs more to load and to typeset, once per document, and that is paid for a look that KaTeX cannot
978
+ produce. Its speech and braille workers are switched off (they would fetch 800KB of rule files).
979
+
980
+ ### `Axes`, `Plot`, `NumberLine`
981
+
982
+ ![Projectile motion: a parabola in physics amber on dim axes, the area under its first half shaded, a tangent line, and the peak and range marked](img/api/stem-plot.png)
983
+
984
+ `Axes` draws labelled axes with ticks and owns the graph-to-screen mapping. Its children are placed in
985
+ graph coordinates: `useAxes()` returns `{ toScreen(x, y), toWorld(px, py), box, xRange, yRange, weight }`,
986
+ so a `Plot`, a label or a Spark's path (`carry(fn, a, b, { duration, map: toScreen })`) can use it.
987
+
988
+ | `Axes` prop | Type | Default | Notes |
989
+ |---|---|---|---|
990
+ | `xRange`, `yRange` | `[min, max]` | required | Graph units |
991
+ | `box` | `{ x, y, width, height }` | sized to the frame | The plot area, composition px |
992
+ | `xStep`, `yStep` | `number` | a round step, about five ticks | |
993
+ | `xLabel`, `yLabel` | `string` | | |
994
+ | `grid` | `boolean` | `true` | Gridlines at the ticks in the dim token, fainter than the axes |
995
+ | `subject` | `Subject` | `"math"` | Picks the accent children use |
996
+
997
+ | `Plot` prop | Type | Default | Notes |
998
+ |---|---|---|---|
999
+ | `fn` | `(x) => number` | required | A value that is not finite breaks the line |
1000
+ | `domain` | `[a, b]` | the axes' x range | |
1001
+ | `samples` | `number` | `240` | Across the domain |
1002
+ | `progress` | `0..1` | `1` | How much is drawn. Or `at` and `duration` for a draw-on that eases from 0 to 1 |
1003
+ | `color` | `string` | the accent | |
1004
+ | `tangent` | `{ at, span?, color? }` | | A tangent at x, once the curve has reached it. `span` is its half-length in x units |
1005
+ | `area` | `{ from, to, color? }` | | Shades between the curve and the x axis, as far as the curve has been drawn |
1006
+ | `points` | `{ x, label? }[]` | | Dots on the curve, appearing as it reaches them |
1007
+
1008
+ `NumberLine` takes `range`, `step`, `points` (`{ value, label? }`), `intervals` (`{ from, to, openFrom?,
1009
+ openTo? }`, open ends are hollow) and `arrow` (`{ value, label? }`), plus an optional `box` (`{ x, y,
1010
+ width }`). `useNumberLine().toScreen(value)` lets a Spark ride the line.
1011
+
1012
+ ![A number line from -5 to 5 with an open-ended interval from -3 to 1 in the accent, a labelled point at 2 and an arrow at -4](img/api/stem-numberline.png)
1013
+
1014
+ Strokes are never thinner than `lineWeight(width, height)`, 3px at 1080 on the shorter side (the plot
1015
+ line is about 1.7 times that). None of these glow: the Spark is the one element that does.
1016
+
1017
+ ### `Derivation`
1018
+
1019
+ ![A projectile's range derived in steps: three lines of algebra stacked, the newest in the accent and white, the two before it dimmed, with a reason under one step](img/api/stem-derivation.png)
1020
+
1021
+ A formula built line by line, each line spoken: the derive beat of a lesson. The newest line sits at the bottom;
1022
+ the one before it moves up and dims, up to a stack of three, so the viewer reads the algebra top to bottom. The
1023
+ lines share a left edge and sit on a baseline, as algebra on paper does, so between two lines the terms they
1024
+ share (matched by their TeX, top level terms) stay exactly where they are, and slide only if the terms before them
1025
+ changed width. Terms that are new fade in and rise in the accent and settle to white; terms that are gone fade out where
1026
+ they were. Term level, not per glyph. The range of a projectile, `R = u^2 sin(2 theta) / g`, in seven steps, is the sample scene.
1027
+
1028
+ | Prop | Type | Default | Notes |
1029
+ |---|---|---|---|
1030
+ | `steps` | `{ tex, spoken, because? }[]` | required | `tex` is the line. `spoken` is **required**, exactly as on `Equation`: it must appear in the beat's narration, in the order the steps are given, and `check_script` fails a step that does not. `because` is a short reason in plain words ("no horizontal force") shown under the step |
1031
+ | `beatId` | `string` | | Reveal each step at the word its `spoken` starts at, found in `useNarrationWords(beatId)` after the previous step's words |
1032
+ | `at` | `number[]` | | Explicit frames, one per step, which win over the narration |
1033
+ | `from`, `stagger` | `number` | `0`, `60` | When there is neither narration nor `at`: the first step's frame and the gap between steps |
1034
+ | `size` | `number` | 7% of the shorter side, smaller if the widest line would not fit | Font size in px |
1035
+ | `color`, `subject` | | the Void's warm white, `"math"` | `subject` picks the colour new terms arrive in |
1036
+ | `center` | `{ x, y }` | the horizontal centre, 60% down a tall frame | `y` is the baseline of the current line, `x` the middle of the block |
1037
+
1038
+ The stack is three lines: opacity 1, about a half, about a quarter; a fourth line is gone. `revealFrames`,
1039
+ `matchTerms` and `slotOpacity` are the pure functions behind it.
1040
+
1041
+ ### `LessonCaptions`
1042
+
1043
+ ![A lesson caption block above the bottom safe zone over a projectile path: five words in warm white with the word being said in the accent](img/api/stem-lessoncaptions.png)
1044
+
1045
+ Burned-in captions timed to the narration, in one line: `<LessonCaptions beatId="hook" text={vo} />`. The word
1046
+ timings (`<beat>.words.json`) carry bare words with no punctuation, so chunking on them runs one sentence into
1047
+ the next. The text comes from the beat's `vo`: split on spaces, and when that gives as many words as the timings it is
1048
+ shown with its punctuation, otherwise the timings' bare words are. A caption breaks at a sentence end, at a comma
1049
+ after at least three words, and at `maxWords`; a one word sentence is a caption on its own. The word being said is
1050
+ picked out in the subject's accent. A pure function of the frame.
1051
+
1052
+ | Prop | Type | Default | Notes |
1053
+ |---|---|---|---|
1054
+ | `beatId` | `string` | required | Read with `useNarrationWords(beatId)` |
1055
+ | `text` | `string` | required | The beat's `vo` |
1056
+ | `position` | `"bottom" \| "top"` | `"bottom"` | Above the bottom 22% or below the top 14% of a tall frame (8% either way on a wide one) |
1057
+ | `maxWords` | `number` | `6` | Most words in one caption |
1058
+ | `left`, `width` | `number` | 10% of the width, the rest | The block's box |
1059
+ | `subject`, `fontSize` | | `"math"`, 4.8% of the shorter side | |
1060
+
1061
+ With no timings at all (an engine that gives none) the words are spread evenly over the scene, and the block says so in
1062
+ `data-ovs-captions-timing="estimated"`. The block is tagged `data-ovs-captions`, which `validate_scenes` ignores when it
1063
+ looks for the first drawn element and for a static stretch. `captionChunks(words, maxWords)` and `captionInsets(width, height)`
1064
+ are the pure functions.
1065
+
1066
+ ### `FreeBody`
1067
+
1068
+ ![A block on a slope at rest: weight, the normal force and friction as labelled arrows from its centre, with a 10 N scale bar](img/api/stem-freebody.png)
1069
+
1070
+ An object with labelled force arrows, for a physics lesson. The picture is honest: every arrow is exactly
1071
+ `magnitude * scale` px from tail to tip and a scale bar says how much that is, so two forces compared by
1072
+ eye are compared correctly. Arrows arrive one at a time. A block on a slope at rest (three forces that sum
1073
+ to zero) is the sample scene.
1074
+
1075
+ | Prop | Type | Default | Notes |
1076
+ |---|---|---|---|
1077
+ | `forces` | `{ label, magnitude, angle, color? }[]` | required | `angle` in degrees counter-clockwise from the right (0 right, 90 up, 270 down) |
1078
+ | `scale` | `number` | required | Pixels per unit of magnitude |
1079
+ | `unit`, `scaleValue` | `string`, `number` | `"N"`, a round value near half the largest force | The scale bar's unit and the length it stands for |
1080
+ | `scaleAt` | `{ x, y }` | lower left | Left end of the scale bar |
1081
+ | `origin` | `{ x, y }` | frame centre | Where the object is; arrows start at its centre |
1082
+ | `objectSize`, `objectRotation`, `objectLabel` | | 9% of the shorter side, 0, none | Rotation in degrees clockwise: -30 puts a block flat on a 30 degree slope that rises to the right |
1083
+ | `at`, `stagger`, `order` | | `0`, `18`, as given | When the first arrow starts, frames between arrows, and the order as indices into `forces` |
1084
+ | `net` | `boolean` | `false` | Also draw the net force as a dashed arrow once the others are in. Left out when the net is zero |
1085
+
1086
+ ### `ArrayViz`
1087
+
1088
+ ![A row of ten sorted numbers with cells 5 to 9 lit and the rest dimmed, pointers low, mid and high under cells 5, 7 and 9](img/api/stem-arrayviz.png)
1089
+
1090
+ A row of cells holding values, with named pointers, a highlighted range and a dimmed one: enough to teach
1091
+ binary search and a sorting pass. Binary search over a sorted array is the sample scene.
1092
+
1093
+ | Prop | Type | Default | Notes |
1094
+ |---|---|---|---|
1095
+ | `values` | `(number \| string)[]` | required | One cell each, numbered above |
1096
+ | `pointers` | `{ name, index, color?, spark? }[]` | | `index` is a cell, or keyframes `{ frame, index }` that move the pointer (eased, fractional between cells). With `spark: true` the pointer's tip is the Spark, so its move leaves a trail. At most one pointer may (one glowing element at a time) |
1097
+ | `highlights` | `{ from, to, color? }[]` | | Cells to fill with the accent, inclusive: the range still in play |
1098
+ | `dimmed` | `{ from, to }[]` | | Cells ruled out, inclusive |
1099
+ | `origin`, `cellSize` | | centred, fits 84% of the width | |
1100
+ | `subject` | `Subject` | `"cs"` | Picks the accent |
1101
+
1102
+ `useArrayViz()` returns `{ cellSize, left, top, cellCenter(i) }` so a Spark's path (`walk`) can be built from
1103
+ the cells' own positions.
1104
+
1105
+ ### `Wave`
1106
+
1107
+ ![A sine wave on a dark background with a bracket one wavelength wide above two crests, an arrow from the rest line up to a crest for the amplitude, and a marker for the phase at the left edge.](img/api/stem-wave.png)
1108
+
1109
+ A travelling or standing sine wave with its wavelength, amplitude and phase drawn on it. Every number is exact: crests are exactly `wavelength` px apart, a crest is exactly `amplitude` px above the rest line, and a travelling crest moves exactly `speed` px per frame. The curve is a dense SVG path (24 or more samples per wavelength, with a sample on every crest and trough). In a standing wave the nodes (small rings on the rest line) never move and the antinodes swing up and down. `spark="crest"` rides the one Spark on a crest (an antinode, for a standing wave). A pure function of the frame; nothing is drawn before `at`.
1110
+
1111
+ The displacement is `amplitude * cos(k (x - x0 - speed t) + phase)` for a travelling wave and `amplitude * cos(k (x - x0) + phase) * cos(2 pi t / period)` for a standing one, with `k = 2 pi / wavelength` and `x0` the left edge of the box. Find the elements in a test by `data-ovs-wave` (with `data-ovs-crests`, `data-ovs-wavelength`, `data-ovs-amplitude`), `data-ovs-node`, `data-ovs-label` (`wavelength`, `amplitude`, `phase`) and `data-ovs-crest-spark`.
1112
+
1113
+ | Prop | Type | Default | Notes |
1114
+ | --- | --- | --- | --- |
1115
+ | `mode` | `"travelling" \| "standing"` | `"travelling"` | |
1116
+ | `wavelength` | number (px) | a third of the box width | Crest to crest. |
1117
+ | `amplitude` | number (px) | 8% of the shorter side | Rest line to crest. |
1118
+ | `speed` | number (px per frame) | one wavelength per 60 frames | Travelling only. A crest moves exactly this far each frame. |
1119
+ | `period` | number (frames) | 90 | Standing only. |
1120
+ | `phase` | number (radians) | 0 | The displacement at the left edge at time zero is `amplitude * cos(phase)`. |
1121
+ | `at` | number (frame) | 0 | The wave draws itself left to right over `WAVE_REVEAL_FRAMES` (24). |
1122
+ | `box` | `{ x, y, width, height }` | middle of the frame, inside the Reels safe zone | The rest line runs through the middle of the box. |
1123
+ | `labels` | boolean or `{ wavelength?, amplitude?, phase? }` | all on | Wavelength bracket (crest to crest), amplitude arrow (rest line to crest), phase marker. They fade in once the wave has drawn. |
1124
+ | `wavelengthText`, `amplitudeText` | string | `"λ"`, `"A"` | |
1125
+ | `spark` | `"crest"` | none | One Spark on a crest. On a travelling wave it rides a crest and, when that crest has gone a wavelength on, hands over to the next one. |
1126
+
1127
+ `waveField(input)` returns `{ k, displacement, crestX, antinodeX, nodeX, crestsIn }`, the maths without the drawing.
1128
+
1129
+ ### `Orbit`
1130
+
1131
+ ![A dark picture of a body on an elliptical orbit round a grey central disc, with a blue velocity arrow along the path and an ember force arrow pointing at the centre, and two scale bars in the corner.](img/api/stem-orbit.png)
1132
+
1133
+ A body on a circular or elliptical orbit with its velocity and force arrows drawn to scale, like `FreeBody`: each arrow is exactly `magnitude * scale` px from tail to tip, and a scale bar for each says how much that is. The body is the one Spark; the central mass is a plain disc at a focus of the ellipse.
1134
+
1135
+ What is exact: the position (Kepler's equation is solved, so the body is at periapsis at `t = 0` and every `period`, at apoapsis half a period later, at distances `a(1 - e)` and `a(1 + e)`); the force arrow always points at the central mass; the velocity arrow is tangent to the path (perpendicular to the radius on a circle); the magnitudes follow vis-viva for speed, `v sqrt(2a/r - 1)`, and the inverse square law for force, `F (a/r)^2`, where `v` and `F` are the speed and force at a distance of `semiMajor`. What is not: `v` and `F` are the caller's numbers in the caller's units, so nothing is checked against a real gravitational constant, and the arrow scale (px per unit) is independent of the scale of the drawn orbit. A pure function of the frame; nothing is drawn before `at`. Find the elements by `data-ovs-arrow` (`velocity`, `force`, with `data-ovs-magnitude` and `data-ovs-length`), `data-ovs-mass`, `data-ovs-body`, `data-ovs-orbit-path` and `data-ovs-scale`.
1136
+
1137
+ | Prop | Type | Default | Notes |
1138
+ | --- | --- | --- | --- |
1139
+ | `semiMajor` | number (px) | 34% of the shorter side | The radius, for a circle. |
1140
+ | `eccentricity` | number | 0 | 0 is a circle; capped at 0.95. |
1141
+ | `period` | number (frames) | required | One full orbit. |
1142
+ | `v`, `F` | number | none | Speed and force at distance `semiMajor`. On a circle they are the speed and force all the way round. |
1143
+ | `speedAt`, `forceAt` | `(r: px) => number` | vis-viva, inverse square | Override the physics. |
1144
+ | `scale` | `{ velocity, force }` | required | Pixels per unit of magnitude. |
1145
+ | `units` | `{ velocity?, force? }` | `"m/s"`, `"N"` | On the scale bars. |
1146
+ | `scaleValue` | `{ velocity?, force? }` | a round value near half the periapsis value | What each scale bar stands for. |
1147
+ | `centre` | `{ x, y }` | puts the whole ellipse in the middle of the frame | Where the central mass is (the focus). |
1148
+ | `periapsisAngle` | degrees | 0 | Direction of the closest point, counter-clockwise from the right. The body starts there. |
1149
+ | `clockwise` | boolean | false | |
1150
+ | `arrows` | boolean | true | `false` hides the arrows and the scale bars. |
1151
+ | `at`, `arrowsAt` | number (frame) | 0, `at + 12` | The arrows grow over `ORBIT_ARROW_FRAMES` (14). |
1152
+ | `massRadius`, `centreLabel` | number, string | 3.2% of the shorter side, none | |
1153
+
1154
+ `orbitState(shape, t)` returns `{ anomaly, r, offset, tangent, towardCentre }` for a body `t` frames after release.
1155
+
1156
+ ### `VectorField`
1157
+
1158
+ ![A point charge's electric field: amber arrows pointing straight out from the centre of a grid, longer near the charge, with twelve ember field lines running out to the edges](img/api/stem-vectorfield.png)
1159
+
1160
+ Arrows on a grid for a vector field `(x, y) => [fx, fy]` given in graph coordinates, with optional field
1161
+ lines, for a physics lesson on electric or gravitational fields. Inside an `<Axes>` it uses that mapping;
1162
+ on its own it takes a `box` and `xRange`/`yRange`. Each arrow starts at its grid point (cell centres) and is
1163
+ exactly `|f| * scale` px from tail to tip, with arrowheads like `FreeBody`'s. Nothing is capped or
1164
+ normalised unless `maxLength` or `normalize` is given, and then the arrows that are capped or normalised no
1165
+ longer show `|f|`, so say so in the narration. Arrows and lines point along `(fx, -fy)` in px whatever the
1166
+ axes' scales; give the box and ranges equal px per unit (a square box over square ranges) if the picture
1167
+ should look like the field does in the plane. With `fieldLines`, streamlines are traced from the seeds by
1168
+ integrating the field (RK4, fixed step, deterministic) both ways until they leave the box, run into a zero
1169
+ or a source, or close up, and are drawn on after the arrows. A point charge's radial field with its lines
1170
+ is the sample scene.
1171
+
1172
+ | Prop | Type | Default | Notes |
1173
+ |---|---|---|---|
1174
+ | `field` | `(x, y) => [fx, fy]` | required | Graph point to vector, y up. Return `[0, 0]` where undefined (a charge's own position) |
1175
+ | `grid` | `{ columns, rows? }` | 7 columns, rows to keep cells square | Arrows are at the cell centres, so a grid never sits on the origin or an edge |
1176
+ | `scale` | `number` | longest arrow is 80% of a cell | Pixels per unit of `|f|`. An arrow is exactly `\|f\| * scale` px |
1177
+ | `normalize` | `number` | off | Every arrow this many px long, direction only |
1178
+ | `maxLength` | `number` | off | Cap in px. Capped arrows are shorter than `\|f\| * scale` |
1179
+ | `fieldLines` | `boolean` | `false` | Trace and draw field lines |
1180
+ | `seeds` | `[x, y][]` | every other grid point | Graph points the lines start from, each traced both ways |
1181
+ | `box`, `xRange`, `yRange` | `Box`, `[n, n]` | frame-sized box, `[-1, 1]` | Used outside `<Axes>`. Inside one, the Axes' own are used |
1182
+ | `color`, `lineColor` | `string` | physics amber, ember | |
1183
+ | `at`, `lineDuration` | `number` | `0`, `45` | When the arrows start growing (20 frames, `FIELD_ARROW_FRAMES`), and how long the lines take to draw on after that |
1184
+
1185
+ Helpers: `vectorFieldGrid(geometry, props)` returns each arrow (`world`, `screen` tail, `length`, unit
1186
+ `dir`), and `traceFieldLine(geometry, field, seed, step)` one streamline as px points. Elements carry
1187
+ `data-ovs-vectorfield`, `data-ovs-arrow` (with `data-ovs-gx`, `data-ovs-gy`, the grid point) and
1188
+ `data-ovs-fieldline`.
1189
+
1190
+ ### `ComplexityCurve`
1191
+
1192
+ ![n, n log n and n squared drawn on shared axes in green, violet and red, named at their ends, with a dashed rule at n equals 12 and a dot with its value on each curve](img/api/stem-complexitycurve.png)
1193
+
1194
+ The growth of `n`, `n log n` and `n^2` plotted together on shared axes, with a marker for a chosen `n`: a
1195
+ dashed vertical rule, a dot on each curve and the value there. Built from `Axes` and `Plot`, so a curve
1196
+ that climbs past `yMax` is clipped at the top of the plot. **The log is base 2**: the `n log n` curve is
1197
+ `n * log2(n)` (drawn as 0 for n at or below 1). Each curve has its own accent (n green, n log n the cs
1198
+ violet, n squared red) and is named at its end. The curves are drawn on over `duration` frames, and the
1199
+ marker and names appear once the draw-on reaches them. The marker at n = 12 is the sample scene.
1200
+
1201
+ | Prop | Type | Default | Notes |
1202
+ |---|---|---|---|
1203
+ | `curves` | `("n" \| "nlogn" \| "n2")[]` | all three | Which to draw, in this order |
1204
+ | `n` | `number` | none | The marked input size. Dots sit at `Axes.toScreen(n, f(n))` |
1205
+ | `xMax` | `number` | `1.5 * n`, or 16 | Right end of the x axis (it starts at 0) |
1206
+ | `yMax` | `number` | `1.25 * ` the largest value at `n`, or the largest at `xMax` | Top of the y axis |
1207
+ | `at`, `duration` | `number` | `0`, `60` | Draw-on start frame and length |
1208
+ | `box` | `Box` | frame-sized | Where the plot sits |
1209
+ | `labels` | `boolean` | `true` | Curve names at their ends, the values at the dots and "n = 12" |
1210
+
1211
+ Also exports `complexityValue(kind, n)`, `COMPLEXITY_NAMES` and `COMPLEXITY_COLORS`. Elements carry
1212
+ `data-ovs-complexity`, `data-ovs-plot="point"`, `data-ovs-marker`, `data-ovs-marker-rule` and
1213
+ `data-ovs-curve-label`.
1214
+
1215
+ ### `MatrixGrid`
1216
+
1217
+ ![A two by two matrix drawn in brackets above a plane of points, with the unit square sheared and stretched into a parallelogram and arrows for the images of i-hat and j-hat.](img/api/stem-matrixgrid.png)
1218
+
1219
+ A 2x2 matrix acting on the plane. A grid of points (and the lines through them), the unit square and the images of i-hat and j-hat move from the identity to the matrix over `at` to `at + duration`. Every entry is interpolated linearly from the identity, so each frame shows the plane under `I + p (M - I)` and the last frame exactly `M`. The picture is honest: a point (x, y) is drawn at `scale` px per unit times `M * (x, y)`, the origin never moves, and the square is drawn flipped when the determinant is negative (`data-ovs-orientation`). The matrix is shown in brackets above the plane in portrait and beside it in landscape, with its determinant. A pure function of the frame; nothing glows.
1220
+
1221
+ | Prop | Type | Default | |
1222
+ |---|---|---|---|
1223
+ | `matrix` | `number[][]` | required | 2x2, rows first: `[[a, b], [c, d]]` |
1224
+ | `at` | `number` | `0` | Frame the picture appears and the transform starts |
1225
+ | `duration` | `number` | `45` | Frames from the identity to the matrix |
1226
+ | `transform` | `boolean` | `true` | `false` shows the plane already transformed |
1227
+ | `ease` | `(t) => number` | `E.cinematic` | Shapes the progress; `(t) => t` is linear |
1228
+ | `grid` | `{ extent?, spacing? }` | `{ 2, 1 }` | Reach and gap of the point grid, graph units |
1229
+ | `unitSquare` | `boolean` | `true` | Unit square, its image, and the i-hat and j-hat arrows |
1230
+ | `showMatrix` | `boolean` | `true` | Draw the matrix with its determinant |
1231
+ | `box` | `Box` | middle band (portrait), right side (landscape) | Where the plane is drawn; its centre is the origin |
1232
+ | `scale` | `number` | fits the grid and its image in the box | px per graph unit |
1233
+ | `subject` | `Subject` | `"math"` | Picks the accent |
1234
+
1235
+ Helpers: `matrixGridGeometry(matrix, { width, height, box?, scale?, extent? })` returns `{ box, origin, scale, toScreen }`; `interpolateMatrix(m, progress)` and `applyMatrix(m, x, y)` are the pure maths. DOM: `data-ovs-point="x,y"` (with `data-ovs-sx/sy`), `data-ovs-corner`, `data-ovs-basis="i|j"`, `data-ovs-unit-square`, `data-ovs-progress`.
1236
+
1237
+ ### `TreeViz`
1238
+
1239
+ ![A binary search tree of six violet-ringed numbered nodes joined by edges, with the in-order list of visited values under it.](img/api/stem-treeviz.png)
1240
+
1241
+ A binary search tree built one insert at a time, with traversals. The component builds the BST from `values` itself (smaller to the left, a repeated value skipped) and lays it out tidily from the frame size: x is the in-order rank, y the depth, so a left child is always left of its parent and a right child right of it, one level lower. Each node arrives with its edge. A Spark can walk from the root to the place of a value as it is inserted (the node appears when the Spark gets there). A traversal then lights the nodes in visit order, one every `hop` frames, and lists the visited values under the tree. The only glowing element is the Spark. A pure function of the frame.
1242
+
1243
+ | Prop | Type | Default | |
1244
+ |---|---|---|---|
1245
+ | `values` | `number[]` | required | Inserted in this order |
1246
+ | `at` | `number` | `0` | Frame the first insert starts |
1247
+ | `insertAt` | `number` | `24` | Frames per insert (a walked insert also takes its walk) |
1248
+ | `walkValue` | `number` | last value | The Spark walks to this value's place |
1249
+ | `spark` | `boolean` | `true` | `false` turns the walk off |
1250
+ | `walkHop`, `walkHold` | `number` | `14`, `8` | Frames per hop down, and resting on each node |
1251
+ | `traversal` | `"inorder" \| "preorder" \| "postorder" \| "level"` | none | Light nodes in this order and list them |
1252
+ | `traverseAt` | `number` | 20 frames after the last insert | Frame the first node lights |
1253
+ | `hop` | `number` | `18` | Frames between one node lighting and the next |
1254
+ | `highlight` | `number` | none | Ring the node with this value |
1255
+ | `subject` | `Subject` | `"cs"` | Picks the accent |
1256
+
1257
+ Helper: `treeLayout(values, { width, height, at?, insertAt?, walkValue?, spark?, walkHop?, walkHold?, traverseAt? })` returns `{ nodes: [{ value, order, parent, side, depth, x, y, appearFrame }], radius, orders: { inorder, preorder, postorder, level }, walkPoints, ... }`. DOM: `data-ovs-node`, `data-ovs-x/y`, `data-ovs-lit`, `data-ovs-edge="parent-child"`, `data-ovs-visited` with `data-ovs-visit-index`.
1258
+
1259
+ ### `GraphViz`
1260
+
1261
+ ![A graph of six violet-outlined nodes joined by lines, with three nodes filled blue as done, two filled violet as the frontier, one warm white where a single glowing Spark rests, and a legend naming each colour](img/api/stem-graphviz.png)
1262
+
1263
+ Nodes and edges for teaching graph search. Each node is coloured by its role at the current frame (dim: unvisited, violet: frontier, warm white: being visited, blue: done, ember: on the final path) and a legend names the roles. A `walk` hops one `Spark` from node to node (the only glowing element), using `walk` from `paths.ts`. Build `steps` from a real search with `bfsSteps`, not by hand.
1264
+
1265
+ | Prop | Type | Default | Meaning |
1266
+ |---|---|---|---|
1267
+ | `nodes` | `{ id, x?, y?, label? }[]` | required | `x`, `y` are fractions (0..1) of the layout box. Give all nodes both, or none: then they sit evenly on a circle that fits the box, from the top. `label` defaults to the id and is drawn inside the node. |
1268
+ | `edges` | `[from, to][]` | required | Lines run centre to centre. |
1269
+ | `directed` | `boolean` | `false` | Arrowheads; lines stop at the node edge. |
1270
+ | `steps` | `{ frame, visit?, frontier?, done?, path? }[]` | none | A snapshot from `frame` on: the latest step at or before the current frame gives every node's role. Nodes in none of its lists are unvisited. Edges between consecutive nodes of `path` are drawn in ember at twice the weight. |
1271
+ | `walk` | `string[]` | none | Node ids a single Spark hops along. The Spark rests on `walk[k]` during local frames `[k*(hop+hold)+hop, (k+1)*(hop+hold)]`, so a step at `walkAt + k*(hop+hold) + hop` lines the colour up with the Spark. |
1272
+ | `hop`, `hold` | `number` | `20`, `20` | Frames to move, and to rest on each node. |
1273
+ | `walkAt` | `number` | `at` | Frame the Spark starts. |
1274
+ | `at` | `number` | `0` | Frame the graph appears; nothing is drawn before it. |
1275
+ | `box` | `{ x, y, w, h }` | 80% of the width, from 17% down, 45% of the height | The layout box in px. |
1276
+ | `radius` | `number` | 4.5% of the shorter side | Node radius. Label text is 80% of it, the legend is 2.7% of the shorter side. |
1277
+ | `legend` | `boolean` | `true` | The role legend, below the box, wrapped to the box width. |
1278
+
1279
+ Helpers: `bfsOrder(adjacency, start)` (visiting order, neighbours in listed order), `shortestPath(adjacency, from, to)` (fewest edges, or `null`), `adjacencyFrom(edges, directed?, ids?)`, `bfsSteps(adjacency, start, { first, every, goal? })` (a step per visited node: that node visiting, the earlier ones done, the discovered ones frontier; with `goal`, a last step showing the shortest path), `graphLayout(nodes, width, height, { box, radius })` (centres in px). `GRAPH_ROLE_COLOR` holds the role fills.
1280
+
1281
+ ### The glow budget
1282
+
1283
+ One glowing element at a time. Spark and Nova draw their glow through `Glow`, which tags its element
1284
+ with `data-ovs-glow` and `data-ovs-glow-level`; `countGlowing(root)` counts the elements above
1285
+ `GLOW_VISIBLE_LEVEL`. A Spark is one, a Nova's flash is one (the ring and particles do not glow).
1286
+
1287
+ ## Pixel narrator and depth kit: `@openvidstudio/styles`
1288
+
1289
+ Plain TypeScript modules that draw to a 2D canvas context, for canvas explainers (hand-written or built by `render_canvas_explainer`). No React, no WebGL, no dependencies. Everything is a pure function of its inputs and of `t` in seconds: the same `t` draws the same pixels. Randomness comes from `createRng(seed)` (a seeded mulberry32), never from the platform's global generator, and a test greps the package for it. `import { ... } from "@openvidstudio/styles"`.
1290
+
1291
+ ### Sprites and the narrator
1292
+
1293
+ `makeSprite(palette, frames, fps?)` builds a palette-indexed string-grid sprite: each frame is equal-width strings, each character a palette key, `.` is transparent, and a ragged row or a key missing from the palette throws. `drawSprite(ctx, sprite, x, y, scale, frame)` draws one frame with integer-scale `fillRect` and smoothing off, so a sprite pixel is exactly `scale` by `scale` device pixels (scale and position are rounded to whole pixels). Options: `tint` (a silhouette in one colour), `flipX`, `palette` (override colours by key). `frameAt(sprite, t)` is the frame that plays at `t`.
1294
+
1295
+ `drawNarrator(ctx, pose, x, y, scale, t, accent?)` draws the one recurring narrator, a 16x23 pixel character whose shirt takes the lesson's accent. `narratorSprite(pose, accent?)` and `narratorFrame(pose, t)` give the sprite and the frame at `t`. Poses: `idle`, `talk`, `point`, `think`, `celebrate`.
1296
+
1297
+ ![The pixel narrator standing still with arms at his sides, blinking, in physics amber beside a ruler prop, on a dark ground with a perspective grid](img/api/styles-narrator-idle.png)
1298
+
1299
+ `idle`: arms down, a blink every couple of seconds.
1300
+
1301
+ ![The pixel narrator mid-sentence with his mouth open, in maths blue beside a battery prop, on a dark ground with a perspective grid](img/api/styles-narrator-talk.png)
1302
+
1303
+ `talk`: the mouth cycles closed, half, open at 8 frames a second. Drive it only while the voice is speaking.
1304
+
1305
+ ![The pixel narrator in computer science violet with his right arm stretched out to point at a bridge section on the ground](img/api/styles-narrator-point.png)
1306
+
1307
+ `point`: the right arm reaches out (toward the right of the frame), a two-frame wobble. Place the thing pointed at to his right.
1308
+
1309
+ ![The pixel narrator in chemistry red with a hand at his chin and a trail of thought dots above his head, a ball on the ground beside him](img/api/styles-narrator-think.png)
1310
+
1311
+ `think`: a hand at the chin, and three dots that appear one after another above the head.
1312
+
1313
+ ![The pixel narrator in biology green leaping with both arms raised and sparkles around his head, a bat standing on the ground beside him](img/api/styles-narrator-celebrate.png)
1314
+
1315
+ `celebrate`: both arms up, a two-frame jump with sparkles. Use it on the payoff.
1316
+
1317
+ Props are sprites in a registry: `ball`, `ruler`, `battery`, `cable`, `bridge` (a truss section) and `bat`. `drawProp(ctx, name, x, y, scale, t?)` draws one, `getProp(name)` returns it, `propNames()` lists them. A lesson adds its own with `registerProp(name, makeSprite(...))`; a name that already exists is refused unless `overwrite` is passed, so a lesson cannot silently change a built-in.
1318
+
1319
+ ### Depth without WebGL
1320
+
1321
+ - `new Parallax({ width, height, seed?, layers?, horizon?, speed?, accent? })` holds three to five layers (fewer or more throws), drawn far to near. A layer is `{ kind: "stars" | "hills" | "towers" | "dots", color, depth (0 far, 1 near), blur?, count?, amplitude? }`. Each layer is rendered once into a wrapping tile, far layers pre-blurred (`blur`), so `parallax.draw(ctx, t, camera?)` is a few `drawImage` calls. Near layers scroll faster and zoom more with the camera. With no `layers`, `defaultLayers(accent)` gives four.
1322
+ - `dolly(t, { from?, to, start?, duration, ease? })` returns the camera `{ scale, x, y }` at `t`; pass it to `parallax.draw`, or to `applyCamera(ctx, camera, width, height)` for foreground drawing.
1323
+ - `drawFloorGrid(ctx, area, t, { horizon, vanishX?, color?, rows?, cols?, speed?, fog? })` draws a perspective floor: lines converge on the horizon and scroll toward the viewer with `t`; nothing is drawn above the horizon.
1324
+ - `drawFog(ctx, area, horizon, { color?, strength?, reach? })` is the depth fog: a band at the horizon that fades into the ground colour.
1325
+ - `drawShadow(ctx, cx, cy, rx, ry, alpha?, pixel?)` is a hard-edged pixel ellipse on the ground; `drawSpriteShadow(ctx, sprite, x, y, scale, frame?, opts?)` draws a sprite's offset silhouette (draw it before the sprite).
1326
+
1327
+ ![A violet night scene in four layers: faint stars, blurred far hills, a skyline of towers and nearer hills, with the narrator pointing from the ground in front of them](img/api/styles-parallax.png)
1328
+
1329
+ ![An amber perspective floor grid whose lines converge on a misty horizon, with a red ball standing on it under a glowing sky](img/api/styles-floorgrid.png)
1330
+
1331
+ A frame of the full scene (parallax, floor grid, fog, shadow, narrator, prop, caption) draws in about 12 ms at 720x1280 in headless Chromium, and the `styles-depth` test holds it under 30 ms.
1332
+
1333
+ ### Accents, font and sound
1334
+
1335
+ `ACCENTS` has one accent per subject: maths blue `#5CC8FF`, physics amber `#FFB347`, computer science violet `#B58CFF`, chemistry red `#FF4D5E`, biology green `#7CFFB2` (`Subject` is `"math" | "physics" | "cs" | "chemistry" | "biology"`). `VOID` (`#0B0D14`) is the dark ground the kit is drawn against.
1336
+
1337
+ The pixel font has two paths. `drawPixelText(ctx, text, x, y, scale, color)` uses a 5x7 bitmap font written for this package (uppercase, digits and basic punctuation) and draws it with `fillRect`; nothing is fetched or vendored, so it works offline, and it is Apache-2.0 like the package. For text that goes through the normal font stack (`fitText`, captions), `PIXEL_FONT` names Press Start 2P (SIL Open Font License 1.1) and its Google Fonts stylesheet URL; the package loads nothing itself, so a lesson that wants that face adds the link and text falls back to `monospace` without it.
1338
+
1339
+ `CHIP_SOUNDS` is a chip-style sound palette as plain data: `{ name, wave: "square" | "triangle" | "sawtooth" | "noise", gain, env: { attack, decay, sustain, release }, notes: [{ at, dur, note, slideTo? }] }` with `blip`, `confirm`, `wrong`, `think`, `point`, `celebrate`, `step` and `whoosh`. `noteToHz("A4")` is 440. `scheduleChip(audioContext, sound, when)` plays one on Web Audio (noise comes from the seeded generator, so it is the same samples every time); `chipDuration(sound)` gives its length, and `registerChipSound` adds a lesson's own. Because it is data, the same palette can be rendered offline into the narration mix.
1340
+
1341
+ ### Vertical layout: 720x1280
1342
+
1343
+ `LOGICAL_WIDTH` and `LOGICAL_HEIGHT` (720 and 1280, also `LOGICAL_SIZE`) are the logical canvas of a Reel. The helpers keep the platform's own interface off your content:
1344
+
1345
+ - `safeArea(width, height)` returns `{ x, y, w, h }`: the top 14% and the bottom 22% are clear, and 5% is kept at each side. At 720x1280 that is x 36, y 179, w 648, h 819 (the area ends at y 998). It is computed from proportions, so it is right for other sizes too. `insideSafeArea(width, height, rect)` tests a rectangle.
1346
+ - `fitText(ctx, text, maxWidth, maxLines, startSize, role?, family?, weight?)` returns the largest font size at which the text wraps into at most `maxLines` lines no wider than `maxWidth`, never below the role's minimum: `"headline"` 44, `"label"` 28, `"number"` 64 (`ROLE_MIN_SIZE`). A `startSize` below the minimum is raised to it. `fitTextLayout` takes the same arguments and returns `{ size, lines, fits }`: `fits` is false when even the minimum overflows, which means the text is too long and should be shortened, not shrunk.
1347
+ - `captionBand(width, height)` is the caption band: full safe width, resting on the bottom edge of the safe area, room for two lines. `drawCaption(ctx, text, width, height, style?)` fits the text at label size into it and draws it.
1348
+
1349
+ ![A vertical 720 by 1280 frame with the unsafe top and bottom bands shaded, a three-line headline, the narrator, a large key number with a label and a caption band, all inside a dashed safe-area outline](img/api/styles-vertical-layout.png)
1350
+
1351
+ Reframe-by-cropping is not offered. Cropping a landscape layout to vertical cuts it, so there is no helper that does it; lay the frame out vertically with the helpers above. The renderer's `width` and `height` arguments carry the vertical size through to an explainer, which draws at that size.