dsh-remotion 0.4.1 → 0.6.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/CHANGELOG.md +8 -0
- package/README.en.md +5 -1
- package/README.md +5 -1
- package/docs/USAGE.en.md +4 -0
- package/docs/USAGE.md +4 -0
- package/lib/client.js +9 -3
- package/lib/media-store.d.ts +5 -3
- package/lib/media-store.js +40 -8
- package/lib/media-workbench.js +23 -1
- package/package.json +1 -1
- package/skills/remotion-best-practices/SKILL.md +54 -54
- package/skills/remotion-best-practices/agents/openai.yaml +7 -7
- package/skills/remotion-best-practices/assets/remotion-icon.svg +4 -4
- package/skills/remotion-best-practices/remotion-captions/REFERENCE.md +36 -36
- package/skills/remotion-best-practices/remotion-captions/agents/openai.yaml +7 -7
- package/skills/remotion-best-practices/remotion-captions/assets/remotion-icon.svg +4 -4
- package/skills/remotion-best-practices/remotion-captions/display-captions.md +190 -190
- package/skills/remotion-best-practices/remotion-captions/import-srt-captions.md +73 -73
- package/skills/remotion-best-practices/remotion-captions/transcribe-captions.md +70 -70
- package/skills/remotion-best-practices/remotion-create/REFERENCE.md +85 -85
- package/skills/remotion-best-practices/remotion-create/agents/openai.yaml +7 -7
- package/skills/remotion-best-practices/remotion-create/assets/remotion-icon.svg +4 -4
- package/skills/remotion-best-practices/remotion-create/tailwind.md +11 -11
- package/skills/remotion-best-practices/remotion-create/video-layout.md +9 -9
- package/skills/remotion-best-practices/remotion-docs/REFERENCE.md +46 -46
- package/skills/remotion-best-practices/remotion-docs/agents/openai.yaml +7 -7
- package/skills/remotion-best-practices/remotion-docs/assets/remotion-icon.svg +4 -4
- package/skills/remotion-best-practices/remotion-interactivity/REFERENCE.md +315 -315
- package/skills/remotion-best-practices/remotion-interactivity/agents/openai.yaml +7 -7
- package/skills/remotion-best-practices/remotion-interactivity/assets/remotion-icon.svg +4 -4
- package/skills/remotion-best-practices/remotion-maps/REFERENCE.md +36 -36
- package/skills/remotion-best-practices/remotion-maps/agents/openai.yaml +7 -7
- package/skills/remotion-best-practices/remotion-maps/assets/remotion-icon.svg +4 -4
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -89
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -284
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -299
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/city-path.json +12 -12
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -39
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -35
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -215
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -43
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -128
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -57
- package/skills/remotion-best-practices/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -161
- package/skills/remotion-best-practices/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -449
- package/skills/remotion-best-practices/remotion-maps/techniques/mapbox/references/render-stability.md +64 -64
- package/skills/remotion-best-practices/remotion-maps/techniques/maplibre/TECHNIQUE.md +484 -484
- package/skills/remotion-best-practices/remotion-maps/techniques/maplibre/references/render-stability.md +64 -64
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -80
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -70
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -80
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -363
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -22
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -7535
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -605
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -34
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -91
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -129
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -85
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/references/render-stability.md +64 -64
- package/skills/remotion-best-practices/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -202
- package/skills/remotion-best-practices/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -37
- package/skills/remotion-best-practices/remotion-markup/3d.md +86 -86
- package/skills/remotion-best-practices/remotion-markup/REFERENCE.md +358 -358
- package/skills/remotion-best-practices/remotion-markup/agents/openai.yaml +7 -7
- package/skills/remotion-best-practices/remotion-markup/assets/remotion-icon.svg +4 -4
- package/skills/remotion-best-practices/remotion-markup/audio-visualization.md +198 -198
- package/skills/remotion-best-practices/remotion-markup/audio.md +169 -169
- package/skills/remotion-best-practices/remotion-markup/calculate-metadata.md +136 -136
- package/skills/remotion-best-practices/remotion-markup/compositions.md +123 -123
- package/skills/remotion-best-practices/remotion-markup/connected-compositions.md +79 -79
- package/skills/remotion-best-practices/remotion-markup/cropping.md +34 -34
- package/skills/remotion-best-practices/remotion-markup/effects.md +251 -251
- package/skills/remotion-best-practices/remotion-markup/embedding-videos.md +171 -171
- package/skills/remotion-best-practices/remotion-markup/ffmpeg.md +38 -38
- package/skills/remotion-best-practices/remotion-markup/gifs.md +187 -187
- package/skills/remotion-best-practices/remotion-markup/google-fonts.md +76 -76
- package/skills/remotion-best-practices/remotion-markup/html-in-canvas.md +128 -128
- package/skills/remotion-best-practices/remotion-markup/images.md +73 -73
- package/skills/remotion-best-practices/remotion-markup/light-leaks.md +106 -106
- package/skills/remotion-best-practices/remotion-markup/local-fonts.md +69 -69
- package/skills/remotion-best-practices/remotion-markup/lottie.md +73 -73
- package/skills/remotion-best-practices/remotion-markup/measuring-dom-nodes.md +38 -38
- package/skills/remotion-best-practices/remotion-markup/measuring-text.md +146 -146
- package/skills/remotion-best-practices/remotion-markup/motion-blur.md +60 -60
- package/skills/remotion-best-practices/remotion-markup/multi-scene-video.md +81 -81
- package/skills/remotion-best-practices/remotion-markup/parameters.md +111 -111
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/REFERENCE.md +36 -36
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/agents/openai.yaml +7 -7
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/assets/remotion-icon.svg +4 -4
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -89
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -284
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -299
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -12
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -39
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -35
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -215
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -43
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -128
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -57
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -161
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -449
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -64
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +484 -484
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -64
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -80
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -70
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -80
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -363
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -22
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -7535
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -605
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -34
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -91
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -129
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -85
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -64
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -202
- package/skills/remotion-best-practices/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -37
- package/skills/remotion-best-practices/remotion-markup/sequencing.md +169 -169
- package/skills/remotion-best-practices/remotion-markup/sfx.md +51 -51
- package/skills/remotion-best-practices/remotion-markup/silence-detection.md +71 -71
- package/skills/remotion-best-practices/remotion-markup/text-highlights.md +56 -56
- package/skills/remotion-best-practices/remotion-markup/timing.md +111 -111
- package/skills/remotion-best-practices/remotion-markup/transitions.md +239 -239
- package/skills/remotion-best-practices/remotion-markup/video-editing.md +90 -90
- package/skills/remotion-best-practices/remotion-markup/voiceover.md +99 -99
- package/skills/remotion-best-practices/remotion-multimedia/REFERENCE.md +20 -20
- package/skills/remotion-best-practices/remotion-multimedia/agents/openai.yaml +7 -7
- package/skills/remotion-best-practices/remotion-multimedia/assets/remotion-icon.svg +4 -4
- package/skills/remotion-best-practices/remotion-multimedia/get-audio-duration.md +56 -56
- package/skills/remotion-best-practices/remotion-multimedia/get-video-dimensions.md +66 -66
- package/skills/remotion-best-practices/remotion-multimedia/get-video-duration.md +58 -58
- package/skills/remotion-best-practices/remotion-render/REFERENCE.md +35 -35
- package/skills/remotion-best-practices/remotion-render/agents/openai.yaml +7 -7
- package/skills/remotion-best-practices/remotion-render/assets/remotion-icon.svg +4 -4
- package/skills/remotion-best-practices/remotion-render/transparent-videos.md +106 -106
- package/skills/remotion-best-practices/remotion-saas/REFERENCE.md +33 -33
- package/skills/remotion-best-practices/remotion-saas/agents/openai.yaml +7 -7
- package/skills/remotion-best-practices/remotion-saas/assets/remotion-icon.svg +4 -4
- package/skills/remotion-best-practices/remotion-saas/framework.md +19 -19
- package/skills/remotion-best-practices/remotion-saas/player.md +33 -33
- package/skills/remotion-best-practices/remotion-saas/rendering.md +69 -69
- package/skills/remotion-best-practices/remotion-studio/REFERENCE.md +24 -24
- package/skills/remotion-best-practices/remotion-studio/agents/openai.yaml +7 -7
- package/skills/remotion-best-practices/remotion-studio/assets/remotion-icon.svg +4 -4
- package/skills/remotion-best-practices/remotion-upgrade/REFERENCE.md +31 -31
- package/skills/remotion-best-practices/remotion-upgrade/agents/openai.yaml +7 -7
- package/skills/remotion-best-practices/remotion-upgrade/assets/remotion-icon.svg +4 -4
- package/skills/remotion-captions/SKILL.md +31 -31
- package/skills/remotion-captions/agents/openai.yaml +7 -7
- package/skills/remotion-captions/assets/remotion-icon.svg +4 -4
- package/skills/remotion-captions/display-captions.md +190 -190
- package/skills/remotion-captions/import-srt-captions.md +73 -73
- package/skills/remotion-captions/transcribe-captions.md +70 -70
- package/skills/remotion-create/SKILL.md +80 -80
- package/skills/remotion-create/agents/openai.yaml +7 -7
- package/skills/remotion-create/assets/remotion-icon.svg +4 -4
- package/skills/remotion-create/tailwind.md +11 -11
- package/skills/remotion-create/video-layout.md +9 -9
- package/skills/remotion-docs/SKILL.md +41 -41
- package/skills/remotion-docs/agents/openai.yaml +7 -7
- package/skills/remotion-docs/assets/remotion-icon.svg +4 -4
- package/skills/remotion-interactivity/SKILL.md +310 -310
- package/skills/remotion-interactivity/agents/openai.yaml +7 -7
- package/skills/remotion-interactivity/assets/remotion-icon.svg +4 -4
- package/skills/remotion-maps/SKILL.md +31 -31
- package/skills/remotion-maps/agents/openai.yaml +7 -7
- package/skills/remotion-maps/assets/remotion-icon.svg +4 -4
- package/skills/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -89
- package/skills/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -284
- package/skills/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -299
- package/skills/remotion-maps/techniques/cesium/assets/city-path.json +12 -12
- package/skills/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -39
- package/skills/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -35
- package/skills/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -215
- package/skills/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -43
- package/skills/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -128
- package/skills/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -57
- package/skills/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -161
- package/skills/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -449
- package/skills/remotion-maps/techniques/mapbox/references/render-stability.md +64 -64
- package/skills/remotion-maps/techniques/maplibre/TECHNIQUE.md +484 -484
- package/skills/remotion-maps/techniques/maplibre/references/render-stability.md +64 -64
- package/skills/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -80
- package/skills/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -70
- package/skills/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -80
- package/skills/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -363
- package/skills/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -22
- package/skills/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -7535
- package/skills/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -605
- package/skills/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -34
- package/skills/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -91
- package/skills/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -129
- package/skills/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -85
- package/skills/remotion-maps/techniques/maptiler/references/render-stability.md +64 -64
- package/skills/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -202
- package/skills/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -37
- package/skills/remotion-markup/3d.md +86 -86
- package/skills/remotion-markup/SKILL.md +353 -353
- package/skills/remotion-markup/agents/openai.yaml +7 -7
- package/skills/remotion-markup/assets/remotion-icon.svg +4 -4
- package/skills/remotion-markup/audio-visualization.md +198 -198
- package/skills/remotion-markup/audio.md +169 -169
- package/skills/remotion-markup/calculate-metadata.md +136 -136
- package/skills/remotion-markup/compositions.md +123 -123
- package/skills/remotion-markup/connected-compositions.md +79 -79
- package/skills/remotion-markup/cropping.md +34 -34
- package/skills/remotion-markup/effects.md +251 -251
- package/skills/remotion-markup/embedding-videos.md +171 -171
- package/skills/remotion-markup/ffmpeg.md +38 -38
- package/skills/remotion-markup/gifs.md +187 -187
- package/skills/remotion-markup/google-fonts.md +76 -76
- package/skills/remotion-markup/html-in-canvas.md +128 -128
- package/skills/remotion-markup/images.md +73 -73
- package/skills/remotion-markup/light-leaks.md +106 -106
- package/skills/remotion-markup/local-fonts.md +69 -69
- package/skills/remotion-markup/lottie.md +73 -73
- package/skills/remotion-markup/measuring-dom-nodes.md +38 -38
- package/skills/remotion-markup/measuring-text.md +146 -146
- package/skills/remotion-markup/motion-blur.md +60 -60
- package/skills/remotion-markup/multi-scene-video.md +81 -81
- package/skills/remotion-markup/parameters.md +111 -111
- package/skills/remotion-markup/remotion-maps/REFERENCE.md +36 -36
- package/skills/remotion-markup/remotion-maps/agents/openai.yaml +7 -7
- package/skills/remotion-markup/remotion-maps/assets/remotion-icon.svg +4 -4
- package/skills/remotion-markup/remotion-maps/techniques/cesium/TECHNIQUE.md +89 -89
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/CesiumFlythrough.tsx +284 -284
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/cesium-path.json +299 -299
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/city-path.json +12 -12
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/example-Root.tsx +39 -39
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/flight-path.ts +35 -35
- package/skills/remotion-markup/remotion-maps/techniques/cesium/assets/sample-river.geojson +215 -215
- package/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-data-sources.md +43 -43
- package/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-flyover-architecture.md +128 -128
- package/skills/remotion-markup/remotion-maps/techniques/cesium/references/3d-troubleshooting.md +57 -57
- package/skills/remotion-markup/remotion-maps/techniques/cesium/scripts/prep-cesium-path.mjs +161 -161
- package/skills/remotion-markup/remotion-maps/techniques/mapbox/TECHNIQUE.md +449 -449
- package/skills/remotion-markup/remotion-maps/techniques/mapbox/references/render-stability.md +64 -64
- package/skills/remotion-markup/remotion-maps/techniques/maplibre/TECHNIQUE.md +484 -484
- package/skills/remotion-markup/remotion-maps/techniques/maplibre/references/render-stability.md +64 -64
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/TECHNIQUE.md +80 -80
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/CountryLabel.tsx +70 -70
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/MapTilerVectorElement.ts +80 -80
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/RiverReveal.tsx +363 -363
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/example-Root.tsx +22 -22
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/country-meta.json +7535 -7535
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/sample-data/yarlung-flow.json +605 -605
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/assets/tokens.ts +34 -34
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-data-sources.md +91 -91
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-explainer-architecture.md +129 -129
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/map-geo-prep.md +85 -85
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/references/render-stability.md +64 -64
- package/skills/remotion-markup/remotion-maps/techniques/maptiler/scripts/prep-geo.mjs +202 -202
- package/skills/remotion-markup/remotion-maps/techniques/static-map/TECHNIQUE.md +37 -37
- package/skills/remotion-markup/sequencing.md +169 -169
- package/skills/remotion-markup/sfx.md +51 -51
- package/skills/remotion-markup/silence-detection.md +71 -71
- package/skills/remotion-markup/text-highlights.md +56 -56
- package/skills/remotion-markup/timing.md +111 -111
- package/skills/remotion-markup/transitions.md +239 -239
- package/skills/remotion-markup/video-editing.md +90 -90
- package/skills/remotion-markup/voiceover.md +99 -99
- package/skills/remotion-multimedia/SKILL.md +15 -15
- package/skills/remotion-multimedia/agents/openai.yaml +7 -7
- package/skills/remotion-multimedia/assets/remotion-icon.svg +4 -4
- package/skills/remotion-multimedia/get-audio-duration.md +56 -56
- package/skills/remotion-multimedia/get-video-dimensions.md +66 -66
- package/skills/remotion-multimedia/get-video-duration.md +58 -58
- package/skills/remotion-render/SKILL.md +30 -30
- package/skills/remotion-render/agents/openai.yaml +7 -7
- package/skills/remotion-render/assets/remotion-icon.svg +4 -4
- package/skills/remotion-render/transparent-videos.md +106 -106
- package/skills/remotion-saas/SKILL.md +28 -28
- package/skills/remotion-saas/agents/openai.yaml +7 -7
- package/skills/remotion-saas/assets/remotion-icon.svg +4 -4
- package/skills/remotion-saas/framework.md +19 -19
- package/skills/remotion-saas/player.md +33 -33
- package/skills/remotion-saas/rendering.md +69 -69
- package/skills/remotion-studio/SKILL.md +19 -19
- package/skills/remotion-studio/agents/openai.yaml +7 -7
- package/skills/remotion-studio/assets/remotion-icon.svg +4 -4
- package/skills/remotion-upgrade/SKILL.md +26 -26
- package/skills/remotion-upgrade/agents/openai.yaml +7 -7
- package/skills/remotion-upgrade/assets/remotion-icon.svg +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
[返回简介](README.md) · [使用说明](docs/USAGE.md) · [验证记录](docs/VALIDATION.md)
|
|
4
4
|
|
|
5
|
+
## 0.6.0(2026-10-17)
|
|
6
|
+
|
|
7
|
+
- 设置面板顶部新增「首次使用」分步引导:一次只讲一步,支持上一步/下一步/跳过,看完记在本机不再出现。
|
|
8
|
+
- 引导内容与该插件的实际用法一致;可在开发者工具里清掉 `dsh-first-run:dsh-remotion:v1` 重新查看。
|
|
9
|
+
## 0.5.0 (2026-10-05)
|
|
10
|
+
|
|
11
|
+
- 增加可恢复工程归档,释放当前工程名额并完整保留素材与成品;禁止在另一个实例渲染期间移动工程,保留 Remotion 官方许可证提示。
|
|
12
|
+
|
|
5
13
|
## 0.4.1 (2026-10-03)
|
|
6
14
|
|
|
7
15
|
- 视频工作台后台错误与任务阶段支持英文;切换语言重新展示失败引导,项目文字和原始引擎日志保留原文。
|
package/README.en.md
CHANGED
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
[中文](README.md)
|
|
4
4
|
|
|
5
|
+

