npx skills add ...
npx skills add remotion-dev/remotion --skill add-effect
Add a new effect to @remotion/effects, including implementation, package exports, docs, demos, preview images, Remotion skill updates, tests, formatting, and builds.
npx skills add remotion-dev/remotion --skill add-effect
@remotion/effects effectUse this skill when adding a new effect to @remotion/effects.
packages/effects/src/<effect-name>.ts for simple effects.packages/effects/src/<effect-name>/ plus a top-level re-export file when the effect needs multiple shaders, runtime helpers, or multiple files.chromatic-aberration)chromaticAberration)ChromaticAberrationParams)remotion/<kebab-case-name>In the effect file:
SequenceSchema and Internals from remotion.const {createEffect, createWebGL2ContextError} = Internals;.const values.satisfies SequenceSchema; these fields appear in Studio visual editing.resolve() helper.packages/effects/src/validate-effect-param.tspackages/effects/src/color-utils.tscreateWebGL2ContextError('<effect name> effect') if WebGL2 cannot be acquired.documentationLink to https://www.remotion.dev/docs/effects/<slug>.calculateKey().For WebGL2 effects, use this general structure:
Look at existing WebGL2 effects such as halftone.ts,
blur/blur-runtime.ts, chromatic-aberration/chromatic-aberration-runtime.ts,
and wave/wave-runtime.ts before adding new helpers. In the template above,
createMyEffectState() stands for the shader compilation, program linking,
fullscreen-quad, texture, and uniform-location setup used by those files.
Update:
packages/effects/bundle.ts — add the new src/<effect-name>.ts entrypoint.packages/effects/package.json:
exports["./<effect-name>"].typesVersions entry.If using a folder implementation, add a top-level file that re-exports from the folder:
Update packages/effects/src/test/effect-params.test.ts:
effectKey values.Run:
Create packages/docs/docs/effects/<effect-name>.mdx.
Follow existing effect pages:
slug, title, sidebar_label, crumb: '@remotion/effects'.image: only after running bun render-cards.ts.# effectName()<AvailableFrom v="..." />._Part of the [@remotion/effects](/docs/effects/api) package._.<EffectsDemo type="effects-<effect-name>" />.title="MyComp.tsx".### heading, using ? for optional parameters.disabled? section.Update:
packages/docs/sidebars.ts — add 'effects/<effect-name>' in alphabetical order.packages/docs/docs/effects/table-of-contents.tsx — add a card in the right category.packages/docs/src/data/articles.ts by running the card generator, not by hand.Use the writing-docs skill for documentation wording.
Create packages/docs/components/effects/effects-<effect-name>-preview.tsx.
Use the same preview source as other effects:
Use fit="cover" for docs effect previews so the shared preview image fills
the 16:9 canvas and does not leave transparent bars.
Register the demo in packages/docs/components/effects-demos/registry.ts:
effect().definition.schema).id: 'effects-<effect-name>'.initialValues only for required fields whose schema default is undefined.Use the docs-demo skill for demo details.
The TOC card must come from a real Remotion composition in packages/docs, not a hand-written asset.
Always render preview assets as PNG files.
Add a Still to packages/docs/src/remotion/Root.tsx under the effect-previews folder:
Use the same width and height as the preview component's CanvasImage.
If the preview component uses the shared docs preview image, keep
fit="cover" on CanvasImage. Rendering a 16:9 preview component into a
different aspect ratio can leave black bars in the generated TOC image.
Then render from packages/docs:
Commit both:
packages/docs/src/remotion/Root.tsxpackages/docs/static/img/Run:
Commit the generated packages/docs/static/generated/articles-docs-effects-<effect-name>.png and the new image: frontmatter line.
If render-cards.ts opportunistically generates unrelated missing cards, remove those unrelated files unless they belong to the current change.
Keep the agent-facing Remotion skill in sync with the new effect.
Update packages/skills/skills/remotion-markup/effects.md only if the new effect changes general usage mechanics, import conventions, installation guidance, or custom-effect recommendations. Do not duplicate the full effect list there; use the docs table of contents as the canonical list.
Run:
If the change touches docs source, bun run formatting covers packages/docs/src. For MDX-only edits, do not run formatters on docs pages.
Before committing, check:
package.json exports and typesVersions; subpath imports like @remotion/effects/my-effect depend on them.bundle.ts; otherwise the ESM subpath will not be built.packages/docs/src/remotion.