Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
3efa69d
Docs: Upgrade to new Shiki Twoslasher
JonnyBurger Feb 17, 2026
ae40346
Merge branch 'main' into feat/new-shiki-twoslash
JonnyBurger Feb 17, 2026
43281dd
Update twoslash-worker.ts
JonnyBurger Feb 17, 2026
8fca306
Fix twoslash workers hanging: force exit and add timeout/stderr logging
JonnyBurger Feb 17, 2026
04393b5
Exit with code 1 on twoslash errors, force exit 0 on success
JonnyBurger Feb 17, 2026
de2cdfb
Remove silent catch in progress interval, check dir existence instead
JonnyBurger Feb 17, 2026
dcfdf8b
Update prewarm-twoslash.ts
JonnyBurger Feb 17, 2026
bf85c29
`docs`: Document browser support requirements for client-side rendering
samohovets Feb 17, 2026
fed2a96
`docs`: Document Firefox AAC encoding limitation for client-side rend…
samohovets Feb 17, 2026
aca771a
`docs`: Add WebCodecs requirement note to client-side rendering limit…
samohovets Feb 17, 2026
d7707a8
Studio: In Safari, a user can select some things #6555
tiwariaayu Feb 18, 2026
6603c74
Merge pull request #6568 from remotion-dev/docs/client-side-rendering…
JonnyBurger Feb 18, 2026
a304048
Convert overrideWidth and overrideHeight to AnyRemotionOption pattern
JonnyBurger Feb 18, 2026
c9ee901
fix in #6555
tiwariaayu Feb 18, 2026
bbea1df
Add --fps and --duration CLI flags as AnyRemotionOption overrides
JonnyBurger Feb 18, 2026
42d4b5c
Add missing forceDurationInFrames and forceFps to Python and Ruby tes…
JonnyBurger Feb 18, 2026
669402c
ok
JonnyBurger Feb 18, 2026
aca2232
Studio: Only disable selection on right side of timeline
JonnyBurger Feb 18, 2026
6b8601f
Studio: Disable selection only while dragging in timeline
JonnyBurger Feb 18, 2026
595c359
Studio: Remove explicit userSelect from TimeValue
JonnyBurger Feb 18, 2026
8773bc3
refine
JonnyBurger Feb 18, 2026
db531f9
`remotion`: Automatically premount Sequences behind v5 flag
JonnyBurger Feb 18, 2026
8b3cb78
looks good
JonnyBurger Feb 18, 2026
e79d8e4
Update prewarm-twoslash.ts
JonnyBurger Feb 18, 2026
2d0b223
Add AvailableFrom flags for fps/duration options, use proper validation
JonnyBurger Feb 18, 2026
0675b1b
`remotion`: Add audio variant to tag switching snippet
JonnyBurger Feb 18, 2026
4a4e44d
Update video-tags.mdx
JonnyBurger Feb 18, 2026
98666e4
Merge pull request #6574 from remotion-dev/docs/audio-tag-switching-s…
JonnyBurger Feb 18, 2026
f1882ca
Merge pull request #6571 from tiwariaayu/#6555
JonnyBurger Feb 18, 2026
4eae938
Update Sequence.tsx
JonnyBurger Feb 18, 2026
f4cd054
Update Sequence.tsx
JonnyBurger Feb 18, 2026
8aaf19b
`remotion`: Move useVideoConfig back to outer routing function
JonnyBurger Feb 18, 2026
19afab2
Merge pull request #6560 from remotion-dev/feat/new-shiki-twoslash
JonnyBurger Feb 18, 2026
0f43d8b
Add forceFps and forceDurationInFrames to Go, PHP, Python, and Ruby L…
JonnyBurger Feb 18, 2026
4912391
Wrap Sequence validation tests with video config context
JonnyBurger Feb 18, 2026
5aaf347
style
JonnyBurger Feb 18, 2026
bae10ad
Update sequence-validation.test.tsx
JonnyBurger Feb 18, 2026
761a348
Merge pull request #6573 from remotion-dev/override-options-refactor
JonnyBurger Feb 18, 2026
e823c43
`docs`: Fix docs build warnings (broken anchors, license prop, mediab…
JonnyBurger Feb 18, 2026
97c6160
Merge remote-tracking branch 'origin/main' into feat/auto-premount-se…
JonnyBurger Feb 18, 2026
c8341f3
Update index.js
JonnyBurger Feb 18, 2026
e387360
Merge pull request #6566 from remotion-dev/feat/auto-premount-sequenc…
JonnyBurger Feb 18, 2026
30d4a1a
Fix react/jsx-sort-props lint errors in docs components
JonnyBurger Feb 18, 2026
37f6e99
Merge pull request #6575 from remotion-dev/fix/docs-build-warnings
JonnyBurger Feb 18, 2026
c0afb42
`docs`: Add missing crossOrigin prop docs to Html5Audio
JonnyBurger Feb 18, 2026
2f5c892
Merge pull request #6577 from remotion-dev/fix/docs-broken-crossorigi…
JonnyBurger Feb 18, 2026
c7da2a2
`template-vercel`: Never-expire sandbox snapshots and simplify runtim…
JonnyBurger Feb 18, 2026
22902ad
revert style changes
JonnyBurger Feb 18, 2026
f5f76eb
revert style changes
JonnyBurger Feb 18, 2026
a046bf0
Remove --experimental-cli flag from prettier commands
JonnyBurger Feb 18, 2026
9241b76
fix prettier
JonnyBurger Feb 18, 2026
58d2c3f
simplify: create-snapshot is production-only, remove dev branching
JonnyBurger Feb 18, 2026
0cac2f8
push
JonnyBurger Feb 18, 2026
56038b2
Update snapshots.ts
JonnyBurger Feb 18, 2026
3116a03
Merge pull request #6579 from remotion-dev/remove-experimental-cli
JonnyBurger Feb 18, 2026
0abc54b
Update page.tsx
JonnyBurger Feb 18, 2026
e50b859
prettier
JonnyBurger Feb 18, 2026
2660c56
Update create-snapshot.ts
JonnyBurger Feb 18, 2026
89e7551
Update packages/template-vercel/src/app/api/render/route.ts
JonnyBurger Feb 18, 2026
67c552e
Parallelize template publishing
JonnyBurger Feb 18, 2026
4e8ec6e
phases
JonnyBurger Feb 18, 2026
1707f32
Revise acknowledgements and contributor statistics
MehmetAdemi Feb 18, 2026
d45ba5d
Update publish.ts
JonnyBurger Feb 18, 2026
d73ccfb
Update route.ts
JonnyBurger Feb 18, 2026
4fc1252
Update vercel-sandbox.mdx
JonnyBurger Feb 18, 2026
9e525a2
Merge pull request #6580 from remotion-dev/parallelize-publishtemplates
JonnyBurger Feb 18, 2026
b96e04e
Merge pull request #6581 from remotion-dev/MehmetAdemi-patch-1
JonnyBurger Feb 18, 2026
71c5abe
Merge pull request #6578 from remotion-dev/feat/never-expire-sandbox-…
JonnyBurger Feb 18, 2026
e2d4ffb
Document `loop` prop behavior during fallback to `<OffthreadVideo>`
JonnyBurger Feb 18, 2026
e2d5873
Merge pull request #6584 from remotion-dev/docs/loop-fallback-behavior
JonnyBurger Feb 18, 2026
8fea241
Fix Vite peer dependency conflict in recorder template
JonnyBurger Feb 18, 2026
89eee17
Merge pull request #6585 from remotion-dev/fix/recorder-vite-peer-deps
JonnyBurger Feb 18, 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
2 changes: 1 addition & 1 deletion .claude/skills/pr/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Ensure we are not on the main branch, make a branch if necessary.
For all packages affected, run Prettier to format the code:

```
bunx prettier --experimental-cli src --write
bunx prettier src --write
```

Commit the changes, use the following format:
Expand Down
2 changes: 1 addition & 1 deletion .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ The **package name** for each folder is `@remotion/[folder-name]`, except for th

- `bun` is the package manager for the project.
- To build the project after you made changes, run `bunx turbo make --filter="[package-name]"` and only include the package you are working on. Refer to package naming convention above. For example, the command to build the package in `packages/shapes` is `bunx turbo make --filter="@remotion/shapes"`.
- After making code changes, run `bunx prettier --experimental-cli src --write` to format the code. Do not run the formatted on the docs.
- After making code changes, run `bunx prettier src --write` to format the code. Do not run the formatted on the docs.

## Documentation

Expand Down
269 changes: 121 additions & 148 deletions bun.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@
"@types/three": "0.170.0",
"openai": "4.67.1",
"@types/dom-webcodecs": "0.1.11",
"@vitejs/plugin-react": "4.1.0",
"@vitejs/plugin-react": "4.3.4",
"@vitest/browser-playwright": "4.0.9",
"playwright": "1.55.1",
"vitest": "4.0.9",
Expand Down
2 changes: 1 addition & 1 deletion packages/animated-emoji/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"module": "dist/esm/index.mjs",
"sideEffects": false,
"scripts": {
"formatting": "prettier --experimental-cli src --check",
"formatting": "prettier src --check",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/animation-utils/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"scripts": {
"formatting": "prettier --experimental-cli src --check",
"formatting": "prettier src --check",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts",
"test": "bun test src"
Expand Down
2 changes: 1 addition & 1 deletion packages/babel-loader/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"description": "Babel loader for Remotion",
"main": "dist/index.js",
"scripts": {
"formatting": "prettier --experimental-cli src --check",
"formatting": "prettier src --check",
"lint": "eslint src",
"make": "tsgo -d"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/bundler/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"url": "https://github.com/remotion-dev/remotion/issues"
},
"scripts": {
"formatting": "prettier --experimental-cli src --check",
"formatting": "prettier src --check",
"lint": "eslint src",
"test": "bun test src",
"make": "tsgo -d"
Expand Down
2 changes: 1 addition & 1 deletion packages/captions/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"url": "https://github.com/remotion-dev/remotion/issues"
},
"scripts": {
"formatting": "prettier --experimental-cli src --check",
"formatting": "prettier src --check",
"lint": "eslint src",
"test": "bun test src",
"make": "tsgo -d"
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"remotiond": "remotiond-cli.js"
},
"scripts": {
"formatting": "prettier --experimental-cli src --check",
"formatting": "prettier src --check",
"lint": "eslint src",
"test": "bun test src",
"make": "tsgo -d"
Expand Down
4 changes: 4 additions & 0 deletions packages/cli/src/benchmark.ts
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,8 @@ export const benchmarkCommand = async (
ffmpegOverride,
height,
width,
fps,
durationInFrames,
concurrency: unparsedConcurrency,
} = getCliOptions({
isStill: false,
Expand Down Expand Up @@ -491,6 +493,8 @@ export const benchmarkCommand = async (
...composition,
width: width ?? composition.width,
height: height ?? composition.height,
fps: fps ?? composition.fps,
durationInFrames: durationInFrames ?? composition.durationInFrames,
},
crf: configFileCrf ?? null,
envVariables,
Expand Down
13 changes: 0 additions & 13 deletions packages/cli/src/config/height.ts

This file was deleted.

22 changes: 16 additions & 6 deletions packages/cli/src/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ import {
setFfmpegOverrideFunction,
} from './ffmpeg-override';
import {setFrameRange} from './frame-range';
import {getHeight, overrideHeight} from './height';
import {setImageSequence} from './image-sequence';
import {getMetadata, setMetadata} from './metadata';
import {getShouldOpenBrowser, setShouldOpenBrowser} from './open-browser';
Expand All @@ -57,7 +56,6 @@ import {
getWebpackPolling,
setWebpackPollingInMilliseconds,
} from './webpack-poll';
import {getWidth, overrideWidth} from './width';

export type {Concurrency, WebpackConfiguration, WebpackOverrideFn};

Expand Down Expand Up @@ -117,6 +115,10 @@ const {
userAgentOption,
disableWebSecurityOption,
ignoreCertificateErrorsOption,
overrideHeightOption,
overrideWidthOption,
overrideFpsOption,
overrideDurationOption,
} = BrowserSafeApis.options;

declare global {
Expand Down Expand Up @@ -390,6 +392,14 @@ declare global {
* Overrides the width of a composition
*/
readonly overrideWidth: (newWidth: number) => void;
/**
* Overrides the FPS of a composition
*/
readonly overrideFps: (newFps: number) => void;
/**
* Overrides the duration in frames of a composition
*/
readonly overrideDuration: (newDuration: number) => void;
/**
* Set the ProRes profile.
* This method is only valid if the codec has been set to 'prores'.
Expand Down Expand Up @@ -702,8 +712,10 @@ export const Config: FlatConfig = {
setVideoBitrate: videoBitrateOption.setConfig,
setAudioLatencyHint: audioLatencyHintOption.setConfig,
setForSeamlessAacConcatenation: forSeamlessAacConcatenationOption.setConfig,
overrideHeight,
overrideWidth,
overrideHeight: overrideHeightOption.setConfig,
overrideWidth: overrideWidthOption.setConfig,
overrideFps: overrideFpsOption.setConfig,
overrideDuration: overrideDurationOption.setConfig,
overrideFfmpegCommand: setFfmpegOverrideFunction,
setAudioCodec: audioCodecOption.setConfig,
setOffthreadVideoCacheSizeInBytes: (size) => {
Expand Down Expand Up @@ -746,8 +758,6 @@ export const ConfigInternals = {
getMaxTimelineTracks: StudioServerInternals.getMaxTimelineTracks,
defaultOverrideFunction,
getFfmpegOverrideFunction,
getHeight,
getWidth,
getMetadata,
getEntryPoint,
getWebpackPolling,
Expand Down
15 changes: 0 additions & 15 deletions packages/cli/src/config/width.ts

This file was deleted.

17 changes: 15 additions & 2 deletions packages/cli/src/get-cli-options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,19 @@ export const getCliOptions = (options: {
commandLine: parsedCli,
}).value;

const height = ConfigInternals.getHeight();
const width = ConfigInternals.getWidth();
const height = BrowserSafeApis.options.overrideHeightOption.getValue({
commandLine: parsedCli,
}).value;
const width = BrowserSafeApis.options.overrideWidthOption.getValue({
commandLine: parsedCli,
}).value;
const fps = BrowserSafeApis.options.overrideFpsOption.getValue({
commandLine: parsedCli,
}).value;
const durationInFrames =
BrowserSafeApis.options.overrideDurationOption.getValue({
commandLine: parsedCli,
}).value;

RenderInternals.validateConcurrency({
value: concurrency,
Expand All @@ -87,5 +98,7 @@ export const getCliOptions = (options: {
ffmpegOverride: ConfigInternals.getFfmpegOverrideFunction(),
height,
width,
fps,
durationInFrames,
};
};
6 changes: 6 additions & 0 deletions packages/cli/src/get-composition-with-dimension-override.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import {getCompositionId} from './get-composition-id';
export const getCompositionWithDimensionOverride = async ({
height,
width,
fps,
durationInFrames,
args,
compositionIdFromUi,
chromiumOptions,
Expand All @@ -35,6 +37,8 @@ export const getCompositionWithDimensionOverride = async ({
}: {
height: number | null;
width: number | null;
fps: number | null;
durationInFrames: number | null;
args: (string | number)[];
compositionIdFromUi: string | null;
timeoutInMilliseconds: number;
Expand Down Expand Up @@ -88,6 +92,8 @@ export const getCompositionWithDimensionOverride = async ({
...returnValue.config,
height: height ?? returnValue.config.height,
width: width ?? returnValue.config.width,
fps: fps ?? returnValue.config.fps,
durationInFrames: durationInFrames ?? returnValue.config.durationInFrames,
},
};
};
18 changes: 8 additions & 10 deletions packages/cli/src/parse-command-line.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ const {
userAgentOption,
disableWebSecurityOption,
ignoreCertificateErrorsOption,
overrideHeightOption,
overrideWidthOption,
overrideFpsOption,
overrideDurationOption,
} = BrowserSafeApis.options;

export type CommandLineOptions = {
Expand Down Expand Up @@ -109,8 +113,10 @@ export type CommandLineOptions = {
['disable-keyboard-shortcuts']: boolean;
['enable-experimental-client-side-rendering']: boolean;
muted: boolean;
height: number;
width: number;
[overrideHeightOption.cliFlag]: TypeOfOption<typeof overrideHeightOption>;
[overrideWidthOption.cliFlag]: TypeOfOption<typeof overrideWidthOption>;
[overrideFpsOption.cliFlag]: TypeOfOption<typeof overrideFpsOption>;
[overrideDurationOption.cliFlag]: TypeOfOption<typeof overrideDurationOption>;
runs: number;
concurrencies: string;
[enforceAudioOption.cliFlag]: TypeOfOption<typeof enforceAudioOption>;
Expand Down Expand Up @@ -141,14 +147,6 @@ export const parseCommandLine = () => {
Config.setCachingEnabled(parsedCli['bundle-cache'] !== 'false');
}

if (parsedCli.height) {
Config.overrideHeight(parsedCli.height);
}

if (parsedCli.width) {
Config.overrideWidth(parsedCli.width);
}

if (parsedCli.frames) {
ConfigInternals.setFrameRangeFromCli(parsedCli.frames);
}
Expand Down
8 changes: 8 additions & 0 deletions packages/cli/src/render-flows/render.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ export const renderVideoFlow = async ({
port,
height,
width,
fps,
durationInFrames,
remainingArgs,
compositionIdFromUi,
entryPointReason,
Expand Down Expand Up @@ -145,6 +147,8 @@ export const renderVideoFlow = async ({
port: number | null;
height: number | null;
width: number | null;
fps: number | null;
durationInFrames: number | null;
remainingArgs: (string | number)[];
compositionIdFromUi: string | null;
outputLocationFromUI: string | null;
Expand Down Expand Up @@ -373,6 +377,8 @@ export const renderVideoFlow = async ({
await getCompositionWithDimensionOverride({
height,
width,
fps,
durationInFrames,
args: remainingArgs,
compositionIdFromUi,
browserExecutable,
Expand Down Expand Up @@ -640,6 +646,8 @@ export const renderVideoFlow = async ({
...config,
width: width ?? config.width,
height: height ?? config.height,
fps: fps ?? config.fps,
durationInFrames: durationInFrames ?? config.durationInFrames,
},
crf: crf ?? null,
envVariables,
Expand Down
8 changes: 7 additions & 1 deletion packages/cli/src/render-flows/still.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ export const renderStillFlow = async ({
chromiumOptions,
envVariables,
height,
width,
fps,
durationInFrames,
serializedInputPropsWithCustomSchema,
overwrite,
port,
Expand All @@ -66,7 +69,6 @@ export const renderStillFlow = async ({
jpegQuality,
scale,
stillFrame,
width,
compositionIdFromUi,
imageFormatFromUi,
logLevel,
Expand Down Expand Up @@ -104,6 +106,8 @@ export const renderStillFlow = async ({
publicDir: string | null;
height: number | null;
width: number | null;
fps: number | null;
durationInFrames: number | null;
compositionIdFromUi: string | null;
imageFormatFromUi: StillImageFormat | null;
logLevel: LogLevel;
Expand Down Expand Up @@ -255,6 +259,8 @@ export const renderStillFlow = async ({
await getCompositionWithDimensionOverride({
height,
width,
fps,
durationInFrames,
args: remainingArgs,
compositionIdFromUi,
browserExecutable,
Expand Down
4 changes: 3 additions & 1 deletion packages/cli/src/render-queue/process-still.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ export const processStill = async ({
entryPointReason: 'same as Studio',
envVariables: job.envVariables,
height: null,
width: null,
fps: null,
durationInFrames: null,
fullEntryPoint,
serializedInputPropsWithCustomSchema:
job.serializedInputPropsWithCustomSchema,
Expand All @@ -67,7 +70,6 @@ export const processStill = async ({
remainingArgs: [],
scale: job.scale,
stillFrame: job.frame,
width: null,
compositionIdFromUi: job.compositionId,
imageFormatFromUi: job.imageFormat,
logLevel: job.logLevel,
Expand Down
4 changes: 3 additions & 1 deletion packages/cli/src/render-queue/process-video.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ export const processVideoJob = async ({
entryPointReason: 'same as Studio',
envVariables: job.envVariables,
height: null,
width: null,
fps: null,
durationInFrames: null,
fullEntryPoint,
serializedInputPropsWithCustomSchema:
job.serializedInputPropsWithCustomSchema,
Expand All @@ -69,7 +72,6 @@ export const processVideoJob = async ({
jpegQuality: job.jpegQuality ?? undefined,
remainingArgs: [],
scale: job.scale,
width: null,
compositionIdFromUi: job.compositionId,
logLevel: job.logLevel,
onProgress,
Expand Down
Loading
Loading