dsh-remotion 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +7 -5
- package/README.md +3 -3
- package/lib/index.d.ts +2 -2
- package/lib/index.js +15 -2
- package/package.json +1 -1
- package/skills/remotion-best-practices/SKILL.md +59 -0
- package/skills/remotion-best-practices/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-captions/SKILL.md +36 -0
- package/skills/remotion-best-practices/remotion-captions/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-captions/assets/remotion-icon.png +0 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-captions}/display-captions.md +9 -3
- package/skills/{remotion/rules → remotion-best-practices/remotion-captions}/import-srt-captions.md +5 -1
- package/skills/remotion-best-practices/remotion-create/SKILL.md +68 -0
- package/skills/remotion-best-practices/remotion-create/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-create/assets/remotion-icon.png +0 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-create}/tailwind.md +1 -1
- package/skills/remotion-best-practices/remotion-create/video-layout.md +9 -0
- package/skills/remotion-best-practices/remotion-docs/SKILL.md +46 -0
- package/skills/remotion-best-practices/remotion-docs/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-docs/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-interactivity/SKILL.md +247 -0
- package/skills/remotion-best-practices/remotion-interactivity/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-interactivity/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-maps/SKILL.md +36 -0
- package/skills/remotion-best-practices/remotion-maps/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-maps/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
- package/skills/remotion-best-practices/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
- package/skills/remotion-best-practices/remotion-markup/SKILL.md +365 -0
- package/skills/remotion-best-practices/remotion-markup/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-markup/assets/remotion-icon.png +0 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/audio.md +4 -2
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/calculate-metadata.md +4 -2
- package/skills/remotion-best-practices/remotion-markup/compositions.md +117 -0
- package/skills/remotion-best-practices/remotion-markup/cropping.md +34 -0
- package/skills/remotion-best-practices/remotion-markup/effects.md +251 -0
- package/skills/{remotion/rules/videos.md → remotion-best-practices/remotion-markup/embedding-videos.md} +6 -4
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/ffmpeg.md +5 -1
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/gifs.md +55 -9
- package/skills/remotion-best-practices/remotion-markup/google-fonts.md +76 -0
- package/skills/remotion-best-practices/remotion-markup/html-in-canvas.md +128 -0
- package/skills/remotion-best-practices/remotion-markup/images.md +73 -0
- package/skills/remotion-best-practices/remotion-markup/light-leaks.md +106 -0
- package/skills/remotion-best-practices/remotion-markup/local-fonts.md +69 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/lottie.md +4 -1
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/measuring-dom-nodes.md +5 -1
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/measuring-text.md +8 -2
- package/skills/remotion-best-practices/remotion-markup/multi-scene-video.md +81 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/parameters.md +3 -1
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/SKILL.md +36 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/sequencing.md +63 -12
- package/skills/remotion-best-practices/remotion-markup/sfx.md +51 -0
- package/skills/remotion-best-practices/remotion-markup/text-highlights.md +56 -0
- package/skills/remotion-best-practices/remotion-markup/timing.md +111 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/transitions.md +49 -7
- package/skills/remotion-best-practices/remotion-markup/video-editing.md +90 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/voiceover.md +2 -2
- package/skills/remotion-best-practices/remotion-multimedia/SKILL.md +20 -0
- package/skills/remotion-best-practices/remotion-multimedia/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-multimedia/assets/remotion-icon.png +0 -0
- package/skills/{remotion/rules → remotion-best-practices/remotion-multimedia}/get-audio-duration.md +1 -3
- package/skills/{remotion/rules → remotion-best-practices/remotion-multimedia}/get-video-dimensions.md +1 -3
- package/skills/{remotion/rules → remotion-best-practices/remotion-multimedia}/get-video-duration.md +1 -3
- package/skills/remotion-best-practices/remotion-render/SKILL.md +27 -0
- package/skills/remotion-best-practices/remotion-render/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-render/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-saas/SKILL.md +33 -0
- package/skills/remotion-best-practices/remotion-saas/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-saas/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-saas/framework.md +21 -0
- package/skills/remotion-best-practices/remotion-saas/player.md +33 -0
- package/skills/remotion-best-practices/remotion-saas/rendering.md +69 -0
- package/skills/remotion-best-practices/remotion-studio/SKILL.md +24 -0
- package/skills/remotion-best-practices/remotion-studio/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-studio/assets/remotion-icon.png +0 -0
- package/skills/remotion-best-practices/remotion-upgrade/SKILL.md +31 -0
- package/skills/remotion-best-practices/remotion-upgrade/agents/openai.yaml +7 -0
- package/skills/remotion-best-practices/remotion-upgrade/assets/remotion-icon.png +0 -0
- package/skills/remotion-captions/SKILL.md +36 -0
- package/skills/remotion-captions/agents/openai.yaml +7 -0
- package/skills/remotion-captions/assets/remotion-icon.png +0 -0
- package/skills/remotion-captions/display-captions.md +190 -0
- package/skills/remotion-captions/import-srt-captions.md +73 -0
- package/skills/remotion-captions/transcribe-captions.md +70 -0
- package/skills/remotion-create/SKILL.md +68 -0
- package/skills/remotion-create/agents/openai.yaml +7 -0
- package/skills/remotion-create/assets/remotion-icon.png +0 -0
- package/skills/remotion-create/tailwind.md +11 -0
- package/skills/remotion-create/video-layout.md +9 -0
- package/skills/remotion-docs/SKILL.md +46 -0
- package/skills/remotion-docs/agents/openai.yaml +7 -0
- package/skills/remotion-docs/assets/remotion-icon.png +0 -0
- package/skills/remotion-interactivity/SKILL.md +247 -0
- package/skills/remotion-interactivity/agents/openai.yaml +7 -0
- package/skills/remotion-interactivity/assets/remotion-icon.png +0 -0
- package/skills/remotion-maps/SKILL.md +36 -0
- package/skills/remotion-maps/agents/openai.yaml +7 -0
- package/skills/remotion-maps/assets/remotion-icon.png +0 -0
- package/skills/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
- package/skills/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
- package/skills/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
- package/skills/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
- package/skills/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
- package/skills/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
- package/skills/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
- package/skills/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
- package/skills/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
- package/skills/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
- package/skills/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
- package/skills/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
- package/skills/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
- package/skills/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
- package/skills/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
- package/skills/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
- package/skills/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
- package/skills/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
- package/skills/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
- package/skills/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
- package/skills/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
- package/skills/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
- package/skills/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
- package/skills/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
- package/skills/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
- package/skills/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
- package/skills/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
- package/skills/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
- package/skills/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
- package/skills/remotion-markup/3d.md +86 -0
- package/skills/remotion-markup/SKILL.md +365 -0
- package/skills/remotion-markup/agents/openai.yaml +7 -0
- package/skills/remotion-markup/assets/remotion-icon.png +0 -0
- package/skills/remotion-markup/audio-visualization.md +198 -0
- package/skills/remotion-markup/audio.md +171 -0
- package/skills/remotion-markup/calculate-metadata.md +136 -0
- package/skills/remotion-markup/compositions.md +117 -0
- package/skills/remotion-markup/cropping.md +34 -0
- package/skills/remotion-markup/effects.md +251 -0
- package/skills/remotion-markup/embedding-videos.md +173 -0
- package/skills/remotion-markup/ffmpeg.md +38 -0
- package/skills/remotion-markup/gifs.md +187 -0
- package/skills/remotion-markup/google-fonts.md +76 -0
- package/skills/remotion-markup/html-in-canvas.md +128 -0
- package/skills/remotion-markup/images.md +73 -0
- package/skills/remotion-markup/light-leaks.md +106 -0
- package/skills/remotion-markup/local-fonts.md +69 -0
- package/skills/remotion-markup/lottie.md +73 -0
- package/skills/remotion-markup/measuring-dom-nodes.md +38 -0
- package/skills/remotion-markup/measuring-text.md +146 -0
- package/skills/remotion-markup/multi-scene-video.md +81 -0
- package/skills/remotion-markup/parameters.md +111 -0
- package/skills/remotion-markup/remotion-maps/SKILL.md +36 -0
- package/skills/remotion-markup/remotion-maps/agents/openai.yaml +7 -0
- package/skills/remotion-markup/remotion-maps/assets/remotion-icon.png +0 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -0
- package/skills/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -0
- package/skills/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -0
- package/skills/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -0
- package/skills/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +465 -0
- package/skills/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -0
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -0
- package/skills/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -0
- package/skills/remotion-markup/sequencing.md +169 -0
- package/skills/remotion-markup/sfx.md +51 -0
- package/skills/remotion-markup/silence-detection.md +71 -0
- package/skills/remotion-markup/text-highlights.md +56 -0
- package/skills/remotion-markup/timing.md +111 -0
- package/skills/remotion-markup/transitions.md +239 -0
- package/skills/remotion-markup/video-editing.md +90 -0
- package/skills/remotion-markup/voiceover.md +99 -0
- package/skills/remotion-multimedia/SKILL.md +20 -0
- package/skills/remotion-multimedia/agents/openai.yaml +7 -0
- package/skills/remotion-multimedia/assets/remotion-icon.png +0 -0
- package/skills/remotion-multimedia/get-audio-duration.md +56 -0
- package/skills/remotion-multimedia/get-video-dimensions.md +66 -0
- package/skills/remotion-multimedia/get-video-duration.md +58 -0
- package/skills/remotion-render/SKILL.md +27 -0
- package/skills/remotion-render/agents/openai.yaml +7 -0
- package/skills/remotion-render/assets/remotion-icon.png +0 -0
- package/skills/remotion-render/transparent-videos.md +106 -0
- package/skills/remotion-saas/SKILL.md +33 -0
- package/skills/remotion-saas/agents/openai.yaml +7 -0
- package/skills/remotion-saas/assets/remotion-icon.png +0 -0
- package/skills/remotion-saas/framework.md +21 -0
- package/skills/remotion-saas/player.md +33 -0
- package/skills/remotion-saas/rendering.md +69 -0
- package/skills/remotion-studio/SKILL.md +24 -0
- package/skills/remotion-studio/agents/openai.yaml +7 -0
- package/skills/remotion-studio/assets/remotion-icon.png +0 -0
- package/skills/remotion-upgrade/SKILL.md +31 -0
- package/skills/remotion-upgrade/agents/openai.yaml +7 -0
- package/skills/remotion-upgrade/assets/remotion-icon.png +0 -0
- package/skills/remotion/SKILL.md +0 -95
- package/skills/remotion/rules/animations.md +0 -31
- package/skills/remotion/rules/assets.md +0 -78
- package/skills/remotion/rules/can-decode.md +0 -81
- package/skills/remotion/rules/charts.md +0 -120
- package/skills/remotion/rules/compositions.md +0 -154
- package/skills/remotion/rules/extract-frames.md +0 -229
- package/skills/remotion/rules/fonts.md +0 -152
- package/skills/remotion/rules/images.md +0 -134
- package/skills/remotion/rules/light-leaks.md +0 -73
- package/skills/remotion/rules/maps.md +0 -412
- package/skills/remotion/rules/sfx.md +0 -30
- package/skills/remotion/rules/subtitles.md +0 -36
- package/skills/remotion/rules/text-animations.md +0 -20
- package/skills/remotion/rules/timing.md +0 -136
- package/skills/remotion/rules/trimming.md +0 -51
- /package/skills/{remotion/rules → remotion-best-practices/remotion-captions}/transcribe-captions.md +0 -0
- /package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/3d.md +0 -0
- /package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/audio-visualization.md +0 -0
- /package/skills/{remotion/rules → remotion-best-practices/remotion-markup}/silence-detection.md +0 -0
- /package/skills/{remotion/rules → remotion-best-practices/remotion-render}/transparent-videos.md +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: voiceover
|
|
3
|
+
description: Adding AI-generated voiceover to Remotion compositions using TTS
|
|
4
|
+
metadata:
|
|
5
|
+
tags: voiceover, audio, elevenlabs, tts, speech, calculateMetadata, dynamic duration
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Adding AI voiceover to a Remotion composition
|
|
9
|
+
|
|
10
|
+
Use ElevenLabs TTS to generate speech audio per scene, then use [`calculateMetadata`](./calculate-metadata.md) to dynamically size the composition to match the audio.
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
By default this guide uses **ElevenLabs** as the TTS provider (`ELEVENLABS_API_KEY` environment variable). Users may substitute any TTS service that can produce an audio file.
|
|
15
|
+
|
|
16
|
+
If the user has not specified a TTS provider, recommend ElevenLabs and ask for their API key.
|
|
17
|
+
|
|
18
|
+
Ensure the environment variable is available when running the generation script:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
node --strip-types generate-voiceover.ts
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Generating audio with ElevenLabs
|
|
25
|
+
|
|
26
|
+
Create a script that reads the config, calls the ElevenLabs API for each scene, and writes MP3 files to the `public/` directory so Remotion can access them via `staticFile()`.
|
|
27
|
+
|
|
28
|
+
The core API call for a single scene:
|
|
29
|
+
|
|
30
|
+
```ts title="generate-voiceover.ts"
|
|
31
|
+
const response = await fetch(
|
|
32
|
+
`https://api.elevenlabs.io/v1/text-to-speech/${voiceId}`,
|
|
33
|
+
{
|
|
34
|
+
method: "POST",
|
|
35
|
+
headers: {
|
|
36
|
+
"xi-api-key": process.env.ELEVENLABS_API_KEY!,
|
|
37
|
+
"Content-Type": "application/json",
|
|
38
|
+
Accept: "audio/mpeg",
|
|
39
|
+
},
|
|
40
|
+
body: JSON.stringify({
|
|
41
|
+
text: "Welcome to the show.",
|
|
42
|
+
model_id: "eleven_multilingual_v2",
|
|
43
|
+
voice_settings: {
|
|
44
|
+
stability: 0.5,
|
|
45
|
+
similarity_boost: 0.75,
|
|
46
|
+
style: 0.3,
|
|
47
|
+
},
|
|
48
|
+
}),
|
|
49
|
+
},
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const audioBuffer = Buffer.from(await response.arrayBuffer());
|
|
53
|
+
writeFileSync(`public/voiceover/${compositionId}/${scene.id}.mp3`, audioBuffer);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Dynamic composition duration with calculateMetadata
|
|
57
|
+
|
|
58
|
+
Use [`calculateMetadata`](./calculate-metadata.md) to measure the [audio durations](../remotion-multimedia/get-audio-duration.md) and set the composition length accordingly.
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
import { CalculateMetadataFunction, staticFile } from "remotion";
|
|
62
|
+
import { getAudioDuration } from "./get-audio-duration";
|
|
63
|
+
|
|
64
|
+
const FPS = 30;
|
|
65
|
+
|
|
66
|
+
const SCENE_AUDIO_FILES = [
|
|
67
|
+
"voiceover/my-comp/scene-01-intro.mp3",
|
|
68
|
+
"voiceover/my-comp/scene-02-main.mp3",
|
|
69
|
+
"voiceover/my-comp/scene-03-outro.mp3",
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
export const calculateMetadata: CalculateMetadataFunction<Props> = async ({
|
|
73
|
+
props,
|
|
74
|
+
}) => {
|
|
75
|
+
const durations = await Promise.all(
|
|
76
|
+
SCENE_AUDIO_FILES.map((file) => getAudioDuration(staticFile(file))),
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
const sceneDurations = durations.map((durationInSeconds) => {
|
|
80
|
+
return durationInSeconds * FPS;
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
durationInFrames: Math.ceil(sceneDurations.reduce((sum, d) => sum + d, 0)),
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The computed `sceneDurations` are passed into the component via a `voiceover` prop so the component knows how long each scene should be.
|
|
90
|
+
|
|
91
|
+
If the composition uses [`<TransitionSeries>`](./transitions.md), subtract the overlap from total duration: [./transitions.md#calculating-total-composition-duration](./transitions.md#calculating-total-composition-duration)
|
|
92
|
+
|
|
93
|
+
## Rendering audio in the component
|
|
94
|
+
|
|
95
|
+
See [audio.md](./audio.md) for more information on how to render audio in the component.
|
|
96
|
+
|
|
97
|
+
## Delaying audio start
|
|
98
|
+
|
|
99
|
+
See [audio.md#delaying](./audio.md#delaying) for more information on how to delay the audio start.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remotion-multimedia
|
|
3
|
+
description: Interacting with Mediabunny
|
|
4
|
+
version: 4.0.519
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Mediabunny is a multimedia library for dealing with audio and video in the browser.
|
|
8
|
+
Here is a compact overview of its capabilities: https://mediabunny.dev/llms.txt
|
|
9
|
+
|
|
10
|
+
## Getting audio duration
|
|
11
|
+
|
|
12
|
+
See [get-audio-duration.md](get-audio-duration.md) for getting the duration of an audio file in seconds with Mediabunny.
|
|
13
|
+
|
|
14
|
+
## Getting video dimensions
|
|
15
|
+
|
|
16
|
+
See [get-video-dimensions.md](get-video-dimensions.md) for getting the width and height of a video file with Mediabunny.
|
|
17
|
+
|
|
18
|
+
## Getting video duration
|
|
19
|
+
|
|
20
|
+
See [get-video-duration.md](get-video-duration.md) for getting the duration of a video file in seconds with Mediabunny.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: '/remotion-multimedia'
|
|
3
|
+
short_description: 'Inspect browser-based audio and video media'
|
|
4
|
+
icon_small: './assets/remotion-icon.png'
|
|
5
|
+
icon_large: './assets/remotion-icon.png'
|
|
6
|
+
brand_color: '#0B84F3'
|
|
7
|
+
default_prompt: '$remotion-multimedia: Make my video the same duration as the footage'
|
|
Binary file
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: get-audio-duration
|
|
3
|
+
description: Getting the duration of an audio file in seconds with Mediabunny
|
|
4
|
+
metadata:
|
|
5
|
+
tags: duration, audio, length, time, seconds, mp3, wav
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Getting audio duration with Mediabunny
|
|
9
|
+
|
|
10
|
+
Mediabunny can extract the duration of an audio file. It works in browser, Node.js, and Bun environments.
|
|
11
|
+
|
|
12
|
+
## Getting audio duration
|
|
13
|
+
|
|
14
|
+
```tsx title="get-audio-duration.ts"
|
|
15
|
+
import { Input, ALL_FORMATS, UrlSource } from "mediabunny";
|
|
16
|
+
|
|
17
|
+
export const getAudioDuration = async (src: string) => {
|
|
18
|
+
const input = new Input({
|
|
19
|
+
formats: ALL_FORMATS,
|
|
20
|
+
source: new UrlSource(src),
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const durationInSeconds = await input.computeDuration();
|
|
24
|
+
return durationInSeconds;
|
|
25
|
+
};
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
const duration = await getAudioDuration("https://remotion.media/audio.mp3");
|
|
32
|
+
console.log(duration); // e.g. 180.5 (seconds)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Using with staticFile in Remotion
|
|
36
|
+
|
|
37
|
+
Make sure to wrap the file path in `staticFile()`:
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import { staticFile } from "remotion";
|
|
41
|
+
|
|
42
|
+
const duration = await getAudioDuration(staticFile("audio.mp3"));
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## In Node.js and Bun
|
|
46
|
+
|
|
47
|
+
Use `FileSource` instead of `UrlSource`:
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
import { Input, ALL_FORMATS, FileSource } from "mediabunny";
|
|
51
|
+
|
|
52
|
+
const input = new Input({
|
|
53
|
+
formats: ALL_FORMATS,
|
|
54
|
+
source: new FileSource(file), // File object from input or drag-drop
|
|
55
|
+
});
|
|
56
|
+
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: get-video-dimensions
|
|
3
|
+
description: Getting the width and height of a video file with Mediabunny
|
|
4
|
+
metadata:
|
|
5
|
+
tags: dimensions, width, height, resolution, size, video
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Getting video dimensions with Mediabunny
|
|
9
|
+
|
|
10
|
+
Mediabunny can extract the width and height of a video file. It works in browser, Node.js, and Bun environments.
|
|
11
|
+
|
|
12
|
+
## Getting video dimensions
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
import { Input, ALL_FORMATS, UrlSource } from "mediabunny";
|
|
16
|
+
|
|
17
|
+
export const getVideoDimensions = async (src: string) => {
|
|
18
|
+
const input = new Input({
|
|
19
|
+
formats: ALL_FORMATS,
|
|
20
|
+
source: new UrlSource(src),
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const videoTrack = await input.getPrimaryVideoTrack();
|
|
24
|
+
if (!videoTrack) {
|
|
25
|
+
throw new Error("No video track found");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
width: videoTrack.displayWidth,
|
|
30
|
+
height: videoTrack.displayHeight,
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Usage
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
const dimensions = await getVideoDimensions("https://remotion.media/video.mp4");
|
|
39
|
+
console.log(dimensions.width); // e.g. 1920
|
|
40
|
+
console.log(dimensions.height); // e.g. 1080
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Using with local files
|
|
44
|
+
|
|
45
|
+
For local files, use `FileSource` instead of `UrlSource`:
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
import { Input, ALL_FORMATS, FileSource } from "mediabunny";
|
|
49
|
+
|
|
50
|
+
const input = new Input({
|
|
51
|
+
formats: ALL_FORMATS,
|
|
52
|
+
source: new FileSource(file), // File object from input or drag-drop
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const videoTrack = await input.getPrimaryVideoTrack();
|
|
56
|
+
const width = videoTrack.displayWidth;
|
|
57
|
+
const height = videoTrack.displayHeight;
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Using with staticFile in Remotion
|
|
61
|
+
|
|
62
|
+
```tsx
|
|
63
|
+
import { staticFile } from "remotion";
|
|
64
|
+
|
|
65
|
+
const dimensions = await getVideoDimensions(staticFile("video.mp4"));
|
|
66
|
+
```
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: get-video-duration
|
|
3
|
+
description: Getting the duration of a video file in seconds with Mediabunny
|
|
4
|
+
metadata:
|
|
5
|
+
tags: duration, video, length, time, seconds
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Getting video duration with Mediabunny
|
|
9
|
+
|
|
10
|
+
Mediabunny can extract the duration of a video file. It works in browser, Node.js, and Bun environments.
|
|
11
|
+
|
|
12
|
+
## Getting video duration
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
import { Input, ALL_FORMATS, UrlSource } from "mediabunny";
|
|
16
|
+
|
|
17
|
+
export const getVideoDuration = async (src: string) => {
|
|
18
|
+
const input = new Input({
|
|
19
|
+
formats: ALL_FORMATS,
|
|
20
|
+
source: new UrlSource(src),
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const durationInSeconds = await input.computeDuration();
|
|
24
|
+
return durationInSeconds;
|
|
25
|
+
};
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
const duration = await getVideoDuration("https://remotion.media/video.mp4");
|
|
32
|
+
console.log(duration); // e.g. 10.5 (seconds)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Video files from the public/ directory
|
|
36
|
+
|
|
37
|
+
Make sure to wrap the file path in `staticFile()`:
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import { staticFile } from "remotion";
|
|
41
|
+
|
|
42
|
+
const duration = await getVideoDuration(staticFile("video.mp4"));
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## In Node.js and Bun
|
|
46
|
+
|
|
47
|
+
Use `FileSource` instead of `UrlSource`:
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
import { Input, ALL_FORMATS, FileSource } from "mediabunny";
|
|
51
|
+
|
|
52
|
+
const input = new Input({
|
|
53
|
+
formats: ALL_FORMATS,
|
|
54
|
+
source: new FileSource(file), // File object from input or drag-drop
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
const durationInSeconds = await input.computeDuration();
|
|
58
|
+
```
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remotion-render
|
|
3
|
+
description: Export a Remotion video
|
|
4
|
+
version: 4.0.519
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## General rendering strategy
|
|
8
|
+
|
|
9
|
+
Render a video using:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
npx remotion render
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Full list of options: https://www.remotion.dev/docs/cli/render.md
|
|
16
|
+
|
|
17
|
+
Render a still using:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
npx remotion still
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Full list of options: https://www.remotion.dev/docs/cli/still.md
|
|
24
|
+
|
|
25
|
+
## Transparent videos
|
|
26
|
+
|
|
27
|
+
See [Transparent videos](./transparent-videos.md) for rendering out a video with transparency.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: '/remotion-render'
|
|
3
|
+
short_description: 'Export Remotion videos and stills'
|
|
4
|
+
icon_small: './assets/remotion-icon.png'
|
|
5
|
+
icon_large: './assets/remotion-icon.png'
|
|
6
|
+
brand_color: '#0B84F3'
|
|
7
|
+
default_prompt: '$remotion-render: Render this as transparent ProRes'
|
|
Binary file
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: transparent-videos
|
|
3
|
+
description: Rendering transparent videos in Remotion
|
|
4
|
+
metadata:
|
|
5
|
+
tags: transparent, alpha, codec, vp9, prores, webm
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Rendering Transparent Videos
|
|
9
|
+
|
|
10
|
+
Remotion can render transparent videos in two ways: as a ProRes video or as a WebM video.
|
|
11
|
+
|
|
12
|
+
## Transparent ProRes
|
|
13
|
+
|
|
14
|
+
Ideal for when importing into video editing software.
|
|
15
|
+
|
|
16
|
+
**CLI:**
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx remotion render --image-format=png --pixel-format=yuva444p10le --codec=prores --prores-profile=4444 MyComp out.mov
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Default in Studio** (restart Studio after changing):
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
// remotion.config.ts
|
|
26
|
+
import { Config } from "@remotion/cli/config";
|
|
27
|
+
|
|
28
|
+
Config.setVideoImageFormat("png");
|
|
29
|
+
Config.setPixelFormat("yuva444p10le");
|
|
30
|
+
Config.setCodec("prores");
|
|
31
|
+
Config.setProResProfile("4444");
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Setting it as the default export settings for a composition** (using `calculateMetadata`):
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
import { CalculateMetadataFunction } from "remotion";
|
|
38
|
+
|
|
39
|
+
const calculateMetadata: CalculateMetadataFunction<Props> = async ({
|
|
40
|
+
props,
|
|
41
|
+
}) => {
|
|
42
|
+
return {
|
|
43
|
+
defaultCodec: "prores",
|
|
44
|
+
defaultVideoImageFormat: "png",
|
|
45
|
+
defaultPixelFormat: "yuva444p10le",
|
|
46
|
+
defaultProResProfile: "4444",
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
<Composition
|
|
51
|
+
id="my-video"
|
|
52
|
+
component={MyVideo}
|
|
53
|
+
durationInFrames={150}
|
|
54
|
+
fps={30}
|
|
55
|
+
width={1920}
|
|
56
|
+
height={1080}
|
|
57
|
+
calculateMetadata={calculateMetadata}
|
|
58
|
+
/>;
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Transparent WebM (VP9)
|
|
62
|
+
|
|
63
|
+
Ideal for when playing in a browser.
|
|
64
|
+
|
|
65
|
+
**CLI:**
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
npx remotion render --image-format=png --pixel-format=yuva420p --codec=vp9 MyComp out.webm
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Default in Studio** (restart Studio after changing):
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
// remotion.config.ts
|
|
75
|
+
import { Config } from "@remotion/cli/config";
|
|
76
|
+
|
|
77
|
+
Config.setVideoImageFormat("png");
|
|
78
|
+
Config.setPixelFormat("yuva420p");
|
|
79
|
+
Config.setCodec("vp9");
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Setting it as the default export settings for a composition** (using `calculateMetadata`):
|
|
83
|
+
|
|
84
|
+
```tsx
|
|
85
|
+
import { CalculateMetadataFunction } from "remotion";
|
|
86
|
+
|
|
87
|
+
const calculateMetadata: CalculateMetadataFunction<Props> = async ({
|
|
88
|
+
props,
|
|
89
|
+
}) => {
|
|
90
|
+
return {
|
|
91
|
+
defaultCodec: "vp8",
|
|
92
|
+
defaultVideoImageFormat: "png",
|
|
93
|
+
defaultPixelFormat: "yuva420p",
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
<Composition
|
|
98
|
+
id="my-video"
|
|
99
|
+
component={MyVideo}
|
|
100
|
+
durationInFrames={150}
|
|
101
|
+
fps={30}
|
|
102
|
+
width={1920}
|
|
103
|
+
height={1080}
|
|
104
|
+
calculateMetadata={calculateMetadata}
|
|
105
|
+
/>;
|
|
106
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remotion-saas
|
|
3
|
+
description: Build an app with Remotion
|
|
4
|
+
version: 4.0.519
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
One can build apps with Remotion.
|
|
8
|
+
It is possible to have a simple form and hook it up to a render, or have a complex video editor.
|
|
9
|
+
|
|
10
|
+
## Choosing a template or a framework
|
|
11
|
+
|
|
12
|
+
We have several templates for SaaS which can be cloned or used as a reference.
|
|
13
|
+
See [Choosing a framework](framework.md) for help choosing a template or framework.
|
|
14
|
+
|
|
15
|
+
## The `<Player>`
|
|
16
|
+
|
|
17
|
+
This component allows embedding a Remotion preview in a React app. See [Player](player.md) for more information about the Player.
|
|
18
|
+
|
|
19
|
+
## Rendering
|
|
20
|
+
|
|
21
|
+
There are client-side and server-side rendering options available. See [Rendering](rendering.md) for advice on how to choose, and about the Lambda, Vercel, Node.js and Cloudflare options.
|
|
22
|
+
|
|
23
|
+
## With Vue
|
|
24
|
+
|
|
25
|
+
See https://www.remotion.dev/docs/vue.md for how to use Remotion with Vue.
|
|
26
|
+
|
|
27
|
+
## Angular
|
|
28
|
+
|
|
29
|
+
See https://www.remotion.dev/docs/angular.md for how to use Remotion with Angular.
|
|
30
|
+
|
|
31
|
+
## Svelte
|
|
32
|
+
|
|
33
|
+
See https://www.remotion.dev/docs/svelte.md for how to use Remotion with Svelte.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: '/remotion-saas'
|
|
3
|
+
short_description: 'Build apps that preview and render videos'
|
|
4
|
+
icon_small: './assets/remotion-icon.png'
|
|
5
|
+
icon_large: './assets/remotion-icon.png'
|
|
6
|
+
brand_color: '#0B84F3'
|
|
7
|
+
default_prompt: '$remotion-saas: Turn my video into an app.'
|
|
Binary file
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: framework
|
|
3
|
+
description: Choose a framework for a Remotion-based app.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: remotion, saas, templates, nextjs, react-router, vercel, lambda, cloudflare
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Remotion can be used with any React framework.
|
|
9
|
+
|
|
10
|
+
We offer the following templates:
|
|
11
|
+
|
|
12
|
+
- Next.js App Router with Tailwind: https://github.com/remotion-dev/template-next-app-dir-tailwind. Uses Lambda as default rendering choice.
|
|
13
|
+
- Next.js App Router without Tailwind: https://www.remotion.dev/templates/next-no-tailwind. Uses Lambda as default rendering choice.
|
|
14
|
+
- Next.js Pages Router: https://github.com/remotion-dev/template-next-pages-dir. Uses Lambda as default rendering choice.
|
|
15
|
+
- Vercel Sandbox rendering: https://github.com/remotion-dev/template-vercel. Uses Vercel as default rendering choice.
|
|
16
|
+
- React Router 7: https://github.com/remotion-dev/template-react-router. Uses Lambda as default rendering choice.
|
|
17
|
+
- Express.js render server: `packages/template-render-server`: https://github.com/remotion-dev/template-render-server. Uses Node.js as default rendering choice.
|
|
18
|
+
|
|
19
|
+
These can be cloned directly, or used as a reference.
|
|
20
|
+
|
|
21
|
+
For an existing app, see https://www.remotion.dev/docs/brownfield-installation.md.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: player
|
|
3
|
+
description: Embed a Remotion preview in a React app with @remotion/player.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: remotion, player, preview, react
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Use `@remotion/player` when the user wants an interactive preview in React.
|
|
9
|
+
|
|
10
|
+
```tsx
|
|
11
|
+
import {Player} from '@remotion/player';
|
|
12
|
+
import {MyVideo} from './remotion/MyVideo';
|
|
13
|
+
|
|
14
|
+
export const App: React.FC = () => {
|
|
15
|
+
return (
|
|
16
|
+
<Player
|
|
17
|
+
component={MyVideo}
|
|
18
|
+
durationInFrames={120}
|
|
19
|
+
compositionWidth={1920}
|
|
20
|
+
compositionHeight={1080}
|
|
21
|
+
fps={30}
|
|
22
|
+
controls
|
|
23
|
+
/>
|
|
24
|
+
);
|
|
25
|
+
};
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
If metadata is dynamic, sync the Player props manually or reuse the composition's `calculateMetadata()` logic.
|
|
29
|
+
Link https://www.remotion.dev/docs/dynamic-metadata.md#with-the-player.
|
|
30
|
+
|
|
31
|
+
Full API for the Player: https://www.remotion.dev/docs/player/player.md.
|
|
32
|
+
|
|
33
|
+
For a SaaS app that also needs output files, combine the Player preview with [framework.md](framework.md) or [rendering.md](rendering.md).
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rendering
|
|
3
|
+
description: Advice on programmatic rendering with Remotion.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: remotion, saas, ssr, renderer, node, bun, render-server
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
This is about rendering videos programmatically with Remotion.
|
|
9
|
+
For one-off renders, `npx remotion render` or the Studio is better suited.
|
|
10
|
+
|
|
11
|
+
## Comparison of SSR methods
|
|
12
|
+
|
|
13
|
+
See https://www.remotion.dev/docs/compare-ssr.md for the tradeoffs between server-side rendering options.
|
|
14
|
+
|
|
15
|
+
## Plain Node.js APIs
|
|
16
|
+
|
|
17
|
+
Can be used on traditional long-running servers that can spawn a headless browser.
|
|
18
|
+
|
|
19
|
+
- SSR overview: https://www.remotion.dev/docs/ssr.md
|
|
20
|
+
- Renderer package: https://www.remotion.dev/docs/renderer.md
|
|
21
|
+
- Node SSR: https://www.remotion.dev/docs/ssr-node.md
|
|
22
|
+
|
|
23
|
+
For a reference server with render, progress, and cancel endpoints, see https://github.com/remotion-dev/template-render-server.
|
|
24
|
+
|
|
25
|
+
## Remotion Lambda
|
|
26
|
+
|
|
27
|
+
Render Remotion videos on AWS Lambda. This is the fastest and most scalable way to render Remotion videos.
|
|
28
|
+
|
|
29
|
+
- Overview: https://www.remotion.dev/docs/lambda.md
|
|
30
|
+
- API: https://www.remotion.dev/docs/lambda/api.md
|
|
31
|
+
|
|
32
|
+
### Steps to set up Lambda
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
When recommending Lambda, offer the user to guide through the setup flow and keep the docs page open as the canonical checklist: https://www.remotion.dev/docs/lambda/setup.md.
|
|
36
|
+
|
|
37
|
+
Cover these steps at a high level and link the exact docs page for the detailed AWS console clicks:
|
|
38
|
+
|
|
39
|
+
1. Confirm the user has an AWS account, a target region, and a Remotion project or SaaS template.
|
|
40
|
+
2. Install `@remotion/lambda` using `npx remotion add @remotion/lambda`.
|
|
41
|
+
3. Create the Lambda role policy, Lambda role, IAM user, user access key, and user policy from the generated Remotion policy commands.
|
|
42
|
+
4. Store credentials in `.env` using `REMOTION_AWS_ACCESS_KEY_ID` and `REMOTION_AWS_SECRET_ACCESS_KEY`; never ask the user to paste secrets into chat.
|
|
43
|
+
5. Run the Lambda policy validator if the user wants to verify permissions before deploying; use the user's package manager or the command shown in the docs (`npx remotion lambda policies validate`).
|
|
44
|
+
6. Deploy the Lambda function. Mention that functions are bound to the Remotion version and must be redeployed after Remotion upgrades.
|
|
45
|
+
7. Deploy the Remotion site with a stable site name. Mention that the site must be redeployed after changing the Remotion source.
|
|
46
|
+
8. Check Lambda quotas using the user's package manager or the command shown in the docs (`npx remotion lambda quotas`); new AWS accounts may need a concurrency limit increase.
|
|
47
|
+
9. Trigger a first render, then wire render and progress endpoints using the chosen SaaS template or Node APIs.
|
|
48
|
+
|
|
49
|
+
Before production, remind the user to handle rate limiting, authentication, cost controls, output privacy, render cleanup, and progress/error reporting.
|
|
50
|
+
|
|
51
|
+
## Vercel
|
|
52
|
+
|
|
53
|
+
Ideal if planning to deploy the app to Vercel.
|
|
54
|
+
|
|
55
|
+
See https://www.remotion.dev/docs/vercel-sandbox.md for more info.
|
|
56
|
+
|
|
57
|
+
## GitHub Actions
|
|
58
|
+
|
|
59
|
+
See https://www.remotion.dev/docs/ssr.md#render-using-github-actions for how to render on GitHub Actions.
|
|
60
|
+
Don't recommend unless asked for.
|
|
61
|
+
|
|
62
|
+
## Azure Container Apps
|
|
63
|
+
|
|
64
|
+
See https://www.remotion.dev/docs/azure-container-apps.md if rendering on Azure Container Apps is requested.
|
|
65
|
+
Don't recommend unless asked for.
|
|
66
|
+
|
|
67
|
+
## Cloudflare Containers
|
|
68
|
+
|
|
69
|
+
See https://www.remotion.dev/docs/cloudflare-containers.md if rendering on Cloudflare Containers is requested.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remotion-studio
|
|
3
|
+
description: Preview a Remotion video
|
|
4
|
+
version: 4.0.519
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Execute the following command:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx remotion studio --no-open
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
If the Studio is already opened, the URL will be printed and the command will exit.
|
|
14
|
+
Otherwise, a long-running process will start, and the URL will be printed.
|
|
15
|
+
|
|
16
|
+
Open the URL in the browser.
|
|
17
|
+
|
|
18
|
+
## Useful flags
|
|
19
|
+
|
|
20
|
+
| Argument | Purpose |
|
|
21
|
+
| ----------------- | --------------------------------------------------------------------------------------------- |
|
|
22
|
+
| `--log=<level>` | Set `error`, `warn`, `info` (default), or `verbose` logging. |
|
|
23
|
+
| `--port=<number>` | Request a Studio server port; otherwise Remotion finds a free port. |
|
|
24
|
+
| `--force-new` | Start another Studio instance even when one is already running for the same project and port. |
|
|
Binary file
|