dsh-remotion 0.3.1 → 0.3.3

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 (133) hide show
  1. package/README.en.md +4 -4
  2. package/README.md +4 -4
  3. package/package.json +64 -63
  4. package/scripts/.skill-port-meta.json +50 -0
  5. package/scripts/sync-skills.mjs +65 -0
  6. package/skills/remotion-best-practices/SKILL.md +18 -17
  7. package/skills/remotion-best-practices/agents/openai.yaml +2 -2
  8. package/skills/remotion-best-practices/assets/remotion-icon.svg +4 -0
  9. package/skills/remotion-best-practices/remotion-captions/{SKILL.md → REFERENCE.md} +1 -1
  10. package/skills/remotion-best-practices/remotion-captions/agents/openai.yaml +2 -2
  11. package/skills/remotion-best-practices/remotion-captions/assets/remotion-icon.svg +4 -0
  12. package/skills/remotion-best-practices/remotion-create/{SKILL.md → REFERENCE.md} +26 -9
  13. package/skills/remotion-best-practices/remotion-create/agents/openai.yaml +2 -2
  14. package/skills/remotion-best-practices/remotion-create/assets/remotion-icon.svg +4 -0
  15. package/skills/remotion-best-practices/remotion-docs/{SKILL.md → REFERENCE.md} +2 -2
  16. package/skills/remotion-best-practices/remotion-docs/agents/openai.yaml +2 -2
  17. package/skills/remotion-best-practices/remotion-docs/assets/remotion-icon.svg +4 -0
  18. package/skills/remotion-best-practices/remotion-interactivity/{SKILL.md → REFERENCE.md} +69 -1
  19. package/skills/remotion-best-practices/remotion-interactivity/agents/openai.yaml +2 -2
  20. package/skills/remotion-best-practices/remotion-interactivity/assets/remotion-icon.svg +4 -0
  21. package/skills/{remotion-markup/remotion-maps/SKILL.md → remotion-best-practices/remotion-maps/REFERENCE.md} +1 -1
  22. package/skills/remotion-best-practices/remotion-maps/agents/openai.yaml +2 -2
  23. package/skills/remotion-best-practices/remotion-maps/assets/remotion-icon.svg +4 -0
  24. package/skills/remotion-best-practices/remotion-maps/techniques/maplibre/TECHNIQUE.md +21 -2
  25. package/skills/remotion-best-practices/remotion-maps/techniques/static-map/TECHNIQUE.md +1 -1
  26. package/skills/remotion-best-practices/remotion-markup/{SKILL.md → REFERENCE.md} +19 -26
  27. package/skills/remotion-best-practices/remotion-markup/agents/openai.yaml +2 -2
  28. package/skills/remotion-best-practices/remotion-markup/assets/remotion-icon.svg +4 -0
  29. package/skills/remotion-best-practices/remotion-markup/audio.md +3 -5
  30. package/skills/remotion-best-practices/remotion-markup/compositions.md +11 -5
  31. package/skills/remotion-best-practices/remotion-markup/connected-compositions.md +79 -0
  32. package/skills/remotion-best-practices/remotion-markup/cropping.md +1 -1
  33. package/skills/remotion-best-practices/remotion-markup/embedding-videos.md +3 -5
  34. package/skills/remotion-best-practices/remotion-markup/motion-blur.md +60 -0
  35. package/skills/remotion-best-practices/remotion-markup/multi-scene-video.md +64 -64
  36. package/skills/remotion-best-practices/{remotion-maps/SKILL.md → remotion-markup/remotion-maps/REFERENCE.md} +1 -1
  37. package/skills/remotion-best-practices/remotion-markup/remotion-maps/agents/openai.yaml +2 -2
  38. package/skills/remotion-best-practices/remotion-markup/remotion-maps/assets/remotion-icon.svg +4 -0
  39. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +21 -2
  40. package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +1 -1
  41. package/skills/remotion-best-practices/remotion-markup/text-highlights.md +1 -1
  42. package/skills/remotion-best-practices/remotion-multimedia/{SKILL.md → REFERENCE.md} +1 -1
  43. package/skills/remotion-best-practices/remotion-multimedia/agents/openai.yaml +2 -2
  44. package/skills/remotion-best-practices/remotion-multimedia/assets/remotion-icon.svg +4 -0
  45. package/skills/remotion-best-practices/remotion-render/{SKILL.md → REFERENCE.md} +9 -1
  46. package/skills/remotion-best-practices/remotion-render/agents/openai.yaml +2 -2
  47. package/skills/remotion-best-practices/remotion-render/assets/remotion-icon.svg +4 -0
  48. package/skills/remotion-best-practices/remotion-saas/{SKILL.md → REFERENCE.md} +1 -1
  49. package/skills/remotion-best-practices/remotion-saas/agents/openai.yaml +2 -2
  50. package/skills/remotion-best-practices/remotion-saas/assets/remotion-icon.svg +4 -0
  51. package/skills/remotion-best-practices/remotion-saas/framework.md +1 -3
  52. package/skills/remotion-best-practices/remotion-studio/{SKILL.md → REFERENCE.md} +1 -1
  53. package/skills/remotion-best-practices/remotion-studio/agents/openai.yaml +2 -2
  54. package/skills/remotion-best-practices/remotion-studio/assets/remotion-icon.svg +4 -0
  55. package/skills/remotion-best-practices/remotion-upgrade/{SKILL.md → REFERENCE.md} +3 -3
  56. package/skills/remotion-best-practices/remotion-upgrade/agents/openai.yaml +2 -2
  57. package/skills/remotion-best-practices/remotion-upgrade/assets/remotion-icon.svg +4 -0
  58. package/skills/remotion-captions/SKILL.md +6 -5
  59. package/skills/remotion-captions/agents/openai.yaml +2 -2
  60. package/skills/remotion-captions/assets/remotion-icon.svg +4 -0
  61. package/skills/remotion-create/SKILL.md +32 -14
  62. package/skills/remotion-create/agents/openai.yaml +2 -2
  63. package/skills/remotion-create/assets/remotion-icon.svg +4 -0
  64. package/skills/remotion-docs/SKILL.md +7 -6
  65. package/skills/remotion-docs/agents/openai.yaml +2 -2
  66. package/skills/remotion-docs/assets/remotion-icon.svg +4 -0
  67. package/skills/remotion-interactivity/SKILL.md +75 -6
  68. package/skills/remotion-interactivity/agents/openai.yaml +2 -2
  69. package/skills/remotion-interactivity/assets/remotion-icon.svg +4 -0
  70. package/skills/remotion-maps/SKILL.md +6 -5
  71. package/skills/remotion-maps/agents/openai.yaml +2 -2
  72. package/skills/remotion-maps/assets/remotion-icon.svg +4 -0
  73. package/skills/remotion-maps/techniques/maplibre/TECHNIQUE.md +21 -2
  74. package/skills/remotion-maps/techniques/static-map/TECHNIQUE.md +1 -1
  75. package/skills/remotion-markup/SKILL.md +24 -30
  76. package/skills/remotion-markup/agents/openai.yaml +2 -2
  77. package/skills/remotion-markup/assets/remotion-icon.svg +4 -0
  78. package/skills/remotion-markup/audio.md +3 -5
  79. package/skills/remotion-markup/calculate-metadata.md +2 -2
  80. package/skills/remotion-markup/compositions.md +11 -5
  81. package/skills/remotion-markup/connected-compositions.md +79 -0
  82. package/skills/remotion-markup/cropping.md +1 -1
  83. package/skills/remotion-markup/embedding-videos.md +3 -5
  84. package/skills/remotion-markup/motion-blur.md +60 -0
  85. package/skills/remotion-markup/multi-scene-video.md +64 -64
  86. package/skills/{remotion-best-practices/remotion-markup/remotion-maps/SKILL.md → remotion-markup/remotion-maps/REFERENCE.md} +1 -1
  87. package/skills/remotion-markup/remotion-maps/agents/openai.yaml +2 -2
  88. package/skills/remotion-markup/remotion-maps/assets/remotion-icon.svg +4 -0
  89. package/skills/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +21 -2
  90. package/skills/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +1 -1
  91. package/skills/remotion-markup/text-highlights.md +1 -1
  92. package/skills/remotion-markup/voiceover.md +1 -1
  93. package/skills/remotion-multimedia/SKILL.md +6 -5
  94. package/skills/remotion-multimedia/agents/openai.yaml +2 -2
  95. package/skills/remotion-multimedia/assets/remotion-icon.svg +4 -0
  96. package/skills/remotion-render/SKILL.md +14 -5
  97. package/skills/remotion-render/agents/openai.yaml +2 -2
  98. package/skills/remotion-render/assets/remotion-icon.svg +4 -0
  99. package/skills/remotion-saas/SKILL.md +6 -5
  100. package/skills/remotion-saas/agents/openai.yaml +2 -2
  101. package/skills/remotion-saas/assets/remotion-icon.svg +4 -0
  102. package/skills/remotion-saas/framework.md +1 -3
  103. package/skills/remotion-studio/SKILL.md +6 -5
  104. package/skills/remotion-studio/agents/openai.yaml +2 -2
  105. package/skills/remotion-studio/assets/remotion-icon.svg +4 -0
  106. package/skills/remotion-upgrade/SKILL.md +8 -7
  107. package/skills/remotion-upgrade/agents/openai.yaml +2 -2
  108. package/skills/remotion-upgrade/assets/remotion-icon.svg +4 -0
  109. package/skills/remotion-best-practices/assets/remotion-icon.png +0 -0
  110. package/skills/remotion-best-practices/remotion-captions/assets/remotion-icon.png +0 -0
  111. package/skills/remotion-best-practices/remotion-create/assets/remotion-icon.png +0 -0
  112. package/skills/remotion-best-practices/remotion-docs/assets/remotion-icon.png +0 -0
  113. package/skills/remotion-best-practices/remotion-interactivity/assets/remotion-icon.png +0 -0
  114. package/skills/remotion-best-practices/remotion-maps/assets/remotion-icon.png +0 -0
  115. package/skills/remotion-best-practices/remotion-markup/assets/remotion-icon.png +0 -0
  116. package/skills/remotion-best-practices/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  117. package/skills/remotion-best-practices/remotion-multimedia/assets/remotion-icon.png +0 -0
  118. package/skills/remotion-best-practices/remotion-render/assets/remotion-icon.png +0 -0
  119. package/skills/remotion-best-practices/remotion-saas/assets/remotion-icon.png +0 -0
  120. package/skills/remotion-best-practices/remotion-studio/assets/remotion-icon.png +0 -0
  121. package/skills/remotion-best-practices/remotion-upgrade/assets/remotion-icon.png +0 -0
  122. package/skills/remotion-captions/assets/remotion-icon.png +0 -0
  123. package/skills/remotion-create/assets/remotion-icon.png +0 -0
  124. package/skills/remotion-docs/assets/remotion-icon.png +0 -0
  125. package/skills/remotion-interactivity/assets/remotion-icon.png +0 -0
  126. package/skills/remotion-maps/assets/remotion-icon.png +0 -0
  127. package/skills/remotion-markup/assets/remotion-icon.png +0 -0
  128. package/skills/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
  129. package/skills/remotion-multimedia/assets/remotion-icon.png +0 -0
  130. package/skills/remotion-render/assets/remotion-icon.png +0 -0
  131. package/skills/remotion-saas/assets/remotion-icon.png +0 -0
  132. package/skills/remotion-studio/assets/remotion-icon.png +0 -0
  133. package/skills/remotion-upgrade/assets/remotion-icon.png +0 -0
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: remotion-interactivity
3
3
  description: Structure Remotion markup for interactivity
