Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
c3975c3
Rename Studio browser render action
samohovets Sep 1, 2026
1da37e1
Docs: Add Canvas Capture documentation
JonnyBurger Sep 1, 2026
a5478df
Enable incremental Rspack chunk graph builds
JonnyBurger Sep 1, 2026
0bba04f
`@remotion/studio`: Fix timeline media jitter when trimming
JonnyBurger Sep 1, 2026
c5a4e05
Docs: Add Canvas Capture table of contents
JonnyBurger Sep 1, 2026
acfa49a
Fix context menu actions on right-click
JonnyBurger Sep 1, 2026
421962c
Publish Canvas Capture extension separately
JonnyBurger Sep 1, 2026
684b609
Docs: Clarify Canvas Capture extension location
JonnyBurger Sep 1, 2026
f741f2c
Discard changes to packages/example/e2e/studio.test.mts
JonnyBurger Sep 1, 2026
150142d
Merge pull request #11025 from remotion-dev/codex/fix-context-menu-se…
JonnyBurger Sep 1, 2026
a6392cc
Docs: Launch Canvas Capture browser from Launchpad
JonnyBurger Sep 1, 2026
a3a43c2
Merge pull request #11028 from remotion-dev/fix/render-modal-titles
samohovets Sep 1, 2026
b9e819e
Merge pull request #11021 from remotion-dev/codex/rename-browser-rend…
samohovets Sep 1, 2026
a1487c0
Merge pull request #11024 from remotion-dev/codex/fix-timeline-media-…
JonnyBurger Sep 1, 2026
bf47efc
Merge pull request #11022 from remotion-dev/codex/document-canvas-cap…
JonnyBurger Sep 1, 2026
794ebf8
Discard changes to packages/bundler/src/test/override-order.test.ts
JonnyBurger Sep 1, 2026
f18b63e
Add composition and folder reordering
JonnyBurger Sep 1, 2026
d245b55
Update rspack-config.ts
JonnyBurger Sep 1, 2026
910819b
Merge pull request #11023 from remotion-dev/codex/rspack-incremental-…
JonnyBurger Sep 1, 2026
229468c
Expand folders while dragging
JonnyBurger Sep 1, 2026
2b48918
Address composition reorder review feedback
JonnyBurger Sep 1, 2026
415e034
Fix Rspack config formatting
JonnyBurger Sep 1, 2026
9a2566f
Merge remote-tracking branch 'origin/main' into codex/studio-reorder-…
JonnyBurger Sep 1, 2026
16c0012
Merge pull request #11031 from remotion-dev/codex/studio-reorder-comp…
JonnyBurger Sep 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ expected_version="150.0.7842.0"
expected_revision="r1631007"
expected_sha256="86de7ffdb70d3f41714bf5b2b6fe3ef23cbf6c924eb407343418f31b9c721f7f"
download_url="https://storage.googleapis.com/chrome-for-testing-per-commit-public/mac-arm64/r1631007/chrome-mac-arm64.zip"
install_app="/Users/jonathanburger/Applications/Recorder Chrome.app"
install_app="${HOME:?}/Applications/Recorder Chrome.app"

