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
|
@@ -1,412 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: maps
|
|
3
|
-
description: Make map animations with Mapbox
|
|
4
|
-
metadata:
|
|
5
|
-
tags: map, map animation, mapbox
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Maps can be added to a Remotion video with Mapbox.
|
|
9
|
-
The [Mapbox documentation](https://docs.mapbox.com/mapbox-gl-js/api/) has the API reference.
|
|
10
|
-
|
|
11
|
-
## Prerequisites
|
|
12
|
-
|
|
13
|
-
Mapbox and `@turf/turf` need to be installed.
|
|
14
|
-
|
|
15
|
-
Search the project for lockfiles and run the correct command depending on the package manager:
|
|
16
|
-
|
|
17
|
-
If `package-lock.json` is found, use the following command:
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
npm i mapbox-gl @turf/turf @types/mapbox-gl
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
If `bun.lock` is found, use the following command:
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
bun i mapbox-gl @turf/turf @types/mapbox-gl
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
If `yarn.lock` is found, use the following command:
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
yarn add mapbox-gl @turf/turf @types/mapbox-gl
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
If `pnpm-lock.yaml` is found, use the following command:
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
pnpm i mapbox-gl @turf/turf @types/mapbox-gl
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
The user needs to create a free Mapbox account and create an access token by visiting https://console.mapbox.com/account/access-tokens/.
|
|
42
|
-
|
|
43
|
-
The mapbox token needs to be added to the `.env` file:
|
|
44
|
-
|
|
45
|
-
```txt title=".env"
|
|
46
|
-
REMOTION_MAPBOX_TOKEN==pk.your-mapbox-access-token
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## Adding a map
|
|
50
|
-
|
|
51
|
-
Here is a basic example of a map in Remotion.
|
|
52
|
-
|
|
53
|
-
```tsx
|
|
54
|
-
import { useEffect, useMemo, useRef, useState } from "react";
|
|
55
|
-
import { AbsoluteFill, useDelayRender, useVideoConfig } from "remotion";
|
|
56
|
-
import mapboxgl, { Map } from "mapbox-gl";
|
|
57
|
-
|
|
58
|
-
export const lineCoordinates = [
|
|
59
|
-
[6.56158447265625, 46.059891147620725],
|
|
60
|
-
[6.5691375732421875, 46.05679376154153],
|
|
61
|
-
[6.5842437744140625, 46.05059898938315],
|
|
62
|
-
[6.594886779785156, 46.04702502069337],
|
|
63
|
-
[6.601066589355469, 46.0460718554722],
|
|
64
|
-
[6.6089630126953125, 46.0365370783104],
|
|
65
|
-
[6.6185760498046875, 46.018420689207964],
|
|
66
|
-
];
|
|
67
|
-
|
|
68
|
-
mapboxgl.accessToken = process.env.REMOTION_MAPBOX_TOKEN as string;
|
|
69
|
-
|
|
70
|
-
export const MyComposition = () => {
|
|
71
|
-
const ref = useRef<HTMLDivElement>(null);
|
|
72
|
-
const { delayRender, continueRender } = useDelayRender();
|
|
73
|
-
|
|
74
|
-
const { width, height } = useVideoConfig();
|
|
75
|
-
const [handle] = useState(() => delayRender("Loading map..."));
|
|
76
|
-
const [map, setMap] = useState<Map | null>(null);
|
|
77
|
-
|
|
78
|
-
useEffect(() => {
|
|
79
|
-
const _map = new Map({
|
|
80
|
-
container: ref.current!,
|
|
81
|
-
zoom: 11.53,
|
|
82
|
-
center: [6.5615, 46.0598],
|
|
83
|
-
pitch: 65,
|
|
84
|
-
bearing: 0,
|
|
85
|
-
style: "mapbox://styles/mapbox/standard",
|
|
86
|
-
interactive: false,
|
|
87
|
-
fadeDuration: 0,
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
_map.on("style.load", () => {
|
|
91
|
-
// Hide all features from the Mapbox Standard style
|
|
92
|
-
const hideFeatures = [
|
|
93
|
-
"showRoadsAndTransit",
|
|
94
|
-
"showRoads",
|
|
95
|
-
"showTransit",
|
|
96
|
-
"showPedestrianRoads",
|
|
97
|
-
"showRoadLabels",
|
|
98
|
-
"showTransitLabels",
|
|
99
|
-
"showPlaceLabels",
|
|
100
|
-
"showPointOfInterestLabels",
|
|
101
|
-
"showPointsOfInterest",
|
|
102
|
-
"showAdminBoundaries",
|
|
103
|
-
"showLandmarkIcons",
|
|
104
|
-
"showLandmarkIconLabels",
|
|
105
|
-
"show3dObjects",
|
|
106
|
-
"show3dBuildings",
|
|
107
|
-
"show3dTrees",
|
|
108
|
-
"show3dLandmarks",
|
|
109
|
-
"show3dFacades",
|
|
110
|
-
];
|
|
111
|
-
for (const feature of hideFeatures) {
|
|
112
|
-
_map.setConfigProperty("basemap", feature, false);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
_map.setConfigProperty("basemap", "colorTrunks", "rgba(0, 0, 0, 0)");
|
|
116
|
-
|
|
117
|
-
_map.addSource("trace", {
|
|
118
|
-
type: "geojson",
|
|
119
|
-
data: {
|
|
120
|
-
type: "Feature",
|
|
121
|
-
properties: {},
|
|
122
|
-
geometry: {
|
|
123
|
-
type: "LineString",
|
|
124
|
-
coordinates: lineCoordinates,
|
|
125
|
-
},
|
|
126
|
-
},
|
|
127
|
-
});
|
|
128
|
-
_map.addLayer({
|
|
129
|
-
type: "line",
|
|
130
|
-
source: "trace",
|
|
131
|
-
id: "line",
|
|
132
|
-
paint: {
|
|
133
|
-
"line-color": "black",
|
|
134
|
-
"line-width": 5,
|
|
135
|
-
},
|
|
136
|
-
layout: {
|
|
137
|
-
"line-cap": "round",
|
|
138
|
-
"line-join": "round",
|
|
139
|
-
},
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
_map.on("load", () => {
|
|
144
|
-
continueRender(handle);
|
|
145
|
-
setMap(_map);
|
|
146
|
-
});
|
|
147
|
-
}, [handle, lineCoordinates]);
|
|
148
|
-
|
|
149
|
-
const style: React.CSSProperties = useMemo(
|
|
150
|
-
() => ({ width, height, position: "absolute" }),
|
|
151
|
-
[width, height],
|
|
152
|
-
);
|
|
153
|
-
|
|
154
|
-
return <AbsoluteFill ref={ref} style={style} />;
|
|
155
|
-
};
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
The following is important in Remotion:
|
|
159
|
-
|
|
160
|
-
- Animations must be driven by `useCurrentFrame()` and animations that Mapbox brings itself should be disabled. For example, the `fadeDuration` prop should be set to `0`, `interactive` should be set to `false`, etc.
|
|
161
|
-
- Loading the map should be delayed using `useDelayRender()` and the map should be set to `null` until it is loaded.
|
|
162
|
-
- The element containing the ref MUST have an explicit width and height and `position: "absolute"`.
|
|
163
|
-
- Do not add a `_map.remove();` cleanup function.
|
|
164
|
-
|
|
165
|
-
## Drawing lines
|
|
166
|
-
|
|
167
|
-
Unless I request it, do not add a glow effect to the lines.
|
|
168
|
-
Unless I request it, do not add additional points to the lines.
|
|
169
|
-
|
|
170
|
-
## Map style
|
|
171
|
-
|
|
172
|
-
By default, use the `mapbox://styles/mapbox/standard` style.
|
|
173
|
-
Hide the labels from the base map style.
|
|
174
|
-
|
|
175
|
-
Unless I request otherwise, remove all features from the Mapbox Standard style.
|
|
176
|
-
|
|
177
|
-
```tsx
|
|
178
|
-
// Hide all features from the Mapbox Standard style
|
|
179
|
-
const hideFeatures = [
|
|
180
|
-
"showRoadsAndTransit",
|
|
181
|
-
"showRoads",
|
|
182
|
-
"showTransit",
|
|
183
|
-
"showPedestrianRoads",
|
|
184
|
-
"showRoadLabels",
|
|
185
|
-
"showTransitLabels",
|
|
186
|
-
"showPlaceLabels",
|
|
187
|
-
"showPointOfInterestLabels",
|
|
188
|
-
"showPointsOfInterest",
|
|
189
|
-
"showAdminBoundaries",
|
|
190
|
-
"showLandmarkIcons",
|
|
191
|
-
"showLandmarkIconLabels",
|
|
192
|
-
"show3dObjects",
|
|
193
|
-
"show3dBuildings",
|
|
194
|
-
"show3dTrees",
|
|
195
|
-
"show3dLandmarks",
|
|
196
|
-
"show3dFacades",
|
|
197
|
-
];
|
|
198
|
-
for (const feature of hideFeatures) {
|
|
199
|
-
_map.setConfigProperty("basemap", feature, false);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
_map.setConfigProperty("basemap", "colorMotorways", "transparent");
|
|
203
|
-
_map.setConfigProperty("basemap", "colorRoads", "transparent");
|
|
204
|
-
_map.setConfigProperty("basemap", "colorTrunks", "transparent");
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
## Animating the camera
|
|
208
|
-
|
|
209
|
-
You can animate the camera along the line by adding a `useEffect` hook that updates the camera position based on the current frame.
|
|
210
|
-
|
|
211
|
-
Unless I ask for it, do not jump between camera angles.
|
|
212
|
-
|
|
213
|
-
```tsx
|
|
214
|
-
import * as turf from "@turf/turf";
|
|
215
|
-
import { interpolate } from "remotion";
|
|
216
|
-
import { Easing } from "remotion";
|
|
217
|
-
import { useCurrentFrame, useVideoConfig, useDelayRender } from "remotion";
|
|
218
|
-
|
|
219
|
-
const animationDuration = 20;
|
|
220
|
-
const cameraAltitude = 4000;
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
```tsx
|
|
224
|
-
const frame = useCurrentFrame();
|
|
225
|
-
const { fps } = useVideoConfig();
|
|
226
|
-
const { delayRender, continueRender } = useDelayRender();
|
|
227
|
-
|
|
228
|
-
useEffect(() => {
|
|
229
|
-
if (!map) {
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
const handle = delayRender("Moving point...");
|
|
233
|
-
|
|
234
|
-
const routeDistance = turf.length(turf.lineString(lineCoordinates));
|
|
235
|
-
|
|
236
|
-
const progress = interpolate(
|
|
237
|
-
frame / fps,
|
|
238
|
-
[0.00001, animationDuration],
|
|
239
|
-
[0, 1],
|
|
240
|
-
{
|
|
241
|
-
easing: Easing.inOut(Easing.sin),
|
|
242
|
-
extrapolateLeft: "clamp",
|
|
243
|
-
extrapolateRight: "clamp",
|
|
244
|
-
},
|
|
245
|
-
);
|
|
246
|
-
|
|
247
|
-
const camera = map.getFreeCameraOptions();
|
|
248
|
-
|
|
249
|
-
const alongRoute = turf.along(
|
|
250
|
-
turf.lineString(lineCoordinates),
|
|
251
|
-
routeDistance * progress,
|
|
252
|
-
).geometry.coordinates;
|
|
253
|
-
|
|
254
|
-
camera.lookAtPoint({
|
|
255
|
-
lng: alongRoute[0],
|
|
256
|
-
lat: alongRoute[1],
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
map.setFreeCameraOptions(camera);
|
|
260
|
-
map.once("idle", () => continueRender(handle));
|
|
261
|
-
}, [lineCoordinates, fps, frame, handle, map]);
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
Notes:
|
|
265
|
-
|
|
266
|
-
IMPORTANT: Keep the camera by default so north is up.
|
|
267
|
-
IMPORTANT: For multi-step animations, set all properties at all stages (zoom, position, line progress) to prevent jumps. Override initial values.
|
|
268
|
-
|
|
269
|
-
- The progress is clamped to a minimum value to avoid the line being empty, which can lead to turf errors
|
|
270
|
-
- See [Timing](./timing.md) for more options for timing.
|
|
271
|
-
- Consider the dimensions of the composition and make the lines thick enough and the label font size large enough to be legible for when the composition is scaled down.
|
|
272
|
-
|
|
273
|
-
## Animating lines
|
|
274
|
-
|
|
275
|
-
### Straight lines (linear interpolation)
|
|
276
|
-
|
|
277
|
-
To animate a line that appears straight on the map, use linear interpolation between coordinates. Do NOT use turf's `lineSliceAlong` or `along` functions, as they use geodesic (great circle) calculations which appear curved on a Mercator projection.
|
|
278
|
-
|
|
279
|
-
```tsx
|
|
280
|
-
const frame = useCurrentFrame();
|
|
281
|
-
const { durationInFrames } = useVideoConfig();
|
|
282
|
-
|
|
283
|
-
useEffect(() => {
|
|
284
|
-
if (!map) return;
|
|
285
|
-
|
|
286
|
-
const animationHandle = delayRender("Animating line...");
|
|
287
|
-
|
|
288
|
-
const progress = interpolate(frame, [0, durationInFrames - 1], [0, 1], {
|
|
289
|
-
extrapolateLeft: "clamp",
|
|
290
|
-
extrapolateRight: "clamp",
|
|
291
|
-
easing: Easing.inOut(Easing.cubic),
|
|
292
|
-
});
|
|
293
|
-
|
|
294
|
-
// Linear interpolation for a straight line on the map
|
|
295
|
-
const start = lineCoordinates[0];
|
|
296
|
-
const end = lineCoordinates[1];
|
|
297
|
-
const currentLng = start[0] + (end[0] - start[0]) * progress;
|
|
298
|
-
const currentLat = start[1] + (end[1] - start[1]) * progress;
|
|
299
|
-
|
|
300
|
-
const lineData: GeoJSON.Feature<GeoJSON.LineString> = {
|
|
301
|
-
type: "Feature",
|
|
302
|
-
properties: {},
|
|
303
|
-
geometry: {
|
|
304
|
-
type: "LineString",
|
|
305
|
-
coordinates: [start, [currentLng, currentLat]],
|
|
306
|
-
},
|
|
307
|
-
};
|
|
308
|
-
|
|
309
|
-
const source = map.getSource("trace") as mapboxgl.GeoJSONSource;
|
|
310
|
-
if (source) {
|
|
311
|
-
source.setData(lineData);
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
map.once("idle", () => continueRender(animationHandle));
|
|
315
|
-
}, [frame, map, durationInFrames]);
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
### Curved lines (geodesic/great circle)
|
|
319
|
-
|
|
320
|
-
To animate a line that follows the geodesic (great circle) path between two points, use turf's `lineSliceAlong`. This is useful for showing flight paths or the actual shortest distance on Earth.
|
|
321
|
-
|
|
322
|
-
```tsx
|
|
323
|
-
import * as turf from "@turf/turf";
|
|
324
|
-
|
|
325
|
-
const routeLine = turf.lineString(lineCoordinates);
|
|
326
|
-
const routeDistance = turf.length(routeLine);
|
|
327
|
-
|
|
328
|
-
const currentDistance = Math.max(0.001, routeDistance * progress);
|
|
329
|
-
const slicedLine = turf.lineSliceAlong(routeLine, 0, currentDistance);
|
|
330
|
-
|
|
331
|
-
const source = map.getSource("route") as mapboxgl.GeoJSONSource;
|
|
332
|
-
if (source) {
|
|
333
|
-
source.setData(slicedLine);
|
|
334
|
-
}
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
## Markers
|
|
338
|
-
|
|
339
|
-
Add labels, and markers where appropriate.
|
|
340
|
-
|
|
341
|
-
```tsx
|
|
342
|
-
_map.addSource("markers", {
|
|
343
|
-
type: "geojson",
|
|
344
|
-
data: {
|
|
345
|
-
type: "FeatureCollection",
|
|
346
|
-
features: [
|
|
347
|
-
{
|
|
348
|
-
type: "Feature",
|
|
349
|
-
properties: { name: "Point 1" },
|
|
350
|
-
geometry: { type: "Point", coordinates: [-118.2437, 34.0522] },
|
|
351
|
-
},
|
|
352
|
-
],
|
|
353
|
-
},
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
_map.addLayer({
|
|
357
|
-
id: "city-markers",
|
|
358
|
-
type: "circle",
|
|
359
|
-
source: "markers",
|
|
360
|
-
paint: {
|
|
361
|
-
"circle-radius": 40,
|
|
362
|
-
"circle-color": "#FF4444",
|
|
363
|
-
"circle-stroke-width": 4,
|
|
364
|
-
"circle-stroke-color": "#FFFFFF",
|
|
365
|
-
},
|
|
366
|
-
});
|
|
367
|
-
|
|
368
|
-
_map.addLayer({
|
|
369
|
-
id: "labels",
|
|
370
|
-
type: "symbol",
|
|
371
|
-
source: "markers",
|
|
372
|
-
layout: {
|
|
373
|
-
"text-field": ["get", "name"],
|
|
374
|
-
"text-font": ["DIN Pro Bold", "Arial Unicode MS Bold"],
|
|
375
|
-
"text-size": 50,
|
|
376
|
-
"text-offset": [0, 0.5],
|
|
377
|
-
"text-anchor": "top",
|
|
378
|
-
},
|
|
379
|
-
paint: {
|
|
380
|
-
"text-color": "#FFFFFF",
|
|
381
|
-
"text-halo-color": "#000000",
|
|
382
|
-
"text-halo-width": 2,
|
|
383
|
-
},
|
|
384
|
-
});
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
Make sure they are big enough. Check the composition dimensions and scale the labels accordingly.
|
|
388
|
-
For a composition size of 1920x1080, the label font size should be at least 40px.
|
|
389
|
-
|
|
390
|
-
IMPORTANT: Keep the `text-offset` small enough so it is close to the marker. Consider the marker circle radius. For a circle radius of 40, this is a good offset:
|
|
391
|
-
|
|
392
|
-
```tsx
|
|
393
|
-
"text-offset": [0, 0.5],
|
|
394
|
-
```
|
|
395
|
-
|
|
396
|
-
## 3D buildings
|
|
397
|
-
|
|
398
|
-
To enable 3D buildings, use the following code:
|
|
399
|
-
|
|
400
|
-
```tsx
|
|
401
|
-
_map.setConfigProperty("basemap", "show3dObjects", true);
|
|
402
|
-
_map.setConfigProperty("basemap", "show3dLandmarks", true);
|
|
403
|
-
_map.setConfigProperty("basemap", "show3dBuildings", true);
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
## Rendering
|
|
407
|
-
|
|
408
|
-
When rendering a map animation, make sure to render with the following flags:
|
|
409
|
-
|
|
410
|
-
```
|
|
411
|
-
npx remotion render --gl=angle --concurrency=1
|
|
412
|
-
```
|
|
@@ -1,30 +0,0 @@
|
|
|
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
|
-
|
|
30
|
-
For more sound effects, search the internet. A good resource is https://github.com/kapishdima/soundcn/tree/main/assets.
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: subtitles
|
|
3
|
-
description: subtitles and caption rules
|
|
4
|
-
metadata:
|
|
5
|
-
tags: subtitles, captions, remotion, json
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
All captions must be processed in JSON. The captions must use the `Caption` type which is the following:
|
|
9
|
-
|
|
10
|
-
```ts
|
|
11
|
-
import type { Caption } from "@remotion/captions";
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
This is the definition:
|
|
15
|
-
|
|
16
|
-
```ts
|
|
17
|
-
type Caption = {
|
|
18
|
-
text: string;
|
|
19
|
-
startMs: number;
|
|
20
|
-
endMs: number;
|
|
21
|
-
timestampMs: number | null;
|
|
22
|
-
confidence: number | null;
|
|
23
|
-
};
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## Generating captions
|
|
27
|
-
|
|
28
|
-
To transcribe video and audio files to generate captions, load the [./transcribe-captions.md](./transcribe-captions.md) file for more instructions.
|
|
29
|
-
|
|
30
|
-
## Displaying captions
|
|
31
|
-
|
|
32
|
-
To display captions in your video, load the [./display-captions.md](./display-captions.md) file for more instructions.
|
|
33
|
-
|
|
34
|
-
## Importing captions
|
|
35
|
-
|
|
36
|
-
To import captions from a .srt file, load the [./import-srt-captions.md](./import-srt-captions.md) file for more instructions.
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: text-animations
|
|
3
|
-
description: Typography and text animation patterns for Remotion.
|
|
4
|
-
metadata:
|
|
5
|
-
tags: typography, text, typewriter, highlighter ken
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Text animations
|
|
9
|
-
|
|
10
|
-
Based on `useCurrentFrame()`, reduce the string character by character to create a typewriter effect.
|
|
11
|
-
|
|
12
|
-
## Typewriter Effect
|
|
13
|
-
|
|
14
|
-
See [Typewriter](assets/text-animations-typewriter.tsx) for an advanced example with a blinking cursor and a pause after the first sentence.
|
|
15
|
-
|
|
16
|
-
Always use string slicing for typewriter effects. Never use per-character opacity.
|
|
17
|
-
|
|
18
|
-
## Word Highlighting
|
|
19
|
-
|
|
20
|
-
See [Word Highlight](assets/text-animations-word-highlight.tsx) for an example for how a word highlight is animated, like with a highlighter pen.
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: timing
|
|
3
|
-
description: Interpolation and timing in Remotion—prefer interpolate with Bézier easing; springs as a specialized option
|
|
4
|
-
metadata:
|
|
5
|
-
tags: easing, bezier, interpolation, spring, timing
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Drive motion with `interpolate()` over explicit frame range. To customize timing, use **`Easing.bezier`**. The four parameters are the same as CSS `cubic-bezier(x1, y1, x2, y2)`.
|
|
9
|
-
|
|
10
|
-
A simple linear interpolation is done using the `interpolate` function.
|
|
11
|
-
|
|
12
|
-
```ts title="Going from 0 to 1 over 100 frames"
|
|
13
|
-
import { interpolate } from "remotion";
|
|
14
|
-
|
|
15
|
-
const opacity = interpolate(frame, [0, 100], [0, 1]);
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
By default, the values are not clamped, so the value can go outside the range [0, 1].
|
|
19
|
-
Here is how they can be clamped:
|
|
20
|
-
|
|
21
|
-
```ts title="Going from 0 to 1 over 100 frames with extrapolation"
|
|
22
|
-
const opacity = interpolate(frame, [0, 100], [0, 1], {
|
|
23
|
-
extrapolateRight: "clamp",
|
|
24
|
-
extrapolateLeft: "clamp",
|
|
25
|
-
});
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Bézier easing
|
|
29
|
-
|
|
30
|
-
Use `Easing.bezier(x1, y1, x2, y2)` inside the `interpolate` options object. The curve is identical in spirit to CSS animations and transitions, which helps when you are stealing timing from the web or from a designer’s spec.
|
|
31
|
-
|
|
32
|
-
```ts
|
|
33
|
-
import { interpolate, Easing } from "remotion";
|
|
34
|
-
|
|
35
|
-
const opacity = interpolate(frame, [0, 60], [0, 1], {
|
|
36
|
-
easing: Easing.bezier(0.16, 1, 0.3, 1),
|
|
37
|
-
extrapolateLeft: "clamp",
|
|
38
|
-
extrapolateRight: "clamp",
|
|
39
|
-
});
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### Examples (copy-paste curves)
|
|
43
|
-
|
|
44
|
-
**1. Crisp UI entrance (strong ease-out, no overshoot)** — slows nicely into the rest value; similar to many system “deceleration” curves.
|
|
45
|
-
|
|
46
|
-
```tsx
|
|
47
|
-
const enter = interpolate(frame, [0, 45], [0, 1], {
|
|
48
|
-
easing: Easing.bezier(0.16, 1, 0.3, 1),
|
|
49
|
-
extrapolateLeft: "clamp",
|
|
50
|
-
extrapolateRight: "clamp",
|
|
51
|
-
});
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
**2. Editorial / slow fade (balanced ease-in-out)** — symmetric acceleration and deceleration over a hold-friendly move.
|
|
55
|
-
|
|
56
|
-
```tsx
|
|
57
|
-
const progress = interpolate(frame, [0, 90], [0, 1], {
|
|
58
|
-
easing: Easing.bezier(0.45, 0, 0.55, 1),
|
|
59
|
-
extrapolateLeft: "clamp",
|
|
60
|
-
extrapolateRight: "clamp",
|
|
61
|
-
});
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
**3. Playful overshoot (control point y > 1)** — a little past the target then settles; use sparingly for emphasis.
|
|
65
|
-
|
|
66
|
-
```tsx
|
|
67
|
-
const pop = interpolate(frame, [0, 30], [0, 1], {
|
|
68
|
-
easing: Easing.bezier(0.34, 1.56, 0.64, 1),
|
|
69
|
-
extrapolateLeft: "clamp",
|
|
70
|
-
extrapolateRight: "clamp",
|
|
71
|
-
});
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Preset easings (`Easing.in` / `Easing.out` / named curves)
|
|
75
|
-
|
|
76
|
-
Easing can be added to the `interpolate` function without a custom cubic:
|
|
77
|
-
|
|
78
|
-
```ts
|
|
79
|
-
import { interpolate, Easing } from "remotion";
|
|
80
|
-
|
|
81
|
-
const value1 = interpolate(frame, [0, 100], [0, 1], {
|
|
82
|
-
easing: Easing.inOut(Easing.cubic),
|
|
83
|
-
extrapolateLeft: "clamp",
|
|
84
|
-
extrapolateRight: "clamp",
|
|
85
|
-
});
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
The default easing is `Easing.linear`.
|
|
89
|
-
Convexities:
|
|
90
|
-
|
|
91
|
-
- `Easing.in` — starting slow and accelerating
|
|
92
|
-
- `Easing.out` — starting fast and slowing down
|
|
93
|
-
- `Easing.inOut`
|
|
94
|
-
|
|
95
|
-
Named curves (from most linear to most curved):
|
|
96
|
-
|
|
97
|
-
- `Easing.quad`
|
|
98
|
-
- `Easing.cubic` (good default when you do not need a custom cubic)
|
|
99
|
-
- `Easing.sin`
|
|
100
|
-
- `Easing.exp`
|
|
101
|
-
- `Easing.circle`
|
|
102
|
-
|
|
103
|
-
### Easing direction for enter/exit animations
|
|
104
|
-
|
|
105
|
-
Use `Easing.out` for enter animations (starts fast, decelerates into place) and `Easing.in` for exit animations (starts slow, accelerates away). This feels natural because elements arrive with momentum and leave with gravity. When you need a specific curve from design, prefer a single `Easing.bezier(...)` instead of stacking presets.
|
|
106
|
-
|
|
107
|
-
## Composing interpolations
|
|
108
|
-
|
|
109
|
-
When multiple properties share the same timing (e.g. a slide-in panel and a video shift), avoid duplicating the full interpolation for each property. Instead, create a single normalized progress value (0 to 1) and derive each property from it:
|
|
110
|
-
|
|
111
|
-
```tsx
|
|
112
|
-
const slideIn = interpolate(
|
|
113
|
-
frame,
|
|
114
|
-
[slideInStart, slideInStart + slideInDuration],
|
|
115
|
-
[0, 1],
|
|
116
|
-
{
|
|
117
|
-
easing: Easing.bezier(0.22, 1, 0.36, 1),
|
|
118
|
-
extrapolateLeft: "clamp",
|
|
119
|
-
extrapolateRight: "clamp",
|
|
120
|
-
},
|
|
121
|
-
);
|
|
122
|
-
const slideOut = interpolate(
|
|
123
|
-
frame,
|
|
124
|
-
[slideOutStart, slideOutStart + slideOutDuration],
|
|
125
|
-
[0, 1],
|
|
126
|
-
{ easing: Easing.in(Easing.cubic), extrapolateLeft: "clamp", extrapolateRight: "clamp" },
|
|
127
|
-
);
|
|
128
|
-
const progress = slideIn - slideOut;
|
|
129
|
-
|
|
130
|
-
// Derive multiple properties from the same progress
|
|
131
|
-
const overlayX = interpolate(progress, [0, 1], [100, 0]);
|
|
132
|
-
const videoX = interpolate(progress, [0, 1], [0, -20]);
|
|
133
|
-
const opacity = interpolate(progress, [0, 1], [0, 1]);
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
The key idea: separate **timing** (when and how fast) from **mapping** (what values to animate between).
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: trimming
|
|
3
|
-
description: Trimming patterns for Remotion - cut the beginning or end of animations
|
|
4
|
-
metadata:
|
|
5
|
-
tags: sequence, trim, clip, cut, offset
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Use `<Sequence>` with a negative `from` value to trim the start of an animation.
|
|
9
|
-
|
|
10
|
-
## Trim the Beginning
|
|
11
|
-
|
|
12
|
-
A negative `from` value shifts time backwards, making the animation start partway through:
|
|
13
|
-
|
|
14
|
-
```tsx
|
|
15
|
-
import { Sequence, useVideoConfig } from "remotion";
|
|
16
|
-
|
|
17
|
-
const fps = useVideoConfig();
|
|
18
|
-
|
|
19
|
-
<Sequence from={-0.5 * fps}>
|
|
20
|
-
<MyAnimation />
|
|
21
|
-
</Sequence>;
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
The animation appears 15 frames into its progress - the first 15 frames are trimmed off.
|
|
25
|
-
Inside `<MyAnimation>`, `useCurrentFrame()` starts at 15 instead of 0.
|
|
26
|
-
|
|
27
|
-
## Trim the End
|
|
28
|
-
|
|
29
|
-
Use `durationInFrames` to unmount content after a specified duration:
|
|
30
|
-
|
|
31
|
-
```tsx
|
|
32
|
-
<Sequence durationInFrames={1.5 * fps}>
|
|
33
|
-
<MyAnimation />
|
|
34
|
-
</Sequence>
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
The animation plays for 45 frames, then the component unmounts.
|
|
38
|
-
|
|
39
|
-
## Trim and Delay
|
|
40
|
-
|
|
41
|
-
Nest sequences to both trim the beginning and delay when it appears:
|
|
42
|
-
|
|
43
|
-
```tsx
|
|
44
|
-
<Sequence from={30}>
|
|
45
|
-
<Sequence from={-15}>
|
|
46
|
-
<MyAnimation />
|
|
47
|
-
</Sequence>
|
|
48
|
-
</Sequence>
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
The inner sequence trims 15 frames from the start, and the outer sequence delays the result by 30 frames.
|
/package/skills/{remotion/rules → remotion-best-practices/remotion-captions}/transcribe-captions.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/audio-visualization.md
RENAMED
|
File without changes
|
/package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/silence-detection.md
RENAMED
|
File without changes
|
/package/skills/{remotion/rules → remotion-best-practices/remotion-render}/transparent-videos.md
RENAMED
|
File without changes
|