4
- version: 4.0.519
4
+ version: 4.0.529
5
5
  ---
6
6
 
7
7
  By writing Remotion markup in a specific way, the Remotion Studio is able to recognize the structure of the code and makes it interactive:
@@ -147,6 +147,72 @@ const translateY = interpolate(frame, [0, 30], [0, 120]); // ❌ Math should be
147
147
  />
148
148
  ```
149
149
 
150
+ ## Keep SVG paths editable with `Interactive.Path`
151
+
152
+ Use `<Interactive.Path>` from `remotion` instead of `<path>` inside an SVG to make the path visually editable.
153
+
154
+ Install `@remotion/paths` for path interpolation and Studio path keyframes:
155
+
156
+ ```sh
157
+ bunx remotion add @remotion/paths
158
+ ```
159
+
160
+ If the geometry is meant to be static, put the path string directly in the `d` prop. Do not extract it into a constant.
161
+
162
+ ```tsx title="Editable static path"
163
+ import {Interactive} from 'remotion';
164
+
165
+ <Interactive.Svg width={300} height={300} viewBox="0 0 300 300">
166
+ <Interactive.Path
167
+ name="Triangle"
168
+ d="M 40 40 L 260 40 L 150 260 Z"
169
+ fill="#0b84f3"
170
+ />
171
+ </Interactive.Svg>
172
+ ```
173
+
174
+ ### Morph paths using inline `interpolatePaths()`
175
+
176
+ Use `interpolatePaths()` from `@remotion/paths` directly in `d`.
177
+ It accepts a frame, an input range, an equally sized array of path strings, and options for easing, extrapolation, and posterization.
178
+ Keep the output paths, ranges, and options inline, following the same input-range rules as `interpolate()` above.
179
+ Do not use `interpolatePath()` API or extract the interpolated result into a variable when the path keyframes should remain editable in Studio.
180
+
181
+ ```tsx title="Editable path keyframes"
182
+ import {interpolatePaths} from '@remotion/paths';
183
+ import {Easing, Interactive, useCurrentFrame} from 'remotion';
184
+
185
+ export const MorphingPath = () => {
186
+ const frame = useCurrentFrame();
187
+
188
+ return (
189
+ <Interactive.Svg width={300} height={300} viewBox="0 0 300 300">
190
+ <Interactive.Path
191
+ name="Morphing triangle"
192
+ d={interpolatePaths(
193
+ frame,
194
+ [0, 30, 60],
195
+ [
196
+ 'M 40 40 L 260 40 L 150 260 Z',
197
+ 'M 40 150 L 150 40 L 260 150 Z',
198
+ 'M 40 260 L 150 40 L 260 260 Z',
199
+ ],
200
+ {
201
+ easing: Easing.bezier(0.42, 0, 0.58, 1),
202
+ extrapolateLeft: 'clamp',
203
+ extrapolateRight: 'clamp',
204
+ },
205
+ )}
206
+ fill="#0b84f3"
207
+ />
208
+ </Interactive.Svg>
209
+ );
210
+ };
211
+ ```
212
+
213
+ Studio can edit the path at the current frame, add or move keyframes, and adjust their easing.
214
+ Use `strokeDasharray` and `strokeDashoffset` to evolve paths.
215
+
150
216
  ## Use `scale`, `translate`, `rotate` CSS properties
151
217
 
152
218
  Avoid the `transform` CSS property.
@@ -239,6 +305,8 @@ Render separate elements if one version should have effects and another should n
239
305
 
240
306
  ## Making your own component interactive
241
307
 
308
+ When using `Interactive.withSchema()`, include `Interactive.baseSchema` in the schema so standard timeline controls such as trimming and visibility remain available.
309
+
242
310
  To make a custom userland component interactive, use:
243
311
  [Make a component interactive](https://www.remotion.dev/docs/studio/make-component-interactive.md)
244
312
 
@@ -1,7 +1,7 @@
1
1
  interface:
2
2
  display_name: '/remotion-interactivity'
3
3
  short_description: 'Make compositions editable in Remotion Studio'
4
- icon_small: './assets/remotion-icon.png'
5
- icon_large: './assets/remotion-icon.png'
4
+ icon_small: './assets/remotion-icon.svg'
5
+ icon_large: './assets/remotion-icon.svg'
6
6
  brand_color: '#0B84F3'
7
7
  default_prompt: '$remotion-interactivity: Make the markup in MyComp.tsx interactive'
@@ -0,0 +1,4 @@
1
+ <svg width="100" height="100" viewBox="20 30 363 363" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Remotion</title>
3
+ <path d="M148.332 92.9015C143.307 93.1742 139.259 93.9713 135.179 95.5236C133.144 96.2893 129.809 97.957 127.973 99.1108C120.295 103.925 114.443 111.162 111.391 119.584C110.782 121.252 109.136 126.57 108.076 130.23C101.018 154.7 97.0112 181.456 96.1511 209.776C96.0148 214.286 96.0148 225.026 96.1511 229.463C96.728 248.237 98.5216 265.187 101.773 282.472C103.095 289.468 105.213 298.866 106.44 303.135C108.947 311.809 114.065 319.193 121.344 324.605C126.221 328.234 131.759 330.668 137.895 331.863C140.853 332.44 144.755 332.702 147.629 332.514C151.604 332.251 159.491 331.192 165.9 330.049C194.786 324.899 221.469 315.679 245.666 302.485C260.99 294.125 274.09 285.074 286.729 274.092C299.326 263.163 310.066 251.405 319.516 238.21C321.708 235.158 322.81 233.375 323.911 231.131C326.743 225.341 328.075 219.583 328.064 213.143C328.064 207.143 326.932 201.815 324.488 196.361C323.313 193.728 322.191 191.84 319.674 188.253C310.402 175.048 300.112 163.542 287.568 152.361C268.122 135.034 245.026 120.822 219.235 110.302C213.644 108.026 208.138 106.022 201.509 103.851C187.475 99.2681 170.106 95.2929 155.411 93.3105C153.104 92.9959 149.968 92.8176 148.332 92.9015Z" fill="#0B84F3"/>
4
+ </svg>
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: remotion-maps
3
3
  description: Remotion Map animation knowledge
4
- version: 4.0.519
4
+ version: 4.0.529
5
5
  ---
6
6
 
7
7
  # Remotion Maps
@@ -1,7 +1,7 @@
1
1
  interface:
2
2
  display_name: '/remotion-maps'
3
3
  short_description: 'Create animated maps in Remotion videos'
4
- icon_small: './assets/remotion-icon.png'
5
- icon_large: './assets/remotion-icon.png'
4
+ icon_small: './assets/remotion-icon.svg'
5
+ icon_large: './assets/remotion-icon.svg'
6
6
  brand_color: '#0B84F3'
7
7
  default_prompt: '$remotion-maps: Animate a dot from Zurich to New York.'
@@ -0,0 +1,4 @@
1
+ <svg width="100" height="100" viewBox="20 30 363 363" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Remotion</title>
3
+ <path d="M148.332 92.9015C143.307 93.1742 139.259 93.9713 135.179 95.5236C133.144 96.2893 129.809 97.957 127.973 99.1108C120.295 103.925 114.443 111.162 111.391 119.584C110.782 121.252 109.136 126.57 108.076 130.23C101.018 154.7 97.0112 181.456 96.1511 209.776C96.0148 214.286 96.0148 225.026 96.1511 229.463C96.728 248.237 98.5216 265.187 101.773 282.472C103.095 289.468 105.213 298.866 106.44 303.135C108.947 311.809 114.065 319.193 121.344 324.605C126.221 328.234 131.759 330.668 137.895 331.863C140.853 332.44 144.755 332.702 147.629 332.514C151.604 332.251 159.491 331.192 165.9 330.049C194.786 324.899 221.469 315.679 245.666 302.485C260.99 294.125 274.09 285.074 286.729 274.092C299.326 263.163 310.066 251.405 319.516 238.21C321.708 235.158 322.81 233.375 323.911 231.131C326.743 225.341 328.075 219.583 328.064 213.143C328.064 207.143 326.932 201.815 324.488 196.361C323.313 193.728 322.191 191.84 319.674 188.253C310.402 175.048 300.112 163.542 287.568 152.361C268.122 135.034 245.026 120.822 219.235 110.302C213.644 108.026 208.138 106.022 201.509 103.851C187.475 99.2681 170.106 95.2929 155.411 93.3105C153.104 92.9959 149.968 92.8176 148.332 92.9015Z" fill="#0B84F3"/>
4
+ </svg>
@@ -63,7 +63,7 @@ import 'maplibre-gl/dist/maplibre-gl.css';
63
63
  ```tsx