usage() {
printf '%s\n' 'Usage: install-browser.sh [--install-app PATH]'
Expand Down
6 changes: 3 additions & 3 deletions packages/browser-studio/e2e/browser-studio.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ test('loads Browser Studio, opens external links, and can add, delete, and dupli
await secondQuickSwitcherInput.press('Escape');

await studio.locator('[data-compname="MyComp"]').click();
await studio.getByRole('button', {name: 'Render on web'}).click();
await studio.getByRole('button', {name: 'Render in browser'}).click();
await expect(
studio.getByText('Input Props', {exact: true}),
).toBeVisible();
Expand Down Expand Up @@ -343,9 +343,9 @@ test('loads Browser Studio, opens external links, and can add, delete, and dupli
'MyComp / template-blank - Remotion Studio',
{timeout: 5000},
);
await studio.getByRole('button', {name: 'Render on web'}).click();
await studio.getByRole('button', {name: 'Render in browser'}).click();
await expect(
studio.getByText('Render MyComp', {exact: true}),
studio.getByText('Render MyComp in the browser', {exact: true}),
).toBeVisible();
await studio.locator('body').press('Escape');
await expect
Expand Down
22 changes: 22 additions & 0 deletions packages/browser-studio/src/browser-studio-operations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,13 @@ const getCodemodTargetCompositionId = (
return codemod.idToMove;
}

if (
codemod.type === 'move-composition-or-folder' &&
codemod.source.type === 'composition'
) {
return codemod.source.compositionId;
}

return null;
};

Expand Down Expand Up @@ -276,6 +283,21 @@ const resolveCodemodTargetFile = ({
return findProjectFile({filePath: folderFile, project});
}

if (
codemod.type === 'move-composition-or-folder' &&
codemod.source.type === 'folder'
) {
const folderFile = getFolderFile({
folderName: codemod.source.folderName,
project,
});
if (folderFile === null) {
throw new Error(`Could not find folder "${codemod.source.folderName}"`);
}

return findProjectFile({filePath: folderFile, project});
}

const rootFile = getRootFileForProject({
entryPoint: project.entryPoint,
project,
Expand Down
10 changes: 9 additions & 1 deletion packages/bundler/src/rspack-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,16 @@ export const rspackConfig = async ({
},
};

const sharedBaseConfig = getBaseConfig(environment, poll);
const baseConfig = {
...getBaseConfig(environment, poll),
...sharedBaseConfig,
experiments: {
...sharedBaseConfig.experiments,
...(environment === 'development'
? // Makes the first HMR event faster.
{incremental: {buildChunkGraph: true}}
: {}),
},
// Remove once https://github.com/huggingface/transformers.js/issues/1759 is resolved.
ignoreWarnings: [
{
Expand Down
19 changes: 19 additions & 0 deletions packages/canvas-capture-extension/README.public.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Remotion Canvas Capture

Remotion Canvas Capture records an area—or a whole webpage—as a
high-resolution H.264 MP4 or VP9 WebM using Chromium's experimental
HTML-in-canvas implementation.

## Install

Follow the [Canvas Capture installation guide](https://www.remotion.dev/docs/canvas-capture/installation).

## Development

This repository contains the built Chrome extension and is generated from the
[`packages/canvas-capture-extension`](https://github.com/remotion-dev/remotion/tree/main/packages/canvas-capture-extension)
package in the Remotion monorepo. Changes made directly in this repository will
be overwritten by the release pipeline.

Please report issues and contribute changes in the
[`remotion-dev/remotion`](https://github.com/remotion-dev/remotion) repository.
16 changes: 16 additions & 0 deletions packages/docs/docs/canvas-capture/TableOfContents.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import React from 'react';
import {Grid} from '../../components/TableOfContents/Grid';
import {TOCItem} from '../../components/TableOfContents/TOCItem';

export const TableOfContents: React.FC = () => {
return (
<div>
<Grid>
<TOCItem link="/docs/canvas-capture/installation">
<strong>Installation</strong>
<div>Install the browser and Canvas Capture extension</div>
</TOCItem>
</Grid>
</div>
);
};
18 changes: 18 additions & 0 deletions packages/docs/docs/canvas-capture/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
image: /generated/articles-docs-canvas-capture-index.png
title: Canvas Capture
---

import {TableOfContents} from './TableOfContents';

# Canvas Capture

Remotion Canvas Capture is a high-fidelity webpage recorder which leverages HTML-in-canvas.

It can record content at a higher resolution than the native display resolution.

Perfect for product demos showing closeups of UI.

## Table of contents

<TableOfContents />
48 changes: 48 additions & 0 deletions packages/docs/docs/canvas-capture/installation.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
image: /generated/articles-docs-canvas-capture-installation.png
title: Install Canvas Capture
sidebar_label: Installation
---

# Install Canvas Capture

> Tip: Copy the URL of this page into an agent to let it install it for you.

Canvas Capture currently requires an Apple Silicon Mac.

## Download the extension

Clone the built extension to a durable location:

```bash title="Terminal"
git clone --depth=1 https://github.com/remotion-dev/canvas-capture.git \
"$HOME/Applications/Remotion Canvas Capture Extension"
```

The repository contains a production build of Canvas Capture. You do not need to clone or build Remotion.

## Install Chrome for Testing

Canvas Capture uses Chrome for Testing `150.0.7842.0` at revision `r1631007`. This is the exact version known to support the required HTML-in-canvas API.

Install the browser using the script included with Canvas Capture:

```bash title="Terminal"
"$HOME/Applications/Remotion Canvas Capture Extension/install-browser.sh"
```

This browser does not receive security updates. Only use it with websites you trust.

## Launch the browser

Open Google Chrome for Testing from Launchpad.

Open `chrome://flags`, search for Canvas Draw Element, set it to Enabled and select Relaunch.

## Load the extension

Open `chrome://extensions`, enable Developer mode and select Load unpacked.

In the file picker, open your home folder, then choose Applications → Remotion Canvas Capture Extension.

Open a webpage and click the Remotion Canvas Capture extension icon to start recording.
2 changes: 1 addition & 1 deletion packages/docs/docs/client-side-rendering/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ const {getBlob} = await renderMediaOnWeb({

## Remotion Studio

Client-side rendering is always enabled in the Remotion Studio from <AvailableFrom v="4.0.491" inline />. Use the "Render on web" button to render in the browser.
Client-side rendering is always enabled in the Remotion Studio from <AvailableFrom v="4.0.491" inline />. Use the "Render in browser" button to start a render.

## Telemetry

Expand Down
2 changes: 1 addition & 1 deletion packages/docs/docs/contributing/web-renderer.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ Sloppy, unfiltered AI PRs will not be processed by us.

## Studio Render Button

In [`packages/example`](/docs/contributing/#testing-your-changes), and in any template, you will see a "Render on web" button.
In [`packages/example`](/docs/contributing/#testing-your-changes), and in any template, you will see a "Render in browser" button.

## See also

Expand Down
16 changes: 16 additions & 0 deletions packages/docs/sidebars.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1750,6 +1750,11 @@ const sidebars: SidebarsConfig = {
href: '/docs/recorder',
label: 'Recorder',
},
{
type: 'link',
href: '/docs/canvas-capture',
label: 'Canvas Capture',
},
{
type: 'html',
value:
Expand Down Expand Up @@ -1967,6 +1972,17 @@ const sidebars: SidebarsConfig = {
],
},
],
canvasCaptureSidebar: [
{
type: 'category',
label: 'Canvas Capture',
link: {
type: 'doc',
id: 'canvas-capture/index',
},
items: ['canvas-capture/installation'],
},
],
};

export default sidebars;
18 changes: 18 additions & 0 deletions packages/docs/src/data/articles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,24 @@ export const articles = [
noAi: false,
slug: 'cancel-render',
},
{
id: 'canvas-capture/index',
title: 'Canvas Capture',
relativePath: 'docs/canvas-capture/index.mdx',
compId: 'articles-docs-canvas-capture-index',
crumb: null,
noAi: false,
slug: 'canvas-capture/index',
},
{
id: 'canvas-capture/installation',
title: 'Install Canvas Capture',
relativePath: 'docs/canvas-capture/installation.mdx',
compId: 'articles-docs-canvas-capture-installation',
crumb: null,
noAi: false,
slug: 'canvas-capture/installation',
},
{
id: 'canvasimage',
title: '<CanvasImage>',
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions packages/docs/vercel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,9 @@ export const config: VercelConfig = {
permanent: false,
}),
routes.redirect('/recorder', '/docs/recorder', {permanent: false}),
routes.redirect('/canvas-capture', '/docs/canvas-capture', {
permanent: false,
}),
routes.redirect('/install-whisper-cpp', '/docs/install-whisper-cpp', {
permanent: false,
}),
Expand Down
Loading
Loading