dsh-remotion 0.2.0 → 0.3.1
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 +37 -6
- package/README.md +33 -4
- package/lib/index.d.ts +8 -41
- package/lib/index.js +30 -99
- package/lib/skill-bundle.d.ts +56 -0
- package/lib/skill-bundle.js +218 -0
- 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,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remotion-best-practices
|
|
3
|
+
description: Router for all Remotion skills
|
|
4
|
+
version: 4.0.519
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Preserve user changes
|
|
8
|
+
|
|
9
|
+
Users may make edits in the code outside of the conversation.
|
|
10
|
+
|
|
11
|
+
If you detect a surprising change made in the meanwhile, don't overwrite it, assume it was intentional or ask for confirmation.
|
|
12
|
+
|
|
13
|
+
## Creating a video
|
|
14
|
+
|
|
15
|
+
If the user asks to make, create, or build a new video or composition, load [Create a new Remotion video](./remotion-create/SKILL.md), whether or not a Remotion project already exists.
|
|
16
|
+
|
|
17
|
+
## New project setup
|
|
18
|
+
|
|
19
|
+
If no Remotion project currently exists, load [Create a new Remotion project](./remotion-create/SKILL.md)
|
|
20
|
+
|
|
21
|
+
## React Markup Best Practices
|
|
22
|
+
|
|
23
|
+
If you are writing Remotion React Markup, load [Remotion Markup Best Practices](./remotion-markup/SKILL.md)
|
|
24
|
+
|
|
25
|
+
## Maps
|
|
26
|
+
|
|
27
|
+
For static maps, animated routes and markers, geographic explainers, Mapbox, MapLibre, MapTiler, GeoJSON, or 3D geographic flyovers, load [Remotion Maps](./remotion-maps/SKILL.md).
|
|
28
|
+
|
|
29
|
+
## Multimedia
|
|
30
|
+
|
|
31
|
+
For achieving multimedia tasks in the browser, such as trimming, cropping videos, or getting metadata from them, load [Remotion Multimedia](./remotion-multimedia/SKILL.md)
|
|
32
|
+
|
|
33
|
+
## Improving Interactivity
|
|
34
|
+
|
|
35
|
+
By structuring the Remotion markup well, we can allow users to interactively change things in the Studio and write back to code. If relevant: [Interactivity Best Practices](./remotion-interactivity/SKILL.md)
|
|
36
|
+
|
|
37
|
+
## Rendering
|
|
38
|
+
|
|
39
|
+
For advanced rendering beyond simple `npx remotion render`, see: [Rendering Best Practices](./remotion-render/SKILL.md)
|
|
40
|
+
|
|
41
|
+
## Opening Remotion Studio
|
|
42
|
+
|
|
43
|
+
To launch a project in Remotion Studio, open its exact local URL, or configure Studio CLI flags, load [Remotion Studio](./remotion-studio/SKILL.md).
|
|
44
|
+
|
|
45
|
+
## Captions
|
|
46
|
+
|
|
47
|
+
When working with Captions, load [Remotion Captions](./remotion-captions/SKILL.md).
|
|
48
|
+
|
|
49
|
+
## Creating a SaaS, automation or application
|
|
50
|
+
|
|
51
|
+
Use the [Remotion SaaS skill](./remotion-saas/SKILL.md) for knowledge about Remotion-powered SaaS apps, such as `<Player>`, rendering on Lambda, Vercel, Cloudflare, via Express.js, client-side rendering, or for finding the right SaaS template.
|
|
52
|
+
|
|
53
|
+
## Looking up Remotion APIs and documentation
|
|
54
|
+
|
|
55
|
+
To find and read current Remotion documentation, load [Remotion Docs](./remotion-docs/SKILL.md).
|
|
56
|
+
|
|
57
|
+
## Upgrading
|
|
58
|
+
|
|
59
|
+
To upgrade Remotion, related packages, compatible Mediabunny packages, and installed Remotion Agent Skills, load [Remotion Upgrade](./remotion-upgrade/SKILL.md).
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: '/remotion-best-practices'
|
|
3
|
+
short_description: 'Route Remotion tasks to the right workflow'
|
|
4
|
+
icon_small: './assets/remotion-icon.png'
|
|
5
|
+
icon_large: './assets/remotion-icon.png'
|
|
6
|
+
brand_color: '#0B84F3'
|
|
7
|
+
default_prompt: '$remotion-best-practices: Make a promo video for my product'
|
|
Binary file
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remotion-captions
|
|
3
|
+
description: Transcribing, displaying and animating captions
|
|
4
|
+
version: 4.0.519
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
All captions must be processed in JSON. The captions must use the [`Caption`](https://www.remotion.dev/docs/captions/caption.md) type which is the following:
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import type { Caption } from "@remotion/captions";
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This is the definition:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
type Caption = {
|
|
17
|
+
text: string;
|
|
18
|
+
startMs: number;
|
|
19
|
+
endMs: number;
|
|
20
|
+
timestampMs: number | null;
|
|
21
|
+
confidence: number | null;
|
|
22
|
+
pageBreakAfter?: boolean;
|
|
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.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: '/remotion-captions'
|
|
3
|
+
short_description: 'Transcribe, display, and animate captions'
|
|
4
|
+
icon_small: './assets/remotion-icon.png'
|
|
5
|
+
icon_large: './assets/remotion-icon.png'
|
|
6
|
+
brand_color: '#0B84F3'
|
|
7
|
+
default_prompt: '$remotion-captions: Transcribe my video and display captions'
|
package/skills/{remotion/rules → remotion-best-practices/remotion-captions}/display-captions.md
RENAMED
|
@@ -54,7 +54,11 @@ export const MyComponent: React.FC = () => {
|
|
|
54
54
|
return null;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
return
|
|
57
|
+
return (
|
|
58
|
+
<AbsoluteFill>
|
|
59
|
+
{/* Render captions here */}
|
|
60
|
+
</AbsoluteFill>
|
|
61
|
+
);
|
|
58
62
|
};
|
|
59
63
|
```
|
|
60
64
|
|
|
@@ -80,6 +84,8 @@ const { pages } = useMemo(() => {
|
|
|
80
84
|
}, [captions]);
|
|
81
85
|
```
|
|
82
86
|
|
|
87
|
+
If a caption has `pageBreakAfter: true`, the current page ends after that caption and the next caption starts a new page.
|
|
88
|
+
|
|
83
89
|
## Rendering with Sequences
|
|
84
90
|
|
|
85
91
|
Map over the pages and render each one in a `<Sequence>`. Calculate the start frame and duration from the page timing:
|
|
@@ -152,13 +158,13 @@ const CaptionPage: React.FC<{ page: TikTokPage }> = ({ page }) => {
|
|
|
152
158
|
return (
|
|
153
159
|
<AbsoluteFill style={{ justifyContent: "center", alignItems: "center" }}>
|
|
154
160
|
<div style={{ fontSize: 80, fontWeight: "bold", whiteSpace: "pre" }}>
|
|
155
|
-
{page.tokens.map((token) => {
|
|
161
|
+
{page.tokens.map((token, tokenIndex) => {
|
|
156
162
|
const isActive =
|
|
157
163
|
token.fromMs <= absoluteTimeMs && token.toMs > absoluteTimeMs;
|
|
158
164
|
|
|
159
165
|
return (
|
|
160
166
|
<span
|
|
161
|
-
key={token.fromMs}
|
|
167
|
+
key={`${token.fromMs}-${tokenIndex}`}
|
|
162
168
|
style={{ color: isActive ? HIGHLIGHT_COLOR : "white" }}
|
|
163
169
|
>
|
|
164
170
|
{token.text}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remotion-create
|
|
3
|
+
description: Create a new Remotion video
|
|
4
|
+
version: 4.0.519
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
These are instructions for making a new Remotion project and composition.
|
|
8
|
+
If this is not the next task, see [Remotion Best Practices](../remotion-best-practices/SKILL.md)
|
|
9
|
+
|
|
10
|
+
## Scaffold a project
|
|
11
|
+
|
|
12
|
+
If a project already exists, skip this.
|
|
13
|
+
Ensure Node.js and Git is installed, and the current folder is appropriate for starting a new project.
|
|
14
|
+
|
|
15
|
+
Scaffold one using:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx create-video@latest --yes --blank --no-tailwind my-video
|
|
19
|
+
cd my-video
|
|
20
|
+
npm i
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Replace `my-video` with a suitable project name.
|
|
24
|
+
|
|
25
|
+
## Designing a video
|
|
26
|
+
|
|
27
|
+
Keep the scaffold and add React Markup.
|
|
28
|
+
Follow [Remotion React Markup Best Practices](../remotion-markup/SKILL.md) and [Video Layout Rules](video-layout.md) for video-first layout and text sizing guidance.
|
|
29
|
+
|
|
30
|
+
## Is this a multi-scene video?
|
|
31
|
+
|
|
32
|
+
If this is a video with multiple subsequence videos, follow guidance at [Multi-scene videos](../remotion-markup/multi-scene-video.md).
|
|
33
|
+
|
|
34
|
+
## Interactivity Best Practices
|
|
35
|
+
|
|
36
|
+
By structuring the React Markup following [Remotion Interactivity Best Practices](../remotion-interactivity/SKILL.md), you allow the user to make edits in the Studio which write back to code.
|
|
37
|
+
|
|
38
|
+
## TailwindCSS
|
|
39
|
+
|
|
40
|
+
If Tailwind is requested, see [tailwind.md](tailwind.md) for using TailwindCSS in Remotion.
|
|
41
|
+
|
|
42
|
+
## Open the preview
|
|
43
|
+
|
|
44
|
+
Start the preview server after building the composition:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npx remotion studio --no-open
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
This will start a long-running process and print the server URL for the preview.
|
|
51
|
+
If the server is already started, it will print the URL.
|
|
52
|
+
If an in-harness browser is available, open it there.
|
|
53
|
+
You can visit a specific composition by navigating to `/[composition-id]`, for example `http://localhost:3000/MapAnimation`.
|
|
54
|
+
|
|
55
|
+
## Render the video
|
|
56
|
+
|
|
57
|
+
Only render if the user explicitly asks for it.
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
npx remotion render
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
For more options, see [Rendering](../remotion-render/SKILL.md).
|
|
64
|
+
|
|
65
|
+
## Follow-up
|
|
66
|
+
|
|
67
|
+
The video creation process has finished.
|
|
68
|
+
For follow-up prompts, use [Remotion Best Practices](../remotion-best-practices/SKILL.md)
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: '/remotion-create'
|
|
3
|
+
short_description: 'Create a new Remotion video project'
|
|
4
|
+
icon_small: './assets/remotion-icon.png'
|
|
5
|
+
icon_large: './assets/remotion-icon.png'
|
|
6
|
+
brand_color: '#0B84F3'
|
|
7
|
+
default_prompt: '$remotion-create: Create a Remotion video and make a promo for my product'
|
|
@@ -8,4 +8,4 @@ You can and should use TailwindCSS in Remotion, if TailwindCSS is installed in t
|
|
|
8
8
|
|
|
9
9
|
Don't use `transition-*` or `animate-*` classes - always animate using the `useCurrentFrame()` hook.
|
|
10
10
|
|
|
11
|
-
Tailwind must be installed and enabled first in a Remotion project -
|
|
11
|
+
Tailwind must be installed and enabled first in a Remotion project - see https://www.remotion.dev/docs/tailwind.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
You are designing a video, not a webpage.
|
|
2
|
+
|
|
3
|
+
- Decide what the viewer should notice first in each scene. Build the frame around that one thing.
|
|
4
|
+
- Keep important content inside a generous safe area. For 1080px-wide videos, keep key text at least 80px from the sides and 100px from the top and bottom.
|
|
5
|
+
- Do not add redundant elements.
|
|
6
|
+
- For 1080px-wide compositions, use these rough minimums:
|
|
7
|
+
- Main headline: 84px
|
|
8
|
+
- Important supporting text: 44px
|
|
9
|
+
- Scale those values with the composition width.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remotion-docs
|
|
3
|
+
description: Search Remotion documentation
|
|
4
|
+
version: 4.0.519
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
This skill teaches you how to discover and read current Remotion documentation.
|
|
8
|
+
If this is not relevant, load [Remotion Best Practices](../remotion-best-practices/SKILL.md) instead.
|
|
9
|
+
|
|
10
|
+
## Searching the docs
|
|
11
|
+
|
|
12
|
+
Use the Algolia search API to find relevant documentation pages:
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
POST https://plsduol1ca-dsn.algolia.net/1/indexes/*/queries?x-algolia-api-key=3e42dbd4f895fe93ff5cf40d860c4a85&x-algolia-application-id=PLSDUOL1CA
|
|
16
|
+
Content-Type: application/x-www-form-urlencoded
|
|
17
|
+
|
|
18
|
+
{
|
|
19
|
+
"requests": [
|
|
20
|
+
{
|
|
21
|
+
"query": "<your search query>",
|
|
22
|
+
"indexName": "remotion",
|
|
23
|
+
"params": "attributesToRetrieve=[\"hierarchy.lvl0\",\"hierarchy.lvl1\",\"hierarchy.lvl2\",\"url\"]&hitsPerPage=10"
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Each hit contains a `url` field pointing to the documentation page.
|
|
30
|
+
|
|
31
|
+
## Fetching a page as Markdown
|
|
32
|
+
|
|
33
|
+
Append `.md` to any Remotion docs URL to retrieve its Markdown source (saves tokens):
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
https://www.remotion.dev/docs/use-video-config.md
|
|
37
|
+
https://www.remotion.dev/docs/sequence.md
|
|
38
|
+
https://www.remotion.dev/docs/lambda/rendermediaonlambda.md
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Workflow
|
|
42
|
+
|
|
43
|
+
1. Search Algolia for the concept or API you need.
|
|
44
|
+
2. Pick the most relevant URL(s) from the results.
|
|
45
|
+
3. Fetch each URL with the `.md` suffix.
|
|
46
|
+
4. Implement using the current documentation rather than memorized API knowledge.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: '/remotion-docs'
|
|
3
|
+
short_description: 'Search current Remotion documentation'
|
|
4
|
+
icon_small: './assets/remotion-icon.png'
|
|
5
|
+
icon_large: './assets/remotion-icon.png'
|
|
6
|
+
brand_color: '#0B84F3'
|
|
7
|
+
default_prompt: '$remotion-docs: What server-side rendering options does Remotion have?'
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remotion-interactivity
|
|
3
|
+
description: Structure Remotion markup for interactivity
|
|
4
|
+
version: 4.0.519
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
By writing Remotion markup in a specific way, the Remotion Studio is able to recognize the structure of the code and makes it interactive:
|
|
8
|
+
|
|
9
|
+
- Allowing items to be selected by clicking on them
|
|
10
|
+
- Allowing drag+drop, resizing and rotation
|
|
11
|
+
- Editing the CSS styles
|
|
12
|
+
- Making keyframes and easing values editable
|
|
13
|
+
|
|
14
|
+
If the markup is too complex for the Studio to make it interactive, then the values become grayed out.
|
|
15
|
+
|
|
16
|
+
## Make an HTML element interactive using `Interactive`
|
|
17
|
+
|
|
18
|
+
Every HTML and SVG element (except `<Img>`, it already is interactive) such as `<div>` can be turned interactive using `Interactive`:
|
|
19
|
+
|
|
20
|
+
```tsx title="Interactive elements"
|
|
21
|
+
<Interactive.Div
|
|
22
|
+
name="Greeting card"
|
|
23
|
+
style={{fontSize: 80, padding: 24}}
|
|
24
|
+
>
|
|
25
|
+
Hello
|
|
26
|
+
</Interactive.Div>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
This allows styles and keyframes to be set in the Studio. Be sensible, if a component has many elements, the timeline might get messy.
|
|
30
|
+
|
|
31
|
+
## Prefer inline text
|
|
32
|
+
|
|
33
|
+
If text is fixed and only used once, write it directly inside the interactive element instead of extracting it into a constant.
|
|
34
|
+
|
|
35
|
+
```tsx title="Inline text"
|
|
36
|
+
// 👍 Fixed copy stays editable
|
|
37
|
+
<Interactive.Div name="Title">
|
|
38
|
+
Remotion Best Practices
|
|
39
|
+
</Interactive.Div>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Use a prop or variable only when the text is dynamic or reused.
|
|
43
|
+
|
|
44
|
+
## Give interactive elements a descriptive name
|
|
45
|
+
|
|
46
|
+
Add a `name` prop to elements to make them easily identifyable.
|
|
47
|
+
Avoid computed names, hardcode them.
|
|
48
|
+
|
|
49
|
+
```tsx title="Interactive names"
|
|
50
|
+
<>
|
|
51
|
+
<Interactive.Div name="Hero title" style={{fontSize: 80}}>
|
|
52
|
+
Launch day
|
|
53
|
+
</Interactive.Div>
|
|
54
|
+
<Img name="Avatar" src="https://remotion.media/image.jpeg" />
|
|
55
|
+
<Video name="Background" src="https://remotion.media/video.mp4" />
|
|
56
|
+
<Sequence name="Title">
|
|
57
|
+
Launch day
|
|
58
|
+
</Sequence>
|
|
59
|
+
</>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Keep all CSS styles inline
|
|
63
|
+
|
|
64
|
+
The best way is to just pass a plain object to `style` - no referring to constants, no object spreading, no math.
|
|
65
|
+
|
|
66
|
+
```tsx title="Interactive example"
|
|
67
|
+
<Interactive.Div
|
|
68
|
+
style={{
|
|
69
|
+
fontSize: 80,
|
|
70
|
+
color: 'red',
|
|
71
|
+
}}
|
|
72
|
+
>
|
|
73
|
+
Hello World!
|
|
74
|
+
</Interactive.Div>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```tsx title="❌ Bad for interactivity"
|
|
78
|
+
const baseStyle = useMemo(() => {
|
|
79
|
+
return {
|
|
80
|
+
fontSize: 12 // ❌ Non-inline styles are not supported
|
|
81
|
+
}
|
|
82
|
+
}, []);
|
|
83
|
+
|
|
84
|
+
<Interactive.Div
|
|
85
|
+
style={{
|
|
86
|
+
...baseStyle, // ❌ Spreading is not supported
|
|
87
|
+
color: RED, // ❌ Referring to constants is not supported
|
|
88
|
+
scale: frame * 10 // ❌ Math is not supported
|
|
89
|
+
}}
|
|
90
|
+
>
|
|
91
|
+
Hello World!
|
|
92
|
+
</Interactive.Div>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Animate using `interpolate()`
|
|
96
|
+
|
|
97
|
+
Write animations as inline `interpolate()` calls on the property that changes.
|
|
98
|
+
The output range, easing, extrapolation and `output` property should use hardcoded values.
|
|
99
|
+
|
|
100
|
+
The input range may additionally use `durationInFrames`, `fps`, `width` and `height` destructured directly from `useVideoConfig()`. Bare identifiers such as `durationInFrames`, multiplication with a number such as `2 * fps` or `fps * 2`, and subtraction of a number such as `durationInFrames - 1` are supported.
|
|
101
|
+
|
|
102
|
+
```tsx title="Inline values"
|
|
103
|
+
const {fps, durationInFrames} = useVideoConfig();
|
|
104
|
+
|
|
105
|
+
// 👍 Inline values can be standardized and keyframed
|
|
106
|
+
<Interactive.Div
|
|
107
|
+
name="Product card"
|
|
108
|
+
style={{
|
|
109
|
+
color: 'white',
|
|
110
|
+
fontSize: 80,
|
|
111
|
+
scale: interpolate(frame, [0, fps], [0, 1], {
|
|
112
|
+
easing: Easing.spring({damping: 200}),
|
|
113
|
+
output: 'perceptual-scale',
|
|
114
|
+
extrapolateLeft: 'clamp',
|
|
115
|
+
extrapolateRight: 'clamp'
|
|
116
|
+
}),
|
|
117
|
+
rotate: interpolate(frame, [0, 1 * fps], ['0deg', '20deg'], {
|
|
118
|
+
easing: Easing.spring({damping: 200}),
|
|
119
|
+
extrapolateLeft: 'clamp',
|
|
120
|
+
extrapolateRight: 'clamp'
|
|
121
|
+
}),
|
|
122
|
+
translate: interpolate(
|
|
123
|
+
frame,
|
|
124
|
+
[durationInFrames - 30, durationInFrames],
|
|
125
|
+
['0px 0px', '0px 120px'],
|
|
126
|
+
{
|
|
127
|
+
easing: Easing.spring({damping: 200}),
|
|
128
|
+
output: 'perceptual-scale',
|
|
129
|
+
extrapolateLeft: 'clamp',
|
|
130
|
+
extrapolateRight: 'clamp'
|
|
131
|
+
}
|
|
132
|
+
),
|
|
133
|
+
}}
|
|
134
|
+
/>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
```tsx title="❌ Bad interactivity"
|
|
138
|
+
const translateY = interpolate(frame, [0, 30], [0, 120]); // ❌ Math should be directly in the markup
|
|
139
|
+
|
|
140
|
+
<Interactive.Div
|
|
141
|
+
name="Product card"
|
|
142
|
+
style={{
|
|
143
|
+
translate: translateY, // ❌ Only inline interpolate() calls are supported,
|
|
144
|
+
rotate: interpolate(frame, [start, start + 10], [0, Math.PI]), // ❌ Cannot use math with arbitrary variables, cannot use constants
|
|
145
|
+
scale: interpolate(anyVariable, [0, 30], [0, 1]) // ❌ Can only interpret the `frame` variable.
|
|
146
|
+
}}
|
|
147
|
+
/>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Use `scale`, `translate`, `rotate` CSS properties
|
|
151
|
+
|
|
152
|
+
Avoid the `transform` CSS property.
|
|
153
|
+
If possible, use `scale`, `rotate` and `translate` instead because only they are interactively editable.
|
|
154
|
+
|
|
155
|
+
## Keep composition metadata inline
|
|
156
|
+
|
|
157
|
+
When scaffolding a composition, keep `width`, `height`, `fps`, `durationInFrames` and `defaultProps` inline and make no type assertions.
|
|
158
|
+
|
|
159
|
+
The Props editor can save visual edits back to your code when `defaultProps` is an inline object literal on `<Composition>` or `<Still>`.
|
|
160
|
+
|
|
161
|
+
```tsx
|
|
162
|
+
// 👍 Static values are in <Composition>, dynamic values are in calculateMetadata()
|
|
163
|
+
const calculateMetadata = useMemo(async () => {
|
|
164
|
+
const dimensions = await getDimensions(); // just an example
|
|
165
|
+
return {width: dimensions.width, height: dimensions.height};
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
<Composition
|
|
169
|
+
id="my-video"
|
|
170
|
+
component={MyComponent}
|
|
171
|
+
durationInFrames={150}
|
|
172
|
+
fps={30}
|
|
173
|
+
calculateMetadata={calculateMetadata}
|
|
174
|
+
defaultProps={{title: 'Hello', color: '#0b84ff'}}
|
|
175
|
+
/>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
```tsx title="Negative examples"
|
|
179
|
+
const defaultProps = {title: 'Hello', color: '#0b84ff'}; // ❌ Don't extract defaultProps, must be inline
|
|
180
|
+
const calculateMetadata = useMemo(() => {
|
|
181
|
+
// ❌ Unnecessary because no calculation is being done,
|
|
182
|
+
return {durationInFrames: 150, fps: 30, width: 1920, height: 1080};
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
<Composition
|
|
186
|
+
id="my-video"
|
|
187
|
+
component={MyComponent}
|
|
188
|
+
calculateMetadata={calculateMetadata}
|
|
189
|
+
defaultProps={{
|
|
190
|
+
title: 'Hello',
|
|
191
|
+
} as Props} // ❌ Don't have type assertions, instead type MyComponent correctly
|
|
192
|
+
/>
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Use only `calculateMetadata()` for the part of the metadata that is dynamic.
|
|
196
|
+
|
|
197
|
+
## Effects should be inline too
|
|
198
|
+
|
|
199
|
+
The effects array should not be computed.
|
|
200
|
+
The same rules for setting keyframes as `interpolate()` apply too here: All values should also be hardcoded: Input range, output range, easing, extrapolation, `output` property.
|
|
201
|
+
|
|
202
|
+
```tsx title="Effects"
|
|
203
|
+
// 👍 Parameters are inline and the array shape is stable
|
|
204
|
+
<CanvasImage
|
|
205
|
+
src={src}
|
|
206
|
+
width={1280}
|
|
207
|
+
height={720}
|
|
208
|
+
effects={[
|
|
209
|
+
radialProgressiveBlur({
|
|
210
|
+
center: [0.5, 0.5],
|
|
211
|
+
width: 1.2,
|
|
212
|
+
height: 0.8,
|
|
213
|
+
start: 0.2,
|
|
214
|
+
disabled: true,
|
|
215
|
+
rotation: interpolate(frame, [0, 120], [0, 180]),
|
|
216
|
+
}),
|
|
217
|
+
]}
|
|
218
|
+
/>
|
|
219
|
+
|
|
220
|
+
const center = [0.5, 0.5] as const;
|
|
221
|
+
const rotation = frame * 1.5;
|
|
222
|
+
|
|
223
|
+
<CanvasImage
|
|
224
|
+
src={src}
|
|
225
|
+
width={1280}
|
|
226
|
+
height={720}
|
|
227
|
+
// ❌ Conditional effect is not animateable
|
|
228
|
+
effects={enabled ? [
|
|
229
|
+
radialProgressiveBlur({
|
|
230
|
+
// ❌ Not inline
|
|
231
|
+
center,
|
|
232
|
+
rotation,
|
|
233
|
+
}),
|
|
234
|
+
] : []}
|
|
235
|
+
/>
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Render separate elements if one version should have effects and another should not.
|
|
239
|
+
|
|
240
|
+
## Making your own component interactive
|
|
241
|
+
|
|
242
|
+
To make a custom userland component interactive, use:
|
|
243
|
+
[Make a component interactive](https://www.remotion.dev/docs/studio/make-component-interactive.md)
|
|
244
|
+
|
|
245
|
+
## Video editing
|
|
246
|
+
|
|
247
|
+
If a Remotion component mainly consists of video and audio clips, see [Video editing](../remotion-markup/video-editing.md) for best practices on how to structure Remotion markup so the clips are interactively editable in the timeline.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: '/remotion-interactivity'
|
|
3
|
+
short_description: 'Make compositions editable in Remotion Studio'
|
|
4
|
+
icon_small: './assets/remotion-icon.png'
|
|
5
|
+
icon_large: './assets/remotion-icon.png'
|
|
6
|
+
brand_color: '#0B84F3'
|
|
7
|
+
default_prompt: '$remotion-interactivity: Make the markup in MyComp.tsx interactive'
|
|
Binary file
|
|
@@ -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.'
|