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.
- package/README.en.md +7 -5
- package/README.md +3 -3
- package/lib/index.d.ts +2 -2
- package/lib/index.js +15 -2
- package/package.json +1 -1
- package/skills/remotion-best-practices/SKILL.md +59 -0
- package/skills/remotion-best-practices/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-captions/SKILL.md +36 -0
- package/skills/remotion-best-practices/remotion-captions/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-captions/assets/remotion-icon.png +0 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-captions}/display-captions.md +9 -3
- package/skills/{remotion/rules → remotion-best-practices/remotion-captions}/import-srt-captions.md +5 -1
- package/skills/remotion-best-practices/remotion-create/SKILL.md +68 -0
- package/skills/remotion-best-practices/remotion-create/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-create/assets/remotion-icon.png +0 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-create}/tailwind.md +1 -1
- package/skills/remotion-best-practices/remotion-create/video-layout.md +9 -0
- package/skills/remotion-best-practices/remotion-docs/SKILL.md +46 -0
- package/skills/remotion-best-practices/remotion-docs/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-docs/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-interactivity/SKILL.md +247 -0
- package/skills/remotion-best-practices/remotion-interactivity/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-interactivity/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-maps/SKILL.md +36 -0
- package/skills/remotion-best-practices/remotion-maps/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-maps/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
- package/skills/remotion-best-practices/remotion-markup/SKILL.md +365 -0
- package/skills/remotion-best-practices/remotion-markup/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-markup/assets/remotion-icon.png +0 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/audio.md +4 -2
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/calculate-metadata.md +4 -2
- package/skills/remotion-best-practices/remotion-markup/compositions.md +117 -0
- package/skills/remotion-best-practices/remotion-markup/cropping.md +34 -0
- package/skills/remotion-best-practices/remotion-markup/effects.md +251 -0
- package/skills/{remotion/rules/videos.md → remotion-best-practices/remotion-markup/embedding-videos.md} +6 -4
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/ffmpeg.md +5 -1
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/gifs.md +55 -9
- package/skills/remotion-best-practices/remotion-markup/google-fonts.md +76 -0
- package/skills/remotion-best-practices/remotion-markup/html-in-canvas.md +128 -0
- package/skills/remotion-best-practices/remotion-markup/images.md +73 -0
- package/skills/remotion-best-practices/remotion-markup/light-leaks.md +106 -0
- package/skills/remotion-best-practices/remotion-markup/local-fonts.md +69 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/lottie.md +4 -1
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/measuring-dom-nodes.md +5 -1
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/measuring-text.md +8 -2
- package/skills/remotion-best-practices/remotion-markup/multi-scene-video.md +81 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/parameters.md +3 -1
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/SKILL.md +36 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/sequencing.md +63 -12
- package/skills/remotion-best-practices/remotion-markup/sfx.md +51 -0
- package/skills/remotion-best-practices/remotion-markup/text-highlights.md +56 -0
- package/skills/remotion-best-practices/remotion-markup/timing.md +111 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/transitions.md +49 -7
- package/skills/remotion-best-practices/remotion-markup/video-editing.md +90 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/voiceover.md +2 -2
- package/skills/remotion-best-practices/remotion-multimedia/SKILL.md +20 -0
- package/skills/remotion-best-practices/remotion-multimedia/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-multimedia/assets/remotion-icon.png +0 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-multimedia}/get-audio-duration.md +1 -3
- package/skills/{remotion/rules → remotion-best-practices/remotion-multimedia}/get-video-dimensions.md +1 -3
- package/skills/{remotion/rules → remotion-best-practices/remotion-multimedia}/get-video-duration.md +1 -3
- package/skills/remotion-best-practices/remotion-render/SKILL.md +27 -0
- package/skills/remotion-best-practices/remotion-render/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-render/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-saas/SKILL.md +33 -0
- package/skills/remotion-best-practices/remotion-saas/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-saas/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-saas/framework.md +21 -0
- package/skills/remotion-best-practices/remotion-saas/player.md +33 -0
- package/skills/remotion-best-practices/remotion-saas/rendering.md +69 -0
- package/skills/remotion-best-practices/remotion-studio/SKILL.md +24 -0
- package/skills/remotion-best-practices/remotion-studio/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-studio/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-upgrade/SKILL.md +31 -0
- package/skills/remotion-best-practices/remotion-upgrade/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-upgrade/assets/remotion-icon.png +0 -0
- package/skills/remotion-captions/SKILL.md +36 -0
- package/skills/remotion-captions/agents/openai.yaml +7 -0
- package/skills/remotion-captions/assets/remotion-icon.png +0 -0
- package/skills/remotion-captions/display-captions.md +190 -0
- package/skills/remotion-captions/import-srt-captions.md +73 -0
- package/skills/remotion-captions/transcribe-captions.md +70 -0
- package/skills/remotion-create/SKILL.md +68 -0
- package/skills/remotion-create/agents/openai.yaml +7 -0
- package/skills/remotion-create/assets/remotion-icon.png +0 -0
- package/skills/remotion-create/tailwind.md +11 -0
- package/skills/remotion-create/video-layout.md +9 -0
- package/skills/remotion-docs/SKILL.md +46 -0
- package/skills/remotion-docs/agents/openai.yaml +7 -0
- package/skills/remotion-docs/assets/remotion-icon.png +0 -0
- package/skills/remotion-interactivity/SKILL.md +247 -0
- package/skills/remotion-interactivity/agents/openai.yaml +7 -0
- package/skills/remotion-interactivity/assets/remotion-icon.png +0 -0
- package/skills/remotion-maps/SKILL.md +36 -0
- package/skills/remotion-maps/agents/openai.yaml +7 -0
- package/skills/remotion-maps/assets/remotion-icon.png +0 -0
- package/skills/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
- package/skills/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
- package/skills/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
- package/skills/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
- package/skills/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
- package/skills/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
- package/skills/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
- package/skills/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
- package/skills/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
- package/skills/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
- package/skills/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
- package/skills/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
- package/skills/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
- package/skills/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
- package/skills/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
- package/skills/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
- package/skills/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
- package/skills/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
- package/skills/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
- package/skills/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
- package/skills/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
- package/skills/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
- package/skills/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
- package/skills/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
- package/skills/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
- package/skills/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
- package/skills/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
- package/skills/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
- package/skills/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
- package/skills/remotion-markup/3d.md +86 -0
- package/skills/remotion-markup/SKILL.md +365 -0
- package/skills/remotion-markup/agents/openai.yaml +7 -0
- package/skills/remotion-markup/assets/remotion-icon.png +0 -0
- package/skills/remotion-markup/audio-visualization.md +198 -0
- package/skills/remotion-markup/audio.md +171 -0
- package/skills/remotion-markup/calculate-metadata.md +136 -0
- package/skills/remotion-markup/compositions.md +117 -0
- package/skills/remotion-markup/cropping.md +34 -0
- package/skills/remotion-markup/effects.md +251 -0
- package/skills/remotion-markup/embedding-videos.md +173 -0
- package/skills/remotion-markup/ffmpeg.md +38 -0
- package/skills/remotion-markup/gifs.md +187 -0
- package/skills/remotion-markup/google-fonts.md +76 -0
- package/skills/remotion-markup/html-in-canvas.md +128 -0
- package/skills/remotion-markup/images.md +73 -0
- package/skills/remotion-markup/light-leaks.md +106 -0
- package/skills/remotion-markup/local-fonts.md +69 -0
- package/skills/remotion-markup/lottie.md +73 -0
- package/skills/remotion-markup/measuring-dom-nodes.md +38 -0
- package/skills/remotion-markup/measuring-text.md +146 -0
- package/skills/remotion-markup/multi-scene-video.md +81 -0
- package/skills/remotion-markup/parameters.md +111 -0
- package/skills/remotion-markup/remotion-maps/SKILL.md +36 -0
- package/skills/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
- package/skills/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
- package/skills/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
- package/skills/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
- package/skills/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
- package/skills/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
- package/skills/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
- package/skills/remotion-markup/sequencing.md +169 -0
- package/skills/remotion-markup/sfx.md +51 -0
- package/skills/remotion-markup/silence-detection.md +71 -0
- package/skills/remotion-markup/text-highlights.md +56 -0
- package/skills/remotion-markup/timing.md +111 -0
- package/skills/remotion-markup/transitions.md +239 -0
- package/skills/remotion-markup/video-editing.md +90 -0
- package/skills/remotion-markup/voiceover.md +99 -0
- package/skills/remotion-multimedia/SKILL.md +20 -0
- package/skills/remotion-multimedia/agents/openai.yaml +7 -0
- package/skills/remotion-multimedia/assets/remotion-icon.png +0 -0
- package/skills/remotion-multimedia/get-audio-duration.md +56 -0
- package/skills/remotion-multimedia/get-video-dimensions.md +66 -0
- package/skills/remotion-multimedia/get-video-duration.md +58 -0
- package/skills/remotion-render/SKILL.md +27 -0
- package/skills/remotion-render/agents/openai.yaml +7 -0
- package/skills/remotion-render/assets/remotion-icon.png +0 -0
- package/skills/remotion-render/transparent-videos.md +106 -0
- package/skills/remotion-saas/SKILL.md +33 -0
- package/skills/remotion-saas/agents/openai.yaml +7 -0
- package/skills/remotion-saas/assets/remotion-icon.png +0 -0
- package/skills/remotion-saas/framework.md +21 -0
- package/skills/remotion-saas/player.md +33 -0
- package/skills/remotion-saas/rendering.md +69 -0
- package/skills/remotion-studio/SKILL.md +24 -0
- package/skills/remotion-studio/agents/openai.yaml +7 -0
- package/skills/remotion-studio/assets/remotion-icon.png +0 -0
- package/skills/remotion-upgrade/SKILL.md +31 -0
- package/skills/remotion-upgrade/agents/openai.yaml +7 -0
- package/skills/remotion-upgrade/assets/remotion-icon.png +0 -0
- package/skills/remotion/SKILL.md +0 -95
- package/skills/remotion/rules/animations.md +0 -31
- package/skills/remotion/rules/assets.md +0 -78
- package/skills/remotion/rules/can-decode.md +0 -81
- package/skills/remotion/rules/charts.md +0 -120
- package/skills/remotion/rules/compositions.md +0 -154
- package/skills/remotion/rules/extract-frames.md +0 -229
- package/skills/remotion/rules/fonts.md +0 -152
- package/skills/remotion/rules/images.md +0 -134
- package/skills/remotion/rules/light-leaks.md +0 -73
- package/skills/remotion/rules/maps.md +0 -412
- package/skills/remotion/rules/sfx.md +0 -30
- package/skills/remotion/rules/subtitles.md +0 -36
- package/skills/remotion/rules/text-animations.md +0 -20
- package/skills/remotion/rules/timing.md +0 -136
- package/skills/remotion/rules/trimming.md +0 -51
- /package/skills/{remotion/rules → remotion-best-practices/remotion-captions}/transcribe-captions.md +0 -0
- /package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/3d.md +0 -0
- /package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/audio-visualization.md +0 -0
- /package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/silence-detection.md +0 -0
- /package/skills/{remotion/rules → remotion-best-practices/remotion-render}/transparent-videos.md +0 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: light-leaks
|
|
3
|
+
description: Light leak overlay effects for Remotion using lightLeak() from @remotion/effects.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: light-leaks, overlays, effects, transitions
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Light Leaks
|
|
9
|
+
|
|
10
|
+
This only works from Remotion 4.0.500 and up. Use `npx remotion versions` to check your Remotion version and `npx remotion upgrade` to upgrade your Remotion version.
|
|
11
|
+
|
|
12
|
+
Apply `lightLeak()` from `@remotion/effects/light-leak` to a canvas-based component such as `<Solid>`. Animate `progress` from `0` to `1`; the light leak reveals during the first half and retracts during the second half.
|
|
13
|
+
|
|
14
|
+
Typically use it inside a `<TransitionSeries.Overlay>` to play over the cut point between two scenes. See the **transitions** rule for `<TransitionSeries>` and overlay usage.
|
|
15
|
+
|
|
16
|
+
## Prerequisites
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx remotion add @remotion/effects
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Light leak overlay component
|
|
23
|
+
|
|
24
|
+
Keep the `progress` calculation inline so it is editable in Remotion Studio:
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
import {lightLeak} from '@remotion/effects/light-leak';
|
|
28
|
+
import {interpolate, Solid, useCurrentFrame, useVideoConfig} from 'remotion';
|
|
29
|
+
|
|
30
|
+
const LightLeakOverlay: React.FC<{
|
|
31
|
+
seed?: number;
|
|
32
|
+
hueShift?: number;
|
|
33
|
+
}> = ({seed = 0, hueShift = 0}) => {
|
|
34
|
+
const frame = useCurrentFrame();
|
|
35
|
+
const {durationInFrames, height, width} = useVideoConfig();
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<Solid
|
|
39
|
+
width={width}
|
|
40
|
+
height={height}
|
|
41
|
+
effects={[
|
|
42
|
+
lightLeak({
|
|
43
|
+
seed,
|
|
44
|
+
hueShift,
|
|
45
|
+
progress: interpolate(frame, [0, durationInFrames - 1], [0, 1], {
|
|
46
|
+
extrapolateLeft: 'clamp',
|
|
47
|
+
extrapolateRight: 'clamp',
|
|
48
|
+
}),
|
|
49
|
+
}),
|
|
50
|
+
]}
|
|
51
|
+
/>
|
|
52
|
+
);
|
|
53
|
+
};
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Basic usage with TransitionSeries
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
import {TransitionSeries} from '@remotion/transitions';
|
|
60
|
+
|
|
61
|
+
<TransitionSeries>
|
|
62
|
+
<TransitionSeries.Sequence durationInFrames={60}>
|
|
63
|
+
<SceneA />
|
|
64
|
+
</TransitionSeries.Sequence>
|
|
65
|
+
<TransitionSeries.Overlay durationInFrames={30}>
|
|
66
|
+
<LightLeakOverlay />
|
|
67
|
+
</TransitionSeries.Overlay>
|
|
68
|
+
<TransitionSeries.Sequence durationInFrames={60}>
|
|
69
|
+
<SceneB />
|
|
70
|
+
</TransitionSeries.Sequence>
|
|
71
|
+
</TransitionSeries>;
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Options
|
|
75
|
+
|
|
76
|
+
- `progress?` — controls the evolve/retract phase from `0` to `1`. Effects do not animate on their own, so drive it with `useCurrentFrame()` and `interpolate()`. Default: `0.5`.
|
|
77
|
+
- `seed?` — determines the shape of the light leak pattern. Different seeds produce different patterns. Default: `0`.
|
|
78
|
+
- `hueShift?` — rotates the hue in degrees (`0`–`360`). Default: `0` (yellow-to-orange). `120` = green, `240` = blue.
|
|
79
|
+
- `disabled?` — skips the effect when `true`. Default: `false`.
|
|
80
|
+
|
|
81
|
+
## Customizing the look
|
|
82
|
+
|
|
83
|
+
```tsx
|
|
84
|
+
// Blue-tinted light leak with a different pattern
|
|
85
|
+
<LightLeakOverlay seed={5} hueShift={240} />;
|
|
86
|
+
|
|
87
|
+
// Green-tinted light leak
|
|
88
|
+
<LightLeakOverlay seed={2} hueShift={120} />;
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Standalone usage
|
|
92
|
+
|
|
93
|
+
The overlay component can also be used outside of `<TransitionSeries>` as a decorative layer in any composition:
|
|
94
|
+
|
|
95
|
+
```tsx
|
|
96
|
+
import {AbsoluteFill} from 'remotion';
|
|
97
|
+
|
|
98
|
+
const MyComp: React.FC = () => (
|
|
99
|
+
<AbsoluteFill>
|
|
100
|
+
<MyContent />
|
|
101
|
+
<LightLeakOverlay seed={3} />
|
|
102
|
+
</AbsoluteFill>
|
|
103
|
+
);
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
`lightLeak()` uses WebGL2. Enable WebGL during rendering with `Config.setChromiumOpenGlRenderer("angle")`.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
For local font files, use the `@remotion/fonts` package.
|
|
2
|
+
|
|
3
|
+
### Prerequisites
|
|
4
|
+
|
|
5
|
+
First, install @remotion/fonts:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx remotion add @remotion/fonts # If project uses npm
|
|
9
|
+
bunx remotion add @remotion/fonts # If project uses bun
|
|
10
|
+
yarn remotion add @remotion/fonts # If project uses yarn
|
|
11
|
+
pnpm exec remotion add @remotion/fonts # If project uses pnpm
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### Loading a local font
|
|
15
|
+
|
|
16
|
+
Place your font file in the `public/` folder and use `loadFont()`:
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
import { loadFont } from "@remotion/fonts";
|
|
20
|
+
import { staticFile } from "remotion";
|
|
21
|
+
|
|
22
|
+
await loadFont({
|
|
23
|
+
family: "MyFont",
|
|
24
|
+
url: staticFile("MyFont-Regular.woff2"),
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export const MyComposition = () => {
|
|
28
|
+
return (
|
|
29
|
+
<div style={{ fontFamily: "MyFont" }}>
|
|
30
|
+
Hello World
|
|
31
|
+
</div>
|
|
32
|
+
);
|
|
33
|
+
};
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Loading multiple weights
|
|
37
|
+
|
|
38
|
+
Load each weight separately with the same family name:
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
import { loadFont } from "@remotion/fonts";
|
|
42
|
+
import { staticFile } from "remotion";
|
|
43
|
+
|
|
44
|
+
await Promise.all([
|
|
45
|
+
loadFont({
|
|
46
|
+
family: "Inter",
|
|
47
|
+
url: staticFile("Inter-Regular.woff2"),
|
|
48
|
+
weight: "400",
|
|
49
|
+
}),
|
|
50
|
+
loadFont({
|
|
51
|
+
family: "Inter",
|
|
52
|
+
url: staticFile("Inter-Bold.woff2"),
|
|
53
|
+
weight: "700",
|
|
54
|
+
}),
|
|
55
|
+
]);
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Available options
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
loadFont({
|
|
62
|
+
family: "MyFont", // Required: name to use in CSS
|
|
63
|
+
url: staticFile("font.woff2"), // Required: font file URL
|
|
64
|
+
format: "woff2", // Optional: auto-detected from extension
|
|
65
|
+
weight: "400", // Optional: font weight
|
|
66
|
+
style: "normal", // Optional: normal or italic
|
|
67
|
+
display: "block", // Optional: font-display behavior
|
|
68
|
+
});
|
|
69
|
+
```
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lottie
|
|
3
|
+
description: Embedding Lottie animations in Remotion.
|
|
4
|
+
metadata:
|
|
5
|
+
category: Animation
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Using Lottie Animations in Remotion
|
|
9
|
+
|
|
10
|
+
## Prerequisites
|
|
11
|
+
|
|
12
|
+
First, the @remotion/lottie package needs to be installed.
|
|
13
|
+
If it is not, use the following command:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx remotion add @remotion/lottie # If project uses npm
|
|
17
|
+
bunx remotion add @remotion/lottie # If project uses bun
|
|
18
|
+
yarn remotion add @remotion/lottie # If project uses yarn
|
|
19
|
+
pnpm exec remotion add @remotion/lottie # If project uses pnpm
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Displaying a Lottie file
|
|
23
|
+
|
|
24
|
+
To import a Lottie animation:
|
|
25
|
+
|
|
26
|
+
- Fetch the Lottie asset
|
|
27
|
+
- Wrap the loading process in `delayRender()` and `continueRender()`
|
|
28
|
+
- Save the animation data in a state
|
|
29
|
+
- Render the Lottie animation using the `Lottie` component from the `@remotion/lottie` package
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { Lottie, LottieAnimationData } from "@remotion/lottie";
|
|
33
|
+
import { useEffect, useState } from "react";
|
|
34
|
+
import { cancelRender, continueRender, delayRender } from "remotion";
|
|
35
|
+
|
|
36
|
+
export const MyAnimation = () => {
|
|
37
|
+
const [handle] = useState(() => delayRender("Loading Lottie animation"));
|
|
38
|
+
|
|
39
|
+
const [animationData, setAnimationData] =
|
|
40
|
+
useState<LottieAnimationData | null>(null);
|
|
41
|
+
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
fetch("https://assets4.lottiefiles.com/packages/lf20_zyquagfl.json")
|
|
44
|
+
.then((data) => data.json())
|
|
45
|
+
.then((json) => {
|
|
46
|
+
setAnimationData(json);
|
|
47
|
+
continueRender(handle);
|
|
48
|
+
})
|
|
49
|
+
.catch((err) => {
|
|
50
|
+
cancelRender(err);
|
|
51
|
+
});
|
|
52
|
+
}, [handle]);
|
|
53
|
+
|
|
54
|
+
if (!animationData) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return <Lottie animationData={animationData} />;
|
|
59
|
+
};
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Styling and animating
|
|
63
|
+
|
|
64
|
+
Lottie supports the `style` prop to allow styles and animations:
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
return (
|
|
68
|
+
<Lottie
|
|
69
|
+
animationData={animationData}
|
|
70
|
+
style={{ width: 400, height: 400 }}
|
|
71
|
+
/>
|
|
72
|
+
);
|
|
73
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: measuring-dom-nodes
|
|
3
|
+
description: Measuring DOM element dimensions in Remotion
|
|
4
|
+
metadata:
|
|
5
|
+
tags: measure, layout, dimensions, getBoundingClientRect, scale
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Measuring DOM nodes in Remotion
|
|
9
|
+
|
|
10
|
+
Remotion applies a `scale()` transform to the video container, which affects values from `getBoundingClientRect()`. Use `useCurrentScale()` to get correct measurements.
|
|
11
|
+
|
|
12
|
+
## Measuring element dimensions
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
import { useCurrentScale } from "remotion";
|
|
16
|
+
import { useRef, useEffect, useState } from "react";
|
|
17
|
+
|
|
18
|
+
export const MyComponent = () => {
|
|
19
|
+
const ref = useRef<HTMLDivElement>(null);
|
|
20
|
+
const scale = useCurrentScale();
|
|
21
|
+
const [dimensions, setDimensions] = useState({ width: 0, height: 0 });
|
|
22
|
+
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (!ref.current) return;
|
|
25
|
+
const rect = ref.current.getBoundingClientRect();
|
|
26
|
+
setDimensions({
|
|
27
|
+
width: rect.width / scale,
|
|
28
|
+
height: rect.height / scale,
|
|
29
|
+
});
|
|
30
|
+
}, [scale]);
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<div ref={ref}>
|
|
34
|
+
Content to measure
|
|
35
|
+
</div>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
```
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: measuring-text
|
|
3
|
+
description: Measuring text dimensions, fitting text to containers, and checking overflow
|
|
4
|
+
metadata:
|
|
5
|
+
tags: measure, text, layout, dimensions, fitText, fillTextBox
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Measuring text in Remotion
|
|
9
|
+
|
|
10
|
+
## Prerequisites
|
|
11
|
+
|
|
12
|
+
Install @remotion/layout-utils if it is not already installed:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npx remotion add @remotion/layout-utils
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Measuring text dimensions
|
|
19
|
+
|
|
20
|
+
Use `measureText()` to calculate the width and height of text:
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { measureText } from "@remotion/layout-utils";
|
|
24
|
+
|
|
25
|
+
const { width, height } = measureText({
|
|
26
|
+
text: "Hello World",
|
|
27
|
+
fontFamily: "Arial",
|
|
28
|
+
fontSize: 32,
|
|
29
|
+
fontWeight: "bold",
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Results are cached - duplicate calls return the cached result.
|
|
34
|
+
|
|
35
|
+
## Fitting text to a width
|
|
36
|
+
|
|
37
|
+
Use `fitText()` to find the optimal font size for a container:
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import { fitText } from "@remotion/layout-utils";
|
|
41
|
+
|
|
42
|
+
const { fontSize } = fitText({
|
|
43
|
+
text: "Hello World",
|
|
44
|
+
withinWidth: 600,
|
|
45
|
+
fontFamily: "Inter",
|
|
46
|
+
fontWeight: "bold",
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<div
|
|
51
|
+
style={{
|
|
52
|
+
fontSize: Math.min(fontSize, 80), // Cap at 80px
|
|
53
|
+
fontFamily: "Inter",
|
|
54
|
+
fontWeight: "bold",
|
|
55
|
+
}}
|
|
56
|
+
>
|
|
57
|
+
Hello World
|
|
58
|
+
</div>
|
|
59
|
+
);
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Checking text overflow
|
|
63
|
+
|
|
64
|
+
Use `fillTextBox()` to check if text exceeds a box:
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
import { fillTextBox } from "@remotion/layout-utils";
|
|
68
|
+
|
|
69
|
+
const box = fillTextBox({ maxBoxWidth: 400, maxLines: 3 });
|
|
70
|
+
|
|
71
|
+
const words = ["Hello", "World", "This", "is", "a", "test"];
|
|
72
|
+
for (const word of words) {
|
|
73
|
+
const { exceedsBox } = box.add({
|
|
74
|
+
text: word + " ",
|
|
75
|
+
fontFamily: "Arial",
|
|
76
|
+
fontSize: 24,
|
|
77
|
+
});
|
|
78
|
+
if (exceedsBox) {
|
|
79
|
+
// Text would overflow, handle accordingly
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Best practices
|
|
86
|
+
|
|
87
|
+
**Load fonts first:** Only call measurement functions after fonts are loaded.
|
|
88
|
+
|
|
89
|
+
```tsx
|
|
90
|
+
import { loadFont } from "@remotion/google-fonts/Inter";
|
|
91
|
+
|
|
92
|
+
const { fontFamily, waitUntilDone } = loadFont("normal", {
|
|
93
|
+
weights: ["400"],
|
|
94
|
+
subsets: ["latin"],
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
waitUntilDone().then(() => {
|
|
98
|
+
// Now safe to measure
|
|
99
|
+
const { width } = measureText({
|
|
100
|
+
text: "Hello",
|
|
101
|
+
fontFamily,
|
|
102
|
+
fontSize: 32,
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Use validateFontIsLoaded:** Catch font loading issues early:
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
measureText({
|
|
111
|
+
text: "Hello",
|
|
112
|
+
fontFamily: "MyCustomFont",
|
|
113
|
+
fontSize: 32,
|
|
114
|
+
validateFontIsLoaded: true, // Throws if font not loaded
|
|
115
|
+
});
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Match font properties:** Use the same properties for measurement and rendering:
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
const fontStyle = {
|
|
122
|
+
fontFamily: "Inter",
|
|
123
|
+
fontSize: 32,
|
|
124
|
+
fontWeight: "bold" as const,
|
|
125
|
+
letterSpacing: "0.5px",
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const { width } = measureText({
|
|
129
|
+
text: "Hello",
|
|
130
|
+
...fontStyle,
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
return (
|
|
134
|
+
<div style={fontStyle}>
|
|
135
|
+
Hello
|
|
136
|
+
</div>
|
|
137
|
+
);
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Avoid padding and border:** Use `outline` instead of `border` to prevent layout differences:
|
|
141
|
+
|
|
142
|
+
```tsx
|
|
143
|
+
<div style={{ outline: "2px solid red" }}>
|
|
144
|
+
Text
|
|
145
|
+
</div>
|
|
146
|
+
```
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
If the video being created is a multi-scene video, it should be structured in a special way.
|
|
2
|
+
Create a new folder and put each scene in a separate file.
|
|
3
|
+
|
|
4
|
+
```tsx
|
|
5
|
+
// SceneA.tsx
|
|
6
|
+
export const SceneA: React.FC = () => {
|
|
7
|
+
return // ...
|
|
8
|
+
}
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
// SceneB.tsx
|
|
13
|
+
export const SceneB: React.FC = () => {
|
|
14
|
+
return // ...
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Install `@remotion/transitions` if not yet available:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
npx remotion add @remotion/transitions
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
// MyVideo.tsx
|
|
25
|
+
```tsx
|
|
26
|
+
import {TransitionSeries} from '@remotion/transitions';
|
|
27
|
+
|
|
28
|
+
const MyVideo: React.FC = () => {
|
|
29
|
+
return (
|
|
30
|
+
<TransitionSeries>
|
|
31
|
+
<TransitionSeries.Sequence durationInFrames={4 * fps} name="SceneA">
|
|
32
|
+
<SceneA />
|
|
33
|
+
</TransitionSeries.Sequence>
|
|
34
|
+
<TransitionSeries.Sequence durationInFrames={4 * fps} name="SceneB">
|
|
35
|
+
<SceneB />
|
|
36
|
+
</TransitionSeries.Sequence>
|
|
37
|
+
</TransitionSeries>
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
It could also make sense to register each scene individually in the root file so it can be edited there.
|
|
43
|
+
If a composition with the same component is registered, one can double click the sequence in the main composition and jump to that composition.
|
|
44
|
+
|
|
45
|
+
```tsx
|
|
46
|
+
export const Root: React.FC = () => {
|
|
47
|
+
return (
|
|
48
|
+
<>
|
|
49
|
+
<Folder id="MyVideo-Scenes">
|
|
50
|
+
<Composition
|
|
51
|
+
id="Scene1"
|
|
52
|
+
component={Scene1}
|
|
53
|
+
durationInFrames={5 * fps}
|
|
54
|
+
fps={30}
|
|
55
|
+
width={1920}
|
|
56
|
+
height={1080}
|
|
57
|
+
/>
|
|
58
|
+
<Composition
|
|
59
|
+
id="Scene2"
|
|
60
|
+
component={Scene2}
|
|
61
|
+
durationInFrames={5 * fps}
|
|
62
|
+
fps={30}
|
|
63
|
+
width={1920}
|
|
64
|
+
height={1080}
|
|
65
|
+
/>
|
|
66
|
+
</Folder>
|
|
67
|
+
<Composition
|
|
68
|
+
id="MyVideo"
|
|
69
|
+
component={MyVideo}
|
|
70
|
+
durationInFrames={10 * fps}
|
|
71
|
+
fps={30}
|
|
72
|
+
width={1920}
|
|
73
|
+
height={1080}
|
|
74
|
+
/>
|
|
75
|
+
</>
|
|
76
|
+
)
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
This allows the user to trim the start and end of the durations visually and add [transitions](./transitions.md) later.
|
|
81
|
+
Prefer inlining the `durationInFrames` values, because only then they are editable. It's okay if the value is redundant.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: parameters
|
|
3
|
+
description: Make a video parametrizable by adding a Zod schema
|
|
4
|
+
metadata:
|
|
5
|
+
tags: parameters, zod, schema
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
To make a video parametrizable, a Zod schema can be added to a composition.
|
|
9
|
+
|
|
10
|
+
First, `zod` must be installed .
|
|
11
|
+
|
|
12
|
+
Search the project for lockfiles and run the correct command depending on the package manager:
|
|
13
|
+
|
|
14
|
+
If `package-lock.json` is found, use the following command:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm i zod
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
If `bun.lockb` is found, use the following command:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
bun i zod
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
If `yarn.lock` is found, use the following command:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
yarn add zod
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
If `pnpm-lock.yaml` is found, use the following command:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pnpm i zod
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Then, a Zod schema can be defined alongside the component:
|
|
39
|
+
|
|
40
|
+
```tsx title="src/MyComposition.tsx"
|
|
41
|
+
import { z } from "zod";
|
|
42
|
+
|
|
43
|
+
export const MyCompositionSchema = z.object({
|
|
44
|
+
title: z.string(),
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const MyComponent: React.FC<z.infer<typeof MyCompositionSchema>> = () => {
|
|
48
|
+
return (
|
|
49
|
+
<div>
|
|
50
|
+
<h1>
|
|
51
|
+
{props.title}
|
|
52
|
+
</h1>
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
In the root file, the schema can be passed to the composition:
|
|
59
|
+
|
|
60
|
+
```tsx title="src/Root.tsx"
|
|
61
|
+
import { Composition } from "remotion";
|
|
62
|
+
import { MycComponent, MyCompositionSchema } from "./MyComposition";
|
|
63
|
+
|
|
64
|
+
export const RemotionRoot = () => {
|
|
65
|
+
return (
|
|
66
|
+
<Composition
|
|
67
|
+
id="MyComposition"
|
|
68
|
+
component={MyComponent}
|
|
69
|
+
durationInFrames={100}
|
|
70
|
+
fps={30}
|
|
71
|
+
width={1080}
|
|
72
|
+
height={1080}
|
|
73
|
+
defaultProps={{ title: "Hello World" }}
|
|
74
|
+
schema={MyCompositionSchema}
|
|
75
|
+
/>
|
|
76
|
+
);
|
|
77
|
+
};
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Now, the user can edit the parameter visually in the sidebar.
|
|
81
|
+
|
|
82
|
+
All schemas that are supported by Zod are supported by Remotion.
|
|
83
|
+
|
|
84
|
+
Remotion requires that the top-level type is a z.object(), because the collection of props of a React component is always an object.
|
|
85
|
+
|
|
86
|
+
## Color picker
|
|
87
|
+
|
|
88
|
+
For adding a color picker, use `zColor()` from `@remotion/zod-types`.
|
|
89
|
+
|
|
90
|
+
If it is not installed, use the following command:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
npx remotion add @remotion/zod-types # If project uses npm
|
|
94
|
+
bunx remotion add @remotion/zod-types # If project uses bun
|
|
95
|
+
yarn remotion add @remotion/zod-types # If project uses yarn
|
|
96
|
+
pnpm exec remotion add @remotion/zod-types # If project uses pnpm
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Then import `zColor` from `@remotion/zod-types`:
|
|
100
|
+
|
|
101
|
+
```tsx
|
|
102
|
+
import { zColor } from "@remotion/zod-types";
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Then use it in the schema:
|
|
106
|
+
|
|
107
|
+
```tsx
|
|
108
|
+
export const MyCompositionSchema = z.object({
|
|
109
|
+
color: zColor(),
|
|
110
|
+
});
|
|
111
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remotion-maps
|
|
3
|
+
description: Remotion Map animation knowledge
|
|
4
|
+
version: 4.0.519
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Remotion Maps
|
|
8
|
+
|
|
9
|
+
Choose exactly one technique from the intended shot, then load only that technique's `TECHNIQUE.md`.
|
|
10
|
+
Every technique directory is self-contained and may be removed without breaking the others.
|
|
11
|
+
|
|
12
|
+
## [Static map](techniques/static-map/TECHNIQUE.md)
|
|
13
|
+
|
|
14
|
+
- Requires you grab a satellite image and mount it in a `<Img>` tag, and animate on top
|
|
15
|
+
|
|
16
|
+
## [Mapbox](techniques/mapbox/TECHNIQUE.md)
|
|
17
|
+
|
|
18
|
+
- Requires a Mapbox key
|
|
19
|
+
- Nicer styles by default
|
|
20
|
+
- Map can display a round globe when zoomed out
|
|
21
|
+
- Includes nice 3D buildings such as the Eiffel tower
|
|
22
|
+
|
|
23
|
+
## [MapLibre](techniques/maplibre/TECHNIQUE.md)
|
|
24
|
+
|
|
25
|
+
- Requires no API key, fully free
|
|
26
|
+
- Does not include 3D building
|
|
27
|
+
|
|
28
|
+
## [MapTiler](techniques/maptiler/TECHNIQUE.md)
|
|
29
|
+
|
|
30
|
+
- Uses MapTiler
|
|
31
|
+
- Annotations can be drawn on top of geographic features: borders, rivers, labels
|
|
32
|
+
|
|
33
|
+
## [CesiumJS](techniques/cesium/TECHNIQUE.md)
|
|
34
|
+
|
|
35
|
+
- Flythroughs through terrain and mountains
|
|
36
|
+
- "Flight simulator" perspective
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: '/remotion-maps'
|
|
3
|
+
short_description: 'Create animated maps in Remotion videos'
|
|
4
|
+
icon_small: './assets/remotion-icon.png'
|
|
5
|
+
icon_large: './assets/remotion-icon.png'
|
|
6
|
+
brand_color: '#0B84F3'
|
|
7
|
+
default_prompt: '$remotion-maps: Animate a dot from Zurich to New York.'
|
|
Binary file
|