dsh-remotion 0.2.0 → 0.3.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 (292) hide show
  1. package/README.en.md +7 -5
  2. package/README.md +3 -3
  3. package/lib/index.d.ts +2 -2
  4. package/lib/index.js +15 -2
  5. package/package.json +1 -1
  6. package/skills/remotion-best-practices/SKILL.md +59 -0
  7. package/skills/remotion-best-practices/agents/openai.yaml +7 -0
  8. package/skills/remotion-best-practices/assets/remotion-icon.png +0 -0
  9. package/skills/remotion-best-practices/remotion-captions/SKILL.md +36 -0
  10. package/skills/remotion-best-practices/remotion-captions/agents/openai.yaml +7 -0
  11. package/skills/remotion-best-practices/remotion-captions/assets/remotion-icon.png +0 -0
  12. package/skills/{remotion/rules → remotion-best-practices/remotion-captions}/display-captions.md +9 -3
  13. package/skills/{remotion/rules → remotion-best-practices/remotion-captions}/import-srt-captions.md +5 -1
  14. package/skills/remotion-best-practices/remotion-create/SKILL.md +68 -0
  15. package/skills/remotion-best-practices/remotion-create/agents/openai.yaml +7 -0
  16. package/skills/remotion-best-practices/remotion-create/assets/remotion-icon.png +0 -0
  17. package/skills/{remotion/rules → remotion-best-practices/remotion-create}/tailwind.md +1 -1
  18. package/skills/remotion-best-practices/remotion-create/video-layout.md +9 -0
  19. package/skills/remotion-best-practices/remotion-docs/SKILL.md +46 -0
  20. package/skills/remotion-best-practices/remotion-docs/agents/openai.yaml +7 -0
  21. package/skills/remotion-best-practices/remotion-docs/assets/remotion-icon.png +0 -0
  22. package/skills/remotion-best-practices/remotion-interactivity/SKILL.md +247 -0
  23. package/skills/remotion-best-practices/remotion-interactivity/agents/openai.yaml +7 -0
  24. package/skills/remotion-best-practices/remotion-interactivity/assets/remotion-icon.png +0 -0
  25. package/skills/remotion-best-practices/remotion-maps/SKILL.md +36 -0
  26. package/skills/remotion-best-practices/remotion-maps/agents/openai.yaml +7 -0
  27. package/skills/remotion-best-practices/remotion-maps/assets/remotion-icon.png +0 -0
  28. package/skills/remotion-best-practices/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  29. package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  30. package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  31. package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  32. package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  33. package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  34. package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  35. package/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  36. package/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  37. package/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  38. package/skills/remotion-best-practices/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  39. package/skills/remotion-best-practices/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  40. package/skills/remotion-best-practices/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  41. package/skills/remotion-best-practices/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  42. package/skills/remotion-best-practices/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  43. package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  44. package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  45. package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  46. package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  47. package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  48. package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  49. package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  50. package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  51. package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  52. package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  53. package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  54. package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  55. package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  56. package/skills/remotion-best-practices/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  57. package/skills/remotion-best-practices/remotion-markup/SKILL.md +365 -0
  58. package/skills/remotion-best-practices/remotion-markup/agents/openai.yaml +7 -0
  59. package/skills/remotion-best-practices/remotion-markup/assets/remotion-icon.png +0 -0
  60. package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/audio.md +4 -2
  61. package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/calculate-metadata.md +4 -2
  62. package/skills/remotion-best-practices/remotion-markup/compositions.md +117 -0
  63. package/skills/remotion-best-practices/remotion-markup/cropping.md +34 -0
  64. package/skills/remotion-best-practices/remotion-markup/effects.md +251 -0
  65. package/skills/{remotion/rules/videos.md → remotion-best-practices/remotion-markup/embedding-videos.md} +6 -4
  66. package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/ffmpeg.md +5 -1
  67. package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/gifs.md +55 -9
  68. package/skills/remotion-best-practices/remotion-markup/google-fonts.md +76 -0
  69. package/skills/remotion-best-practices/remotion-markup/html-in-canvas.md +128 -0
  70. package/skills/remotion-best-practices/remotion-markup/images.md +73 -0
  71. package/skills/remotion-best-practices/remotion-markup/light-leaks.md +106 -0
  72. package/skills/remotion-best-practices/remotion-markup/local-fonts.md +69 -0
  73. package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/lottie.md +4 -1
  74. package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/measuring-dom-nodes.md +5 -1
  75. package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/measuring-text.md +8 -2
  76. package/skills/remotion-best-practices/remotion-markup/multi-scene-video.md +81 -0
  77. package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/parameters.md +3 -1
  78. package/skills/remotion-best-practices/remotion-markup/remotion-maps/SKILL.md +36 -0
  79. package/skills/remotion-best-practices/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  80. package/skills/remotion-best-practices/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  81. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  82. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  83. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  84. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  85. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  86. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  87. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  88. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  89. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  90. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  91. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  92. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  93. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  94. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  95. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  96. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  97. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  98. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  99. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  100. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  101. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  102. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  103. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  104. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  105. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  106. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  107. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  108. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  109. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  110. package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/sequencing.md +63 -12
  111. package/skills/remotion-best-practices/remotion-markup/sfx.md +51 -0
  112. package/skills/remotion-best-practices/remotion-markup/text-highlights.md +56 -0
  113. package/skills/remotion-best-practices/remotion-markup/timing.md +111 -0
  114. package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/transitions.md +49 -7
  115. package/skills/remotion-best-practices/remotion-markup/video-editing.md +90 -0
  116. package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/voiceover.md +2 -2
  117. package/skills/remotion-best-practices/remotion-multimedia/SKILL.md +20 -0
  118. package/skills/remotion-best-practices/remotion-multimedia/agents/openai.yaml +7 -0
  119. package/skills/remotion-best-practices/remotion-multimedia/assets/remotion-icon.png +0 -0
  120. package/skills/{remotion/rules → remotion-best-practices/remotion-multimedia}/get-audio-duration.md +1 -3
  121. package/skills/{remotion/rules → remotion-best-practices/remotion-multimedia}/get-video-dimensions.md +1 -3
  122. package/skills/{remotion/rules → remotion-best-practices/remotion-multimedia}/get-video-duration.md +1 -3
  123. package/skills/remotion-best-practices/remotion-render/SKILL.md +27 -0
  124. package/skills/remotion-best-practices/remotion-render/agents/openai.yaml +7 -0
  125. package/skills/remotion-best-practices/remotion-render/assets/remotion-icon.png +0 -0
  126. package/skills/remotion-best-practices/remotion-saas/SKILL.md +33 -0
  127. package/skills/remotion-best-practices/remotion-saas/agents/openai.yaml +7 -0
  128. package/skills/remotion-best-practices/remotion-saas/assets/remotion-icon.png +0 -0
  129. package/skills/remotion-best-practices/remotion-saas/framework.md +21 -0
  130. package/skills/remotion-best-practices/remotion-saas/player.md +33 -0
  131. package/skills/remotion-best-practices/remotion-saas/rendering.md +69 -0
  132. package/skills/remotion-best-practices/remotion-studio/SKILL.md +24 -0
  133. package/skills/remotion-best-practices/remotion-studio/agents/openai.yaml +7 -0
  134. package/skills/remotion-best-practices/remotion-studio/assets/remotion-icon.png +0 -0
  135. package/skills/remotion-best-practices/remotion-upgrade/SKILL.md +31 -0
  136. package/skills/remotion-best-practices/remotion-upgrade/agents/openai.yaml +7 -0
  137. package/skills/remotion-best-practices/remotion-upgrade/assets/remotion-icon.png +0 -0
  138. package/skills/remotion-captions/SKILL.md +36 -0
  139. package/skills/remotion-captions/agents/openai.yaml +7 -0
  140. package/skills/remotion-captions/assets/remotion-icon.png +0 -0
  141. package/skills/remotion-captions/display-captions.md +190 -0
  142. package/skills/remotion-captions/import-srt-captions.md +73 -0
  143. package/skills/remotion-captions/transcribe-captions.md +70 -0
  144. package/skills/remotion-create/SKILL.md +68 -0
  145. package/skills/remotion-create/agents/openai.yaml +7 -0
  146. package/skills/remotion-create/assets/remotion-icon.png +0 -0
  147. package/skills/remotion-create/tailwind.md +11 -0
  148. package/skills/remotion-create/video-layout.md +9 -0
  149. package/skills/remotion-docs/SKILL.md +46 -0
  150. package/skills/remotion-docs/agents/openai.yaml +7 -0
  151. package/skills/remotion-docs/assets/remotion-icon.png +0 -0
  152. package/skills/remotion-interactivity/SKILL.md +247 -0
  153. package/skills/remotion-interactivity/agents/openai.yaml +7 -0
  154. package/skills/remotion-interactivity/assets/remotion-icon.png +0 -0
  155. package/skills/remotion-maps/SKILL.md +36 -0
  156. package/skills/remotion-maps/agents/openai.yaml +7 -0
  157. package/skills/remotion-maps/assets/remotion-icon.png +0 -0
  158. package/skills/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  159. package/skills/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  160. package/skills/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  161. package/skills/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  162. package/skills/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  163. package/skills/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  164. package/skills/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  165. package/skills/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  166. package/skills/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  167. package/skills/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  168. package/skills/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  169. package/skills/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  170. package/skills/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  171. package/skills/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  172. package/skills/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  173. package/skills/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  174. package/skills/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  175. package/skills/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  176. package/skills/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  177. package/skills/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  178. package/skills/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  179. package/skills/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  180. package/skills/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  181. package/skills/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  182. package/skills/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  183. package/skills/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  184. package/skills/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  185. package/skills/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  186. package/skills/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  187. package/skills/remotion-markup/3d.md +86 -0
  188. package/skills/remotion-markup/SKILL.md +365 -0
  189. package/skills/remotion-markup/agents/openai.yaml +7 -0
  190. package/skills/remotion-markup/assets/remotion-icon.png +0 -0
  191. package/skills/remotion-markup/audio-visualization.md +198 -0
  192. package/skills/remotion-markup/audio.md +171 -0
  193. package/skills/remotion-markup/calculate-metadata.md +136 -0
  194. package/skills/remotion-markup/compositions.md +117 -0
  195. package/skills/remotion-markup/cropping.md +34 -0
  196. package/skills/remotion-markup/effects.md +251 -0
  197. package/skills/remotion-markup/embedding-videos.md +173 -0
  198. package/skills/remotion-markup/ffmpeg.md +38 -0
  199. package/skills/remotion-markup/gifs.md +187 -0
  200. package/skills/remotion-markup/google-fonts.md +76 -0
  201. package/skills/remotion-markup/html-in-canvas.md +128 -0
  202. package/skills/remotion-markup/images.md +73 -0
  203. package/skills/remotion-markup/light-leaks.md +106 -0
  204. package/skills/remotion-markup/local-fonts.md +69 -0
  205. package/skills/remotion-markup/lottie.md +73 -0
  206. package/skills/remotion-markup/measuring-dom-nodes.md +38 -0
  207. package/skills/remotion-markup/measuring-text.md +146 -0
  208. package/skills/remotion-markup/multi-scene-video.md +81 -0
  209. package/skills/remotion-markup/parameters.md +111 -0
  210. package/skills/remotion-markup/remotion-maps/SKILL.md +36 -0
  211. package/skills/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
  212. package/skills/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  213. package/skills/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
  214. package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
  215. package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
  216. package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
  217. package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
  218. package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
  219. package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
  220. package/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
  221. package/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
  222. package/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
  223. package/skills/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
  224. package/skills/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
  225. package/skills/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
  226. package/skills/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
  227. package/skills/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
  228. package/skills/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
  229. package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
  230. package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
  231. package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
  232. package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
  233. package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
  234. package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
  235. package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
  236. package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
  237. package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
  238. package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
  239. package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
  240. package/skills/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
  241. package/skills/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
  242. package/skills/remotion-markup/sequencing.md +169 -0
  243. package/skills/remotion-markup/sfx.md +51 -0
  244. package/skills/remotion-markup/silence-detection.md +71 -0
  245. package/skills/remotion-markup/text-highlights.md +56 -0
  246. package/skills/remotion-markup/timing.md +111 -0
  247. package/skills/remotion-markup/transitions.md +239 -0
  248. package/skills/remotion-markup/video-editing.md +90 -0
  249. package/skills/remotion-markup/voiceover.md +99 -0
  250. package/skills/remotion-multimedia/SKILL.md +20 -0
  251. package/skills/remotion-multimedia/agents/openai.yaml +7 -0
  252. package/skills/remotion-multimedia/assets/remotion-icon.png +0 -0
  253. package/skills/remotion-multimedia/get-audio-duration.md +56 -0
  254. package/skills/remotion-multimedia/get-video-dimensions.md +66 -0
  255. package/skills/remotion-multimedia/get-video-duration.md +58 -0
  256. package/skills/remotion-render/SKILL.md +27 -0
  257. package/skills/remotion-render/agents/openai.yaml +7 -0
  258. package/skills/remotion-render/assets/remotion-icon.png +0 -0
  259. package/skills/remotion-render/transparent-videos.md +106 -0
  260. package/skills/remotion-saas/SKILL.md +33 -0
  261. package/skills/remotion-saas/agents/openai.yaml +7 -0
  262. package/skills/remotion-saas/assets/remotion-icon.png +0 -0
  263. package/skills/remotion-saas/framework.md +21 -0
  264. package/skills/remotion-saas/player.md +33 -0
  265. package/skills/remotion-saas/rendering.md +69 -0
  266. package/skills/remotion-studio/SKILL.md +24 -0
  267. package/skills/remotion-studio/agents/openai.yaml +7 -0
  268. package/skills/remotion-studio/assets/remotion-icon.png +0 -0
  269. package/skills/remotion-upgrade/SKILL.md +31 -0
  270. package/skills/remotion-upgrade/agents/openai.yaml +7 -0
  271. package/skills/remotion-upgrade/assets/remotion-icon.png +0 -0
  272. package/skills/remotion/SKILL.md +0 -95
  273. package/skills/remotion/rules/animations.md +0 -31
  274. package/skills/remotion/rules/assets.md +0 -78
  275. package/skills/remotion/rules/can-decode.md +0 -81
  276. package/skills/remotion/rules/charts.md +0 -120
  277. package/skills/remotion/rules/compositions.md +0 -154
  278. package/skills/remotion/rules/extract-frames.md +0 -229
  279. package/skills/remotion/rules/fonts.md +0 -152
  280. package/skills/remotion/rules/images.md +0 -134
  281. package/skills/remotion/rules/light-leaks.md +0 -73
  282. package/skills/remotion/rules/maps.md +0 -412
  283. package/skills/remotion/rules/sfx.md +0 -30
  284. package/skills/remotion/rules/subtitles.md +0 -36
  285. package/skills/remotion/rules/text-animations.md +0 -20
  286. package/skills/remotion/rules/timing.md +0 -136
  287. package/skills/remotion/rules/trimming.md +0 -51
  288. /package/skills/{remotion/rules → remotion-best-practices/remotion-captions}/transcribe-captions.md +0 -0
  289. /package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/3d.md +0 -0
  290. /package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/audio-visualization.md +0 -0
  291. /package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/silence-detection.md +0 -0
  292. /package/skills/{remotion/rules → remotion-best-practices/remotion-render}/transparent-videos.md +0 -0
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: sfx
3
+ description: Including sound effects
4
+ metadata:
5
+ tags: sfx, sound, effect, audio
6
+ ---
7
+
8
+ To include a sound effect, use the `<Audio>` tag:
9
+
10
+ ```tsx
11
+ import { Audio } from "@remotion/sfx";
12
+
13
+ <Audio src={"https://remotion.media/whoosh.wav"} />;
14
+ ```
15
+
16
+ The following sound effects are available:
17
+
18
+ - `https://remotion.media/whoosh.wav`
19
+ - `https://remotion.media/whip.wav`
20
+ - `https://remotion.media/page-turn.wav`
21
+ - `https://remotion.media/switch.wav`
22
+ - `https://remotion.media/mouse-click.wav`
23
+ - `https://remotion.media/shutter-modern.wav`
24
+ - `https://remotion.media/shutter-old.wav`
25
+ - `https://remotion.media/ding.wav`
26
+ - `https://remotion.media/bruh.wav`
27
+ - `https://remotion.media/vine-boom.wav`
28
+ - `https://remotion.media/windows-xp-error.wav`
29
+ - `https://remotion.media/fah.wav`
30
+ - `https://remotion.media/spongebob-fail.wav`
31
+ - `https://remotion.media/omg-hell-nah.wav`
32
+ - `https://remotion.media/price-is-right-fail.wav`
33
+ - `https://remotion.media/romance-meme.wav`
34
+ - `https://remotion.media/bone-crack.wav`
35
+ - `https://remotion.media/anime-wow.wav`
36
+ - `https://remotion.media/yippee.wav`
37
+ - `https://remotion.media/loading-lag.wav`
38
+ - `https://remotion.media/wilhelm-scream.wav`
39
+ - `https://remotion.media/mac-quack.wav`
40
+ - `https://remotion.media/skedaddle.wav`
41
+ - `https://remotion.media/snapchat-notification.wav`
42
+ - `https://remotion.media/nelly-ahh.wav`
43
+ - `https://remotion.media/sanctuary-guardian-what.wav`
44
+ - `https://remotion.media/minecraft-hurt.wav`
45
+ - `https://remotion.media/oh-my-god-vine.wav`
46
+ - `https://remotion.media/illuminati-confirmed.wav`
47
+ - `https://remotion.media/dramatic-boomer.wav`
48
+ - `https://remotion.media/triggered.wav`
49
+ - `https://remotion.media/record-scratch.wav`
50
+
51
+ For more sound effects, search the internet. A good resource is https://github.com/kapishdima/soundcn/tree/main/assets.
@@ -0,0 +1,71 @@
1
+ ---
2
+ name: silence-detection
3
+ description: Adaptive silence detection for video/audio files using FFmpeg loudnorm and silencedetect
4
+ metadata:
5
+ tags: silence, detection, trimming, ffmpeg, loudnorm, audio
6
+ ---
7
+
8
+ # Adaptive Silence Detection
9
+
10
+ Detect silent segments in video or audio files.
11
+
12
+ Requires FFmpeg — see [ffmpeg.md](./ffmpeg.md) for how to invoke it in Remotion projects.
13
+
14
+ ## Step 1: Measure loudness with `loudnorm`
15
+
16
+ Use the `loudnorm` filter in JSON mode to get the EBU R128 integrated loudness and gating threshold for each file:
17
+
18
+ ```bash
19
+ npx remotion ffmpeg -i public/video.mov -map 0:a -af loudnorm=print_format=json -f null /dev/null
20
+ ```
21
+
22
+ As output you will get:
23
+ - `input_i`: Integrated loudness (dB) — the overall perceived volume
24
+ - `input_thresh`: EBU R128 gating threshold (dB) — the level below which audio is considered too quiet to count toward loudness measurement
25
+
26
+ ## Step 2: Detect silences using adaptive threshold
27
+
28
+ Pass the `input_thresh` value from step 1 as the `noise` parameter to `silencedetect`:
29
+
30
+ ```bash
31
+ npx remotion ffmpeg -i public/video.mov -map 0:a -af "silencedetect=noise=${THRESH}dB:d=0.5" -f null /dev/null
32
+ ```
33
+
34
+ Parameters:
35
+ - `noise`: The threshold below which audio is considered silent. Use `input_thresh` from step 1.
36
+ - `d`: Minimum silence duration in seconds. `0.5` is a good default.
37
+
38
+ ## Interpreting the output
39
+
40
+ The filter outputs pairs of `silence_start` and `silence_end` timestamps:
41
+
42
+ ```
43
+ [silencedetect] silence_start: 0
44
+ [silencedetect] silence_end: 2.241021 | silence_duration: 2.241021
45
+ [silencedetect] silence_start: 38.77425
46
+ [silencedetect] silence_end: 39.619604 | silence_duration: 0.845354
47
+ ```
48
+
49
+ ## Identifying leading and trailing silence
50
+
51
+ - **Leading silence**: Consecutive silence segments starting at or near 0. If the first `silence_start` is > 0.5s, there is no leading silence.
52
+ - **Trailing silence**: The last silence segment that extends to (or near) the end of the file. Compare the last `silence_end` with the file's total duration.
53
+
54
+ When multiple silences are nearly contiguous at the start or end (gap < 0.2s), treat them as a single leading/trailing silence block.
55
+
56
+ ## Using with Remotion's `<Video>` component
57
+
58
+ Apply the detected trim points using `trimBefore` and `trimAfter` (values are in frames):
59
+
60
+ ```tsx
61
+ import { Video } from "@remotion/media";
62
+ import { staticFile, useVideoConfig } from "remotion";
63
+
64
+ const { fps } = useVideoConfig();
65
+
66
+ <Video
67
+ src={staticFile("video.mov")}
68
+ trimBefore={Math.floor(leadingEnd * fps)}
69
+ trimAfter={Math.ceil(trailingStart * fps)}
70
+ />
71
+ ```
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: text-highlights
3
+ description: Animated text highlights and hand-drawn annotations using @remotion/rough-notation.
4
+ metadata:
5
+ tags: text, highlights, annotations, circles, rough-notation
6
+ ---
7
+
8
+ # Text highlights
9
+
10
+ Use `@remotion/rough-notation` to draw animated annotations around or behind text. It supports highlights, circles, underlines, strike-throughs, crossed-off text, boxes, and brackets.
11
+
12
+ Docs: https://www.remotion.dev/docs/text-highlights
13
+
14
+ Install the package using the same Remotion version as the project:
15
+
16
+ ```bash
17
+ bunx remotion add @remotion/rough-notation
18
+ ```
19
+
20
+ Choose the component that describes the annotation: `<Highlight>`, `<Circle>`, `<Underline>`, `<StrikeThrough>`, `<CrossedOff>`, `<Box>`, or `<Bracket>`. The component determines both the annotation style and whether it renders behind or on top of the text.
21
+
22
+ Drive `progress` from `useCurrentFrame()` so the annotation is deterministic and synchronized with the video:
23
+
24
+ ```tsx
25
+ import {Circle, Highlight} from '@remotion/rough-notation';
26
+ import {interpolate, useCurrentFrame} from 'remotion';
27
+
28
+ export const TextAnnotations: React.FC = () => {
29
+ const frame = useCurrentFrame();
30
+
31
+ return (
32
+ <div style={{fontSize: 80}}>
33
+ This is{' '}
34
+ <Highlight
35
+ color="rgba(255, 236, 79, 0.62)"
36
+ progress={interpolate(frame, [15, 40], [0, 1], {
37
+ extrapolateLeft: 'clamp',
38
+ extrapolateRight: 'clamp',
39
+ })}
40
+ >
41
+ important
42
+ </Highlight>
43
+ , and this is{' '}
44
+ <Circle color="#2563eb" progress={interpolate(frame, [15, 40], [0, 1], {
45
+ extrapolateLeft: 'clamp',
46
+ extrapolateRight: 'clamp',
47
+ })}>
48
+ connected
49
+ </Circle>
50
+ .
51
+ </div>
52
+ );
53
+ };
54
+ ```
55
+
56
+ Keep `progress` inline, hardcoded and use `interpolate` for maximum [Studio interactivity](../remotion-interactivity/SKILL.md).
@@ -0,0 +1,111 @@
1
+ Drive motion with `interpolate()` over an explicit frame range.
2
+ To customize timing, use **`Easing.bezier`** or `Easing.spring`.
3
+
4
+ A simple linear interpolation is done using the `interpolate` function.
5
+
6
+ ```ts title="Going from 0 to 1 over 0.3 seconds"
7
+ import { interpolate } from "remotion";
8
+
9
+ const opacity = interpolate(frame, [0, 0.3 * fps], [0, 1]);
10
+ ```
11
+
12
+ By default, the values are not clamped, so the value can go outside the range [0, 1].
13
+ Here is how they can be clamped:
14
+
15
+ ```ts title="Going from 0 to 1 over 0.3 seconds with extrapolation"
16
+ const opacity = interpolate(frame, [0, 0.3 * fps], [0, 1], {
17
+ extrapolateRight: "clamp",
18
+ extrapolateLeft: "clamp",
19
+ });
20
+ ```
21
+
22
+ ## Studio-editable animation patterns
23
+
24
+ When an animation should be editable in Remotion Studio, keep the `interpolate()` call directly in the `style` prop and prefer individual CSS transform properties:
25
+
26
+ ```tsx
27
+ // 👍 Inline editable keyframes and transform shorthands
28
+ style={{
29
+ scale: interpolate(frame, [0, 100], [0, 1]),
30
+ translate: interpolate(frame, [0, 100], ["0px 0px", "100px 100px"]),
31
+ rotate: interpolate(frame, [0, 100], ["20deg", "90deg"]),
32
+ }}
33
+
34
+ // 👎 Hidden values and transform strings become computed in Studio
35
+ const translateY = interpolate(frame, [0, 100], [0, 120]);
36
+ const rotation = interpolate(frame, [0, 100], [0, 20]);
37
+
38
+ style={{
39
+ transform: `translateY(${translateY}px) rotate(${rotation}deg)`,
40
+ }}
41
+ ```
42
+
43
+ Use `transform` strings only when individual CSS transform properties do not cover the effect, such as `skew()`, `perspective()`, or order-sensitive multi-transform chains.
44
+
45
+ ## Spring easing
46
+
47
+ A nice push movement with no bounce:
48
+
49
+ ```ts
50
+ import { interpolate, Easing } from "remotion";
51
+
52
+ const opacity = interpolate(frame, [0, 0.3 * fps], [0, 1], {
53
+ easing: Easing.spring({damping: 200}),
54
+ extrapolateLeft: "clamp",
55
+ extrapolateRight: "clamp",
56
+ });
57
+ ```
58
+
59
+ ## Bézier easing
60
+
61
+ Pass values like you would to a CSS cubic-bezier function.
62
+
63
+ ```ts
64
+ import { interpolate, Easing } from "remotion";
65
+
66
+ const opacity = interpolate(frame, [0, 0.3 * fps], [0, 1], {
67
+ easing: Easing.bezier(0.16, 1, 0.3, 1),
68
+ extrapolateLeft: "clamp",
69
+ extrapolateRight: "clamp",
70
+ });
71
+ ```
72
+
73
+ ## Animating scale
74
+
75
+ When animating scale, if the output is linear, the perceived scale would be smaller the larger the scale gets.
76
+ Use this option to compensate:
77
+
78
+ ```ts
79
+ const scale = interpolate(frame, [0, 0.3 * fps], [0, 1], {
80
+ easing: Easing.bezier(0.16, 1, 0.3, 1),
81
+ extrapolateLeft: "clamp",
82
+ extrapolateRight: "clamp",
83
+ output: 'perceptual-scale' // <- Add this to scale animations
84
+ });
85
+ ```
86
+
87
+ ## Multiple keyframes
88
+
89
+ Add as many keyframes as you want. For multiple easings, pass an array with `n - 1` items:
90
+
91
+ ```ts
92
+ const scale = interpolate(frame, [0, 1 * fps, 9 * fps, 10 * fps], [0, 1, 1, 0], {
93
+ easing: [Easing.bezier(0.16, 1, 0.3, 1), Easing.linear, Easing.spring({damping: 200})],
94
+ extrapolateLeft: "clamp",
95
+ extrapolateRight: "clamp",
96
+ output: 'perceptual-scale' // <- Add this to scale animations
97
+ });
98
+ ```
99
+
100
+ ## Posterization
101
+
102
+ You can intentionally reduce the frame rate for artistic reason. Use if it makes sense.
103
+
104
+ ```ts
105
+ const scale = interpolate(frame, [0, 1 * fps], [0, 1], {
106
+ easing: Easing.bezier(0.16, 1, 0.3, 1),
107
+ extrapolateLeft: "clamp",
108
+ extrapolateRight: "clamp",
109
+ posterize: 3 // Only every 3rd frame is sampled
110
+ });
111
+ ```
@@ -0,0 +1,239 @@
1
+ ---
2
+ name: transitions
3
+ description: Scene transitions and overlays for Remotion using TransitionSeries.
4
+ metadata:
5
+ tags: transitions, overlays, fade, slide, wipe, scenes
6
+ ---
7
+
8
+ ## TransitionSeries
9
+
10
+ `<TransitionSeries>` arranges scenes and supports two ways to enhance the cut point between them:
11
+
12
+ - **Transitions** (`<TransitionSeries.Transition>`) — crossfade, slide, wipe, etc. between two scenes. Shortens the timeline because both scenes play simultaneously during the transition.
13
+ - **Overlays** (`<TransitionSeries.Overlay>`) — render an effect (e.g. a light leak) on top of the cut point without shortening the timeline.
14
+
15
+ Children are absolutely positioned.
16
+
17
+ ## Prerequisites
18
+
19
+ ```bash
20
+ npx remotion add @remotion/transitions
21
+ ```
22
+
23
+ ## Transition example
24
+
25
+ ```tsx
26
+ import { TransitionSeries, linearTiming } from "@remotion/transitions";
27
+ import { fade } from "@remotion/transitions/fade";
28
+
29
+ <TransitionSeries>
30
+ <TransitionSeries.Sequence durationInFrames={60}>
31
+ <SceneA />
32
+ </TransitionSeries.Sequence>
33
+ <TransitionSeries.Transition
34
+ presentation={fade()}
35
+ timing={linearTiming({ durationInFrames: 15 })}
36
+ />
37
+ <TransitionSeries.Sequence durationInFrames={60}>
38
+ <SceneB />
39
+ </TransitionSeries.Sequence>
40
+ </TransitionSeries>;
41
+ ```
42
+
43
+ ## Overlay example
44
+
45
+ Any React component can be used as an overlay. For a ready-made effect, see the **light-leaks** rule.
46
+
47
+ ```tsx
48
+ import {lightLeak} from '@remotion/effects/light-leak';
49
+ import {TransitionSeries} from '@remotion/transitions';
50
+ import {interpolate, Solid, useCurrentFrame, useVideoConfig} from 'remotion';
51
+
52
+ const LightLeakOverlay: React.FC = () => {
53
+ const frame = useCurrentFrame();
54
+ const {durationInFrames, height, width} = useVideoConfig();
55
+
56
+ return (
57
+ <Solid
58
+ width={width}
59
+ height={height}
60
+ effects={[
61
+ lightLeak({
62
+ progress: interpolate(frame, [0, durationInFrames - 1], [0, 1], {
63
+ extrapolateLeft: 'clamp',
64
+ extrapolateRight: 'clamp',
65
+ }),
66
+ }),
67
+ ]}
68
+ />
69
+ );
70
+ };
71
+
72
+ <TransitionSeries>
73
+ <TransitionSeries.Sequence durationInFrames={60}>
74
+ <SceneA />
75
+ </TransitionSeries.Sequence>
76
+ <TransitionSeries.Overlay durationInFrames={20}>
77
+ <LightLeakOverlay />
78
+ </TransitionSeries.Overlay>
79
+ <TransitionSeries.Sequence durationInFrames={60}>
80
+ <SceneB />
81
+ </TransitionSeries.Sequence>
82
+ </TransitionSeries>;
83
+ ```
84
+
85
+ ## Mixing transitions and overlays
86
+
87
+ Transitions and overlays can coexist in the same `<TransitionSeries>`, but an overlay cannot be adjacent to a transition or another overlay.
88
+
89
+ ```tsx
90
+ import {lightLeak} from '@remotion/effects/light-leak';
91
+ import {TransitionSeries, linearTiming} from '@remotion/transitions';
92
+ import {fade} from '@remotion/transitions/fade';
93
+ import {interpolate, Solid, useCurrentFrame, useVideoConfig} from 'remotion';
94
+
95
+ const LightLeakOverlay: React.FC = () => {
96
+ const frame = useCurrentFrame();
97
+ const {durationInFrames, height, width} = useVideoConfig();
98
+
99
+ return (
100
+ <Solid
101
+ width={width}
102
+ height={height}
103
+ effects={[
104
+ lightLeak({
105
+ progress: interpolate(frame, [0, durationInFrames - 1], [0, 1], {
106
+ extrapolateLeft: 'clamp',
107
+ extrapolateRight: 'clamp',
108
+ }),
109
+ }),
110
+ ]}
111
+ />
112
+ );
113
+ };
114
+
115
+ <TransitionSeries>
116
+ <TransitionSeries.Sequence durationInFrames={60}>
117
+ <SceneA />
118
+ </TransitionSeries.Sequence>
119
+ <TransitionSeries.Overlay durationInFrames={30}>
120
+ <LightLeakOverlay />
121
+ </TransitionSeries.Overlay>
122
+ <TransitionSeries.Sequence durationInFrames={60}>
123
+ <SceneB />
124
+ </TransitionSeries.Sequence>
125
+ <TransitionSeries.Transition
126
+ presentation={fade()}
127
+ timing={linearTiming({ durationInFrames: 15 })}
128
+ />
129
+ <TransitionSeries.Sequence durationInFrames={60}>
130
+ <SceneC />
131
+ </TransitionSeries.Sequence>
132
+ </TransitionSeries>;
133
+ ```
134
+
135
+ ## Transition props
136
+
137
+ `<TransitionSeries.Transition>` requires:
138
+
139
+ - `presentation` — the visual effect (e.g. `fade()`, `slide()`, `wipe()`).
140
+ - `timing` — controls speed and easing (e.g. `linearTiming()`, `springTiming()`).
141
+
142
+ ## Overlay props
143
+
144
+ `<TransitionSeries.Overlay>` accepts:
145
+
146
+ - `durationInFrames` — how long the overlay is visible (positive integer).
147
+ - `offset?` — shifts the overlay relative to the cut point center. Positive = later, negative = earlier. Default: `0`.
148
+
149
+ ## Available transition types
150
+
151
+ Import transitions from their respective modules:
152
+
153
+ ```tsx
154
+ import { fade } from "@remotion/transitions/fade";
155
+ import { slide } from "@remotion/transitions/slide";
156
+ import { wipe } from "@remotion/transitions/wipe";
157
+ import { flip } from "@remotion/transitions/flip";
158
+ import { clockWipe } from "@remotion/transitions/clock-wipe";
159
+ ```
160
+
161
+ ## Slide transition with direction
162
+
163
+ ```tsx
164
+ import { slide } from "@remotion/transitions/slide";
165
+
166
+ <TransitionSeries.Transition
167
+ presentation={slide({ direction: "from-left" })}
168
+ timing={linearTiming({ durationInFrames: 20 })}
169
+ />;
170
+ ```
171
+
172
+ Directions: `"from-left"`, `"from-right"`, `"from-top"`, `"from-bottom"`
173
+
174
+ ## Timing options
175
+
176
+ ```tsx
177
+ import { linearTiming, springTiming } from "@remotion/transitions";
178
+
179
+ // Linear timing - constant speed
180
+ linearTiming({ durationInFrames: 20 });
181
+
182
+ // Spring timing - organic motion
183
+ springTiming({ config: { damping: 200 }, durationInFrames: 25 });
184
+ ```
185
+
186
+ ## Duration calculation
187
+
188
+ Transitions overlap adjacent scenes, so the total composition length is **shorter** than the sum of all sequence durations. Overlays do **not** affect the total duration.
189
+
190
+ For example, with two 60-frame sequences and a 15-frame transition:
191
+
192
+ - Without transitions: `60 + 60 = 120` frames
193
+ - With transition: `60 + 60 - 15 = 105` frames
194
+
195
+ Adding an overlay between two other sequences does not change the total.
196
+
197
+ ### Getting the duration of a transition
198
+
199
+ Use the `getDurationInFrames()` method on the timing object:
200
+
201
+ ```tsx
202
+ import { linearTiming, springTiming } from "@remotion/transitions";
203
+
204
+ const linearDuration = linearTiming({
205
+ durationInFrames: 20,
206
+ }).getDurationInFrames({ fps: 30 });
207
+ // Returns 20
208
+
209
+ const springDuration = springTiming({
210
+ config: { damping: 200 },
211
+ }).getDurationInFrames({ fps: 30 });
212
+ // Returns calculated duration based on spring physics
213
+ ```
214
+
215
+ For `springTiming` without an explicit `durationInFrames`, the duration depends on `fps` because it calculates when the spring animation settles.
216
+
217
+ ### Calculating total composition duration
218
+
219
+ ```tsx
220
+ import { linearTiming } from "@remotion/transitions";
221
+
222
+ const scene1Duration = 60;
223
+ const scene2Duration = 60;
224
+ const scene3Duration = 60;
225
+
226
+ const timing1 = linearTiming({ durationInFrames: 15 });
227
+ const timing2 = linearTiming({ durationInFrames: 20 });
228
+
229
+ const transition1Duration = timing1.getDurationInFrames({ fps: 30 });
230
+ const transition2Duration = timing2.getDurationInFrames({ fps: 30 });
231
+
232
+ const totalDuration =
233
+ scene1Duration +
234
+ scene2Duration +
235
+ scene3Duration -
236
+ transition1Duration -
237
+ transition2Duration;
238
+ // 60 + 60 + 60 - 15 - 20 = 145 frames
239
+ ```
@@ -0,0 +1,90 @@
1
+ Remotion can be used for bare-bones video editing in the Studio. Choose the source structure based on the editing behavior you want:
2
+
3
+ - Use independently positioned clips when moving or resizing one clip should not affect any other clip.
4
+ - Use ripple editing when changing one clip's duration should reposition every clip after it.
5
+
6
+ Keep every editable clip as its own authored JSX node. Do not generate editable clips with `.map()` or another programmatic loop.
7
+
8
+ ## Independently positioned clips
9
+
10
+ Place every `<Video>` directly in the composition and hardcode its timing props. `from={0}` may be omitted:
11
+
12
+ ```tsx
13
+ <Video
14
+ src="https://remotion.media/video.mp4"
15
+ trimBefore={0}
16
+ durationInFrames={78}
17
+ />
18
+ <Video
19
+ src="https://remotion.media/video.webm"
20
+ trimBefore={12}
21
+ from={78}
22
+ durationInFrames={66}
23
+ />
24
+ <Video
25
+ src="https://remotion.media/video.mp4"
26
+ trimBefore={72}
27
+ from={144}
28
+ durationInFrames={90}
29
+ />
30
+ <Video
31
+ src="https://remotion.media/video.webm"
32
+ trimBefore={58}
33
+ from={234}
34
+ durationInFrames={72}
35
+ />
36
+ <Video
37
+ src="https://remotion.media/video.mp4"
38
+ trimBefore={180}
39
+ from={306}
40
+ durationInFrames={60}
41
+ />
42
+ ```
43
+
44
+ - `from` is the clip's absolute start frame in its parent timeline.
45
+ - `durationInFrames` is how many frames the clip remains visible.
46
+ - `trimBefore` is how many source frames are skipped before playback begins.
47
+ - Each `<Video>` must be a separate JSX node. Add a descriptive `name` when useful in the Studio timeline.
48
+ - `from`, `durationInFrames`, and `trimBefore` must be hardcoded frame values. Do not compute them.
49
+ - Import `<Video>` from `@remotion/media`.
50
+
51
+ Moving or resizing one of these clips does not reposition later clips. Gaps and overlaps are therefore allowed.
52
+
53
+ ## Ripple editing with `TransitionSeries`
54
+
55
+ “Ripple editing” is the standard video-editing term for changing one clip and automatically shifting everything after it.
56
+ In Remotion, a `<TransitionSeries>` provides this sequential, cascading timing model while also allowing transitions between clips.
57
+
58
+ Read [transitions.md](transitions.md) for transition types, timing options, installation instructions, and composition-duration calculation.
59
+
60
+ Keep the markup like this:
61
+
62
+ ```tsx
63
+ <TransitionSeries name="Video timeline">
64
+ <TransitionSeries.Sequence name="Clip 1" durationInFrames={39}>
65
+ <Video
66
+ src="https://remotion.media/video.mp4"
67
+ trimBefore={0}
68
+ />
69
+ </TransitionSeries.Sequence>
70
+ <TransitionSeries.Sequence name="Clip 2" durationInFrames={45}>
71
+ <Video
72
+ src="https://remotion.media/video.webm"
73
+ trimBefore={8}
74
+ />
75
+ </TransitionSeries.Sequence>
76
+ <TransitionSeries.Sequence name="Clip 3" durationInFrames={43}>
77
+ <Video
78
+ src="https://remotion.media/video.mp4"
79
+ trimBefore={60}
80
+ />
81
+ </TransitionSeries.Sequence>
82
+ </TransitionSeries>
83
+ ```
84
+
85
+ - The `<TransitionSeries.Sequence>` is the editable clip row in the Studio timeline.
86
+ - Dragging its right edge changes `durationInFrames` and repositions every later sequence.
87
+ - Do not set `from` on `<TransitionSeries.Sequence>`; the series calculates each start frame.
88
+ - Hardcode all numeric values.
89
+ - Do not programmatically create multiple `<TransitionSeries.Sequence>` (no `.map`). Each instance must be hard-coded.
90
+ - Import `<Video>` from `@remotion/media`. Import `<TransitionSeries>` from `@remotion/transitions`. If needing to install: `npx remotion add @remotion/media @remotion/transitions`