/remotion-interactivity
Structure Remotion markup for interactivity
Claude Code
$ npx -y skills add remotion-dev/skills --skill remotion-interactivity --agent claude-code
Codex
$ npx skills add remotion-dev/skills --skill remotion-interactivity -a codex -y
Cursor
$ npx skills add remotion-dev/skills --skill remotion-interactivity -a cursor -y
Gemini CLI
$ npx skills add remotion-dev/skills --skill remotion-interactivity -a gemini-cli -y
GitHub Copilot
$ npx skills add remotion-dev/skills --skill remotion-interactivity -a github-copilot -y
OpenCode
$ npx skills add remotion-dev/skills --skill remotion-interactivity -a opencode -y
Windsurf
$ npx skills add remotion-dev/skills --skill remotion-interactivity -a windsurf -y
SKILL.md
remotion-interactivity.SKILL.mdname: remotion-interactivity
description: Structures Remotion markup so layers, timing and styles are editable in Remotion Studio. Use when writing a new composition or restructuring existing markup.
version: 4.0.543
Make markup editable in Studio by default. Keep a part programmatic only if it is generated from external data or computed per frame, and tell the user it won't be editable. Text you write yourself is not external data.
Studio edits the JSX nodes that create timeline items. Structure the code around what the user should be able to select, move, trim, or style independently. Keep editable values inline on each instance.
Before writing a scene or refactoring its layers, read [editable timeline structure](timeline-structure.md). It covers editing units, tracks, shared timing, plain layout containers, and a complete component-to-root example. For a timeline built from footage, also read editable video timelines (`video-editing.md` in the `remotion-markup` skill).
Use connected compositions (`connected-compositions.md` in the `remotion-markup` skill) when a scene or reusable group needs its own timeline. Validate both its standalone view and the full parent timeline; a connection alone does not guarantee fewer visible rows.
Choose schema fields
Each key in the schema is a prop that Studio can read and edit at the call site. Props that are not in the schema still work, but are not editable in Studio. Keys may use dot notation, such as `style.color`.
| Type | Use for | Keyframable | | ---------------------------------------------------------------------------- | ------------------------------------------------------------ | ------------- | | `string` | Strings, such as a title, prompt, or code snippet | No | | `number` | Numbers, with optional `min`, `max`, `step`, `integer` | Yes | | `boolean` | On/off switches | Yes (hold) | | `color` | CSS color strings | Yes | | `enum` | A choice between `variants`, each with its own nested schema | Opt-in (hold) | | `array` | Lists of numbers, colors, enums and more | No | | `asset` | Media sources, with optional `assetType` | No | | `font-family` | CSS font family | No | | `font-weight` | Font weight | Yes | | `translate`, `scale`, `rotation-css`, `rotation-degrees`, `transform-origin` | Transforms | Yes | | `uv-coordinate` | A normalized `[x, y]` point on the element | Yes | | `svg-path` | SVG path data | Yes | | `remotion-captions` | `Caption[]` data | No | | `hidden` | A value kept out of the controls | — |
Every field needs a `default` and should have a `description`, which Studio shows as the label. Set `keyframable: false` to show a static control.
Expose content and per-instance appearance, such as the text and an accent color. Do not add fields for `style.translate`, `style.scale`, `style.rotate`, `style.transformOrigin` and `style.opacity`: `Interactive.create()` adds them automatically.
To make CSS properties of the root editable per instance, spread the built-in schema fragments:
const cardSchema = {
...Interactive.textSchema, // style.color, style.fontSize, style.fontWeight, ...
...Interactive.backgroundSchema, // style.backgroundColor
...Interactive.borderRadiusSchema, // style.borderRadius, ...
} as const satisfies InteractivitySchema;Also available: `Interactive.borderSchema`, and `Interactive.captionsSchema` for components that accept captions. For components that accept `React.ReactNode` children, add `...Interactive.childrenSchema`. It provides controls for children content and may evolve to support richer content. Currently, it uses a string field labeled "Text" with a default of `''`. If a component requires string-only children, declare an explicit `children` field with `type: 'string'` instead. `Interactive.textSchema` controls typography styles; `childrenSchema` controls content. The children fragment is not included in `baseSchema` or automatically added to custom components. Nested markup and computed children are currently read-only. `text-content` is a deprecated alias for the `string` field type. See [`InteractivitySchema`](https://www.remotion.dev/docs/interactivity-schema) for all options.
Make an HTML element interactive using `Interactive`
Every HTML and SVG element (except `<Img>`, it already is interactive) such as `<div>` can be turned interactive using `Interactive`:
<Interactive.Div
name="Greeting card"
style=
Read more
name: remotion-interactivity description: Structures Remotion markup so layers, timing and styles are editable in Remotion Studio. Use when writing a new composition or restructuring existing markup. version: 4.0.543
Make markup editable in Studio by default. Keep a part programmatic only if it is generated from external data or computed per frame, and tell the user it won't be editable. Text you write yourself is not external data.
Studio edits the JSX nodes that create timeline items. Structure the code around what the user should be able to select, move, trim, or style independently. Keep editable values inline on each instance.
Before writing a scene or refactoring its layers, read [editable timeline structure](timeline-structure.md). It covers editing units, tracks, shared timing, plain layout containers, and a complete component-to-root example. For a timeline built from footage, also read editable video timelines (`video-editing.md` in the `remotion-markup` skill).
Use connected compositions (`connected-compositions.md` in the `remotion-markup` skill) when a scene or reusable group needs its own timeline. Validate both its standalone view and the full parent timeline; a connection alone does not guarantee fewer visible rows.
Choose schema fields
Each key in the schema is a prop that Studio can read and edit at the call site. Props that are not in the schema still work, but are not editable in Studio. Keys may use dot notation, such as `style.color`.
| Type | Use for | Keyframable | | ---------------------------------------------------------------------------- | ------------------------------------------------------------ | ------------- | | `string` | Strings, such as a title, prompt, or code snippet | No | | `number` | Numbers, with optional `min`, `max`, `step`, `integer` | Yes | | `boolean` | On/off switches | Yes (hold) | | `color` | CSS color strings | Yes | | `enum` | A choice between `variants`, each with its own nested schema | Opt-in (hold) | | `array` | Lists of numbers, colors, enums and more | No | | `asset` | Media sources, with optional `assetType` | No | | `font-family` | CSS font family | No | | `font-weight` | Font weight | Yes | | `translate`, `scale`, `rotation-css`, `rotation-degrees`, `transform-origin` | Transforms | Yes | | `uv-coordinate` | A normalized `[x, y]` point on the element | Yes | | `svg-path` | SVG path data | Yes | | `remotion-captions` | `Caption[]` data | No | | `hidden` | A value kept out of the controls | — |
Every field needs a `default` and should have a `description`, which Studio shows as the label. Set `keyframable: false` to show a static control.
Expose content and per-instance appearance, such as the text and an accent color. Do not add fields for `style.translate`, `style.scale`, `style.rotate`, `style.transformOrigin` and `style.opacity`: `Interactive.create()` adds them automatically.
To make CSS properties of the root editable per instance, spread the built-in schema fragments:
const cardSchema = {
...Interactive.textSchema, // style.color, style.fontSize, style.fontWeight, ...
...Interactive.backgroundSchema, // style.backgroundColor
...Interactive.borderRadiusSchema, // style.borderRadius, ...
} as const satisfies InteractivitySchema;Also available: `Interactive.borderSchema`, and `Interactive.captionsSchema` for components that accept captions. For components that accept `React.ReactNode` children, add `...Interactive.childrenSchema`. It provides controls for children content and may evolve to support richer content. Currently, it uses a string field labeled "Text" with a default of `''`. If a component requires string-only children, declare an explicit `children` field with `type: 'string'` instead. `Interactive.textSchema` controls typography styles; `childrenSchema` controls content. The children fragment is not included in `baseSchema` or automatically added to custom components. Nested markup and computed children are currently read-only. `text-content` is a deprecated alias for the `string` field type. See [`InteractivitySchema`](https://www.remotion.dev/docs/interactivity-schema) for all options.
Make an HTML element interactive using `Interactive`
Every HTML and SVG element (except `<Img>`, it already is interactive) such as `<div>` can be turned interactive using `Interactive`:
<Interactive.Div name="Greeting card" style=
Remotion maintains a list of Agent Skills that define best practices for working in Remotion projects. These skills are useful for AI agents like Claude Code, Codex, Kimi Code or Cursor.
Other skills on skills.
remotion-license
Find Remotion license information, FAQs, terms, and where to buy a license.
More skills from other plugins.
captions-overlay
Overlay doctrine for captions in HyperFrames videos — the caption MODEL (drop / rail / embed) and the rule that captions are an…
acestep
AI music generation with ACE-Step 1.5 — background music, vocal tracks, covers, stem extraction for video production. Use when…
seedance-antislop
This skill should be used when a Seedance 2.0 prompt contains generic AI filler, hollow superlatives, vague cinematic language,…
Questions about remotion-interactivity.
- Which coding agents can use remotion-interactivity?
- remotion-interactivity installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