|
|
6
|
+
|
|
5
7
|
Bring Remotion React video creation skills into DSH.
|
|
6
8
|
|
|
7
|
-
[](https://www.npmjs.com/package/dsh-remotion) [](https://www.npmjs.com/package/dsh-remotion) [](https://www.npmjs.com/package/dsh-remotion)
|
|
10
|
+
|
|
11
|
+
Feedback and contributions are welcome: report [issues](https://github.com/STARDUSTLC666/dsh-remotion/issues) or submit [pull requests](https://github.com/STARDUSTLC666/dsh-remotion/pulls).
|
|
8
12
|
|
|
9
13
|
## What it does
|
|
10
14
|
|
package/README.md
CHANGED
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.en.md)
|
|
4
4
|
|
|
5
|
+

|
|
6
|
+
|
|
5
7
|
把 Remotion 的 React 视频创作技能接入 DSH。
|
|
6
8
|
|
|
7
|
-
[](https://www.npmjs.com/package/dsh-remotion) [](https://www.npmjs.com/package/dsh-remotion) [](https://www.npmjs.com/package/dsh-remotion)
|
|
10
|
+
|
|
11
|
+
欢迎使用,遇到问题或有改进建议,请提交 [issues](https://github.com/STARDUSTLC666/dsh-remotion/issues) 和 [PR](https://github.com/STARDUSTLC666/dsh-remotion/pulls)。
|
|
8
12
|
|
|
9
13
|
## 功能
|
|
10
14
|
|
package/docs/USAGE.en.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
[Overview](../README.en.md) · [Changelog](../CHANGELOG.md) · [Validation](VALIDATION.md)
|
|
4
4
|
|
|
5
|
+
## Current improvements
|
|
6
|
+
|
|
7
|
+
Save before confirming an archive; restore it from Archived projects. Archives preserve data and disk usage. Up to 30 projects can be active; stop active jobs first.
|
|
8
|
+
|
|
5
9
|
## Installation
|
|
6
10
|
|
|
7
11
|
```bash
|
package/docs/USAGE.md
CHANGED
package/lib/client.js
CHANGED
|
@@ -7,6 +7,8 @@ window.__ModuleLoader__.load({ id: 'dsh-remotion', factory: require => {
|
|
|
7
7
|
const message = typeof error === 'string' ? error : error?.message || String(error || '');
|
|
8
8
|
if (!en || !/[\u3400-\u9fff]/.test(message)) return message;
|
|
9
9
|
if (error?.status === 401) return 'Your session expired. Reopen DSH and try again.';
|
|
10
|
+
if (/先归档|已达 30/.test(message)) return 'The 30 active project slots are full. Archive another project before creating or restoring one.';
|
|
11
|
+
if (/已有预览或渲染/.test(message)) return 'Stop the active preview or cancel the render before archiving or restoring a project.';
|
|
10
12
|
if (error?.status === 409 || /已.*更新|另一窗口|修订/.test(message)) return 'The project changed. Reopen the latest version and compare it with your preserved input.';
|
|
11
13
|
if (/标题/.test(message)) return 'Enter a title up to 72 characters.';
|
|
12
14
|
if (/时长/.test(message)) return 'Set a duration between 3 and 30 seconds.';
|
|
@@ -28,7 +30,7 @@ window.__ModuleLoader__.load({ id: 'dsh-remotion', factory: require => {
|
|
|
28
30
|
}
|
|
29
31
|
function urlFor(project, kind, extra = {}) { const url = new URL(route, document.baseURI); url.search = new URLSearchParams({ id: project.id, kind, ...extra }); return url.href; }
|
|
30
32
|
function Workbench({ locale }) {
|
|
31
|
-
const [lang, setLang] = useState('zh'), [projects, setProjects] = useState([]), [environment, setEnvironment] = useState(null), [templates, setTemplates] = useState([]);
|
|
33
|
+
const [lang, setLang] = useState('zh'), [projects, setProjects] = useState([]), [archived, setArchived] = useState([]), [archiveReview, setArchiveReview] = useState(false), [environment, setEnvironment] = useState(null), [templates, setTemplates] = useState([]);
|
|
32
34
|
const [project, setProject] = useState(cache.project), [fields, setFields] = useState(cache.fields || empty()), [dirty, setDirty] = useState(cache.dirty), [creating, setCreating] = useState(cache.creating);
|
|
33
35
|
const [job, setJob] = useState(cache.job), [busy, setBusy] = useState(false), [error, setError] = useState(''), [notice, setNotice] = useState(''), [pending, setPending] = useState(null), [conflict, setConflict] = useState(false);
|
|
34
36
|
const busyRef = useRef(false), fileRef = useRef(null), latest = useRef({ project, fields, dirty }); latest.current = { project, fields, dirty };
|
|
@@ -38,7 +40,7 @@ window.__ModuleLoader__.load({ id: 'dsh-remotion', factory: require => {
|
|
|
38
40
|
useEffect(() => { cache = { project, fields, dirty, job, creating }; }, [project, fields, dirty, job, creating]);
|
|
39
41
|
useEffect(() => { const exit = e => { if (latest.current.dirty) { e.preventDefault(); e.returnValue = ''; } }; window.addEventListener('beforeunload', exit); return () => window.removeEventListener('beforeunload', exit); }, []);
|
|
40
42
|
async function refresh() {
|
|
41
|
-
const data = await api({ action: 'list' }); setProjects(data.projects); setEnvironment(data.environment); setTemplates(data.templates);
|
|
43
|
+
const data = await api({ action: 'list' }); setProjects(data.projects); setArchived(data.archivedProjects || []); setEnvironment(data.environment); setTemplates(data.templates);
|
|
42
44
|
const current = latest.current, saved = !current.dirty && data.projects.find(row => row.id === current.project?.id);
|
|
43
45
|
if (saved) { setProject(saved); setFields(fieldsOf(saved)); }
|
|
44
46
|
setJob(previous => data.jobs.find(row => row.id === previous?.id) || data.jobs.filter(row => row.state === 'running').at(-1) || data.jobs.at(-1) || null);
|
|
@@ -59,7 +61,7 @@ window.__ModuleLoader__.load({ id: 'dsh-remotion', factory: require => {
|
|
|
59
61
|
return () => { live = false; clearInterval(timer); };
|
|
60
62
|
}, [job?.id, job?.state]);
|
|
61
63
|
async function perform(fn) { if (busyRef.current) return; busyRef.current = true; setBusy(true); setError(''); setNotice(''); try { return await fn(); } catch (e) { setError(e); setConflict(e.status === 409); } finally { busyRef.current = false; setBusy(false); } }
|
|
62
|
-
async function open(id) { const next = await api({ action: 'get', id }); setProject(next); setFields(fieldsOf(next)); setCreating(false); setDirty(false); setConflict(false); setPending(null); }
|
|
64
|
+
async function open(id) { const next = await api({ action: 'get', id }); setProject(next); setFields(fieldsOf(next)); setCreating(false); setDirty(false); setConflict(false); setPending(null); setArchiveReview(false); }
|
|
63
65
|
function navigate(target) { if (dirty) { setPending(target); return; } perform(() => move(target)); }
|
|
64
66
|
async function move(target) { if (target === 'new') { setProject(null); setFields(empty()); setCreating(true); } else if (target === 'list') { setProject(null); setCreating(false); await refresh(); } else await open(target); setDirty(false); setPending(null); }
|
|
65
67
|
async function save() { const next = await api(project ? { action: 'update', id: project.id, revision: project.revision, fields } : { action: 'create', fields }); setProject(next); setFields(fieldsOf(next)); setCreating(false); setDirty(false); setConflict(false); setNotice(t('工程已保存。', 'Project saved.')); await refresh(); return next; }
|
|
@@ -69,12 +71,16 @@ window.__ModuleLoader__.load({ id: 'dsh-remotion', factory: require => {
|
|
|
69
71
|
const response = await fetch(new URL(route + '/upload', document.baseURI), { method: 'POST', credentials: 'same-origin', headers: { 'content-type': 'application/octet-stream', 'x-dsh-media': '1', 'x-project-id': project.id, 'x-project-revision': String(project.revision), 'x-file-name': encodeURIComponent(file.name) }, body: file }); const result = await response.json(); if (!response.ok || !result.ok) { const e = new Error(result.message); e.status = response.status; throw e; } setProject(result.value); setNotice(t('素材副本已保存,原文件未改变。', 'A media copy was saved; your original is unchanged.'));
|
|
70
72
|
}); event.target.value = ''; }
|
|
71
73
|
async function start(action) { await perform(async () => { if (action !== 'prepare' && dirty) throw new Error(t('请先保存修改。', 'Save changes first.')); setJob(await api({ action, id: project?.id, revision: project?.revision })); }); }
|
|
74
|
+
async function archiveProject() { await api({action:'archive',id:project.id,revision:project.revision,confirmed:true}); setArchiveReview(false); setProject(null); setCreating(false); setDirty(false); await refresh(); setNotice(t('工程已归档,素材和成品均保留,可在下方恢复。','Project archived. Media and output are preserved; restore it below.')); }
|
|
72
75
|
const render = project?.renders?.[0], stale = render && render.revision !== project.revision;
|
|
73
76
|
if (!environment) return h('div', { className: 'dmw' }, h('style', null, css), h('h2', null, title + t(' 视频工作台', ' video workbench')),
|
|
74
77
|
error ? h(React.Fragment, null, h('p', { className: 'notice error', role: 'alert' }, mediaError(error, lang === 'en')), h('button', { disabled: busy, onClick: () => perform(refresh) }, t('重新读取项目', 'Reload projects'))) : h('p', { role: 'status' }, t('正在读取工程与渲染环境…', 'Loading projects and render environment…')));
|
|
75
78
|
return h('div', { className: 'dmw' }, h('style', null, css), h('h2', null, title + t(' 视频工作台', ' video workbench')),
|
|
76
79
|
h('p', { className: 'muted' }, t('模板 → 素材 → 官方预览 → 本机 MP4。工程与素材保存在 DSH 本地数据目录。', 'Template → media → official preview → local MP4. Projects stay in the local DSH data folder.')),
|
|
77
80
|
error && h('div', { className: 'notice error', role: 'alert' }, mediaError(error, lang === 'en')), notice && h('div', { className: 'notice', role: 'status' }, notice),
|
|
81
|
+
archived.length > 0 && h('details', { className: 'card' }, h('summary', null, t('已归档工程', 'Archived projects') + ' (' + archived.length + ')'), h('p', {className:'muted'}, t('归档保留素材与成品,不占当前 30 个工程名额。恢复后可以继续编辑。','Archives retain media and output, freeing an active project slot. Restore to edit again.')), archived.map(p => h('div',{className:'bar',key:p.id}, h('strong',null,p.title), h('button',{disabled:busy||dirty||activeJob,onClick:()=>perform(async()=>{await api({action:'restore',id:p.id,revision:p.revision,confirmed:true});await refresh();await open(p.id);setNotice(t('工程已恢复。','Project restored.'))})},t('恢复工程','Restore project'))))),
|
|
82
|
+
project && !creating && h('div',{className:'bar'},h('button',{disabled:busy||dirty||activeJob,onClick:()=>setArchiveReview(true)},t('归档此工程','Archive this project'))),
|
|
83
|
+
project && archiveReview && h('div',{className:'card',role:'alert'},h('p',null,t('归档后将从当前项目列表移走;工程、上传素材和已导出 MP4 全部保留,可随时恢复。未保存修改需先处理。','Archiving removes this project from the active list. The project, uploaded media and exported MP4s are preserved and can be restored. Save or discard pending edits first.')),h('div',{className:'bar'},h('button',{disabled:busy||dirty||activeJob,onClick:()=>perform(archiveProject)},t('确认归档','Confirm archive')),h('button',{disabled:busy,onClick:()=>setArchiveReview(false)},t('取消归档','Cancel archive')))),
|
|
78
84
|
pending && h('div', { className: 'card' }, h('p', null, t('有未保存内容,如何继续?', 'You have unsaved changes.')),
|
|
79
85
|
h('div', { className: 'bar' }, h('button', { disabled: running, onClick: () => perform(async () => { await save(); await move(pending); }) }, t('保存后继续', 'Save and continue')), h('button', { disabled: running, onClick: () => perform(() => move(pending)) }, t('放弃修改并继续', 'Discard and continue')), h('button', { onClick: () => setPending(null) }, t('留在当前', 'Stay here')))),
|
|
80
86
|
conflict && project && h('button', { disabled: running, onClick: () => { setPending(project.id); } }, t('重新打开最新版本(先处理当前输入)', 'Reopen latest version (review your current input first)')),
|
package/lib/media-store.d.ts
CHANGED
|
@@ -7,10 +7,12 @@ export declare class MediaStore {
|
|
|
7
7
|
readonly root: string;
|
|
8
8
|
constructor(engine: MediaEngine, root?: string);
|
|
9
9
|
init(): Promise<void>;
|
|
10
|
-
path(id: string): Promise<string>;
|
|
10
|
+
path(id: string, archived?: boolean): Promise<string>;
|
|
11
11
|
checkPath(path: string): Promise<void>;
|
|
12
|
-
get(id: string): Promise<MediaProject>;
|
|
13
|
-
list(): Promise<MediaProject[]>;
|
|
12
|
+
get(id: string, archived?: boolean): Promise<MediaProject>;
|
|
13
|
+
list(archived?: boolean): Promise<MediaProject[]>;
|
|
14
|
+
/** Move a complete managed project without deleting sources, assets or renders. */
|
|
15
|
+
archive(id: string, revision: unknown, restore?: boolean): Promise<MediaProject>;
|
|
14
16
|
private write;
|
|
15
17
|
create(value: unknown): Promise<MediaProject>;
|
|
16
18
|
edit(id: string, revision: unknown, fn: (p: MediaProject) => Promise<void> | void, bump?: boolean): Promise<MediaProject>;
|
package/lib/media-store.js
CHANGED
|
@@ -16,9 +16,9 @@ export class MediaStore {
|
|
|
16
16
|
root;
|
|
17
17
|
constructor(engine, root) { this.root = resolve(root ?? join(process.env.DSH_HOME || join(homedir(), '.dsh'), 'data', 'dsh-' + engine)); }
|
|
18
18
|
async init() { await mkdir(join(this.root, 'projects'), { recursive: true, mode: 0o700 }); }
|
|
19
|
-
async path(id) {
|
|
19
|
+
async path(id, archived = false) {
|
|
20
20
|
await this.init();
|
|
21
|
-
const dir = join(this.root, 'projects', mediaId(id));
|
|
21
|
+
const dir = join(this.root, archived ? 'archives' : 'projects', mediaId(id));
|
|
22
22
|
if ((await lstat(dir)).isSymbolicLink())
|
|
23
23
|
throw new Error('项目目录不能是符号链接。');
|
|
24
24
|
await this.checkPath(dir);
|
|
@@ -29,8 +29,8 @@ export class MediaStore {
|
|
|
29
29
|
if (rel === '..' || rel.startsWith('..' + (process.platform === 'win32' ? '\\' : '/')) || isAbsolute(rel))
|
|
30
30
|
throw new Error('文件不在本插件项目目录内。');
|
|
31
31
|
}
|
|
32
|
-
async get(id) {
|
|
33
|
-
const file = join(await this.path(id), 'project.json');
|
|
32
|
+
async get(id, archived = false) {
|
|
33
|
+
const file = join(await this.path(id, archived), 'project.json');
|
|
34
34
|
await this.checkPath(file);
|
|
35
35
|
if ((await stat(file)).size > 65536)
|
|
36
36
|
throw new Error('工程记录过大,请保留文件后检查。');
|
|
@@ -47,15 +47,47 @@ export class MediaStore {
|
|
|
47
47
|
mediaId(r.id);
|
|
48
48
|
return p;
|
|
49
49
|
}
|
|
50
|
-
async list() {
|
|
50
|
+
async list(archived = false) {
|
|
51
51
|
await this.init();
|
|
52
52
|
const result = [];
|
|
53
|
-
|
|
53
|
+
const folder = join(this.root, archived ? 'archives' : 'projects');
|
|
54
|
+
const ids = await readdir(folder).catch(error => { if (archived && error.code === 'ENOENT')
|
|
55
|
+
return []; throw error; });
|
|
56
|
+
for (const id of ids) {
|
|
54
57
|
if (/^[0-9a-f-]{36}$/.test(id))
|
|
55
|
-
result.push(await this.get(id));
|
|
58
|
+
result.push(await this.get(id, archived));
|
|
56
59
|
}
|
|
57
60
|
return result.sort((a, b) => b.updated.localeCompare(a.updated));
|
|
58
61
|
}
|
|
62
|
+
/** Move a complete managed project without deleting sources, assets or renders. */
|
|
63
|
+
async archive(id, revision, restore = false) {
|
|
64
|
+
await this.init();
|
|
65
|
+
const unlock = await lockfile.lock(join(this.root, 'projects'), { retries: { retries: 8, minTimeout: 30, maxTimeout: 60 } });
|
|
66
|
+
let release;
|
|
67
|
+
try {
|
|
68
|
+
const source = await this.path(id, restore);
|
|
69
|
+
release = await lockfile.lock(source, { retries: { retries: 8, minTimeout: 30, maxTimeout: 60 } });
|
|
70
|
+
const p = await this.get(id, restore);
|
|
71
|
+
if (revision !== p.revision)
|
|
72
|
+
throw new MediaConflict('工程已更新,请重新读取后再归档或恢复。');
|
|
73
|
+
if (restore && (await this.list()).length >= 30)
|
|
74
|
+
throw new MediaConflict('当前项目已达 30 个,请先归档其他项目再恢复。');
|
|
75
|
+
const folder = join(this.root, restore ? 'projects' : 'archives');
|
|
76
|
+
await mkdir(folder, { recursive: true });
|
|
77
|
+
await this.checkPath(folder);
|
|
78
|
+
const target = join(folder, mediaId(id));
|
|
79
|
+
if (await lstat(target).then(() => true, error => { if (error.code === 'ENOENT')
|
|
80
|
+
return false; throw error; }))
|
|
81
|
+
throw new Error('目标已有同编号工程,已保留两份文件,请先备份检查。');
|
|
82
|
+
await rename(source, target);
|
|
83
|
+
return p;
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
if (release)
|
|
87
|
+
await release();
|
|
88
|
+
await unlock();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
59
91
|
async write(p) {
|
|
60
92
|
const dir = await this.path(p.id), temp = join(dir, randomUUID() + '.tmp');
|
|
61
93
|
try {
|
|
@@ -71,7 +103,7 @@ export class MediaStore {
|
|
|
71
103
|
const unlock = await lockfile.lock(join(this.root, 'projects'), { retries: { retries: 8, minTimeout: 30, maxTimeout: 60 } });
|
|
72
104
|
try {
|
|
73
105
|
if ((await this.list()).length >= 30)
|
|
74
|
-
throw new Error('工作台最多保存 30
|
|
106
|
+
throw new Error('工作台最多保存 30 个当前项目,请先归档现有工程。');
|
|
75
107
|
const p = { ...validateFields(value), id: randomUUID(), revision: 1, updated: new Date().toISOString(), assets: [], renders: [] };
|
|
76
108
|
await mkdir(join(this.root, 'projects', p.id), { mode: 0o700 });
|
|
77
109
|
await this.write(p);
|
package/lib/media-workbench.js
CHANGED
|
@@ -387,7 +387,7 @@ export class MediaWorkbench {
|
|
|
387
387
|
const v = JSON.parse(text);
|
|
388
388
|
switch (v.action) {
|
|
389
389
|
case 'list':
|
|
390
|
-
value = { projects: await this.store.list(), templates: MEDIA_TEMPLATES, environment: await this.environment(), jobs: [...this.jobs.values()].map(j => structuredClone(j.view)) };
|
|
390
|
+
value = { projects: await this.store.list(), archivedProjects: await this.store.list(true), templates: MEDIA_TEMPLATES, environment: await this.environment(), jobs: [...this.jobs.values()].map(j => structuredClone(j.view)) };
|
|
391
391
|
break;
|
|
392
392
|
case 'create':
|
|
393
393
|
value = await this.store.create(v.fields);
|
|
@@ -401,6 +401,28 @@ export class MediaWorkbench {
|
|
|
401
401
|
case 'removeAsset':
|
|
402
402
|
value = await this.store.removeAsset(mediaId(v.id), v.revision, mediaId(v.asset));
|
|
403
403
|
break;
|
|
404
|
+
case 'archive':
|
|
405
|
+
case 'restore': {
|
|
406
|
+
if (v.confirmed !== true)
|
|
407
|
+
throw new Error('请明确确认归档或恢复。');
|
|
408
|
+
// The same slot covers jobs from another DSH process, so a project
|
|
409
|
+
// cannot move while its render or preview still writes into it.
|
|
410
|
+
const slot = join(this.store.root, 'workbench-slot');
|
|
411
|
+
await this.store.init();
|
|
412
|
+
await mkdir(slot, { recursive: true });
|
|
413
|
+
const unlock = await lockfile.lock(slot, { retries: 0, stale: 30000, update: 10000 }).catch(error => {
|
|
414
|
+
if (error.code === 'ELOCKED')
|
|
415
|
+
throw new MediaConflict('已有预览或渲染正在运行,请先关闭预览或取消渲染,再归档或恢复工程。');
|
|
416
|
+
throw error;
|
|
417
|
+
});
|
|
418
|
+
try {
|
|
419
|
+
value = await this.store.archive(mediaId(v.id), v.revision, v.action === 'restore');
|
|
420
|
+
}
|
|
421
|
+
finally {
|
|
422
|
+
await unlock();
|
|
423
|
+
}
|
|
424
|
+
break;
|
|
425
|
+
}
|
|
404
426
|
case 'prepare':
|
|
405
427
|
value = await this.start('prepare');
|
|
406
428
|
break;
|
package/package.json
CHANGED
|
@@ -4,57 +4,57 @@ description: Router for all Remotion skills
|
|
|
4
4
|
version: 4.0.529
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
## Preserve user changes
|
|
9
|
-
|
|
10
|
-
Users may make edits in the code outside of the conversation.
|
|
11
|
-
|
|
12
|
-
If you detect a surprising change made in the meanwhile, don't overwrite it, assume it was intentional or ask for confirmation.
|
|
13
|
-
|
|
14
|
-
## Creating a video
|
|
15
|
-
|
|
16
|
-
If the user asks to make, create, or build a new video or composition, load [Create a new Remotion video](./remotion-create/REFERENCE.md), whether or not a Remotion project already exists.
|
|
17
|
-
|
|
18
|
-
## New project setup
|
|
19
|
-
|
|
20
|
-
If no Remotion project currently exists, load [Create a new Remotion project](./remotion-create/REFERENCE.md)
|
|
21
|
-
|
|
22
|
-
## React Markup Best Practices
|
|
23
|
-
|
|
24
|
-
If you are writing Remotion React Markup, load [Remotion Markup Best Practices](./remotion-markup/REFERENCE.md)
|
|
25
|
-
|
|
26
|
-
## Maps
|
|
27
|
-
|
|
28
|
-
For static maps, animated routes and markers, geographic explainers, Mapbox, MapLibre, MapTiler, GeoJSON, or 3D geographic flyovers, load [Remotion Maps](./remotion-maps/REFERENCE.md).
|
|
29
|
-
|
|
30
|
-
## Multimedia
|
|
31
|
-
|
|
32
|
-
For achieving multimedia tasks in the browser, such as trimming, cropping videos, or getting metadata from them, load [Remotion Multimedia](./remotion-multimedia/REFERENCE.md)
|
|
33
|
-
|
|
34
|
-
## Improving Interactivity
|
|
35
|
-
|
|
36
|
-
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/REFERENCE.md)
|
|
37
|
-
|
|
38
|
-
## Rendering
|
|
39
|
-
|
|
40
|
-
For advanced rendering beyond simple `npx remotion render`, see: [Rendering Best Practices](./remotion-render/REFERENCE.md)
|
|
41
|
-
|
|
42
|
-
## Opening Remotion Studio
|
|
43
|
-
|
|
44
|
-
To launch a project in Remotion Studio, open its exact local URL, or configure Studio CLI flags, load [Remotion Studio](./remotion-studio/REFERENCE.md).
|
|
45
|
-
|
|
46
|
-
## Captions
|
|
47
|
-
|
|
48
|
-
When working with Captions, load [Remotion Captions](./remotion-captions/REFERENCE.md).
|
|
49
|
-
|
|
50
|
-
## Creating a SaaS, automation or application
|
|
51
|
-
|
|
52
|
-
Use the [Remotion SaaS skill](./remotion-saas/REFERENCE.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.
|
|
53
|
-
|
|
54
|
-
## Looking up Remotion APIs and documentation
|
|
55
|
-
|
|
56
|
-
To find and read current Remotion documentation, load [Remotion Docs](./remotion-docs/REFERENCE.md).
|
|
57
|
-
|
|
58
|
-
## Upgrading
|
|
59
|
-
|
|
60
|
-
To upgrade Remotion, related packages, compatible Mediabunny packages, and installed Remotion Agent Skills, load [Remotion Upgrade](./remotion-upgrade/REFERENCE.md).
|
|
7
|
+
|
|
8
|
+
## Preserve user changes
|
|
9
|
+
|
|
10
|
+
Users may make edits in the code outside of the conversation.
|
|
11
|
+
|
|
12
|
+
If you detect a surprising change made in the meanwhile, don't overwrite it, assume it was intentional or ask for confirmation.
|
|
13
|
+
|
|
14
|
+
## Creating a video
|
|
15
|
+
|
|
16
|
+
If the user asks to make, create, or build a new video or composition, load [Create a new Remotion video](./remotion-create/REFERENCE.md), whether or not a Remotion project already exists.
|
|
17
|
+
|
|
18
|
+
## New project setup
|
|
19
|
+
|
|
20
|
+
If no Remotion project currently exists, load [Create a new Remotion project](./remotion-create/REFERENCE.md)
|
|
21
|
+
|
|
22
|
+
## React Markup Best Practices
|
|
23
|
+
|
|
24
|
+
If you are writing Remotion React Markup, load [Remotion Markup Best Practices](./remotion-markup/REFERENCE.md)
|
|
25
|
+
|
|
26
|
+
## Maps
|
|
27
|
+
|
|
28
|
+
For static maps, animated routes and markers, geographic explainers, Mapbox, MapLibre, MapTiler, GeoJSON, or 3D geographic flyovers, load [Remotion Maps](./remotion-maps/REFERENCE.md).
|
|
29
|
+
|
|
30
|
+
## Multimedia
|
|
31
|
+
|
|
32
|
+
For achieving multimedia tasks in the browser, such as trimming, cropping videos, or getting metadata from them, load [Remotion Multimedia](./remotion-multimedia/REFERENCE.md)
|
|
33
|
+
|
|
34
|
+
## Improving Interactivity
|
|
35
|
+
|
|
36
|
+
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/REFERENCE.md)
|
|
37
|
+
|
|
38
|
+
## Rendering
|
|
39
|
+
|
|
40
|
+
For advanced rendering beyond simple `npx remotion render`, see: [Rendering Best Practices](./remotion-render/REFERENCE.md)
|
|
41
|
+
|
|
42
|
+
## Opening Remotion Studio
|
|
43
|
+
|
|
44
|
+
To launch a project in Remotion Studio, open its exact local URL, or configure Studio CLI flags, load [Remotion Studio](./remotion-studio/REFERENCE.md).
|
|
45
|
+
|
|
46
|
+
## Captions
|
|
47
|
+
|
|
48
|
+
When working with Captions, load [Remotion Captions](./remotion-captions/REFERENCE.md).
|
|
49
|
+
|
|
50
|
+
## Creating a SaaS, automation or application
|
|
51
|
+
|
|
52
|
+
Use the [Remotion SaaS skill](./remotion-saas/REFERENCE.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.
|
|
53
|
+
|
|
54
|
+
## Looking up Remotion APIs and documentation
|
|
55
|
+
|
|
56
|
+
To find and read current Remotion documentation, load [Remotion Docs](./remotion-docs/REFERENCE.md).
|
|
57
|
+
|
|
58
|
+
## Upgrading
|
|
59
|
+
|
|
60
|
+
To upgrade Remotion, related packages, compatible Mediabunny packages, and installed Remotion Agent Skills, load [Remotion Upgrade](./remotion-upgrade/REFERENCE.md).
|
|
@@ -1,7 +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.svg'
|
|
5
|
-
icon_large: './assets/remotion-icon.svg'
|
|
6
|
-
brand_color: '#0B84F3'
|
|
7
|
-
default_prompt: '$remotion-best-practices: Make a promo video for my product'
|
|
1
|
+
interface:
|
|
2
|
+
display_name: '/remotion-best-practices'
|
|
3
|
+
short_description: 'Route Remotion tasks to the right workflow'
|
|
4
|
+
icon_small: './assets/remotion-icon.svg'
|
|
5
|
+
icon_large: './assets/remotion-icon.svg'
|
|
6
|
+
brand_color: '#0B84F3'
|
|
7
|
+
default_prompt: '$remotion-best-practices: Make a promo video for my product'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<svg width="100" height="100" viewBox="20 30 363 363" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<title>Remotion</title>
|
|
3
|
-
<path d="M148.332 92.9015C143.307 93.1742 139.259 93.9713 135.179 95.5236C133.144 96.2893 129.809 97.957 127.973 99.1108C120.295 103.925 114.443 111.162 111.391 119.584C110.782 121.252 109.136 126.57 108.076 130.23C101.018 154.7 97.0112 181.456 96.1511 209.776C96.0148 214.286 96.0148 225.026 96.1511 229.463C96.728 248.237 98.5216 265.187 101.773 282.472C103.095 289.468 105.213 298.866 106.44 303.135C108.947 311.809 114.065 319.193 121.344 324.605C126.221 328.234 131.759 330.668 137.895 331.863C140.853 332.44 144.755 332.702 147.629 332.514C151.604 332.251 159.491 331.192 165.9 330.049C194.786 324.899 221.469 315.679 245.666 302.485C260.99 294.125 274.09 285.074 286.729 274.092C299.326 263.163 310.066 251.405 319.516 238.21C321.708 235.158 322.81 233.375 323.911 231.131C326.743 225.341 328.075 219.583 328.064 213.143C328.064 207.143 326.932 201.815 324.488 196.361C323.313 193.728 322.191 191.84 319.674 188.253C310.402 175.048 300.112 163.542 287.568 152.361C268.122 135.034 245.026 120.822 219.235 110.302C213.644 108.026 208.138 106.022 201.509 103.851C187.475 99.2681 170.106 95.2929 155.411 93.3105C153.104 92.9959 149.968 92.8176 148.332 92.9015Z" fill="#0B84F3"/>
|
|
4
|
-
</svg>
|
|
1
|
+
<svg width="100" height="100" viewBox="20 30 363 363" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<title>Remotion</title>
|
|
3
|
+
<path d="M148.332 92.9015C143.307 93.1742 139.259 93.9713 135.179 95.5236C133.144 96.2893 129.809 97.957 127.973 99.1108C120.295 103.925 114.443 111.162 111.391 119.584C110.782 121.252 109.136 126.57 108.076 130.23C101.018 154.7 97.0112 181.456 96.1511 209.776C96.0148 214.286 96.0148 225.026 96.1511 229.463C96.728 248.237 98.5216 265.187 101.773 282.472C103.095 289.468 105.213 298.866 106.44 303.135C108.947 311.809 114.065 319.193 121.344 324.605C126.221 328.234 131.759 330.668 137.895 331.863C140.853 332.44 144.755 332.702 147.629 332.514C151.604 332.251 159.491 331.192 165.9 330.049C194.786 324.899 221.469 315.679 245.666 302.485C260.99 294.125 274.09 285.074 286.729 274.092C299.326 263.163 310.066 251.405 319.516 238.21C321.708 235.158 322.81 233.375 323.911 231.131C326.743 225.341 328.075 219.583 328.064 213.143C328.064 207.143 326.932 201.815 324.488 196.361C323.313 193.728 322.191 191.84 319.674 188.253C310.402 175.048 300.112 163.542 287.568 152.361C268.122 135.034 245.026 120.822 219.235 110.302C213.644 108.026 208.138 106.022 201.509 103.851C187.475 99.2681 170.106 95.2929 155.411 93.3105C153.104 92.9959 149.968 92.8176 148.332 92.9015Z" fill="#0B84F3"/>
|
|
4
|
+
</svg>
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: remotion-captions
|
|
3
|
-
description: Transcribing, displaying and animating captions
|
|
4
|
-
version: 4.0.529
|
|
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.
|
|
1
|
+
---
|
|
2
|
+
name: remotion-captions
|
|
3
|
+
description: Transcribing, displaying and animating captions
|
|
4
|
+
version: 4.0.529
|
|
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.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
interface:
|
|
2
|
-
display_name: '/remotion-captions'
|
|
3
|
-
short_description: 'Transcribe, display, and animate captions'
|
|
4
|
-
icon_small: './assets/remotion-icon.svg'
|
|
5
|
-
icon_large: './assets/remotion-icon.svg'
|
|
6
|
-
brand_color: '#0B84F3'
|
|
7
|
-
default_prompt: '$remotion-captions: Transcribe my video and display captions'
|
|
1
|
+
interface:
|
|
2
|
+
display_name: '/remotion-captions'
|
|
3
|
+
short_description: 'Transcribe, display, and animate captions'
|
|
4
|
+
icon_small: './assets/remotion-icon.svg'
|
|
5
|
+
icon_large: './assets/remotion-icon.svg'
|
|
6
|
+
brand_color: '#0B84F3'
|
|
7
|
+
default_prompt: '$remotion-captions: Transcribe my video and display captions'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<svg width="100" height="100" viewBox="20 30 363 363" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<title>Remotion</title>
|
|
3
|
-
<path d="M148.332 92.9015C143.307 93.1742 139.259 93.9713 135.179 95.5236C133.144 96.2893 129.809 97.957 127.973 99.1108C120.295 103.925 114.443 111.162 111.391 119.584C110.782 121.252 109.136 126.57 108.076 130.23C101.018 154.7 97.0112 181.456 96.1511 209.776C96.0148 214.286 96.0148 225.026 96.1511 229.463C96.728 248.237 98.5216 265.187 101.773 282.472C103.095 289.468 105.213 298.866 106.44 303.135C108.947 311.809 114.065 319.193 121.344 324.605C126.221 328.234 131.759 330.668 137.895 331.863C140.853 332.44 144.755 332.702 147.629 332.514C151.604 332.251 159.491 331.192 165.9 330.049C194.786 324.899 221.469 315.679 245.666 302.485C260.99 294.125 274.09 285.074 286.729 274.092C299.326 263.163 310.066 251.405 319.516 238.21C321.708 235.158 322.81 233.375 323.911 231.131C326.743 225.341 328.075 219.583 328.064 213.143C328.064 207.143 326.932 201.815 324.488 196.361C323.313 193.728 322.191 191.84 319.674 188.253C310.402 175.048 300.112 163.542 287.568 152.361C268.122 135.034 245.026 120.822 219.235 110.302C213.644 108.026 208.138 106.022 201.509 103.851C187.475 99.2681 170.106 95.2929 155.411 93.3105C153.104 92.9959 149.968 92.8176 148.332 92.9015Z" fill="#0B84F3"/>
|
|
4
|
-
</svg>
|
|
1
|
+
<svg width="100" height="100" viewBox="20 30 363 363" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<title>Remotion</title>
|
|
3
|
+
<path d="M148.332 92.9015C143.307 93.1742 139.259 93.9713 135.179 95.5236C133.144 96.2893 129.809 97.957 127.973 99.1108C120.295 103.925 114.443 111.162 111.391 119.584C110.782 121.252 109.136 126.57 108.076 130.23C101.018 154.7 97.0112 181.456 96.1511 209.776C96.0148 214.286 96.0148 225.026 96.1511 229.463C96.728 248.237 98.5216 265.187 101.773 282.472C103.095 289.468 105.213 298.866 106.44 303.135C108.947 311.809 114.065 319.193 121.344 324.605C126.221 328.234 131.759 330.668 137.895 331.863C140.853 332.44 144.755 332.702 147.629 332.514C151.604 332.251 159.491 331.192 165.9 330.049C194.786 324.899 221.469 315.679 245.666 302.485C260.99 294.125 274.09 285.074 286.729 274.092C299.326 263.163 310.066 251.405 319.516 238.21C321.708 235.158 322.81 233.375 323.911 231.131C326.743 225.341 328.075 219.583 328.064 213.143C328.064 207.143 326.932 201.815 324.488 196.361C323.313 193.728 322.191 191.84 319.674 188.253C310.402 175.048 300.112 163.542 287.568 152.361C268.122 135.034 245.026 120.822 219.235 110.302C213.644 108.026 208.138 106.022 201.509 103.851C187.475 99.2681 170.106 95.2929 155.411 93.3105C153.104 92.9959 149.968 92.8176 148.332 92.9015Z" fill="#0B84F3"/>
|
|
4
|
+
</svg>
|