visual-mode

$npx mdskill add remotion-dev/remotion/visual-mode

Guides implementing and debugging Remotion Studio Visual Mode sequence editing.

  • Solves tracking sequence identity across hot reloads and file changes.
  • Depends on overrideId, nodePath, symbolicated stacks, and Remotion Studio internals.
  • Decides identity by reusing overrideId for shared stacks and mapping nodePath.
  • Delivers rules for stable identity and efficient nodePath fetching.

SKILL.md

.github/skills/visual-modeView on GitHub ↗
---
name: visual-mode
description: Guidance for working on Remotion Studio Visual Mode, sequence identity, node paths, symbolicated stacks, override IDs, and hot reload behavior. Use when implementing or debugging visual editing of Sequences.
---

Visual Mode is a feature in Remotion Studio that allows one to visually edit Sequences.

I've made the following observations:

## Fields

- overrideId -> does keep the identity the same of a sequence, even if the file / line / column changes
- Sequence `stack` -> changes on hot reload. shared by multiple sequences which have different overrideIds
- Sequence file, line, column (symbolicated stack) -> does not change, but needs to be calculated asyn
- `nodePath` -> same identity, even if line, stack and overrideId changes. async

nodePath + index is ideal way to keep track of the expanded state. that’s the end goal.

Once nodePath is mapped to `overrideId`, it doesn’t change otherwise component would remount and overrideId works change.

If the same `stack` is found already used by another sequence, we re-use the `overrideId`.

`nodePath` to symbolicated stack could theoretically change on every file change. but multiple sequences can share the same stack and then they all have the same nodePath.

We should only fetch the nodepath for every stack once

different unsymbolicated stacks could lead to the same symbolicated stack, because of fast refresh

unsymbolicated to symbolicated stack does never change because if it does, it is a different stack due to fast refresh

## Browser Studio route tracking

Whenever adding a new Studio API route, also add it to the Browser Studio parity checklist in [issue #9807](https://github.com/remotion-dev/remotion/issues/9807). Do this in the same change, even if the route is intentionally server-only; place it in either the required Browser Studio operations or the explicitly unsupported routes.

More from remotion-dev/remotion

SkillDescription
add-bugAdd a new Remotion bug entry to packages/bugs/api/[v].ts. Use when the user describes a bug and affected Remotion versions that should be surfaced through the bugs API.
add-cli-optionAdd a new Remotion CLI or config option by creating an AnyRemotionOption, registering CLI parsing, wiring config setters, and updating documentation. Use when adding or converting command-line flags or Remotion options.
add-effectAdd a new effect to @remotion/effects, including implementation, package exports, docs, demos, preview images, Remotion skill updates, formatting, and builds.
add-expertAdd a new expert to the Remotion experts page
add-new-packageAdd a new package to the Remotion monorepo, including package scaffolding, monorepo registration, documentation, build scripts, and release checklist updates. Use when creating a new @remotion package.
add-sfxAdd a new sound effect to @remotion/sfx
add-webcodecs-bugAdd a browser WebCodecs bug to the Remotion Mediabunny WebCodecs bugs docs page. Use when given a Chromium, WebKit, or Firefox issue URL that should be tracked in packages/docs/docs/mediabunny/webcodecs-bugs.mdx, especially when needing to look up the issue title, filing date, reporter, and resolution state before editing the MDX table.
canvas-capture-extensionRebuild, install, and reload the private Remotion Canvas Capture unpacked Chrome extension. Use when the extension needs to be restored after a Codex worktree was deleted, rebuilt after source changes, moved to its durable install directory, or reloaded in Chrome or Chrome Canary.
checkoutCheckout a requested branch or ref in the Remotion repo, rename the current task to the associated PR title when running in Codex, then install dependencies and build. Use when the user asks to checkout a ref and prepare the workspace.
convertStart the local @remotion/convert app and open it in the Codex browser. Use when the user invokes /convert or $convert, asks to launch convert.remotion.dev locally, or wants to inspect the Convert package UI.