64
64
  import {useEffect, useRef, useState} from 'react';
65
65
  import {AbsoluteFill, useDelayRender, useVideoConfig} from 'remotion';
66
- import maplibregl from 'maplibre-gl';
66
+ import * as maplibregl from 'maplibre-gl';
67
67
  import 'maplibre-gl/dist/maplibre-gl.css';
68
68
 
69
69
  const zurich: [number, number] = [8.5417, 47.3769];
@@ -79,6 +79,15 @@ export const MyComposition = () => {
79
79
  return;
80
80
  }
81
81
 
82
+ maplibregl.setWorkerUrl(
83
+ URL.createObjectURL(
84
+ new Blob(
85
+ [`import "https://unpkg.com/maplibre-gl@${maplibregl.getVersion()}/dist/maplibre-gl-worker.mjs";`],
86
+ {type: 'text/javascript'},
87
+ ),
88
+ ),
89
+ );
90
+
82
91
  const mapInstance = new maplibregl.Map({
83
92
  container: containerRef.current,
84
93
  style: 'https://demotiles.maplibre.org/style.json',
@@ -131,7 +140,8 @@ import {
131
140
  useDelayRender,
132
141
  useVideoConfig,
133
142
  } from 'remotion';
134
- import maplibregl, {type GeoJSONSource, type Map} from 'maplibre-gl';
143
+ import * as maplibregl from 'maplibre-gl';
144
+ import {type GeoJSONSource, type Map} from 'maplibre-gl';
135
145
  import 'maplibre-gl/dist/maplibre-gl.css';
136
146
 
137
147
  const zurich: [number, number] = [8.5417, 47.3769];
@@ -214,6 +224,15 @@ export const MyComposition = () => {
214
224
  return;
215
225
  }
216
226
 
227
+ maplibregl.setWorkerUrl(
228
+ URL.createObjectURL(
229
+ new Blob(
230
+ [`import "https://unpkg.com/maplibre-gl@${maplibregl.getVersion()}/dist/maplibre-gl-worker.mjs";`],
231
+ {type: 'text/javascript'},
232
+ ),
233
+ ),
234
+ );
235
+
217
236
  const mapInstance = new maplibregl.Map({
218
237
  container: containerRef.current,
219
238
  style: 'https://demotiles.maplibre.org/style.json',
@@ -34,4 +34,4 @@ export const StaticMap: React.FC = () => {
34
34
 
35
35
  ## Overlays and Interactivity
36
36
 
37
- Follow [Remotion Interactivity](../../../remotion-interactivity/SKILL.md) best practices and [Remotion Markup Best practices](../../../remotion-markup/SKILL.md) for elements.
37
+ Follow [Remotion Interactivity](../../../remotion-interactivity/REFERENCE.md) best practices and [Remotion Markup Best practices](../../../remotion-markup/REFERENCE.md) for elements.
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: remotion-markup
3
3
  description: Content, animation and effects best practices
4
- version: 4.0.519
4
+ version: 4.0.529
5
5
  ---
6
6
 
7
7
  This is guidance for writing Remotion React Markup.
8
- If this is not relevant, load [Remotion Best Practices](../remotion-best-practices/SKILL.md) instead.
8
+ If this is not relevant, load [Remotion Best Practices](../SKILL.md) instead.
9
9
 
10
10
  ## Preserve user changes
11
11
 
@@ -21,7 +21,7 @@ Tailwind animation class will not render correctly, they need to be refactored.
21
21
 
22
22
  Use `Easing.bezier()` and `Easing.spring()` to customize timing.
23
23
 
24
- Structure your markup according to [Remotion Interactivity Best Practices](../remotion-interactivity/SKILL.md)
24
+ Structure your markup according to [Remotion Interactivity Best Practices](../remotion-interactivity/REFERENCE.md)
25
25
 
26
26
  ```tsx
27
27
  import { useCurrentFrame, Easing, interpolate, Interactive } from "remotion";
@@ -212,7 +212,7 @@ If a component does not support these props, wrap it in`<Sequence>` from `remoti
212
212
 
213
213
  ## Maps
214
214
 
215
- See [Remotion Maps](./remotion-maps/SKILL.md) if wanting to include maps in the video.
215
+ See [Remotion Maps](./remotion-maps/REFERENCE.md) if wanting to include maps in the video.
216
216
 
217
217
  ## Text highlights and annotations
218
218
 
@@ -222,6 +222,10 @@ See [text-highlights.md](text-highlights.md) for text highlights (highlight mark
222
222
 
223
223
  See [multi-scene-video.md](multi-scene-video.md) if planning to make a video with multiple subsequent scenes.
224
224
 
225
+ ## Connected compositions
226
+
227
+ When a scene or group of layers deserves its own editable timeline, follow [connected-compositions.md](connected-compositions.md). Prefer this structure for substantial scenes in a multi-scene video.
228
+
225
229
  ## Voiceover
226
230
 
227
231
  See [voiceover.md](voiceover.md) for adding an AI-generated voiceover to Remotion compositions using ElevenLabs TTS.
@@ -246,6 +250,10 @@ See [cropping.md](cropping.md) if needing to crop the visible rectangle of a com
246
250
 
247
251
  See [transitions.md](transitions.md) for scene transition patterns.
248
252
 
253
+ ## Motion blur
254
+
255
+ When adding motion blur or a movement trail, read [motion-blur.md](motion-blur.md) for the preferred HTML-in-canvas approach, preview requirements, and alternatives.
256
+
249
257
  ## Visual and pixel effects
250
258
 
251
259
  When creating a visual effect, consider whether it is feasible using CSS and HTML, or whether a shader is needed.
@@ -271,11 +279,11 @@ When needing to visualize audio (spectrum bars, waveforms, bass-reactive effects
271
279
 
272
280
  ## Maps
273
281
 
274
- For static maps, animated routes and markers, geographic explainers, Mapbox, MapLibre, MapTiler, GeoJSON, or 3D geographic flyovers, load [Remotion Maps](./remotion-maps/SKILL.md).
282
+ For static maps, animated routes and markers, geographic explainers, Mapbox, MapLibre, MapTiler, GeoJSON, or 3D geographic flyovers, load [Remotion Maps](./remotion-maps/REFERENCE.md).
275
283
 
276
284
  ## Captions
277
285
 
278
- When dealing with captions or subtitles, load the [Remotion Captions](../remotion-captions/SKILL.md) skill for more information.
286
+ When dealing with captions or subtitles, load the [Remotion Captions](../remotion-captions/REFERENCE.md) skill for more information.
279
287
 
280
288
  ## Google Fonts
281
289
 
@@ -327,7 +335,7 @@ See [calculate-metadata.md](calculate-metadata.md) for dynamically set compositi
327
335
 
328
336
  ## Advanced compositions
329
337
 
330
- See [compositions.md](compositions.md) for how to define stills, folders, default props and for how to nest compositions.
338
+ See [compositions.md](compositions.md) for how to define stills, folders, default props and for how to nest compositions. For Studio navigation into a scene's own timeline, use [connected compositions](connected-compositions.md).
331
339
 
332
340
  ## Advanced sequencing
333
341
 
@@ -341,25 +349,10 @@ Use `npx remotion add` to add new packages with the right version:
341
349
  npx remotion add @remotion/media
342
350
  ```
343
351
 
344
- This goes for `@remotion/*` packages, `mediabunny`, `@mediabunny/*`, and `zod`.
352
+ This goes for `@remotion/*` packages, `mediabunny`, `@mediabunny/*`, `zod`, and `@huggingface/transformers`.
345
353
 
346
- ## Previewing markup
354
+ ## Visual checks
347
355
 
348
- ```
349
- npx remotion studio --no-open
350
- ```
351
-
352
- This will start a long-running process and print the server URL for the preview.
353
- If server is already started, it will print the URL.
354
- You can visit a specific composition by navigating to `/[composition-id]`, for example `http://localhost:3000/MapAnimation`.
355
-
356
- ## Optional: one-frame render check
357
-
358
- You can render a single frame with the CLI to sanity-check layout, colors, or timing.
359
- Skip it for trivial edits, pure refactors, or when you already have enough confidence from Studio or prior renders.
360
-
361
- ```bash
362
- npx remotion still [composition-id] --scale=0.25 --frame=30
363
- ```
356
+ When a visual check is useful, open the [Remotion Studio](../remotion-studio/REFERENCE.md) for an interactive preview.
364
357
 
365
- At 30 fps, `--frame=30` is the one-second mark (`--frame` is zero-based).
358
+ You can also use [Rendering](../remotion-render/REFERENCE.md) to inspect one or several frames as images.
@@ -1,7 +1,7 @@
1
1
  interface:
2
2
  display_name: '/remotion-markup'
3
3
  short_description: 'Apply Remotion animation and effects practices'
4
- icon_small: './assets/remotion-icon.png'
5
- icon_large: './assets/remotion-icon.png'
4
+ icon_small: './assets/remotion-icon.svg'
5
+ icon_large: './assets/remotion-icon.svg'
6
6
  brand_color: '#0B84F3'
7
7
  default_prompt: '$remotion-markup: Apply best Remotion Practices to MyComp.tsx.'
@@ -0,0 +1,4 @@
1
+ <svg width="100" height="100" viewBox="20 30 363 363" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Remotion</title>
3
+ <path d="M148.332 92.9015C143.307 93.1742 139.259 93.9713 135.179 95.5236C133.144 96.2893 129.809 97.957 127.973 99.1108C120.295 103.925 114.443 111.162 111.391 119.584C110.782 121.252 109.136 126.57 108.076 130.23C101.018 154.7 97.0112 181.456 96.1511 209.776C96.0148 214.286 96.0148 225.026 96.1511 229.463C96.728 248.237 98.5216 265.187 101.773 282.472C103.095 289.468 105.213 298.866 106.44 303.135C108.947 311.809 114.065 319.193 121.344 324.605C126.221 328.234 131.759 330.668 137.895 331.863C140.853 332.44 144.755 332.702 147.629 332.514C151.604 332.251 159.491 331.192 165.9 330.049C194.786 324.899 221.469 315.679 245.666 302.485C260.99 294.125 274.09 285.074 286.729 274.092C299.326 263.163 310.066 251.405 319.516 238.21C321.708 235.158 322.81 233.375 323.911 231.131C326.743 225.341 328.075 219.583 328.064 213.143C328.064 207.143 326.932 201.815 324.488 196.361C323.313 193.728 322.191 191.84 319.674 188.253C310.402 175.048 300.112 163.542 287.568 152.361C268.122 135.034 245.026 120.822 219.235 110.302C213.644 108.026 208.138 106.022 201.509 103.851C187.475 99.2681 170.106 95.2929 155.411 93.3105C153.104 92.9959 149.968 92.8176 148.332 92.9015Z" fill="#0B84F3"/>
4
+ </svg>
@@ -58,18 +58,16 @@ The audio still starts playing at the beginning of the composition - only the sp
58
58
 
59
59
  ## Delaying
60
60
 
61
- Wrap the audio in a `<Sequence>` to delay when it starts:
61
+ Set `from` directly on `<Audio>` to delay when it starts:
62
62
 
63
63
  ```tsx
64
- import { Sequence, staticFile } from "remotion";
64
+ import { staticFile, useVideoConfig } from "remotion";
65
65
  import { Audio } from "@remotion/media";
66
66
 
67
67
  const { fps } = useVideoConfig();
68
68
 
69
69
  return (
70
- <Sequence from={1 * fps}>
71
- <Audio src={staticFile("audio.mp3")} />
72
- </Sequence>
70
+ <Audio from={fps} src={staticFile("audio.mp3")} />
73
71
  );
74
72
  ```
75
73
 
@@ -106,12 +106,18 @@ Use [`calculateMetadata`](./calculate-metadata.md) to make dimensions, duration,
106
106
 
107
107
  ## Nesting compositions within another
108
108
 
109
- To add a composition within another composition, you can use the `<Sequence>` component with a `width` and `height` prop to specify the size of the composition.
109
+ To render a composition's component inside another composition, use `<Sequence>` with `width` and `height` when the nested content needs its own dimensions.
110
+
111
+ When the nested scene should have its own editable Studio timeline, use the [connected composition structure](connected-compositions.md).
110
112
 
111
113
  ```tsx
112
- <AbsoluteFill>
113
- <Sequence width={COMPOSITION_WIDTH} height={COMPOSITION_HEIGHT}>
114
- <CompositionComponent />
114
+ <>
115
+ <Video src="https://remotion.media/video.mp4" />
116
+ <Sequence
117
+ width={1920}
118
+ height={1080}
119
+ >
120
+ <OverlayComponent />
115
121
  </Sequence>
116
- </AbsoluteFill>
122
+ </>
117
123
  ```
@@ -0,0 +1,79 @@
1
+ # Connected compositions
2
+
3
+ Using the connected compositions pattern, a group of layers can get their own Studio timeline, like a precomposition in After Effects.
4
+
5
+ Use connected composition when a section has its own layers or timing, will be reused, or would be easier to edit and preview on its own.
6
+
7
+ 1. Put the scene's markup in a named React component. Multiple internal layers and sequences can live inside it.
8
+ 2. Render exactly one direct instance of that component inside a `<Sequence>`, `<Series.Sequence>`, or `<TransitionSeries.Sequence>` in the parent.
9
+ 3. Register the **same component reference** with `<Composition component={...}>` in the root. Give it a unique `id` and the dimensions, fps, and natural duration needed to preview the scene on its own. A `<Folder>` can keep scene compositions together.
10
+
11
+ ```tsx
12
+ // MyVideo.tsx
13
+ import {Series} from 'remotion';
14
+ import {OpeningScene} from './OpeningScene';
15
+ import {FeatureScene} from './FeatureScene';
16
+
17
+ export const MyVideo = () => (
18
+ <Series>
19
+ <Series.Sequence
20
+ name="Opening"
21
+ durationInFrames={90}
22
+ >
23
+ <OpeningScene />
24
+ </Series.Sequence>
25
+ <Series.Sequence
26
+ name="Feature"
27
+ durationInFrames={120}
28
+ >
29
+ <FeatureScene />
30
+ </Series.Sequence>
31
+ </Series>
32
+ );
33
+ ```
34
+
35
+ ```tsx
36
+ // Root.tsx
37
+ import {Composition, Folder} from 'remotion';
38
+ import {MyVideo} from './MyVideo';
39
+ import {OpeningScene} from './OpeningScene';
40
+ import {FeatureScene} from './FeatureScene';
41
+
42
+ export const RemotionRoot = () => (
43
+ <>
44
+ <Folder name="MyVideo-Scenes">
45
+ <Composition
46
+ id="Opening"
47
+ component={OpeningScene}
48
+ width={1920}
49
+ height={1080}
50
+ fps={30}
51
+ durationInFrames={90}
52
+ />
53
+ <Composition
54
+ id="Feature"
55
+ component={FeatureScene}
56
+ width={1920}
57
+ height={1080}
58
+ fps={30}
59
+ durationInFrames={120}
60
+ />
61
+ </Folder>
62
+ <Composition
63
+ id="MyVideo"
64
+ component={MyVideo}
65
+ width={1920}
66
+ height={1080}
67
+ fps={30}
68
+ durationInFrames={210}
69
+ />
70
+ </>
71
+ );
72
+ ```
73
+
74
+ Studio replaces the layers with a reference to the connected composition in the timeline.
75
+ Double-clicking a sequence with one connected composition opens it at the corresponding frame.
76
+ Editing the shared component changes both views.
77
+
78
+ If the scene takes props, pass the intended values in the parent and use matching `defaultProps` on its standalone registration; registration does not automatically copy the parent's props.
79
+ Keep scene and parent fps and dimensions aligned unless their difference is intentional.
@@ -18,7 +18,7 @@ The following components support `crop*` props:
18
18
  Crop values are ratios between `0` and `1`.
19
19
  A value of `0` applies no crop on that edge.
20
20
  A value of `1` is a full crop.
21
- Keep [Interactivity Best Practices](../remotion-interactivity/SKILL.md) also for cropping, to keep it editable and keyframable.
21
+ Keep [Interactivity Best Practices](../remotion-interactivity/REFERENCE.md) also for cropping, to keep it editable and keyframable.
22
22
 
23
23
  ```tsx
24
24
  <CanvasImage
@@ -54,18 +54,16 @@ return (
54
54
 
55
55
  ## Delaying
56
56
 
57
- Wrap the video in a `<Sequence>` to delay when it appears:
57
+ Set `from` directly on `<Video>` to delay when it appears:
58
58
 
59
59
  ```tsx
60
- import { Sequence, staticFile } from "remotion";
60
+ import { staticFile, useVideoConfig } from "remotion";
61
61
  import { Video } from "@remotion/media";
62
62
 
63
63
  const { fps } = useVideoConfig();
64
64
 
65
65
  return (
66
- <Sequence from={1 * fps}>
67
- <Video src={staticFile("video.mp4")} />
68
- </Sequence>
66
+ <Video from={fps} src={staticFile("video.mp4")} />
69
67
  );
70
68
  ```
71
69
 
@@ -0,0 +1,60 @@
1
+ # Motion blur
2
+
3
+ Use `@remotion/motion-blur` for frame-driven motion blur.
4
+ Install it with `npx remotion add @remotion/motion-blur`.
5
+
6
+ `<HtmlInCanvasMotionBlur>` is the state of the art in Remotion for blurring animated HTML. It captures the content at fractional frames and averages its pixels in a canvas.
7
+
8
+ ## `<HtmlInCanvasMotionBlur>`
9
+
10
+ Available from Remotion 4.0.529.
11
+ Supply the canvas `width` and `height`, usually from `useVideoConfig()`.
12
+ `shutterAngle` defaults to `180` and accepts `0` to `360`.
13
+ `0` disables blur. `samples` defaults to `8` and must be an integer from `1` to `64`. More samples can smooth the blur but increase preview and render cost.
14
+
15
+ Call `useCurrentFrame()` inside the child component so each sample receives its own frame.
16
+
17
+ ```tsx
18
+ import {
19
+ HtmlInCanvasMotionBlur,
20
+ } from '@remotion/motion-blur';
21
+ import {useCurrentFrame, useVideoConfig} from 'remotion';
22
+
23
+ const MovingBox = () => {
24
+ const frame = useCurrentFrame();
25
+ return (
26
+ <div
27
+ style={{
28
+ position: 'absolute',
29
+ left: frame * 10,
30
+ top: 200,
31
+ width: 120,
32
+ height: 120,
33
+ backgroundColor: '#ff6b6b',
34
+ }}
35
+ />
36
+ );
37
+ };
38
+
39
+ export const HtmlInCanvasBlur = () => {
40
+ const {width, height} = useVideoConfig();
41
+
42
+ return (
43
+ <HtmlInCanvasMotionBlur
44
+ width={width}
45
+ height={height}
46
+ samples={8}
47
+ shutterAngle={180}
48
+ >
49
+ <MovingBox />
50
+ </HtmlInCanvasMotionBlur>
51
+ );
52
+ };
53
+ ```
54
+
55
+ For live preview, enable HTML-in-canvas in Chrome 149 or later with `chrome://flags/#canvas-draw-element`.
56
+ No configuration for rendering is necessary.
57
+
58
+ Do not nest `<HtmlInCanvas>` or `<HtmlInCanvasMotionBlur>` components; nested HTML-in-canvas is unsupported.
59
+
60
+ If HTML-in-canvas is unavailable, see the [motion blur guide](https://www.remotion.dev/docs/motion-blur-guide) for other options. See the [`<HtmlInCanvasMotionBlur>` reference](https://www.remotion.dev/docs/motion-blur/html-in-canvas-motion-blur) for API details.