studio-loop

$npx mdskill add remotion-dev/remotion/studio-loop

Own the Studio experience: make it quick, responsive, and reliable. Continue making a real YouTube video combining NLE editing and motion graphics, using that workflow to discover and fix problems. Apply [studio-dev](../studio-dev/SKILL.md) to every implementation change.

SKILL.md

.github/skills/studio-loopView on GitHub ↗
---
name: studio-loop
description: Continuously improve Remotion Studio by making a video, reproducing real UX and performance issues, fixing them, and verifying the result. Use for ongoing Studio dogfooding and maintenance, including checkpoints that hand one PR over for review while work continues in a stacked PR.
---

# Studio improvement loop

Own the Studio experience: make it quick, responsive, and reliable. Continue
making a real YouTube video combining NLE editing and motion graphics, using
that workflow to discover and fix problems. Apply
[studio-dev](../studio-dev/SKILL.md) to every implementation change.

The Source start Inspector field was intentionally removed; do not reintroduce it.

## Resume the project and browser

- Recover the existing worktree, branch/PR or stack, local video project, running
  Studio, browser session, and handoff notes. Continue that project instead of
  starting another demo each iteration. Preserve unrelated changes and local QA
  assets; do not commit the video project or exports unless requested.
- Inspect Git state and setup instructions as needed, but **use Studio before
  analyzing its implementation**. Reuse a server only when its worktree and URL
  are known. Otherwise start Studio from `packages/example` with
  `bunx remotion studio --no-open` and use the URL it prints, rather than assuming
  port 3000 belongs to this checkout. Build/install dependencies if needed.
- **Do not ask the user to unlock the Mac.** Use an existing usable browser
  session, or launch a fresh headless Playwright browser for local Studio when
  desktop/browser UI access is unavailable. This workflow does not depend on
  the Mac being unlocked. Keep browser tooling separate from product changes.
- Exercise the real UI through clicks, keyboard input, drag/drop, file upload,
  and screenshots. Use actual registered WebMCP tools for state/readback and
  supported actions, and direct project edits where appropriate. Do not replace
  the UI pass with source inspection or mocked behavior. If browser execution
  fails, diagnose the headless setup and report any remaining verification gap;
  do not treat an automation failure as a Studio bug. If UI verification remains
  blocked, keep affected work in draft and report the gap instead of claiming a
  verified checkpoint. Continue independent work that does not depend on it.

## Work in a loop

1. Continue an actual editing task. Prioritize common workflows: import and
   preview media, arrange/trim/split clips, edit text and transforms, add motion
   graphics and audio, scrub/play, undo/redo, save/reload, then render and review
   the exported video. Vary the next task based on what has already been covered.
2. When an issue appears, capture a reproducible interaction and the expected
   result before inspecting the relevant implementation. Capture a relevant
   performance baseline before changing code. Look for slow feedback,
   missing optimistic paths, flicker, confusing copy/errors, layout mistakes,
   failed codemods, races, and unnecessary work. Check the persisted source and
   visible result rather than assuming a successful request means a correct edit.
3. Fix the observed problem. Internal refactors are allowed, but keep the
   signatures of public APIs with non-experimental documentation stable. Follow
   Studio's existing design, optimistic/history paths, CSS reset, iframe hover
   handling, and mode capabilities. Code-editable actions already provide agentic
   access; do not add redundant WebMCP wrappers. Document any new tools or changed
   tool contracts as required by studio-dev.
4. Repeat the original interaction in the rebuilt UI. Verify immediate feedback,
   persistence/HMR, relevant failure/navigation races, and undo/redo. Cover the
   applicable Studio modes, using a real Browser Studio iframe for changes that
   depend on embedding. Recheck neighboring common actions affected by the fix.
5. Repeat the performance measurement with a comparable project, viewport,
   interaction, and playback state. Verify playback actually started; avoid
   concurrent builds/renders during measurements. Follow
   [studio-perf](../studio-perf/SKILL.md) and use
   [react-scan](../react-scan/SKILL.md) when render/commit work is relevant. Resolve
   regressions, and report measurement limits rather than claiming broad coverage.
6. Run affected existing checks and the verification required by
   [pr](../pr/SKILL.md). Follow [writing-tests](../writing-tests/SKILL.md): do not add
   repository test cases unless explicitly requested. Temporary reproduction and
   profiling scripts may be kept outside the repository.
7. Commit and push verified production changes to the active PR, keeping its title
   and description current. Keep using that PR across iterations until the user
   asks for a checkpoint or a different PR. Return to making the video and repeat;
   a successful fix or a progress report is not a request to stop the loop.

Delegate independent reproduction, review, or bounded implementation work when
useful. Give each implementation owner separate files, and coordinate builds and
browser sessions so they do not invalidate another measurement or edit.

## Checkpoints and review

Treat “checkpoint”, “let me review this PR”, or “stack the next batch” as a request
to hand off a stable review boundary **and continue working**, unless the user
also asks to pause or stop.

1. Finish the current bounded fix and its verification. Do not expand the batch.
   Preserve unfinished or unrelated work for the next layer instead of including
   partial changes in the checkpoint. Stage only the intended production hunks,
   inspect the staged diff, and preserve excluded hunks even within the same file.
   Local QA dirt is not a reason to discard the project or delay the checkpoint.
2. Commit/push the batch, update its PR description with behavior, validation,
   performance results and known limits, and mark the PR ready for review with
   `gh pr ready` if it is a draft. Share the PR link and exact checkpoint commit.
   Report pending/failing CI honestly; do not call it green before checks finish.
3. Freeze that PR's scope for review. Follow [gh-stack](../gh-stack/SKILL.md) to
   adopt an existing branch if needed and create the next layer before making
   further changes. Base the new layer on the checkpoint branch so its PR shows
   only subsequent work. Open a draft PR when the next layer has verified changes,
   and keep that batch in the same PR until the next checkpoint. Without force-push
   authorization, publish with normal `git push`, `gh pr create`/`edit`, and
   `gh stack link` using PR numbers; do not invoke stack commands that force-push.
4. Continue the same video and improvement loop on the new layer while the user
   reviews the checkpoint. Do not keep appending unrelated progress to the PR
   under review. If review feedback changes a lower layer, apply it to its owning
   branch and update dependent layers using the stack workflow, preserving
   published history unless rewriting it was explicitly authorized.
5. When the user merges a parent, verify its actual GitHub state and continue in
   the existing child PR. Preserve worktree changes before changing its base.
   `gh stack sync` rebases and pushes, and stack push/submit may force-push; do not
   use them to rewrite a published child without explicit authorization. The
   history-preserving path is to fetch and merge the updated trunk into the child,
   push normally, retarget its PR, and unstack/rebuild tracking for the remaining
   layers as needed. Check the resulting base and diff contain only remaining
   work, including after a squash merge. Do not merge PRs or force-push without
   explicit authorization.

A status question alone does not request a checkpoint. Answer it briefly and
continue. A pause/stop request ends the active loop; record where to resume. Do not
create a scheduled or background automation unless the user requests one.

## Keep continuity

Maintain a small local handoff outside the PR with the project and asset paths,
worktree/branch/stack and PR links, checkpoint heads, server URL and launch command,
browser connection details, reproduction steps, baseline/after evidence, tests,
exports, known limits, and next useful editing task. Keep credentials and complete
render request/environment payloads out of logs and handoffs. Resume from this
record after context changes instead of rediscovering or repeating completed work.

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.