diff --git a/.claude/commands/add-bug.md b/.claude/commands/add-bug.md
index 57af37f2392..9a27aa171ff 100644
--- a/.claude/commands/add-bug.md
+++ b/.claude/commands/add-bug.md
@@ -12,6 +12,7 @@ The user will describe the bug and the affected version(s). Add the new entry at
```
Rules:
+
- The description should tell users which version to upgrade to.
- The link should be `https://remotion.dev/changelog` unless the user provides a specific link.
- Add the entry at the top of the array so the most recent bugs come first.
diff --git a/.claude/skills/pr/SKILL.md b/.claude/skills/pr/SKILL.md
index 305aadc4b11..cd7c96b0ca5 100644
--- a/.claude/skills/pr/SKILL.md
+++ b/.claude/skills/pr/SKILL.md
@@ -4,10 +4,10 @@ description: Open a pull request for the current feature
---
Ensure we are not on the main branch, make a branch if necessary.
-For all packages affected, run Prettier to format the code:
+For all packages affected, run Oxfmt to format the code:
```
-bunx prettier src --write
+bunx oxfmt src --write
```
Commit the changes, use the following format:
diff --git a/.cursor/mcp.json b/.cursor/mcp.json
index 6f8917c69c6..61b8110a2ae 100644
--- a/.cursor/mcp.json
+++ b/.cursor/mcp.json
@@ -1,10 +1,8 @@
{
"mcpServers": {
- "remotion-documentation-own": {
+ "remotion-documentation-own": {
"command": "npx",
- "args": [
- "@remotion/mcp@latest"
- ]
+ "args": ["@remotion/mcp@latest"]
}
}
}
diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml
index f244ccf7cd1..0a90acd1e1d 100644
--- a/.github/workflows/copilot-setup-steps.yml
+++ b/.github/workflows/copilot-setup-steps.yml
@@ -1,4 +1,4 @@
-name: "Copilot Coding agent setup"
+name: 'Copilot Coding agent setup'
on:
workflow_dispatch:
push:
diff --git a/.github/workflows/pullfrog.yml b/.github/workflows/pullfrog.yml
index 0eb1d2309e6..28a19446ba3 100644
--- a/.github/workflows/pullfrog.yml
+++ b/.github/workflows/pullfrog.yml
@@ -55,4 +55,3 @@ jobs:
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
-
diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
index 00c8f1ab0d8..090deff4f07 100644
--- a/.github/workflows/push.yml
+++ b/.github/workflows/push.yml
@@ -114,14 +114,14 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v6
with:
- python-version: "3.11"
+ python-version: '3.11'
- uses: ruby/setup-ruby@master
with:
- ruby-version: "3.1"
+ ruby-version: '3.1'
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
- php-version: "8.4"
+ php-version: '8.4'
- run: pip install pylint boto3 pytest
- name: Cache Turbo
uses: rharkor/caching-for-turbo@v2.3.11
diff --git a/.oxfmtrc.json b/.oxfmtrc.json
new file mode 100644
index 00000000000..6fa5f721a49
--- /dev/null
+++ b/.oxfmtrc.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "./node_modules/oxfmt/configuration_schema.json",
+ "singleQuote": true,
+ "bracketSpacing": false,
+ "useTabs": true,
+ "printWidth": 80,
+ "sortImports": {"newlinesBetween": false},
+ "sortPackageJson": false,
+ "ignorePatterns": [
+ "packages/template-*/**",
+ "packages/example/**",
+ "packages/player-example/**",
+ "packages/example-videos/**"
+ ],
+ "overrides": [
+ {
+ "files": ["*.md", "*.mdx"],
+ "options": {
+ "useTabs": false,
+ "printWidth": 300,
+ "embeddedLanguageFormatting": "off"
+ }
+ }
+ ]
+}
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index d7df89c9cd0..23b964744d8 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -1,3 +1,3 @@
{
- "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"]
+ "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"]
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index a7f4cf05a9c..abb85d3e2c1 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -4,7 +4,7 @@
"source.organizeImports": "never",
"source.fixAll": "explicit"
},
- "editor.defaultFormatter": "esbenp.prettier-vscode",
+ "editor.defaultFormatter": "oxc.oxc-vscode",
"[rust]": {
"editor.defaultFormatter": "rust-lang.rust-analyzer"
},
@@ -17,15 +17,15 @@
},
"[javascript]": {
"editor.formatOnSave": true,
- "editor.defaultFormatter": "esbenp.prettier-vscode"
+ "editor.defaultFormatter": "oxc.oxc-vscode"
},
"[typescript]": {
"editor.formatOnSave": true,
- "editor.defaultFormatter": "esbenp.prettier-vscode"
+ "editor.defaultFormatter": "oxc.oxc-vscode"
},
"[typescriptreact]": {
"editor.formatOnSave": true,
- "editor.defaultFormatter": "esbenp.prettier-vscode"
+ "editor.defaultFormatter": "oxc.oxc-vscode"
},
"[go]": {
"editor.defaultFormatter": "golang.go"
diff --git a/bun.lock b/bun.lock
index 9db7ccc52a3..914ad9c232b 100644
--- a/bun.lock
+++ b/bun.lock
@@ -15,6 +15,7 @@
"@types/deno": "2.0.0",
"@types/react": "catalog:",
"@types/react-dom": "catalog:",
+ "oxfmt": "0.35.0",
"prettier": "catalog:",
"prettier-plugin-organize-imports": "3.2.4",
},
@@ -678,6 +679,7 @@
"@typescript/native-preview": "catalog:",
"dotenv": "17.3.1",
"eslint": "catalog:",
+ "prettier": "catalog:",
},
},
"packages/example-without-zod": {
@@ -733,7 +735,6 @@
"@types/prettier": "^2.7.1",
"@typescript/native-preview": "catalog:",
"postcss": "8.4.47",
- "prettier": "catalog:",
},
},
"packages/install-whisper-cpp": {
@@ -1118,6 +1119,7 @@
"devDependencies": {
"@types/node": "catalog:",
"eslint": "catalog:",
+ "prettier": "catalog:",
},
},
"packages/preload": {
@@ -1408,6 +1410,7 @@
"@remotion/studio-shared": "workspace:*",
"memfs": "3.4.3",
"open": "^8.4.2",
+ "prettier": "catalog:",
"recast": "0.23.11",
"remotion": "workspace:*",
"semver": "7.5.3",
@@ -3453,6 +3456,44 @@
"@oven/bun-windows-x64-baseline": ["@oven/bun-windows-x64-baseline@1.3.3", "", { "os": "win32", "cpu": "x64" }, "sha512-u5eZHKq6TPJSE282KyBOicGQ2trkFml0RoUfqkPOJVo7TXGrsGYYzdsugZRnVQY/WEmnxGtBy4T3PAaPqgQViA=="],
+ "@oxfmt/binding-android-arm-eabi": ["@oxfmt/binding-android-arm-eabi@0.35.0", "", { "os": "android", "cpu": "arm" }, "sha512-BaRKlM3DyG81y/xWTsE6gZiv89F/3pHe2BqX2H4JbiB8HNVlWWtplzgATAE5IDSdwChdeuWLDTQzJ92Lglw3ZA=="],
+
+ "@oxfmt/binding-android-arm64": ["@oxfmt/binding-android-arm64@0.35.0", "", { "os": "android", "cpu": "arm64" }, "sha512-/O+EbuAJYs6nde/anv+aID6uHsGQApyE9JtYBo/79KyU8e6RBN3DMbT0ix97y1SOnCglurmL2iZ+hlohjP2PnQ=="],
+
+ "@oxfmt/binding-darwin-arm64": ["@oxfmt/binding-darwin-arm64@0.35.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-pGqRtqlNdn9d4VrmGUWVyQjkw79ryhI6je9y2jfqNUIZCfqceob+R97YYAoG7C5TFyt8ILdLVoN+L2vw/hSFyA=="],
+
+ "@oxfmt/binding-darwin-x64": ["@oxfmt/binding-darwin-x64@0.35.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-8GmsDcSozTPjrCJeGpp+sCmS9+9V5yRrdEZ1p/sTWxPG5nYeAfSLuS0nuEYjXSO+CtdSbStIW6dxa+4NM58yRw=="],
+
+ "@oxfmt/binding-freebsd-x64": ["@oxfmt/binding-freebsd-x64@0.35.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QyfKfTe0ytHpFKHAcHCGQEzN45QSqq1AHJOYYxQMgLM3KY4xu8OsXHpCnINjDsV4XGnQzczJDU9e04Zmd8XqIQ=="],
+
+ "@oxfmt/binding-linux-arm-gnueabihf": ["@oxfmt/binding-linux-arm-gnueabihf@0.35.0", "", { "os": "linux", "cpu": "arm" }, "sha512-u+kv3JD6P3J38oOyUaiCqgY5TNESzBRZJ5lyZQ6c2czUW2v5SIN9E/KWWa9vxoc+P8AFXQFUVrdzGy1tK+nbPQ=="],
+
+ "@oxfmt/binding-linux-arm-musleabihf": ["@oxfmt/binding-linux-arm-musleabihf@0.35.0", "", { "os": "linux", "cpu": "arm" }, "sha512-1NiZroCiV57I7Pf8kOH4XGR366kW5zir3VfSMBU2D0V14GpYjiYmPYFAoJboZvp8ACnZKUReWyMkNKSa5ad58A=="],
+
+ "@oxfmt/binding-linux-arm64-gnu": ["@oxfmt/binding-linux-arm64-gnu@0.35.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-7Q0Xeg7ZnW2nxnZ4R7aF6DEbCFls4skgHZg+I63XitpNvJCbVIU8MFOTZlvZGRsY9+rPgWPQGeUpLHlyx0wvMA=="],
+
+ "@oxfmt/binding-linux-arm64-musl": ["@oxfmt/binding-linux-arm64-musl@0.35.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Okqi+uhYFxwKz8hcnUftNNwdm8BCkf6GSCbcz9xJxYMm87k1E4p7PEmAAbhLTk7cjSdDre6TDL0pDzNX+Y22Q=="],
+
+ "@oxfmt/binding-linux-ppc64-gnu": ["@oxfmt/binding-linux-ppc64-gnu@0.35.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9k66pbZQXM/lBJWys3Xbc5yhl4JexyfqkEf/tvtq8976VIJnLAAL3M127xHA3ifYSqxdVHfVGTg84eiBHCGcNw=="],
+
+ "@oxfmt/binding-linux-riscv64-gnu": ["@oxfmt/binding-linux-riscv64-gnu@0.35.0", "", { "os": "linux", "cpu": "none" }, "sha512-aUcY9ofKPtjO52idT6t0SAQvEF6ctjzUQa1lLp7GDsRpSBvuTrBQGeq0rYKz3gN8dMIQ7mtMdGD9tT4LhR8jAQ=="],
+
+ "@oxfmt/binding-linux-riscv64-musl": ["@oxfmt/binding-linux-riscv64-musl@0.35.0", "", { "os": "linux", "cpu": "none" }, "sha512-C6yhY5Hvc2sGM+mCPek9ZLe5xRUOC/BvhAt2qIWFAeXMn4il04EYIjl3DsWiJr0xDMTJhvMOmD55xTRPlNp39w=="],
+
+ "@oxfmt/binding-linux-s390x-gnu": ["@oxfmt/binding-linux-s390x-gnu@0.35.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-RG2hlvOMK4OMZpO3mt8MpxLQ0AAezlFqhn5mI/g5YrVbPFyoCv9a34AAvbSJS501ocOxlFIRcKEuw5hFvddf9g=="],
+
+ "@oxfmt/binding-linux-x64-gnu": ["@oxfmt/binding-linux-x64-gnu@0.35.0", "", { "os": "linux", "cpu": "x64" }, "sha512-wzmh90Pwvqj9xOKHJjkQYBpydRkaXG77ZvDz+iFDRRQpnqIEqGm5gmim2s6vnZIkDGsvKCuTdtxm0GFmBjM1+w=="],
+
+ "@oxfmt/binding-linux-x64-musl": ["@oxfmt/binding-linux-x64-musl@0.35.0", "", { "os": "linux", "cpu": "x64" }, "sha512-+HCqYCJPCUy5I+b2cf+gUVaApfgtoQT3HdnSg/l7NIcLHOhKstlYaGyrFZLmUpQt4WkFbpGKZZayG6zjRU0KFA=="],
+
+ "@oxfmt/binding-openharmony-arm64": ["@oxfmt/binding-openharmony-arm64@0.35.0", "", { "os": "none", "cpu": "arm64" }, "sha512-kFYmWfR9YL78XyO5ws+1dsxNvZoD973qfVMNFOS4e9bcHXGF7DvGC2tY5UDFwyMCeB33t3sDIuGONKggnVNSJA=="],
+
+ "@oxfmt/binding-win32-arm64-msvc": ["@oxfmt/binding-win32-arm64-msvc@0.35.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-uD/NGdM65eKNCDGyTGdO8e9n3IHX+wwuorBvEYrPJXhDXL9qz6gzddmXH8EN04ejUXUujlq4FsoSeCfbg0Y+Jg=="],
+
+ "@oxfmt/binding-win32-ia32-msvc": ["@oxfmt/binding-win32-ia32-msvc@0.35.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-oSRD2k8J2uxYDEKR2nAE/YTY9PobOEnhZgCmspHu0+yBQ665yH8lFErQVSTE7fcGJmJp/cC6322/gc8VFuQf7g=="],
+
+ "@oxfmt/binding-win32-x64-msvc": ["@oxfmt/binding-win32-x64-msvc@0.35.0", "", { "os": "win32", "cpu": "x64" }, "sha512-WCDJjlS95NboR0ugI2BEwzt1tYvRDorDRM9Lvctls1SLyKYuNRCyrPwp1urUPFBnwgBNn9p2/gnmo7gFMySRoQ=="],
+
"@parcel/watcher": ["@parcel/watcher@2.5.1", "", { "dependencies": { "detect-libc": "1.0.3", "is-glob": "4.0.3", "micromatch": "4.0.8", "node-addon-api": "7.1.1" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.1", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-freebsd-x64": "2.5.1", "@parcel/watcher-linux-arm-glibc": "2.5.1", "@parcel/watcher-linux-arm-musl": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", "@parcel/watcher-linux-arm64-musl": "2.5.1", "@parcel/watcher-linux-x64-glibc": "2.5.1", "@parcel/watcher-linux-x64-musl": "2.5.1", "@parcel/watcher-win32-arm64": "2.5.1", "@parcel/watcher-win32-ia32": "2.5.1", "@parcel/watcher-win32-x64": "2.5.1" } }, "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg=="],
"@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.1", "", { "os": "android", "cpu": "arm64" }, "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA=="],
@@ -6551,6 +6592,8 @@
"own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "1.2.7", "object-keys": "1.1.1", "safe-push-apply": "1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="],
+ "oxfmt": ["oxfmt@0.35.0", "", { "dependencies": { "tinypool": "2.1.0" }, "optionalDependencies": { "@oxfmt/binding-android-arm-eabi": "0.35.0", "@oxfmt/binding-android-arm64": "0.35.0", "@oxfmt/binding-darwin-arm64": "0.35.0", "@oxfmt/binding-darwin-x64": "0.35.0", "@oxfmt/binding-freebsd-x64": "0.35.0", "@oxfmt/binding-linux-arm-gnueabihf": "0.35.0", "@oxfmt/binding-linux-arm-musleabihf": "0.35.0", "@oxfmt/binding-linux-arm64-gnu": "0.35.0", "@oxfmt/binding-linux-arm64-musl": "0.35.0", "@oxfmt/binding-linux-ppc64-gnu": "0.35.0", "@oxfmt/binding-linux-riscv64-gnu": "0.35.0", "@oxfmt/binding-linux-riscv64-musl": "0.35.0", "@oxfmt/binding-linux-s390x-gnu": "0.35.0", "@oxfmt/binding-linux-x64-gnu": "0.35.0", "@oxfmt/binding-linux-x64-musl": "0.35.0", "@oxfmt/binding-openharmony-arm64": "0.35.0", "@oxfmt/binding-win32-arm64-msvc": "0.35.0", "@oxfmt/binding-win32-ia32-msvc": "0.35.0", "@oxfmt/binding-win32-x64-msvc": "0.35.0" }, "bin": { "oxfmt": "bin/oxfmt" } }, "sha512-QYeXWkP+aLt7utt5SLivNIk09glWx9QE235ODjgcEZ3sd1VMaUBSpLymh6ZRCA76gD2rMP4bXanUz/fx+nLM9Q=="],
+
"p-cancelable": ["p-cancelable@3.0.0", "", {}, "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw=="],
"p-finally": ["p-finally@1.0.0", "", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="],
@@ -7475,7 +7518,7 @@
"tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "6.5.0", "picomatch": "4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="],
- "tinypool": ["tinypool@1.1.1", "", {}, "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg=="],
+ "tinypool": ["tinypool@2.1.0", "", {}, "sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw=="],
"tinyqueue": ["tinyqueue@3.0.0", "", {}, "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g=="],
@@ -8243,6 +8286,8 @@
"@docusaurus/core/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="],
+ "@docusaurus/core/tinypool": ["tinypool@1.1.1", "", {}, "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg=="],
+
"@docusaurus/core/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
"@docusaurus/core/webpack": ["webpack@5.96.1", "", { "dependencies": { "@types/eslint-scope": "3.7.7", "@types/estree": "1.0.7", "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/wasm-edit": "1.12.1", "@webassemblyjs/wasm-parser": "1.12.1", "acorn": "8.14.0", "browserslist": "4.25.0", "chrome-trace-event": "1.0.3", "enhanced-resolve": "5.18.1", "es-module-lexer": "1.5.4", "eslint-scope": "5.1.1", "events": "3.3.0", "glob-to-regexp": "0.4.1", "graceful-fs": "4.2.11", "json-parse-even-better-errors": "2.3.1", "loader-runner": "4.2.0", "mime-types": "2.1.34", "neo-async": "2.6.2", "schema-utils": "3.3.0", "tapable": "2.2.1", "terser-webpack-plugin": "5.3.10", "watchpack": "2.4.1", "webpack-sources": "3.2.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA=="],
diff --git a/bunfig.toml b/bunfig.toml
index 22c04153ef0..641e878fd33 100644
--- a/bunfig.toml
+++ b/bunfig.toml
@@ -1,2 +1,2 @@
[install]
-linker = "isolated"
\ No newline at end of file
+linker = "isolated"
diff --git a/package.json b/package.json
index cd15e30012c..0a78d40baaf 100644
--- a/package.json
+++ b/package.json
@@ -51,6 +51,7 @@
"@types/deno": "2.0.0",
"@types/react": "catalog:",
"@types/react-dom": "catalog:",
+ "oxfmt": "0.35.0",
"prettier": "catalog:",
"prettier-plugin-organize-imports": "3.2.4"
},
diff --git a/packages/.monorepo/builder.ts b/packages/.monorepo/builder.ts
index c0b887315d6..5571fe87305 100644
--- a/packages/.monorepo/builder.ts
+++ b/packages/.monorepo/builder.ts
@@ -1,5 +1,5 @@
-import {build} from 'bun';
import path from 'path';
+import {build} from 'bun';
import {Exports, validateExports} from './validate-exports';
if (process.env.NODE_ENV !== 'production') {
diff --git a/packages/STATS.md b/packages/STATS.md
index a214f028b96..3f9ee9d7dd2 100644
--- a/packages/STATS.md
+++ b/packages/STATS.md
@@ -1,4 +1,5 @@
# Download statistics
+
Monthly downloads of Remotion packages
[](https://npmcharts.com/compare/@remotion/animated-emoji?minimal=true)
[](https://npmcharts.com/compare/@remotion/animation-utils?minimal=true)
@@ -62,4 +63,4 @@ Monthly downloads of Remotion packages
[](https://npmcharts.com/compare/@remotion/webcodecs?minimal=true)
[](https://npmcharts.com/compare/@remotion/whisper-web?minimal=true)
[](https://npmcharts.com/compare/@remotion/zod-types?minimal=true)
-[](https://npmcharts.com/compare/@remotion/zod-types-v3?minimal=true)
+[](https://npmcharts.com/compare/@remotion/zod-types-v3?minimal=true)
diff --git a/packages/animated-emoji/README.md b/packages/animated-emoji/README.md
index 3542b367ca5..35ae7a00724 100644
--- a/packages/animated-emoji/README.md
+++ b/packages/animated-emoji/README.md
@@ -1,18 +1,18 @@
# @remotion/animated-emoji
-
+
Google Fonts Animated Emojis as Remotion components
-
+
[](https://npmcharts.com/compare/@remotion/animated-emoji?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/animated-emoji --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/animated-emoji) for more information.
diff --git a/packages/animated-emoji/package.json b/packages/animated-emoji/package.json
index d3f818a2975..10383d7dc2f 100644
--- a/packages/animated-emoji/package.json
+++ b/packages/animated-emoji/package.json
@@ -6,7 +6,7 @@
"module": "dist/esm/index.mjs",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
},
diff --git a/packages/animation-utils/README.md b/packages/animation-utils/README.md
index 41fc8937047..db21565bf2c 100644
--- a/packages/animation-utils/README.md
+++ b/packages/animation-utils/README.md
@@ -1,18 +1,18 @@
# @remotion/animation-utils
-
+
Helpers for animating CSS properties
-
+
[](https://npmcharts.com/compare/@remotion/animation-utils?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/animation-utils --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/animation-utils/) for more information.
diff --git a/packages/animation-utils/package.json b/packages/animation-utils/package.json
index 91179fed151..efd74c60122 100644
--- a/packages/animation-utils/package.json
+++ b/packages/animation-utils/package.json
@@ -13,7 +13,7 @@
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts",
"test": "bun test src"
diff --git a/packages/astro-example/README.md b/packages/astro-example/README.md
index 7f735746625..aa7333f3db6 100644
--- a/packages/astro-example/README.md
+++ b/packages/astro-example/README.md
@@ -1,5 +1,5 @@
# @remotion/astro-example
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/astro-example/astro.config.mjs b/packages/astro-example/astro.config.mjs
index 4b5a68ec00b..a5ac14439e0 100644
--- a/packages/astro-example/astro.config.mjs
+++ b/packages/astro-example/astro.config.mjs
@@ -1,5 +1,5 @@
-import { defineConfig } from 'astro/config';
import react from '@astrojs/react';
+import {defineConfig} from 'astro/config';
// https://astro.build/config
export default defineConfig({
diff --git a/packages/astro-example/test.cjs b/packages/astro-example/test.cjs
index 428ded07a26..b2a17276d18 100644
--- a/packages/astro-example/test.cjs
+++ b/packages/astro-example/test.cjs
@@ -1,20 +1,20 @@
-const assert = require("assert");
-const { interpolate } = require("remotion");
-const { Player } = require("@remotion/player");
-const { VERSION } = require("remotion/version");
-const { enableSkia } = require("@remotion/skia/enable");
-const { Gif } = require("@remotion/gif");
-const { CameraMotionBlur } = require("@remotion/motion-blur");
-const { ThreeCanvas } = require("@remotion/three");
+const assert = require('assert');
+const {interpolate} = require('remotion');
+const {Player} = require('@remotion/player');
+const {VERSION} = require('remotion/version');
+const {enableSkia} = require('@remotion/skia/enable');
+const {Gif} = require('@remotion/gif');
+const {CameraMotionBlur} = require('@remotion/motion-blur');
+const {ThreeCanvas} = require('@remotion/three');
const val = interpolate(1, [0, 1], [0, 100]);
assert(val === 100);
assert(Boolean(Player));
-assert(typeof VERSION === "string");
+assert(typeof VERSION === 'string');
assert(Boolean(enableSkia));
assert(Boolean(Gif));
assert(Boolean(CameraMotionBlur));
assert(Boolean(ThreeCanvas));
-console.log("CommonJS works!");
+console.log('CommonJS works!');
diff --git a/packages/astro-example/test.js b/packages/astro-example/test.js
index c33a1684a63..d2cb9bd503e 100644
--- a/packages/astro-example/test.js
+++ b/packages/astro-example/test.js
@@ -1,20 +1,20 @@
-const assert = require("assert");
-const { interpolate } = require("remotion");
-const { Player } = require("@remotion/player");
-const { VERSION } = require("remotion/version");
-const { enableSkia } = require("@remotion/skia/enable");
-const { Gif } = require("@remotion/gif");
-const { CameraMotionBlur } = require("@remotion/motion-blur");
-const { ThreeCanvas } = require("@remotion/three");
+const assert = require('assert');
+const {interpolate} = require('remotion');
+const {Player} = require('@remotion/player');
+const {VERSION} = require('remotion/version');
+const {enableSkia} = require('@remotion/skia/enable');
+const {Gif} = require('@remotion/gif');
+const {CameraMotionBlur} = require('@remotion/motion-blur');
+const {ThreeCanvas} = require('@remotion/three');
const val = interpolate(1, [0, 1], [0, 100]);
assert(val === 100);
assert(Boolean(Player));
-assert(typeof VERSION === "string");
+assert(typeof VERSION === 'string');
assert(Boolean(enableSkia));
assert(Boolean(Gif));
assert(Boolean(CameraMotionBlur));
assert(Boolean(ThreeCanvas));
-console.log("ESM Wallaby works!");
+console.log('ESM Wallaby works!');
diff --git a/packages/astro-example/test.mjs b/packages/astro-example/test.mjs
index a30141d085c..e882769a5d0 100644
--- a/packages/astro-example/test.mjs
+++ b/packages/astro-example/test.mjs
@@ -1,22 +1,22 @@
-import assert from "assert";
-import { interpolate } from "remotion";
-import { Player } from "@remotion/player";
-import { VERSION } from "remotion/version";
-import { enableSkia } from "@remotion/skia/enable";
-import { Trail } from "@remotion/motion-blur";
-import { ThreeCanvas } from "@remotion/three";
-import { TransitionSeries } from "@remotion/transitions";
-import { Gif } from "@remotion/gif";
+import assert from 'assert';
+import {Gif} from '@remotion/gif';
+import {Trail} from '@remotion/motion-blur';
+import {Player} from '@remotion/player';
+import {enableSkia} from '@remotion/skia/enable';
+import {ThreeCanvas} from '@remotion/three';
+import {TransitionSeries} from '@remotion/transitions';
+import {interpolate} from 'remotion';
+import {VERSION} from 'remotion/version';
const val = interpolate(1, [0, 1], [0, 100]);
assert(val === 100);
assert(Boolean(Player));
-assert(typeof VERSION === "string");
+assert(typeof VERSION === 'string');
assert(Boolean(enableSkia));
assert(Boolean(Gif));
assert(Boolean(ThreeCanvas));
assert(Boolean(Trail));
assert(Boolean(TransitionSeries));
-console.log("ESM works!");
+console.log('ESM works!');
diff --git a/packages/astro-example/tsconfig.json b/packages/astro-example/tsconfig.json
index ed1b12cadc5..578e3b46af6 100644
--- a/packages/astro-example/tsconfig.json
+++ b/packages/astro-example/tsconfig.json
@@ -1,7 +1,7 @@
{
- "extends": "astro/tsconfigs/strictest",
- "compilerOptions": {
- "jsx": "react-jsx"
- },
- "references": [{ "path": "../player" }, { "path": "../core" }]
+ "extends": "astro/tsconfigs/strictest",
+ "compilerOptions": {
+ "jsx": "react-jsx"
+ },
+ "references": [{"path": "../player"}, {"path": "../core"}]
}
diff --git a/packages/babel-loader/README.md b/packages/babel-loader/README.md
index 2cfe0e07fcf..fcb211f4503 100644
--- a/packages/babel-loader/README.md
+++ b/packages/babel-loader/README.md
@@ -1,18 +1,18 @@
# @remotion/babel-loader
-
+
Babel loader for Remotion
-
+
[](https://npmcharts.com/compare/@remotion/babel-loader?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/babel-loader --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/legacy-babel) for more information.
diff --git a/packages/babel-loader/package.json b/packages/babel-loader/package.json
index f1fe11046c5..d3ba3fb05ff 100644
--- a/packages/babel-loader/package.json
+++ b/packages/babel-loader/package.json
@@ -7,7 +7,7 @@
"description": "Babel loader for Remotion",
"main": "dist/index.js",
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d"
},
diff --git a/packages/bugs/README.md b/packages/bugs/README.md
index 2c5552186e9..784c6c62e12 100644
--- a/packages/bugs/README.md
+++ b/packages/bugs/README.md
@@ -1,5 +1,5 @@
# @remotion/bugs
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/bugs/api/index.ts b/packages/bugs/api/index.ts
index fda3014ac1f..202dae588b9 100644
--- a/packages/bugs/api/index.ts
+++ b/packages/bugs/api/index.ts
@@ -1,15 +1,15 @@
export default async function handler() {
- return new Response(
- `
Remotion Bugs Add a version to query bugs, e.g https://bugs.remotion.dev/v4.0.36
`,
- {
- status: 200,
- headers: {
- "content-type": "text/html",
- },
- }
- );
+ return new Response(
+ `Remotion Bugs Add a version to query bugs, e.g https://bugs.remotion.dev/v4.0.36
`,
+ {
+ status: 200,
+ headers: {
+ 'content-type': 'text/html',
+ },
+ },
+ );
}
export const config = {
- runtime: "edge",
+ runtime: 'edge',
};
diff --git a/packages/bugs/deprecate-versions.ts b/packages/bugs/deprecate-versions.ts
index b4451b527a1..d3b3b56043a 100644
--- a/packages/bugs/deprecate-versions.ts
+++ b/packages/bugs/deprecate-versions.ts
@@ -1,16 +1,16 @@
-import { bugs } from "./api/[v]";
-import { $ } from "bun";
+import {$} from 'bun';
+import {bugs} from './api/[v]';
const buggyRelease: string[] = [];
for (const bug of bugs) {
- buggyRelease.push(...bug.versions);
+ buggyRelease.push(...bug.versions);
}
const uniqueVersions = [...new Set(buggyRelease)];
console.log(uniqueVersions);
for (const version of uniqueVersions) {
- await $`npm deprecate remotion@${version} "This version contains bugs: https://bugs.remotion.dev/${version}"`;
- console.log(`Deprecated version ${version}`);
+ await $`npm deprecate remotion@${version} "This version contains bugs: https://bugs.remotion.dev/${version}"`;
+ console.log(`Deprecated version ${version}`);
}
diff --git a/packages/bugs/vercel.json b/packages/bugs/vercel.json
index a7da5e13641..6cac419b5ad 100644
--- a/packages/bugs/vercel.json
+++ b/packages/bugs/vercel.json
@@ -1,12 +1,12 @@
{
- "redirects": [
- {
- "source": "/:path",
- "destination": "/api/:path"
- },
- {
- "source": "/",
- "destination": "/api"
- }
- ]
+ "redirects": [
+ {
+ "source": "/:path",
+ "destination": "/api/:path"
+ },
+ {
+ "source": "/",
+ "destination": "/api"
+ }
+ ]
}
diff --git a/packages/bundler/README.md b/packages/bundler/README.md
index ca70f64b73e..660f565e947 100644
--- a/packages/bundler/README.md
+++ b/packages/bundler/README.md
@@ -1,18 +1,18 @@
# @remotion/bundler
-
+
Bundle Remotion compositions using Webpack
-
+
[](https://npmcharts.com/compare/@remotion/bundler?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/bundler --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/bundler) for more information.
diff --git a/packages/bundler/package.json b/packages/bundler/package.json
index 6f30c73350b..9ab8e780500 100644
--- a/packages/bundler/package.json
+++ b/packages/bundler/package.json
@@ -11,7 +11,7 @@
"url": "https://github.com/remotion-dev/remotion/issues"
},
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"test": "bun test src",
"make": "tsgo -d"
diff --git a/packages/bundler/src/bundle.ts b/packages/bundler/src/bundle.ts
index 7ba39db9b23..7927146b19e 100644
--- a/packages/bundler/src/bundle.ts
+++ b/packages/bundler/src/bundle.ts
@@ -1,10 +1,10 @@
-import type {GitSource, RenderDefaults} from '@remotion/studio-shared';
-import {getProjectName, SOURCE_MAP_ENDPOINT} from '@remotion/studio-shared';
import fs, {promises} from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import {promisify} from 'node:util';
import {isMainThread} from 'node:worker_threads';
+import type {GitSource, RenderDefaults} from '@remotion/studio-shared';
+import {getProjectName, SOURCE_MAP_ENDPOINT} from '@remotion/studio-shared';
import webpack from 'webpack';
import {copyDir} from './copy-dir';
import {indexHtml} from './index-html';
diff --git a/packages/bundler/src/esbuild-loader/index.ts b/packages/bundler/src/esbuild-loader/index.ts
index 4d4172cb695..6f2e2acc4d9 100644
--- a/packages/bundler/src/esbuild-loader/index.ts
+++ b/packages/bundler/src/esbuild-loader/index.ts
@@ -1,5 +1,5 @@
-import {transform as defaultEsbuildTransform} from 'esbuild';
import path from 'node:path';
+import {transform as defaultEsbuildTransform} from 'esbuild';
import type webpack from 'webpack';
import type {LoaderOptions} from './interfaces';
diff --git a/packages/captions/README.md b/packages/captions/README.md
index 318585cf41c..75c141b5a24 100644
--- a/packages/captions/README.md
+++ b/packages/captions/README.md
@@ -1,18 +1,18 @@
# @remotion/captions
-
+
Primitives for dealing with captions
-
+
[](https://npmcharts.com/compare/@remotion/captions?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/captions --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://remotion.dev/docs/captions/api) for more information.
diff --git a/packages/captions/package.json b/packages/captions/package.json
index 6f540a2fd5a..6950aacbc63 100644
--- a/packages/captions/package.json
+++ b/packages/captions/package.json
@@ -11,7 +11,7 @@
"url": "https://github.com/remotion-dev/remotion/issues"
},
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"test": "bun test src",
"make": "tsgo -d"
diff --git a/packages/cli/README.md b/packages/cli/README.md
index 16c024fa1fe..fce0b379698 100644
--- a/packages/cli/README.md
+++ b/packages/cli/README.md
@@ -1,18 +1,18 @@
# @remotion/cli
-
+
Control Remotion features using the `npx remotion` command
-
+
[](https://npmcharts.com/compare/@remotion/cli?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/cli --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/cli) for more information.
diff --git a/packages/cli/package.json b/packages/cli/package.json
index fae31681f9f..985dd08186c 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -13,7 +13,7 @@
"remotiond": "remotiond-cli.js"
},
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"test": "bun test src",
"make": "tsgo -d"
diff --git a/packages/cli/src/add.ts b/packages/cli/src/add.ts
index 86b4e757d16..404892dcd7e 100644
--- a/packages/cli/src/add.ts
+++ b/packages/cli/src/add.ts
@@ -1,7 +1,7 @@
-import {RenderInternals, type LogLevel} from '@remotion/renderer';
-import {StudioServerInternals} from '@remotion/studio-server';
import {spawn} from 'node:child_process';
import fs from 'node:fs';
+import {RenderInternals, type LogLevel} from '@remotion/renderer';
+import {StudioServerInternals} from '@remotion/studio-server';
import {chalk} from './chalk';
import {EXTRA_PACKAGES} from './extra-packages';
import {listOfRemotionPackages} from './list-of-remotion-packages';
diff --git a/packages/cli/src/bundle.ts b/packages/cli/src/bundle.ts
index a8e5ba9a27f..aac53753c07 100644
--- a/packages/cli/src/bundle.ts
+++ b/packages/cli/src/bundle.ts
@@ -1,9 +1,9 @@
+import {existsSync, readdirSync, readFileSync, rmSync, writeFileSync} from 'fs';
+import path from 'path';
import {BundlerInternals} from '@remotion/bundler';
import type {LogLevel} from '@remotion/renderer';
import {BrowserSafeApis} from '@remotion/renderer/client';
import {StudioServerInternals} from '@remotion/studio-server';
-import {existsSync, readdirSync, readFileSync, rmSync, writeFileSync} from 'fs';
-import path from 'path';
import {chalk} from './chalk';
import {findEntryPoint} from './entry-point';
import {getGitSource} from './get-github-repository';
diff --git a/packages/cli/src/config/index.ts b/packages/cli/src/config/index.ts
index a45826667a0..26f1f072dfe 100644
--- a/packages/cli/src/config/index.ts
+++ b/packages/cli/src/config/index.ts
@@ -1,20 +1,3 @@
-import {getBrowser} from './browser';
-import {getConcurrency} from './concurrency';
-import {getDotEnvLocation} from './env-file';
-import {getShouldOutputImageSequence} from './image-sequence';
-import {getOutputLocation} from './output-location';
-import {
- defaultOverrideFunction,
- getWebpackOverrideFn,
-} from './override-webpack';
-import {
- getRendererPortFromConfigFile,
- getRendererPortFromConfigFileAndCliFlag,
- getStudioPort,
-} from './preview-server';
-import {getStillFrame, setStillFrame} from './still-frame';
-import {getWebpackCaching} from './webpack-caching';
-
import type {WebpackConfiguration} from '@remotion/bundler';
import type {
BrowserExecutable,
@@ -31,21 +14,37 @@ import type {
import type {HardwareAccelerationOption} from '@remotion/renderer/client';
import {BrowserSafeApis} from '@remotion/renderer/client';
import {StudioServerInternals} from '@remotion/studio-server';
+import {getBrowser} from './browser';
import {
getBufferStateDelayInMilliseconds,
setBufferStateDelayInMilliseconds,
} from './buffer-state-delay-in-milliseconds';
+import {getConcurrency} from './concurrency';
import type {Concurrency} from './concurrency';
import {getEntryPoint, setEntryPoint} from './entry-point';
+import {getDotEnvLocation} from './env-file';
import {
getFfmpegOverrideFunction,
setFfmpegOverrideFunction,
} from './ffmpeg-override';
+import {getShouldOutputImageSequence} from './image-sequence';
import {getMetadata, setMetadata} from './metadata';
+import {getOutputLocation} from './output-location';
import {setOutputLocation} from './output-location';
+import {
+ defaultOverrideFunction,
+ getWebpackOverrideFn,
+} from './override-webpack';
import type {WebpackOverrideFn} from './override-webpack';
import {overrideWebpackConfig} from './override-webpack';
+import {
+ getRendererPortFromConfigFile,
+ getRendererPortFromConfigFileAndCliFlag,
+ getStudioPort,
+} from './preview-server';
import {setPort, setRendererPort, setStudioPort} from './preview-server';
+import {getStillFrame, setStillFrame} from './still-frame';
+import {getWebpackCaching} from './webpack-caching';
import {getWebpackPolling} from './webpack-poll';
export type {Concurrency, WebpackConfiguration, WebpackOverrideFn};
diff --git a/packages/cli/src/convert-entry-point-to-serve-url.ts b/packages/cli/src/convert-entry-point-to-serve-url.ts
index 25c15e4b045..a73dcfda8f7 100644
--- a/packages/cli/src/convert-entry-point-to-serve-url.ts
+++ b/packages/cli/src/convert-entry-point-to-serve-url.ts
@@ -1,5 +1,5 @@
-import {RenderInternals} from '@remotion/renderer';
import path from 'node:path';
+import {RenderInternals} from '@remotion/renderer';
export const convertEntryPointToServeUrl = (entryPoint: string) => {
const fullPath = RenderInternals.isServeUrl(entryPoint)
diff --git a/packages/cli/src/entry-point.ts b/packages/cli/src/entry-point.ts
index 1c3af4dd064..24e6e34f31c 100644
--- a/packages/cli/src/entry-point.ts
+++ b/packages/cli/src/entry-point.ts
@@ -1,7 +1,7 @@
-import type {LogLevel} from '@remotion/renderer';
-import {RenderInternals} from '@remotion/renderer';
import {existsSync} from 'node:fs';
import path from 'node:path';
+import type {LogLevel} from '@remotion/renderer';
+import {RenderInternals} from '@remotion/renderer';
import {ConfigInternals} from './config';
import {Log} from './log';
diff --git a/packages/cli/src/ffmpeg.ts b/packages/cli/src/ffmpeg.ts
index e9624a895b6..7594a9837a9 100644
--- a/packages/cli/src/ffmpeg.ts
+++ b/packages/cli/src/ffmpeg.ts
@@ -1,8 +1,8 @@
+import {spawnSync} from 'node:child_process';
+import path from 'node:path';
import type {LogLevel} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
import {BrowserSafeApis} from '@remotion/renderer/client';
-import {spawnSync} from 'node:child_process';
-import path from 'node:path';
import {parsedCli} from './parsed-cli';
export const dynamicLibEnv = (
diff --git a/packages/cli/src/get-cli-options.ts b/packages/cli/src/get-cli-options.ts
index 83401d64472..9e527c8960a 100644
--- a/packages/cli/src/get-cli-options.ts
+++ b/packages/cli/src/get-cli-options.ts
@@ -1,7 +1,7 @@
-import type {LogLevel} from '@remotion/renderer';
-import {BrowserSafeApis} from '@remotion/renderer/client';
import fs from 'node:fs';
import path from 'node:path';
+import type {LogLevel} from '@remotion/renderer';
+import {BrowserSafeApis} from '@remotion/renderer/client';
import {ConfigInternals} from './config';
import {getEnvironmentVariables} from './get-env';
import {getInputProps} from './get-input-props';
diff --git a/packages/cli/src/get-config-file-name.ts b/packages/cli/src/get-config-file-name.ts
index 789fc6640ac..84278972ae7 100644
--- a/packages/cli/src/get-config-file-name.ts
+++ b/packages/cli/src/get-config-file-name.ts
@@ -1,6 +1,6 @@
-import {BrowserSafeApis} from '@remotion/renderer/client';
import {existsSync} from 'node:fs';
import path from 'node:path';
+import {BrowserSafeApis} from '@remotion/renderer/client';
import {loadConfigFile} from './load-config';
import {Log} from './log';
import {parsedCli} from './parsed-cli';
diff --git a/packages/cli/src/get-env.ts b/packages/cli/src/get-env.ts
index 42464d3ad89..7fd2d3105cd 100644
--- a/packages/cli/src/get-env.ts
+++ b/packages/cli/src/get-env.ts
@@ -1,10 +1,10 @@
+import fs, {readFileSync} from 'node:fs';
+import path from 'node:path';
import type {LogLevel} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
import {BrowserSafeApis} from '@remotion/renderer/client';
import {StudioServerInternals} from '@remotion/studio-server';
import dotenv from 'dotenv';
-import fs, {readFileSync} from 'node:fs';
-import path from 'node:path';
import {chalk} from './chalk';
import {makeHyperlink} from './hyperlinks/make-link';
import {Log} from './log';
diff --git a/packages/cli/src/get-github-repository.ts b/packages/cli/src/get-github-repository.ts
index d7e212752a1..4cba19c3b40 100644
--- a/packages/cli/src/get-github-repository.ts
+++ b/packages/cli/src/get-github-repository.ts
@@ -1,9 +1,9 @@
-import {BundlerInternals} from '@remotion/bundler';
-import type {LogLevel} from '@remotion/renderer';
-import type {GitSource} from '@remotion/studio-shared';
import {execSync} from 'child_process';
import {existsSync, readFileSync} from 'fs';
import path from 'path';
+import {BundlerInternals} from '@remotion/bundler';
+import type {LogLevel} from '@remotion/renderer';
+import type {GitSource} from '@remotion/studio-shared';
import {Log} from './log';
export type ParsedGitRemote = {
diff --git a/packages/cli/src/get-input-props.ts b/packages/cli/src/get-input-props.ts
index 0297e229be7..eec942cf982 100644
--- a/packages/cli/src/get-input-props.ts
+++ b/packages/cli/src/get-input-props.ts
@@ -1,8 +1,8 @@
-import type {LogLevel, LogOptions} from '@remotion/renderer';
-import {BrowserSafeApis} from '@remotion/renderer/client';
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
+import type {LogLevel, LogOptions} from '@remotion/renderer';
+import {BrowserSafeApis} from '@remotion/renderer/client';
import {Log} from './log';
import {parsedCli} from './parsed-cli';
diff --git a/packages/cli/src/initialize-cli.ts b/packages/cli/src/initialize-cli.ts
index 624ea2cbdbf..37bf1ecf533 100644
--- a/packages/cli/src/initialize-cli.ts
+++ b/packages/cli/src/initialize-cli.ts
@@ -1,6 +1,6 @@
+import path from 'path';
import type {LogLevel} from '@remotion/renderer';
import {BrowserSafeApis} from '@remotion/renderer/client';
-import path from 'path';
import {loadConfig} from './get-config-file-name';
import {makeHyperlink} from './hyperlinks/make-link';
import {Log} from './log';
diff --git a/packages/cli/src/load-config.ts b/packages/cli/src/load-config.ts
index b7044998009..09949f96052 100644
--- a/packages/cli/src/load-config.ts
+++ b/packages/cli/src/load-config.ts
@@ -1,7 +1,7 @@
-import {BundlerInternals} from '@remotion/bundler';
import fs from 'node:fs';
import path from 'node:path';
import {isMainThread} from 'node:worker_threads';
+import {BundlerInternals} from '@remotion/bundler';
import {Log} from './log';
export const loadConfigFile = async (
diff --git a/packages/cli/src/on-artifact.ts b/packages/cli/src/on-artifact.ts
index 0ed587898e7..53a2aea8c3c 100644
--- a/packages/cli/src/on-artifact.ts
+++ b/packages/cli/src/on-artifact.ts
@@ -1,7 +1,7 @@
-import type {OnArtifact} from '@remotion/renderer';
-import type {ArtifactProgress} from '@remotion/studio-shared';
import {existsSync, mkdirSync, writeFileSync} from 'fs';
import path from 'path';
+import type {OnArtifact} from '@remotion/renderer';
+import type {ArtifactProgress} from '@remotion/studio-shared';
export const handleOnArtifact = ({
artifactState,
diff --git a/packages/cli/src/render-flows/render.ts b/packages/cli/src/render-flows/render.ts
index 13152e0d0bd..e4c2be71bc4 100644
--- a/packages/cli/src/render-flows/render.ts
+++ b/packages/cli/src/render-flows/render.ts
@@ -1,3 +1,6 @@
+import fs, {existsSync} from 'node:fs';
+import os from 'node:os';
+import path from 'node:path';
import type {
AudioCodec,
Browser,
@@ -35,9 +38,6 @@ import {
type ArtifactProgress,
type BrowserDownloadState,
} from '@remotion/studio-shared';
-import fs, {existsSync} from 'node:fs';
-import os from 'node:os';
-import path from 'node:path';
import type {_InternalTypes} from 'remotion';
import {NoReactInternals} from 'remotion/no-react';
import {defaultBrowserDownloadProgress} from '../browser-download-bar';
diff --git a/packages/cli/src/render-flows/still.ts b/packages/cli/src/render-flows/still.ts
index 69437bf9123..da874e75153 100644
--- a/packages/cli/src/render-flows/still.ts
+++ b/packages/cli/src/render-flows/still.ts
@@ -1,5 +1,7 @@
// Prints to CLI and also reports back to browser
+import {existsSync, mkdirSync} from 'node:fs';
+import path from 'node:path';
import type {
Browser,
BrowserExecutable,
@@ -17,8 +19,6 @@ import type {
JobProgressCallback,
} from '@remotion/studio-server';
import type {BrowserDownloadState} from '@remotion/studio-shared';
-import {existsSync, mkdirSync} from 'node:fs';
-import path from 'node:path';
import {NoReactInternals} from 'remotion/no-react';
import {defaultBrowserDownloadProgress} from '../browser-download-bar';
import {chalk} from '../chalk';
diff --git a/packages/cli/src/render-queue/queue.ts b/packages/cli/src/render-queue/queue.ts
index 15ca3f743b4..f5ab2c87d46 100644
--- a/packages/cli/src/render-queue/queue.ts
+++ b/packages/cli/src/render-queue/queue.ts
@@ -1,3 +1,4 @@
+import path from 'node:path';
import type {LogLevel} from '@remotion/renderer';
import type {
AggregateRenderProgress,
@@ -6,7 +7,6 @@ import type {
RenderJobWithCleanup,
} from '@remotion/studio-server';
import {StudioServerInternals} from '@remotion/studio-server';
-import path from 'node:path';
import {chalk} from '../chalk';
import {Log} from '../log';
import {printError} from '../print-error';
diff --git a/packages/cli/src/setup-cache.ts b/packages/cli/src/setup-cache.ts
index 64fa6b66308..28e0924711f 100644
--- a/packages/cli/src/setup-cache.ts
+++ b/packages/cli/src/setup-cache.ts
@@ -1,11 +1,11 @@
+import {existsSync} from 'fs';
+import path from 'path';
import type {MandatoryLegacyBundleOptions} from '@remotion/bundler';
import {BundlerInternals} from '@remotion/bundler';
import type {LogLevel} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
import type {BundlingState, CopyingState} from '@remotion/studio-server';
import type {GitSource} from '@remotion/studio-shared';
-import {existsSync} from 'fs';
-import path from 'path';
import {ConfigInternals} from './config';
import {getRenderDefaults} from './get-render-defaults';
import {Log} from './log';
diff --git a/packages/cli/src/show-compositions-picker.ts b/packages/cli/src/show-compositions-picker.ts
index ed418cea6bc..c7e3c6d6f08 100644
--- a/packages/cli/src/show-compositions-picker.ts
+++ b/packages/cli/src/show-compositions-picker.ts
@@ -1,7 +1,6 @@
-import {selectAsync} from './composition-prompts';
-
import type {getCompositions, LogLevel} from '@remotion/renderer';
import {chalk} from './chalk';
+import {selectAsync} from './composition-prompts';
type Await = T extends PromiseLike ? U : T;
export const showSingleCompositionsPicker = async (
diff --git a/packages/cli/src/skills.ts b/packages/cli/src/skills.ts
index 9d204e07f2d..c408ba97d04 100644
--- a/packages/cli/src/skills.ts
+++ b/packages/cli/src/skills.ts
@@ -1,5 +1,5 @@
-import type {LogLevel} from '@remotion/renderer';
import {spawn} from 'node:child_process';
+import type {LogLevel} from '@remotion/renderer';
import {chalk} from './chalk';
import {Log} from './log';
diff --git a/packages/cli/src/test/codec.test.ts b/packages/cli/src/test/codec.test.ts
index 69eb639b956..0e9c239207a 100644
--- a/packages/cli/src/test/codec.test.ts
+++ b/packages/cli/src/test/codec.test.ts
@@ -1,6 +1,6 @@
+import {describe, expect, test} from 'bun:test';
import type {CodecOrUndefined} from '@remotion/renderer';
import {BrowserSafeApis} from '@remotion/renderer/client';
-import {describe, expect, test} from 'bun:test';
import {expectToThrow} from './expect-to-throw';
// setCodec
diff --git a/packages/cli/src/test/config-chromium.test.ts b/packages/cli/src/test/config-chromium.test.ts
index 2968f2d2422..e160ea1a370 100644
--- a/packages/cli/src/test/config-chromium.test.ts
+++ b/packages/cli/src/test/config-chromium.test.ts
@@ -1,5 +1,5 @@
-import {BrowserSafeApis} from '@remotion/renderer/client';
import {expect, test} from 'bun:test';
+import {BrowserSafeApis} from '@remotion/renderer/client';
import {Config} from '../config';
test('getChromiumOpenGlRenderer from Config - angle value', () => {
diff --git a/packages/cli/src/test/crf.test.ts b/packages/cli/src/test/crf.test.ts
index 4e5056ec663..4f6ee339946 100644
--- a/packages/cli/src/test/crf.test.ts
+++ b/packages/cli/src/test/crf.test.ts
@@ -1,5 +1,5 @@
-import {BrowserSafeApis} from '@remotion/renderer/client';
import {describe, test} from 'bun:test';
+import {BrowserSafeApis} from '@remotion/renderer/client';
import {expectToThrow} from './expect-to-throw';
describe('set crf invalid input', () => {
diff --git a/packages/cli/src/test/final-output-codec.test.ts b/packages/cli/src/test/final-output-codec.test.ts
index 93f5c1544a4..080127b8abd 100644
--- a/packages/cli/src/test/final-output-codec.test.ts
+++ b/packages/cli/src/test/final-output-codec.test.ts
@@ -1,6 +1,6 @@
+import {describe, expect, test} from 'bun:test';
import type {Codec, CodecOrUndefined} from '@remotion/renderer';
import {BrowserSafeApis} from '@remotion/renderer/client';
-import {describe, expect, test} from 'bun:test';
const {videoCodecOption} = BrowserSafeApis.options;
diff --git a/packages/cli/src/test/log.test.ts b/packages/cli/src/test/log.test.ts
index c8d8d2a7388..81e62c69e4e 100644
--- a/packages/cli/src/test/log.test.ts
+++ b/packages/cli/src/test/log.test.ts
@@ -1,7 +1,7 @@
+import {describe, expect, test} from 'bun:test';
import type {LogLevel} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
import {BrowserSafeApis} from '@remotion/renderer/client';
-import {describe, expect, test} from 'bun:test';
const {logLevelOption} = BrowserSafeApis.options;
diff --git a/packages/cli/src/test/overwrite.test.ts b/packages/cli/src/test/overwrite.test.ts
index 064c2cd90d1..bdad7fc309d 100644
--- a/packages/cli/src/test/overwrite.test.ts
+++ b/packages/cli/src/test/overwrite.test.ts
@@ -1,5 +1,5 @@
-import {BrowserSafeApis} from '@remotion/renderer/client';
import {afterEach, beforeAll, expect, test} from 'bun:test';
+import {BrowserSafeApis} from '@remotion/renderer/client';
import {expectToThrow} from './expect-to-throw';
const invalidOverwrite = 555;
diff --git a/packages/cli/src/test/pixel-format.test.ts b/packages/cli/src/test/pixel-format.test.ts
index 6d8bbcaf364..820d6e0ca35 100644
--- a/packages/cli/src/test/pixel-format.test.ts
+++ b/packages/cli/src/test/pixel-format.test.ts
@@ -1,6 +1,6 @@
+import {describe, expect, test} from 'bun:test';
import type {PixelFormat} from '@remotion/renderer';
import {BrowserSafeApis} from '@remotion/renderer/client';
-import {describe, expect, test} from 'bun:test';
import {expectToThrow} from './expect-to-throw';
const {pixelFormatOption} = BrowserSafeApis.options;
diff --git a/packages/cli/src/test/quality.test.ts b/packages/cli/src/test/quality.test.ts
index ceb85f75084..320d6ada7c3 100644
--- a/packages/cli/src/test/quality.test.ts
+++ b/packages/cli/src/test/quality.test.ts
@@ -1,5 +1,5 @@
-import {BrowserSafeApis} from '@remotion/renderer/client';
import {describe, expect, test} from 'bun:test';
+import {BrowserSafeApis} from '@remotion/renderer/client';
import {expectToThrow} from './expect-to-throw';
const setJpegQuality = BrowserSafeApis.options.jpegQualityOption.setConfig;
diff --git a/packages/cli/src/test/range.test.tsx b/packages/cli/src/test/range.test.tsx
index 82053bda428..ebb41bec053 100644
--- a/packages/cli/src/test/range.test.tsx
+++ b/packages/cli/src/test/range.test.tsx
@@ -1,6 +1,6 @@
+import {describe, expect, test} from 'bun:test';
import {RenderInternals} from '@remotion/renderer';
import {BrowserSafeApis} from '@remotion/renderer/client';
-import {describe, expect, test} from 'bun:test';
import {expectToThrow} from './expect-to-throw';
const {framesOption} = BrowserSafeApis.options;
diff --git a/packages/cli/src/upgrade.ts b/packages/cli/src/upgrade.ts
index 5a7a440d263..464454bb2b8 100644
--- a/packages/cli/src/upgrade.ts
+++ b/packages/cli/src/upgrade.ts
@@ -1,6 +1,6 @@
+import {execSync, spawn} from 'node:child_process';
import {RenderInternals, type LogLevel} from '@remotion/renderer';
import {StudioServerInternals} from '@remotion/studio-server';
-import {execSync, spawn} from 'node:child_process';
import {chalk} from './chalk';
import {EXTRA_PACKAGES} from './extra-packages';
import {listOfRemotionPackages} from './list-of-remotion-packages';
diff --git a/packages/cli/src/versions.ts b/packages/cli/src/versions.ts
index 8e27cc7a091..a7b4dacb53a 100644
--- a/packages/cli/src/versions.ts
+++ b/packages/cli/src/versions.ts
@@ -1,7 +1,7 @@
-import type {LogLevel, LogOptions} from '@remotion/renderer';
-import {RenderInternals} from '@remotion/renderer';
import fs from 'node:fs';
import path from 'node:path';
+import type {LogLevel, LogOptions} from '@remotion/renderer';
+import {RenderInternals} from '@remotion/renderer';
import {chalk} from './chalk';
import {EXTRA_PACKAGES, EXTRA_PACKAGES_DOCS} from './extra-packages';
import {listOfRemotionPackages} from './list-of-remotion-packages';
diff --git a/packages/cloudrun/readme.md b/packages/cloudrun/readme.md
index 52bc2041272..6d3a166d574 100644
--- a/packages/cloudrun/readme.md
+++ b/packages/cloudrun/readme.md
@@ -1,18 +1,18 @@
# @remotion/cloudrun
-
+
Render Remotion videos on Google Cloud Run
-
+
[](https://npmcharts.com/compare/@remotion/cloudrun?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/cloudrun --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/cloudrun) for more information.
diff --git a/packages/cloudrun/src/admin/bundle-installer.ts b/packages/cloudrun/src/admin/bundle-installer.ts
index d06775d1a6d..8f73e12ad7f 100644
--- a/packages/cloudrun/src/admin/bundle-installer.ts
+++ b/packages/cloudrun/src/admin/bundle-installer.ts
@@ -1,7 +1,7 @@
-import {BundlerInternals} from '@remotion/bundler';
import {execSync} from 'child_process';
import {copyFileSync, mkdirSync, rmSync} from 'fs';
import path from 'path';
+import {BundlerInternals} from '@remotion/bundler';
export const hasGTar = () => {
try {
diff --git a/packages/cloudrun/src/admin/bundle-renderLogic.ts b/packages/cloudrun/src/admin/bundle-renderLogic.ts
index 6b6eb8a2836..30d4345c3d8 100644
--- a/packages/cloudrun/src/admin/bundle-renderLogic.ts
+++ b/packages/cloudrun/src/admin/bundle-renderLogic.ts
@@ -1,7 +1,7 @@
-import {BundlerInternals} from '@remotion/bundler';
-import {dir} from '@remotion/compositor-linux-x64-gnu';
import fs from 'fs';
import path from 'path';
+import {BundlerInternals} from '@remotion/bundler';
+import {dir} from '@remotion/compositor-linux-x64-gnu';
export const bundleRenderLogic = async () => {
const outdir = path.join(__dirname, '../../container/dist');
diff --git a/packages/cloudrun/src/api/download-file.ts b/packages/cloudrun/src/api/download-file.ts
index 08fe6dcf672..27c4019669c 100644
--- a/packages/cloudrun/src/api/download-file.ts
+++ b/packages/cloudrun/src/api/download-file.ts
@@ -1,5 +1,5 @@
-import {RenderInternals} from '@remotion/renderer';
import path from 'node:path';
+import {RenderInternals} from '@remotion/renderer';
import {getCloudStorageClient} from './helpers/get-cloud-storage-client';
/**
diff --git a/packages/cloudrun/src/cli/args.ts b/packages/cloudrun/src/cli/args.ts
index 7e81841f31f..54cb115dd71 100644
--- a/packages/cloudrun/src/cli/args.ts
+++ b/packages/cloudrun/src/cli/args.ts
@@ -1,5 +1,4 @@
import {CliInternals} from '@remotion/cli';
-
import type {Privacy} from '../defaults';
import type {GcpRegion} from '../pricing/gcp-regions';
diff --git a/packages/cloudrun/src/cli/commands/sites/create.ts b/packages/cloudrun/src/cli/commands/sites/create.ts
index ade660d47f5..a9e48666c01 100644
--- a/packages/cloudrun/src/cli/commands/sites/create.ts
+++ b/packages/cloudrun/src/cli/commands/sites/create.ts
@@ -1,8 +1,8 @@
+import {existsSync, lstatSync} from 'fs';
import {CliInternals} from '@remotion/cli';
import {ConfigInternals} from '@remotion/cli/config';
import type {LogLevel} from '@remotion/renderer';
import {BrowserSafeApis} from '@remotion/renderer/client';
-import {existsSync, lstatSync} from 'fs';
import {Internals} from 'remotion';
import {displaySiteInfo} from '.';
import {internalDeploySiteRaw} from '../../../api/deploy-site';
diff --git a/packages/cloudrun/src/functions/helpers/write-cloudrun-error.ts b/packages/cloudrun/src/functions/helpers/write-cloudrun-error.ts
index 81cc9c9554c..9443c426c12 100644
--- a/packages/cloudrun/src/functions/helpers/write-cloudrun-error.ts
+++ b/packages/cloudrun/src/functions/helpers/write-cloudrun-error.ts
@@ -1,5 +1,5 @@
-import {Storage} from '@google-cloud/storage';
import fs from 'node:fs';
+import {Storage} from '@google-cloud/storage';
export type CloudrunErrorInfo = {
type: 'renderer' | 'browser' | 'stitcher' | 'webhook';
diff --git a/packages/compositor-darwin-arm64/README.md b/packages/compositor-darwin-arm64/README.md
index fc907d94b98..e720b3a25ef 100644
--- a/packages/compositor-darwin-arm64/README.md
+++ b/packages/compositor-darwin-arm64/README.md
@@ -1,7 +1,7 @@
# @remotion/compositor-darwin-arm64
-
+
MacOS Apple Silicon binary for the Remotion Rust code
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/compositor-darwin-arm64/index.mjs b/packages/compositor-darwin-arm64/index.mjs
index ee5750400ec..1f49f39ea6c 100644
--- a/packages/compositor-darwin-arm64/index.mjs
+++ b/packages/compositor-darwin-arm64/index.mjs
@@ -1,4 +1,4 @@
-import * as url from "node:url";
-const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
+import * as url from 'node:url';
+const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
export const dir = __dirname;
diff --git a/packages/compositor-darwin-x64/README.md b/packages/compositor-darwin-x64/README.md
index 2e6487332a5..0801a942922 100644
--- a/packages/compositor-darwin-x64/README.md
+++ b/packages/compositor-darwin-x64/README.md
@@ -1,7 +1,7 @@
# @remotion/compositor-darwin-x64
-
+
MacOS x64 binary for the Remotion Rust code
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/compositor-darwin-x64/index.mjs b/packages/compositor-darwin-x64/index.mjs
index ee5750400ec..1f49f39ea6c 100644
--- a/packages/compositor-darwin-x64/index.mjs
+++ b/packages/compositor-darwin-x64/index.mjs
@@ -1,4 +1,4 @@
-import * as url from "node:url";
-const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
+import * as url from 'node:url';
+const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
export const dir = __dirname;
diff --git a/packages/compositor-linux-arm64-gnu/README.md b/packages/compositor-linux-arm64-gnu/README.md
index 9166c9dbc82..7ca9abed789 100644
--- a/packages/compositor-linux-arm64-gnu/README.md
+++ b/packages/compositor-linux-arm64-gnu/README.md
@@ -1,7 +1,7 @@
# @remotion/compositor-linux-arm64-gnu
-
+
Linux ARM64 binary for the Remotion Rust code
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/compositor-linux-arm64-gnu/index.mjs b/packages/compositor-linux-arm64-gnu/index.mjs
index ee5750400ec..1f49f39ea6c 100644
--- a/packages/compositor-linux-arm64-gnu/index.mjs
+++ b/packages/compositor-linux-arm64-gnu/index.mjs
@@ -1,4 +1,4 @@
-import * as url from "node:url";
-const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
+import * as url from 'node:url';
+const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
export const dir = __dirname;
diff --git a/packages/compositor-linux-arm64-musl/README.md b/packages/compositor-linux-arm64-musl/README.md
index 9c2be84e5fc..944a6dcdab8 100644
--- a/packages/compositor-linux-arm64-musl/README.md
+++ b/packages/compositor-linux-arm64-musl/README.md
@@ -1,7 +1,7 @@
# @remotion/compositor-linux-arm64-musl
-
+
Linux ARM64 binary for the Remotion Rust code
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/compositor-linux-arm64-musl/index.mjs b/packages/compositor-linux-arm64-musl/index.mjs
index ee5750400ec..1f49f39ea6c 100644
--- a/packages/compositor-linux-arm64-musl/index.mjs
+++ b/packages/compositor-linux-arm64-musl/index.mjs
@@ -1,4 +1,4 @@
-import * as url from "node:url";
-const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
+import * as url from 'node:url';
+const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
export const dir = __dirname;
diff --git a/packages/compositor-linux-x64-gnu/README.md b/packages/compositor-linux-x64-gnu/README.md
index a3a0c631310..52a78cdfc05 100644
--- a/packages/compositor-linux-x64-gnu/README.md
+++ b/packages/compositor-linux-x64-gnu/README.md
@@ -1,7 +1,7 @@
# @remotion/compositor-linux-x64-gnu
-
+
Linux x64 binary for the Remotion Rust code
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/compositor-linux-x64-gnu/index.mjs b/packages/compositor-linux-x64-gnu/index.mjs
index ee5750400ec..1f49f39ea6c 100644
--- a/packages/compositor-linux-x64-gnu/index.mjs
+++ b/packages/compositor-linux-x64-gnu/index.mjs
@@ -1,4 +1,4 @@
-import * as url from "node:url";
-const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
+import * as url from 'node:url';
+const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
export const dir = __dirname;
diff --git a/packages/compositor-linux-x64-musl/README.md b/packages/compositor-linux-x64-musl/README.md
index 8ed614f0496..5d64ac55257 100644
--- a/packages/compositor-linux-x64-musl/README.md
+++ b/packages/compositor-linux-x64-musl/README.md
@@ -1,7 +1,7 @@
# @remotion/compositor-linux-x64-musl
-
+
Linux x64 binary for the Remotion Rust code
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/compositor-linux-x64-musl/index.mjs b/packages/compositor-linux-x64-musl/index.mjs
index ee5750400ec..1f49f39ea6c 100644
--- a/packages/compositor-linux-x64-musl/index.mjs
+++ b/packages/compositor-linux-x64-musl/index.mjs
@@ -1,4 +1,4 @@
-import * as url from "node:url";
-const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
+import * as url from 'node:url';
+const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
export const dir = __dirname;
diff --git a/packages/compositor-win32-x64-msvc/README.md b/packages/compositor-win32-x64-msvc/README.md
index 777ff4c881b..efeef5bf344 100644
--- a/packages/compositor-win32-x64-msvc/README.md
+++ b/packages/compositor-win32-x64-msvc/README.md
@@ -1,5 +1,5 @@
# @remotion/compositor-win32-x64-msvc
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/compositor-win32-x64-msvc/index.mjs b/packages/compositor-win32-x64-msvc/index.mjs
index ee5750400ec..1f49f39ea6c 100644
--- a/packages/compositor-win32-x64-msvc/index.mjs
+++ b/packages/compositor-win32-x64-msvc/index.mjs
@@ -1,4 +1,4 @@
-import * as url from "node:url";
-const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
+import * as url from 'node:url';
+const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
export const dir = __dirname;
diff --git a/packages/compositor/Cargo.toml b/packages/compositor/Cargo.toml
index 4bee211a5ac..38784d7b00c 100644
--- a/packages/compositor/Cargo.toml
+++ b/packages/compositor/Cargo.toml
@@ -9,13 +9,13 @@ edition = "2021"
[dependencies]
png = "0.17.13"
-serde = {version = "1.0.151", features = ["derive"]}
+serde = { version = "1.0.151", features = ["derive"] }
serde_json = "1.0.89"
lazy_static = "1.4"
rayon-core = "1.12.1"
sysinfo = "0.30.7"
-mp4 = {git = "https://github.com/jonnyburger/mp4-rust", rev = "92ba375738cc2f05a4d754e1f968cf2e97d06641"}
-ffmpeg-next = {git = "https://github.com/remotion-dev/rust-ffmpeg", rev ="cd80e32bc6e0d00a59f4373a67966d9173b38d98"}
+mp4 = { git = "https://github.com/jonnyburger/mp4-rust", rev = "92ba375738cc2f05a4d754e1f968cf2e97d06641" }
+ffmpeg-next = { git = "https://github.com/remotion-dev/rust-ffmpeg", rev = "cd80e32bc6e0d00a59f4373a67966d9173b38d98" }
[[bin]]
name = "remotion"
diff --git a/packages/compositor/README.md b/packages/compositor/README.md
index 190215cf7af..fbdda26f590 100644
--- a/packages/compositor/README.md
+++ b/packages/compositor/README.md
@@ -1,7 +1,7 @@
# @remotion/compositor
-
+
Rust binary for Remotion
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/convert/app/components/AudioCodecSelection.tsx b/packages/convert/app/components/AudioCodecSelection.tsx
index c552292e68c..bb22bb3db6c 100644
--- a/packages/convert/app/components/AudioCodecSelection.tsx
+++ b/packages/convert/app/components/AudioCodecSelection.tsx
@@ -1,9 +1,3 @@
-import type {InputAudioTrack} from 'mediabunny';
-import React from 'react';
-import type {AudioOperation} from '~/lib/audio-operation';
-import {getAudioOperationId} from '~/lib/operation-key';
-import {AudioCodecDropWarning} from './AudioCodecDropWarning';
-import {AudioOperationOption} from './AudioOperationOption';
import {
Select,
SelectContent,
@@ -12,6 +6,12 @@ import {
SelectTrigger,
SelectValue,
} from '@remotion/design';
+import type {InputAudioTrack} from 'mediabunny';
+import React from 'react';
+import type {AudioOperation} from '~/lib/audio-operation';
+import {getAudioOperationId} from '~/lib/operation-key';
+import {AudioCodecDropWarning} from './AudioCodecDropWarning';
+import {AudioOperationOption} from './AudioOperationOption';
export const AudioCodecSelection: React.FC<{
readonly audioTrackOptions: AudioOperation[];
diff --git a/packages/convert/app/components/ContainerOverview.tsx b/packages/convert/app/components/ContainerOverview.tsx
index 13d4321f30f..3b91c2ba61f 100644
--- a/packages/convert/app/components/ContainerOverview.tsx
+++ b/packages/convert/app/components/ContainerOverview.tsx
@@ -1,4 +1,3 @@
-import {Table, TableBody, TableCell, TableRow} from '@/components/ui/table';
import type {
InputAudioTrack,
InputFormat,
@@ -6,6 +5,7 @@ import type {
MetadataTags,
} from 'mediabunny';
import React from 'react';
+import {Table, TableBody, TableCell, TableRow} from '@/components/ui/table';
import type {Dimensions} from '~/lib/calculate-new-dimensions-from-dimensions';
import {formatBytes} from '~/lib/format-bytes';
import {formatSeconds} from '~/lib/format-seconds';
diff --git a/packages/convert/app/components/ConvertForm.tsx b/packages/convert/app/components/ConvertForm.tsx
index 6d0011f8bff..9f20907ff77 100644
--- a/packages/convert/app/components/ConvertForm.tsx
+++ b/packages/convert/app/components/ConvertForm.tsx
@@ -1,3 +1,11 @@
+import {
+ Select,
+ SelectContent,
+ SelectGroup,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from '@remotion/design';
import type {InputAudioTrack, InputVideoTrack} from 'mediabunny';
import React from 'react';
import {
@@ -12,14 +20,6 @@ import type {SupportedConfigs} from './get-supported-configs';
import {SelectionSkeleton} from './SelectionSkeleton';
import {AudioTrackLabel, VideoTrackLabel} from './TrackSelectionLabels';
import {Label} from './ui/label';
-import {
- Select,
- SelectContent,
- SelectGroup,
- SelectItem,
- SelectTrigger,
- SelectValue,
-} from '@remotion/design';
import {VideoCodecSelection} from './VideoCodecSelection';
export const ConvertForm: React.FC<{
diff --git a/packages/convert/app/components/FileAvailable.tsx b/packages/convert/app/components/FileAvailable.tsx
index 226431ff0b4..9ec388296f0 100644
--- a/packages/convert/app/components/FileAvailable.tsx
+++ b/packages/convert/app/components/FileAvailable.tsx
@@ -14,9 +14,9 @@ import {VideoPlayer} from './MediaPlayer';
import {Page} from './Page';
import {Probe} from './Probe';
import {ReplaceVideo} from './ReplaceVideo';
-import type {VideoThumbnailRef} from './VideoThumbnail';
import Transcribe from './transcribe/App';
import {useProbe} from './use-probe';
+import type {VideoThumbnailRef} from './VideoThumbnail';
export const FileAvailable: React.FC<{
readonly src: Source;
diff --git a/packages/convert/app/components/MuxPlayer.tsx b/packages/convert/app/components/MuxPlayer.tsx
index fb03eedd734..54b7137eecf 100644
--- a/packages/convert/app/components/MuxPlayer.tsx
+++ b/packages/convert/app/components/MuxPlayer.tsx
@@ -10,7 +10,6 @@ import {
defaultLayoutIcons,
} from '@vidstack/react/player/layouts/default';
import React, {useCallback} from 'react';
-
import '@vidstack/react/player/styles/default/theme.css';
import '@vidstack/react/player/styles/default/layouts/video.css';
diff --git a/packages/convert/app/components/Probe.tsx b/packages/convert/app/components/Probe.tsx
index a9584f0b78d..edd2af6edeb 100644
--- a/packages/convert/app/components/Probe.tsx
+++ b/packages/convert/app/components/Probe.tsx
@@ -10,19 +10,19 @@ import {useThumbnailAndWaveform} from '~/lib/use-thumbnail';
import {AudioTrackOverview} from './AudioTrackOverview';
import {ContainerOverview} from './ContainerOverview';
import {EmbeddedImage} from './EmbeddedImage';
+import {getBrightnessOfFrame} from './get-brightness-of-frame';
import {SourceLabel} from './SourceLabel';
import {TrackSwitcher} from './TrackSwitcher';
-import type {VideoThumbnailRef} from './VideoThumbnail';
-import {VideoThumbnail} from './VideoThumbnail';
-import {VideoTrackOverview} from './VideoTrackOverview';
-import {getBrightnessOfFrame} from './get-brightness-of-frame';
-import styles from './probe.module.css';
import {Button} from './ui/button';
import {Card, CardDescription, CardHeader, CardTitle} from './ui/card';
import {ScrollArea} from './ui/scroll-area';
import {Separator} from './ui/separator';
import {Skeleton} from './ui/skeleton';
import type {ProbeResult} from './use-probe';
+import type {VideoThumbnailRef} from './VideoThumbnail';
+import {VideoThumbnail} from './VideoThumbnail';
+import {VideoTrackOverview} from './VideoTrackOverview';
+import styles from './probe.module.css';
const idealBrightness = 0.8;
diff --git a/packages/convert/app/components/ResampleUi.tsx b/packages/convert/app/components/ResampleUi.tsx
index 796c544a1ec..7fde0150ca3 100644
--- a/packages/convert/app/components/ResampleUi.tsx
+++ b/packages/convert/app/components/ResampleUi.tsx
@@ -1,4 +1,3 @@
-import {Label} from './ui/label';
import {
Select,
SelectContent,
@@ -6,6 +5,7 @@ import {
SelectTrigger,
SelectValue,
} from '@remotion/design';
+import {Label} from './ui/label';
const formatSampleRate = (rate: number): string => {
return `${(rate / 1000).toFixed(3)} Hz`;
diff --git a/packages/convert/app/components/VideoCodecSelection.tsx b/packages/convert/app/components/VideoCodecSelection.tsx
index 0c5e66b8565..cfc6e621e9f 100644
--- a/packages/convert/app/components/VideoCodecSelection.tsx
+++ b/packages/convert/app/components/VideoCodecSelection.tsx
@@ -1,7 +1,3 @@
-import type {InputVideoTrack} from 'mediabunny';
-import React from 'react';
-import type {VideoOperation} from '~/lib/audio-operation';
-import {getVideoOperationId} from '~/lib/operation-key';
import {
Select,
SelectContent,
@@ -10,6 +6,10 @@ import {
SelectTrigger,
SelectValue,
} from '@remotion/design';
+import type {InputVideoTrack} from 'mediabunny';
+import React from 'react';
+import type {VideoOperation} from '~/lib/audio-operation';
+import {getVideoOperationId} from '~/lib/operation-key';
import {VideoOperationOption} from './VideoOperationOption';
export const VideoCodecSelection: React.FC<{
diff --git a/packages/convert/app/components/VideoTrackOverview.tsx b/packages/convert/app/components/VideoTrackOverview.tsx
index fe63d078e02..ca18fe60d59 100644
--- a/packages/convert/app/components/VideoTrackOverview.tsx
+++ b/packages/convert/app/components/VideoTrackOverview.tsx
@@ -1,6 +1,6 @@
-import {Table, TableBody, TableCell, TableRow} from '@/components/ui/table';
import type {InputVideoTrack} from 'mediabunny';
import React, {useEffect, useState} from 'react';
+import {Table, TableBody, TableCell, TableRow} from '@/components/ui/table';
import {renderHumanReadableVideoCodec} from '~/lib/render-codec-label';
import {PacketList} from './PacketList';
import {TextButtonWithChevron} from './TexrButtonWithChevron';
diff --git a/packages/convert/app/components/timing-editor/CanvasWrapper.tsx b/packages/convert/app/components/timing-editor/CanvasWrapper.tsx
index d10026d0104..03eff5fb9af 100644
--- a/packages/convert/app/components/timing-editor/CanvasWrapper.tsx
+++ b/packages/convert/app/components/timing-editor/CanvasWrapper.tsx
@@ -10,7 +10,14 @@ export const CanvasWrapper: React.FC<{
readonly duration: number;
readonly fps: number;
readonly replayKey: number;
-}> = ({components, draggedState, draggedDuration, duration, fps, replayKey}) => {
+}> = ({
+ components,
+ draggedState,
+ draggedDuration,
+ duration,
+ fps,
+ replayKey,
+}) => {
const outer = useRef(null);
const elementSize = PlayerInternals.useElementSize(outer, {
diff --git a/packages/convert/app/components/timing-editor/TimingComponentEditor.tsx b/packages/convert/app/components/timing-editor/TimingComponentEditor.tsx
index f4d9afd387d..3a0ad104697 100644
--- a/packages/convert/app/components/timing-editor/TimingComponentEditor.tsx
+++ b/packages/convert/app/components/timing-editor/TimingComponentEditor.tsx
@@ -14,7 +14,9 @@ export const TimingComponentEditor: React.FC<{
readonly component: TimingComponent;
readonly draggedConfig: TimingConfig | null;
readonly calculatedDurationInFrames: number;
- readonly onModeChange: (mode: 'spring' | 'interpolate' | 'sine' | 'constant') => void;
+ readonly onModeChange: (
+ mode: 'spring' | 'interpolate' | 'sine' | 'constant',
+ ) => void;
readonly setDraggedConfig: (config: TimingConfig) => void;
readonly onChange: (config: TimingConfig) => void;
readonly onRelease: () => void;
@@ -75,7 +77,9 @@ export const TimingComponentEditor: React.FC<{
- onModeChange(value as 'spring' | 'interpolate' | 'sine' | 'constant')
+ onModeChange(
+ value as 'spring' | 'interpolate' | 'sine' | 'constant',
+ )
}
style={{width: '90%'}}
>
diff --git a/packages/convert/app/components/transcribe/downloadModel.tsx b/packages/convert/app/components/transcribe/downloadModel.tsx
index 5800d24f93d..e73f7f23d50 100644
--- a/packages/convert/app/components/transcribe/downloadModel.tsx
+++ b/packages/convert/app/components/transcribe/downloadModel.tsx
@@ -1,3 +1,11 @@
+import {
+ Select,
+ SelectContent,
+ SelectGroup,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from '@remotion/design';
import {
deleteModel,
type DownloadWhisperModelParams,
@@ -8,14 +16,6 @@ import {
import {useCallback, useEffect, useState} from 'react';
import {formatBytes} from '../../lib/format-bytes';
import {Label} from '../ui/label';
-import {
- Select,
- SelectContent,
- SelectGroup,
- SelectItem,
- SelectTrigger,
- SelectValue,
-} from '@remotion/design';
export default function DownloadModel({
selectedModel,
diff --git a/packages/convert/app/components/ui/badge.tsx b/packages/convert/app/components/ui/badge.tsx
index 1d9e9bfb136..edd85ca6cd4 100644
--- a/packages/convert/app/components/ui/badge.tsx
+++ b/packages/convert/app/components/ui/badge.tsx
@@ -1,6 +1,5 @@
import {cva, type VariantProps} from 'class-variance-authority';
import * as React from 'react';
-
import {cn} from '~/lib/utils';
const badgeVariants = cva(
@@ -24,7 +23,8 @@ const badgeVariants = cva(
);
export interface BadgeProps
- extends React.HTMLAttributes,
+ extends
+ React.HTMLAttributes,
VariantProps {}
const Badge = ({className, variant, ...props}: BadgeProps) => {
diff --git a/packages/convert/app/components/ui/button.tsx b/packages/convert/app/components/ui/button.tsx
index cebb7171696..f1d5e5597ea 100644
--- a/packages/convert/app/components/ui/button.tsx
+++ b/packages/convert/app/components/ui/button.tsx
@@ -1,7 +1,6 @@
import {Slot} from '@radix-ui/react-slot';
import {cva, type VariantProps} from 'class-variance-authority';
import * as React from 'react';
-
import {cn} from '~/lib/utils';
const buttonVariants = cva(
@@ -38,7 +37,8 @@ const buttonVariants = cva(
);
export interface ButtonProps
- extends React.ButtonHTMLAttributes,
+ extends
+ React.ButtonHTMLAttributes,
VariantProps {
// eslint-disable-next-line react/require-default-props
readonly asChild?: boolean;
diff --git a/packages/convert/app/components/ui/card.tsx b/packages/convert/app/components/ui/card.tsx
index 2d713539cc4..95752362fc8 100644
--- a/packages/convert/app/components/ui/card.tsx
+++ b/packages/convert/app/components/ui/card.tsx
@@ -1,5 +1,4 @@
import * as React from 'react';
-
import {cn} from '~/lib/utils';
const Card = React.forwardRef<
diff --git a/packages/convert/app/components/ui/checkbox.tsx b/packages/convert/app/components/ui/checkbox.tsx
index 29a5e885d6e..41a40c6f5ad 100644
--- a/packages/convert/app/components/ui/checkbox.tsx
+++ b/packages/convert/app/components/ui/checkbox.tsx
@@ -1,7 +1,6 @@
import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
import {Check} from 'lucide-react';
import * as React from 'react';
-
import {cn} from '~/lib/utils';
const Checkbox = React.forwardRef<
diff --git a/packages/convert/app/components/ui/dialog.tsx b/packages/convert/app/components/ui/dialog.tsx
index 51de6b5c2de..3b8f0286c18 100644
--- a/packages/convert/app/components/ui/dialog.tsx
+++ b/packages/convert/app/components/ui/dialog.tsx
@@ -3,7 +3,6 @@
import * as DialogPrimitive from '@radix-ui/react-dialog';
import {XIcon} from 'lucide-react';
import * as React from 'react';
-
import {cn} from '@/lib/utils';
function Dialog({...props}: React.ComponentProps) {
diff --git a/packages/convert/app/components/ui/input.tsx b/packages/convert/app/components/ui/input.tsx
index 28117bdd1ab..7ee6408da7c 100644
--- a/packages/convert/app/components/ui/input.tsx
+++ b/packages/convert/app/components/ui/input.tsx
@@ -1,9 +1,7 @@
import * as React from 'react';
-
import {cn} from '~/lib/utils';
-export interface InputProps
- extends React.InputHTMLAttributes {}
+export interface InputProps extends React.InputHTMLAttributes {}
const Input = React.forwardRef(
({className, type, ...props}, ref) => {
diff --git a/packages/convert/app/components/ui/label.tsx b/packages/convert/app/components/ui/label.tsx
index 90961d86e76..3261b66a805 100644
--- a/packages/convert/app/components/ui/label.tsx
+++ b/packages/convert/app/components/ui/label.tsx
@@ -1,7 +1,6 @@
import * as LabelPrimitive from '@radix-ui/react-label';
import {cva, type VariantProps} from 'class-variance-authority';
import * as React from 'react';
-
import {cn} from '~/lib/utils';
const labelVariants = cva(
diff --git a/packages/convert/app/components/ui/radio.tsx b/packages/convert/app/components/ui/radio.tsx
index 3d9ac9de39b..c7156992fa2 100644
--- a/packages/convert/app/components/ui/radio.tsx
+++ b/packages/convert/app/components/ui/radio.tsx
@@ -3,7 +3,6 @@
import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
import {Circle} from 'lucide-react';
import * as React from 'react';
-
import {cn} from '@/lib/utils';
const RadioGroup = React.forwardRef<
diff --git a/packages/convert/app/components/ui/scroll-area.tsx b/packages/convert/app/components/ui/scroll-area.tsx
index 8d2b5747496..49ebd6ceb6a 100644
--- a/packages/convert/app/components/ui/scroll-area.tsx
+++ b/packages/convert/app/components/ui/scroll-area.tsx
@@ -1,6 +1,5 @@
import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
import * as React from 'react';
-
import {cn} from '~/lib/utils';
const ScrollBar = React.forwardRef<
diff --git a/packages/convert/app/components/ui/separator.tsx b/packages/convert/app/components/ui/separator.tsx
index c8fa64ff187..44d4b2fd9fa 100644
--- a/packages/convert/app/components/ui/separator.tsx
+++ b/packages/convert/app/components/ui/separator.tsx
@@ -1,6 +1,5 @@
import * as SeparatorPrimitive from '@radix-ui/react-separator';
import * as React from 'react';
-
import {cn} from '~/lib/utils';
const Separator = React.forwardRef<
diff --git a/packages/convert/app/components/ui/slider.tsx b/packages/convert/app/components/ui/slider.tsx
index f69f0292a32..c6d99eab19b 100644
--- a/packages/convert/app/components/ui/slider.tsx
+++ b/packages/convert/app/components/ui/slider.tsx
@@ -1,6 +1,5 @@
import * as SliderPrimitive from '@radix-ui/react-slider';
import * as React from 'react';
-
import {cn} from '~/lib/utils';
const Slider = React.forwardRef<
diff --git a/packages/convert/app/components/ui/table.tsx b/packages/convert/app/components/ui/table.tsx
index 3d02aca0118..094e6193c43 100644
--- a/packages/convert/app/components/ui/table.tsx
+++ b/packages/convert/app/components/ui/table.tsx
@@ -1,5 +1,4 @@
import * as React from 'react';
-
import {cn} from '~/lib/utils';
const Table = React.forwardRef<
diff --git a/packages/convert/app/components/ui/textarea.tsx b/packages/convert/app/components/ui/textarea.tsx
index 0261b6962a8..799834c311a 100644
--- a/packages/convert/app/components/ui/textarea.tsx
+++ b/packages/convert/app/components/ui/textarea.tsx
@@ -1,5 +1,4 @@
import * as React from 'react';
-
import {cn} from '@/lib/utils';
const Textarea = React.forwardRef<
diff --git a/packages/convert/app/lib/prompt-helpers.ts b/packages/convert/app/lib/prompt-helpers.ts
index 50e5ae7e905..9ed36b82c7e 100644
--- a/packages/convert/app/lib/prompt-helpers.ts
+++ b/packages/convert/app/lib/prompt-helpers.ts
@@ -64,8 +64,7 @@ export const getRelativeTime = (dateStr: string): string => {
const days = Math.floor(hours / 24);
if (days < 30) return `${days} day${days === 1 ? '' : 's'} ago`;
const months = Math.floor(days / 30);
- if (months < 12)
- return `${months} month${months === 1 ? '' : 's'} ago`;
+ if (months < 12) return `${months} month${months === 1 ? '' : 's'} ago`;
const years = Math.floor(months / 12);
return `${years} year${years === 1 ? '' : 's'} ago`;
};
diff --git a/packages/convert/app/root.tsx b/packages/convert/app/root.tsx
index 8c7f8d733b3..1107a9e4ef8 100644
--- a/packages/convert/app/root.tsx
+++ b/packages/convert/app/root.tsx
@@ -1,8 +1,7 @@
+import {Links, Outlet, Scripts, ScrollRestoration} from '@remix-run/react';
import {ForceSpecificCursor} from './components/crop-ui/force-specific-cursor';
-import {DEFAULT_FAVICON} from './lib/default-favicon';
import './tailwind.css';
-
-import {Links, Outlet, Scripts, ScrollRestoration} from '@remix-run/react';
+import {DEFAULT_FAVICON} from './lib/default-favicon';
export const Layout = ({children}: {readonly children: React.ReactNode}) => {
return (
diff --git a/packages/convert/components.json b/packages/convert/components.json
index b146500c00c..866ab4691ab 100644
--- a/packages/convert/components.json
+++ b/packages/convert/components.json
@@ -1,20 +1,20 @@
{
- "$schema": "https://ui.shadcn.com/schema.json",
- "style": "default",
- "rsc": false,
- "tsx": true,
- "tailwind": {
- "config": "tailwind.config.ts",
- "css": "app/tailwind.css",
- "baseColor": "slate",
- "cssVariables": true,
- "prefix": ""
- },
- "aliases": {
- "components": "~/components",
- "utils": "~/lib/utils",
- "ui": "~/components/ui",
- "lib": "~/lib",
- "hooks": "~/hooks"
- }
-}
\ No newline at end of file
+ "$schema": "https://ui.shadcn.com/schema.json",
+ "style": "default",
+ "rsc": false,
+ "tsx": true,
+ "tailwind": {
+ "config": "tailwind.config.ts",
+ "css": "app/tailwind.css",
+ "baseColor": "slate",
+ "cssVariables": true,
+ "prefix": ""
+ },
+ "aliases": {
+ "components": "~/components",
+ "utils": "~/lib/utils",
+ "ui": "~/components/ui",
+ "lib": "~/lib",
+ "hooks": "~/hooks"
+ }
+}
diff --git a/packages/convert/postcss.config.js b/packages/convert/postcss.config.js
index a34a3d560dc..1970487b544 100644
--- a/packages/convert/postcss.config.js
+++ b/packages/convert/postcss.config.js
@@ -1,5 +1,5 @@
export default {
- plugins: {
- '@tailwindcss/postcss': {},
- },
+ plugins: {
+ '@tailwindcss/postcss': {},
+ },
};
diff --git a/packages/convert/vite-spa.config.ts b/packages/convert/vite-spa.config.ts
index d4d1e573037..1d94638a3b1 100644
--- a/packages/convert/vite-spa.config.ts
+++ b/packages/convert/vite-spa.config.ts
@@ -1,6 +1,6 @@
+import path from 'path';
import {vitePlugin as remix} from '@remix-run/dev';
import {installGlobals} from '@remix-run/node';
-import path from 'path';
import {defineConfig} from 'vite';
import tsconfigPaths from 'vite-tsconfig-paths';
diff --git a/packages/convert/vite.config.ts b/packages/convert/vite.config.ts
index 5152d878bf3..5a82facfef3 100644
--- a/packages/convert/vite.config.ts
+++ b/packages/convert/vite.config.ts
@@ -1,7 +1,7 @@
+import path from 'path';
import {vitePlugin as remix} from '@remix-run/dev';
import {installGlobals} from '@remix-run/node';
import {vercelPreset} from '@vercel/remix/vite';
-import path from 'path';
import {defineConfig} from 'vite';
import tsconfigPaths from 'vite-tsconfig-paths';
diff --git a/packages/core/package.json b/packages/core/package.json
index d435a5f6bfc..6bf17a4fc84 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -9,7 +9,7 @@
"types": "dist/cjs/index.d.ts",
"module": "dist/esm/index.mjs",
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"prepublishOnly": "bun ensure-correct-version.ts && cp ../../README.md .",
"lint": "eslint src",
"test": "bun test src/test",
diff --git a/packages/core/src/Artifact.tsx b/packages/core/src/Artifact.tsx
index b786d1da4a4..6ffecc8dbfc 100644
--- a/packages/core/src/Artifact.tsx
+++ b/packages/core/src/Artifact.tsx
@@ -1,7 +1,7 @@
import type React from 'react';
import {useContext, useLayoutEffect, useState} from 'react';
-import {RenderAssetManager} from './RenderAssetManager';
import type {DownloadBehavior} from './download-behavior';
+import {RenderAssetManager} from './RenderAssetManager';
import {useCurrentFrame} from './use-current-frame';
import {useRemotionEnvironment} from './use-remotion-environment';
diff --git a/packages/core/src/Img.tsx b/packages/core/src/Img.tsx
index 632d9ead32a..90a1d7d3d15 100644
--- a/packages/core/src/Img.tsx
+++ b/packages/core/src/Img.tsx
@@ -6,11 +6,11 @@ import React, {
useLayoutEffect,
useRef,
} from 'react';
-import {SequenceContext} from './SequenceContext.js';
import type {IsExact} from './audio/props.js';
import {cancelRender} from './cancel-render.js';
import {getCrossOriginValue} from './get-cross-origin-value.js';
import {usePreload} from './prefetch.js';
+import {SequenceContext} from './SequenceContext.js';
import {useBufferState} from './use-buffer-state.js';
import {useDelayRender} from './use-delay-render.js';
import {useRemotionEnvironment} from './use-remotion-environment.js';
diff --git a/packages/core/src/RemotionRoot.tsx b/packages/core/src/RemotionRoot.tsx
index 96b975dcbc9..424ecd3e2ed 100644
--- a/packages/core/src/RemotionRoot.tsx
+++ b/packages/core/src/RemotionRoot.tsx
@@ -1,15 +1,15 @@
import React, {useMemo} from 'react';
-import {EditorPropsProvider} from './EditorProps.js';
-import {SequenceManagerProvider} from './SequenceManager.js';
-import {TimelineContextProvider} from './TimelineContext.js';
import {SharedAudioContextProvider} from './audio/shared-audio-tags.js';
import {BufferingProvider} from './buffering.js';
+import {EditorPropsProvider} from './EditorProps.js';
import type {LoggingContextValue} from './log-level-context.js';
import {LogLevelContext} from './log-level-context.js';
import type {LogLevel} from './log.js';
import type {TNonceContext} from './nonce.js';
import {NonceContext} from './nonce.js';
import {PrefetchProvider} from './prefetch-state.js';
+import {SequenceManagerProvider} from './SequenceManager.js';
+import {TimelineContextProvider} from './TimelineContext.js';
import {MediaEnabledProvider} from './use-media-enabled.js';
import {DurationsContextProvider} from './video/duration-state.js';
diff --git a/packages/core/src/ResolveCompositionConfig.tsx b/packages/core/src/ResolveCompositionConfig.tsx
index 5957ba030ee..e2c992298f4 100644
--- a/packages/core/src/ResolveCompositionConfig.tsx
+++ b/packages/core/src/ResolveCompositionConfig.tsx
@@ -1,8 +1,8 @@
import {createContext, createRef, useContext, useMemo} from 'react';
import type {AnyComposition} from './CompositionManager.js';
import {CompositionManager} from './CompositionManagerContext.js';
-import {EditorPropsContext} from './EditorProps.js';
import {getInputProps} from './config/input-props.js';
+import {EditorPropsContext} from './EditorProps.js';
import {useRemotionEnvironment} from './use-remotion-environment.js';
import {validateDimension} from './validation/validate-dimensions.js';
import {validateDurationInFrames} from './validation/validate-duration-in-frames.js';
diff --git a/packages/core/src/Sequence.tsx b/packages/core/src/Sequence.tsx
index 51289bc0379..f55b1ab1525 100644
--- a/packages/core/src/Sequence.tsx
+++ b/packages/core/src/Sequence.tsx
@@ -8,6 +8,7 @@ import React, {
} from 'react';
import {AbsoluteFill} from './AbsoluteFill.js';
import type {LoopDisplay, SequenceControls} from './CompositionManager.js';
+import {Freeze} from './freeze.js';
import {useNonce} from './nonce.js';
import type {SequenceContextType} from './SequenceContext.js';
import {SequenceContext} from './SequenceContext.js';
@@ -17,11 +18,9 @@ import {
} from './SequenceManager.js';
import {useTimelinePosition} from './timeline-position-state.js';
import {TimelineContext} from './TimelineContext.js';
-import {useVideoConfig} from './use-video-config.js';
-
-import {Freeze} from './freeze.js';
import {useCurrentFrame} from './use-current-frame';
import {useRemotionEnvironment} from './use-remotion-environment.js';
+import {useVideoConfig} from './use-video-config.js';
import {ENABLE_V5_BREAKING_CHANGES} from './v5-flag.js';
export type AbsoluteFillLayout = {
diff --git a/packages/core/src/audio/Audio.tsx b/packages/core/src/audio/Audio.tsx
index 2c4e1c40c70..966b7200ead 100644
--- a/packages/core/src/audio/Audio.tsx
+++ b/packages/core/src/audio/Audio.tsx
@@ -1,12 +1,12 @@
/* eslint-disable @typescript-eslint/no-use-before-define */
import React, {forwardRef, useCallback, useContext} from 'react';
-import {Sequence} from '../Sequence.js';
import {getAbsoluteSrc} from '../absolute-src.js';
import {calculateMediaDuration} from '../calculate-media-duration.js';
import {cancelRender} from '../cancel-render.js';
import {addSequenceStackTraces} from '../enable-sequence-stack-traces.js';
import {Loop} from '../loop/index.js';
import {usePreload} from '../prefetch.js';
+import {Sequence} from '../Sequence.js';
import {useRemotionEnvironment} from '../use-remotion-environment.js';
import {useVideoConfig} from '../use-video-config.js';
import {validateMediaProps} from '../validate-media-props.js';
diff --git a/packages/core/src/audio/AudioForPreview.tsx b/packages/core/src/audio/AudioForPreview.tsx
index 4c5d4632b41..f3216a60f9e 100644
--- a/packages/core/src/audio/AudioForPreview.tsx
+++ b/packages/core/src/audio/AudioForPreview.tsx
@@ -8,12 +8,12 @@ import React, {
useRef,
useState,
} from 'react';
-import {SequenceContext} from '../SequenceContext.js';
-import {SequenceVisibilityToggleContext} from '../SequenceManager.js';
import {getCrossOriginValue} from '../get-cross-origin-value.js';
import {useLogLevel} from '../log-level-context.js';
import {usePreload} from '../prefetch.js';
import {random} from '../random.js';
+import {SequenceContext} from '../SequenceContext.js';
+import {SequenceVisibilityToggleContext} from '../SequenceManager.js';
import {useVolume} from '../use-amplification.js';
import {useMediaInTimeline} from '../use-media-in-timeline.js';
import {useMediaPlayback} from '../use-media-playback.js';
diff --git a/packages/core/src/audio/AudioForRendering.tsx b/packages/core/src/audio/AudioForRendering.tsx
index bdccaf5d38b..c457f34c445 100644
--- a/packages/core/src/audio/AudioForRendering.tsx
+++ b/packages/core/src/audio/AudioForRendering.tsx
@@ -8,10 +8,10 @@ import React, {
useMemo,
useRef,
} from 'react';
-import {RenderAssetManager} from '../RenderAssetManager.js';
-import {SequenceContext} from '../SequenceContext.js';
import {getAbsoluteSrc} from '../absolute-src.js';
import {random} from '../random.js';
+import {RenderAssetManager} from '../RenderAssetManager.js';
+import {SequenceContext} from '../SequenceContext.js';
import {useTimelinePosition} from '../timeline-position-state.js';
import {useCurrentFrame} from '../use-current-frame.js';
import {useDelayRender} from '../use-delay-render.js';
diff --git a/packages/core/src/audio/use-audio-frame.ts b/packages/core/src/audio/use-audio-frame.ts
index 97738d85e9f..15add44456b 100644
--- a/packages/core/src/audio/use-audio-frame.ts
+++ b/packages/core/src/audio/use-audio-frame.ts
@@ -1,6 +1,6 @@
import {useContext} from 'react';
-import {SequenceContext} from '../SequenceContext.js';
import {Loop} from '../loop/index.js';
+import {SequenceContext} from '../SequenceContext.js';
import {useCurrentFrame} from '../use-current-frame.js';
export const useMediaStartsAt = () => {
diff --git a/packages/core/src/series/index.tsx b/packages/core/src/series/index.tsx
index 0fc3971f9b5..03c260587b2 100644
--- a/packages/core/src/series/index.tsx
+++ b/packages/core/src/series/index.tsx
@@ -1,8 +1,8 @@
import type {FC, PropsWithChildren} from 'react';
import React, {Children, forwardRef, useMemo} from 'react';
+import {addSequenceStackTraces} from '../enable-sequence-stack-traces.js';
import type {LayoutAndStyle, SequenceProps} from '../Sequence.js';
import {Sequence} from '../Sequence.js';
-import {addSequenceStackTraces} from '../enable-sequence-stack-traces.js';
import {ENABLE_V5_BREAKING_CHANGES} from '../v5-flag.js';
import {validateDurationInFrames} from '../validation/validate-duration-in-frames.js';
import {flattenChildren} from './flatten-children.js';
diff --git a/packages/core/src/test/Img.test.tsx b/packages/core/src/test/Img.test.tsx
index 0ecf7aa9307..0f4d80c8950 100644
--- a/packages/core/src/test/Img.test.tsx
+++ b/packages/core/src/test/Img.test.tsx
@@ -1,5 +1,5 @@
-import {cleanup, render} from '@testing-library/react';
import {afterEach, beforeEach, expect, test} from 'bun:test';
+import {cleanup, render} from '@testing-library/react';
import React from 'react';
import {Img} from '../Img.js';
import {WrapSequenceContext} from './wrap-sequence-context.js';
diff --git a/packages/core/src/test/audio-for-rendering.test.tsx b/packages/core/src/test/audio-for-rendering.test.tsx
index bd4c2699565..5f16c046641 100644
--- a/packages/core/src/test/audio-for-rendering.test.tsx
+++ b/packages/core/src/test/audio-for-rendering.test.tsx
@@ -1,9 +1,9 @@
-import {cleanup, render} from '@testing-library/react';
import {afterEach, beforeEach, describe, expect, mock, test} from 'bun:test';
+import {cleanup, render} from '@testing-library/react';
import React from 'react';
+import {AudioForRendering} from '../audio/AudioForRendering.js';
import {CanUseRemotionHooksProvider} from '../CanUseRemotionHooks.js';
import {RenderAssetManager} from '../RenderAssetManager.js';
-import {AudioForRendering} from '../audio/AudioForRendering.js';
import {expectToThrow} from './expect-to-throw.js';
import {WrapSequenceContext} from './wrap-sequence-context.js';
diff --git a/packages/core/src/test/audio.test.tsx b/packages/core/src/test/audio.test.tsx
index ff27721f0b9..1e2c368563e 100644
--- a/packages/core/src/test/audio.test.tsx
+++ b/packages/core/src/test/audio.test.tsx
@@ -1,5 +1,5 @@
-import {cleanup, render} from '@testing-library/react';
import {afterEach, expect, test} from 'bun:test';
+import {cleanup, render} from '@testing-library/react';
import {Html5Audio} from '../audio/index.js';
import {WrapSequenceContext} from './wrap-sequence-context.js';
diff --git a/packages/core/src/test/composition-rules.test.tsx b/packages/core/src/test/composition-rules.test.tsx
index bbd52512acb..039a180c37b 100644
--- a/packages/core/src/test/composition-rules.test.tsx
+++ b/packages/core/src/test/composition-rules.test.tsx
@@ -1,5 +1,5 @@
-import {cleanup, render} from '@testing-library/react';
import {afterEach, describe, expect, test} from 'bun:test';
+import {cleanup, render} from '@testing-library/react';
import React from 'react';
import {Composition} from '../Composition.js';
import {CompositionManagerProvider} from '../CompositionManagerProvider.js';
diff --git a/packages/core/src/test/composition-validation.test.tsx b/packages/core/src/test/composition-validation.test.tsx
index 5ed37cb313f..bffaeb1551a 100644
--- a/packages/core/src/test/composition-validation.test.tsx
+++ b/packages/core/src/test/composition-validation.test.tsx
@@ -1,5 +1,5 @@
-import {cleanup, render} from '@testing-library/react';
import {afterEach, describe, expect, test} from 'bun:test';
+import {cleanup, render} from '@testing-library/react';
import React from 'react';
import {Composition} from '../Composition.js';
import {resolveVideoConfig} from '../resolve-video-config.js';
diff --git a/packages/core/src/test/freeze.test.tsx b/packages/core/src/test/freeze.test.tsx
index 2c52d451f19..1af86df780e 100644
--- a/packages/core/src/test/freeze.test.tsx
+++ b/packages/core/src/test/freeze.test.tsx
@@ -1,5 +1,5 @@
-import {cleanup, render} from '@testing-library/react';
import {afterEach, describe, test} from 'bun:test';
+import {cleanup, render} from '@testing-library/react';
import {Freeze} from '../freeze.js';
import {expectToThrow} from './expect-to-throw.js';
import {WrapSequenceContext} from './wrap-sequence-context.js';
diff --git a/packages/core/src/test/loop-validation.test.tsx b/packages/core/src/test/loop-validation.test.tsx
index a55a7023fce..6a35930a68a 100644
--- a/packages/core/src/test/loop-validation.test.tsx
+++ b/packages/core/src/test/loop-validation.test.tsx
@@ -1,5 +1,5 @@
-import {cleanup, render} from '@testing-library/react';
import {afterEach, describe, expect, test} from 'bun:test';
+import {cleanup, render} from '@testing-library/react';
import {renderToString} from 'react-dom/server';
import {Loop} from '../loop/index.js';
import {expectToThrow} from './expect-to-throw.js';
diff --git a/packages/core/src/test/nested-sequences.test.tsx b/packages/core/src/test/nested-sequences.test.tsx
index 944ddeb0988..b90f2246e20 100644
--- a/packages/core/src/test/nested-sequences.test.tsx
+++ b/packages/core/src/test/nested-sequences.test.tsx
@@ -1,5 +1,5 @@
-import {cleanup, render} from '@testing-library/react';
import {afterEach, expect, test} from 'bun:test';
+import {cleanup, render} from '@testing-library/react';
import {AbsoluteFill} from '../AbsoluteFill.js';
import {Sequence} from '../Sequence.js';
import {TimelineContext} from '../TimelineContext.js';
diff --git a/packages/core/src/test/offthread-video.test.tsx b/packages/core/src/test/offthread-video.test.tsx
index b1fca466f06..01a203b3ab5 100644
--- a/packages/core/src/test/offthread-video.test.tsx
+++ b/packages/core/src/test/offthread-video.test.tsx
@@ -1,5 +1,5 @@
-import {cleanup, render} from '@testing-library/react';
import {afterEach, describe, expect, test} from 'bun:test';
+import {cleanup, render} from '@testing-library/react';
import {OffthreadVideo} from '../video/index.js';
import {WrapSequenceContext} from './wrap-sequence-context.js';
diff --git a/packages/core/src/test/sequence-validation.test.tsx b/packages/core/src/test/sequence-validation.test.tsx
index c5156a8841a..5c1ed55c3c8 100644
--- a/packages/core/src/test/sequence-validation.test.tsx
+++ b/packages/core/src/test/sequence-validation.test.tsx
@@ -1,5 +1,5 @@
-import {cleanup, render} from '@testing-library/react';
import {afterEach, describe, expect, test} from 'bun:test';
+import {cleanup, render} from '@testing-library/react';
import {renderToString} from 'react-dom/server';
import {Sequence} from '../Sequence.js';
import {expectToThrow} from './expect-to-throw.js';
diff --git a/packages/core/src/test/use-media-in-timeline.test.tsx b/packages/core/src/test/use-media-in-timeline.test.tsx
index 98b6f9b3b8b..be5795618b7 100644
--- a/packages/core/src/test/use-media-in-timeline.test.tsx
+++ b/packages/core/src/test/use-media-in-timeline.test.tsx
@@ -1,4 +1,3 @@
-import {cleanup, renderHook} from '@testing-library/react';
import {
afterAll,
afterEach,
@@ -8,6 +7,7 @@ import {
spyOn,
test,
} from 'bun:test';
+import {cleanup, renderHook} from '@testing-library/react';
import React, {useMemo} from 'react';
import type {SequenceManagerContext} from '../SequenceManager.js';
import {SequenceManager} from '../SequenceManager.js';
diff --git a/packages/core/src/test/video.test.tsx b/packages/core/src/test/video.test.tsx
index fd744543661..4827c0e7245 100644
--- a/packages/core/src/test/video.test.tsx
+++ b/packages/core/src/test/video.test.tsx
@@ -1,5 +1,5 @@
-import {cleanup, render} from '@testing-library/react';
import {beforeEach, expect, test} from 'bun:test';
+import {cleanup, render} from '@testing-library/react';
import {Html5Video} from '../video/index.js';
import {WrapSequenceContext} from './wrap-sequence-context.js';
diff --git a/packages/core/src/test/wrap-sequence-context.tsx b/packages/core/src/test/wrap-sequence-context.tsx
index dc5b28cd5f1..e59626effa4 100644
--- a/packages/core/src/test/wrap-sequence-context.tsx
+++ b/packages/core/src/test/wrap-sequence-context.tsx
@@ -1,8 +1,8 @@
import React from 'react';
+import {BufferingProvider} from '../buffering.js';
import {CanUseRemotionHooksProvider} from '../CanUseRemotionHooks.js';
import type {CompositionManagerContext} from '../CompositionManagerContext.js';
import {CompositionManager} from '../CompositionManagerContext.js';
-import {BufferingProvider} from '../buffering.js';
import type {LoggingContextValue} from '../log-level-context.js';
import {LogLevelContext} from '../log-level-context.js';
diff --git a/packages/core/src/use-media-in-timeline.ts b/packages/core/src/use-media-in-timeline.ts
index 21c1d3e27fd..3fcfb575319 100644
--- a/packages/core/src/use-media-in-timeline.ts
+++ b/packages/core/src/use-media-in-timeline.ts
@@ -1,12 +1,12 @@
import {useContext, useEffect, useMemo, useState} from 'react';
-import type {LoopDisplay} from './CompositionManager.js';
-import {SequenceContext} from './SequenceContext.js';
-import {SequenceManager} from './SequenceManager.js';
-import {TimelineContext} from './TimelineContext.js';
import {useMediaStartsAt} from './audio/use-audio-frame.js';
import {calculateMediaDuration} from './calculate-media-duration.js';
+import type {LoopDisplay} from './CompositionManager.js';
import {getAssetDisplayName} from './get-asset-file-name.js';
import {useNonce} from './nonce.js';
+import {SequenceContext} from './SequenceContext.js';
+import {SequenceManager} from './SequenceManager.js';
+import {TimelineContext} from './TimelineContext.js';
import {useRemotionEnvironment} from './use-remotion-environment.js';
import {useVideoConfig} from './use-video-config.js';
import type {VolumeProp} from './volume-prop.js';
diff --git a/packages/core/src/video/OffthreadVideo.tsx b/packages/core/src/video/OffthreadVideo.tsx
index d8191acbab0..693487503eb 100644
--- a/packages/core/src/video/OffthreadVideo.tsx
+++ b/packages/core/src/video/OffthreadVideo.tsx
@@ -1,6 +1,6 @@
import React, {useCallback} from 'react';
-import {Sequence} from '../Sequence.js';
import {addSequenceStackTraces} from '../enable-sequence-stack-traces.js';
+import {Sequence} from '../Sequence.js';
import {useRemotionEnvironment} from '../use-remotion-environment.js';
import {validateMediaProps} from '../validate-media-props.js';
import {
@@ -8,11 +8,11 @@ import {
validateMediaTrimProps,
} from '../validate-start-from-props.js';
import {OffthreadVideoForRendering} from './OffthreadVideoForRendering.js';
-import {VideoForPreview} from './VideoForPreview.js';
import type {
AllOffthreadVideoProps,
RemotionOffthreadVideoProps,
} from './props.js';
+import {VideoForPreview} from './VideoForPreview.js';
export const InnerOffthreadVideo: React.FC = (
props,
diff --git a/packages/core/src/video/OffthreadVideoForRendering.tsx b/packages/core/src/video/OffthreadVideoForRendering.tsx
index a14a6bfbaea..4c8671bd290 100644
--- a/packages/core/src/video/OffthreadVideoForRendering.tsx
+++ b/packages/core/src/video/OffthreadVideoForRendering.tsx
@@ -6,9 +6,6 @@ import React, {
useMemo,
useState,
} from 'react';
-import {Img} from '../Img.js';
-import {RenderAssetManager} from '../RenderAssetManager.js';
-import {SequenceContext} from '../SequenceContext.js';
import {getAbsoluteSrc} from '../absolute-src.js';
import {
useFrameForVolumeProp,
@@ -17,7 +14,10 @@ import {
import {cancelRender} from '../cancel-render.js';
import {OBJECTFIT_CONTAIN_CLASS_NAME} from '../default-css.js';
import type {delayRender as delayRenderGlobal} from '../delay-render.js';
+import {Img} from '../Img.js';
import {random} from '../random.js';
+import {RenderAssetManager} from '../RenderAssetManager.js';
+import {SequenceContext} from '../SequenceContext.js';
import {useTimelinePosition} from '../timeline-position-state.js';
import {truthy} from '../truthy.js';
import {useCurrentFrame} from '../use-current-frame.js';
diff --git a/packages/core/src/video/Video.tsx b/packages/core/src/video/Video.tsx
index 8061721350e..bc5610c5aec 100644
--- a/packages/core/src/video/Video.tsx
+++ b/packages/core/src/video/Video.tsx
@@ -1,11 +1,11 @@
/* eslint-disable @typescript-eslint/no-use-before-define */
import React, {forwardRef, useCallback, useContext} from 'react';
-import {Sequence} from '../Sequence.js';
import {getAbsoluteSrc} from '../absolute-src.js';
import {calculateMediaDuration} from '../calculate-media-duration.js';
import {addSequenceStackTraces} from '../enable-sequence-stack-traces.js';
import {Loop} from '../loop/index.js';
import {usePreload} from '../prefetch.js';
+import {Sequence} from '../Sequence.js';
import {useRemotionEnvironment} from '../use-remotion-environment.js';
import {useVideoConfig} from '../use-video-config.js';
import {validateMediaProps} from '../validate-media-props.js';
@@ -13,10 +13,10 @@ import {
resolveTrimProps,
validateMediaTrimProps,
} from '../validate-start-from-props.js';
-import {VideoForPreview} from './VideoForPreview.js';
-import {VideoForRendering} from './VideoForRendering.js';
import {DurationsContext} from './duration-state.js';
import type {RemotionMainVideoProps, RemotionVideoProps} from './props';
+import {VideoForPreview} from './VideoForPreview.js';
+import {VideoForRendering} from './VideoForRendering.js';
const VideoForwardingFunction: React.ForwardRefRenderFunction<
HTMLVideoElement,
diff --git a/packages/core/src/video/VideoForPreview.tsx b/packages/core/src/video/VideoForPreview.tsx
index 695f93c1392..642640a4711 100644
--- a/packages/core/src/video/VideoForPreview.tsx
+++ b/packages/core/src/video/VideoForPreview.tsx
@@ -7,8 +7,6 @@ import React, {
useRef,
useState,
} from 'react';
-import {SequenceContext} from '../SequenceContext.js';
-import {SequenceVisibilityToggleContext} from '../SequenceManager.js';
import type {IsExact} from '../audio/props.js';
import {SharedAudioContext} from '../audio/shared-audio-tags.js';
import {makeSharedElementSourceNode} from '../audio/shared-element-source-node.js';
@@ -17,6 +15,8 @@ import {getCrossOriginValue} from '../get-cross-origin-value.js';
import {useLogLevel, useMountTime} from '../log-level-context.js';
import {playbackLogging} from '../playback-logging.js';
import {usePreload} from '../prefetch.js';
+import {SequenceContext} from '../SequenceContext.js';
+import {SequenceVisibilityToggleContext} from '../SequenceManager.js';
import {useVolume} from '../use-amplification.js';
import {useMediaInTimeline} from '../use-media-in-timeline.js';
import {useMediaPlayback} from '../use-media-playback.js';
diff --git a/packages/core/src/video/VideoForRendering.tsx b/packages/core/src/video/VideoForRendering.tsx
index 2daaa00694b..6748b18562e 100644
--- a/packages/core/src/video/VideoForRendering.tsx
+++ b/packages/core/src/video/VideoForRendering.tsx
@@ -8,8 +8,6 @@ import React, {
useMemo,
useRef,
} from 'react';
-import {RenderAssetManager} from '../RenderAssetManager.js';
-import {SequenceContext} from '../SequenceContext.js';
import {getAbsoluteSrc} from '../absolute-src.js';
import {
useFrameForVolumeProp,
@@ -18,6 +16,8 @@ import {
import {isApproximatelyTheSame} from '../is-approximately-the-same.js';
import {useLogLevel, useMountTime} from '../log-level-context.js';
import {random} from '../random.js';
+import {RenderAssetManager} from '../RenderAssetManager.js';
+import {SequenceContext} from '../SequenceContext.js';
import {useTimelinePosition} from '../timeline-position-state.js';
import {useCurrentFrame} from '../use-current-frame.js';
import {useDelayRender} from '../use-delay-render.js';
diff --git a/packages/create-video/README.md b/packages/create-video/README.md
index fb5075127d3..aa642f409db 100644
--- a/packages/create-video/README.md
+++ b/packages/create-video/README.md
@@ -1,18 +1,18 @@
# @remotion/create-video
-
+
Create a new Remotion project
-
+
[](https://npmcharts.com/compare/create-video?minimal=true)
-
+
## Installation
-
+
```bash
npm install create-video --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://remotion.dev/templates) for more information.
diff --git a/packages/create-video/package.json b/packages/create-video/package.json
index 4ec80ec066b..3b9201d503b 100644
--- a/packages/create-video/package.json
+++ b/packages/create-video/package.json
@@ -10,7 +10,7 @@
"create-video": "bin.js"
},
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"test": "bun test src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
diff --git a/packages/create-video/src/init.ts b/packages/create-video/src/init.ts
index a62be59cbda..a6d3b827cbb 100644
--- a/packages/create-video/src/init.ts
+++ b/packages/create-video/src/init.ts
@@ -1,6 +1,6 @@
+import path from 'node:path';
import chalk from 'chalk';
import execa from 'execa';
-import path from 'node:path';
import {
addPostcssConfig,
addTailwindRootCss,
@@ -119,13 +119,15 @@ export const init = async () => {
process.exit(1);
}
- if (result.type === 'is-git-repo') {
+ const isInsideGitRepo = result.type === 'is-git-repo';
+
+ if (isInsideGitRepo) {
const {shouldContinue} = await prompts({
type: 'toggle',
name: 'shouldContinue',
message: `You are already inside a Git repo (${path.resolve(
result.location,
- )}).\nThis might lead to a Git Submodule being created. Do you want to continue?`,
+ )}).\nA new project will be created without initializing a new Git repository. Do you want to continue?`,
initial: false,
active: 'Yes',
inactive: 'No',
@@ -181,7 +183,9 @@ export const init = async () => {
projectRoot,
});
- await getGitStatus(projectRoot);
+ if (!isInsideGitRepo) {
+ await getGitStatus(projectRoot);
+ }
if (shouldInstallSkills) {
await installSkills(projectRoot);
diff --git a/packages/create-video/src/resolve-project-root.ts b/packages/create-video/src/resolve-project-root.ts
index cab9dccc518..b2da552c65b 100644
--- a/packages/create-video/src/resolve-project-root.ts
+++ b/packages/create-video/src/resolve-project-root.ts
@@ -1,8 +1,8 @@
-import chalk from 'chalk';
import fs from 'node:fs';
import {readdir, stat} from 'node:fs/promises';
import {tmpdir} from 'node:os';
import path from 'node:path';
+import chalk from 'chalk';
import {Log} from './log';
import {mkdirp} from './mkdirp';
import prompts from './prompts';
diff --git a/packages/design/README.md b/packages/design/README.md
index f27c9486c69..867b77626a6 100644
--- a/packages/design/README.md
+++ b/packages/design/README.md
@@ -1,18 +1,18 @@
# @remotion/design
-
+
Design system
-
+
[](https://npmcharts.com/compare/@remotion/design?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/design --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/design) for more information.
diff --git a/packages/design/bundle.ts b/packages/design/bundle.ts
index e96cfe5c9e2..f58b37f4f26 100644
--- a/packages/design/bundle.ts
+++ b/packages/design/bundle.ts
@@ -1,5 +1,5 @@
-import {$, build} from 'bun';
import path from 'path';
+import {$, build} from 'bun';
if (process.env.NODE_ENV !== 'production') {
throw new Error('This script must be run using NODE_ENV=production');
diff --git a/packages/design/package.json b/packages/design/package.json
index 20c93b4c42f..5ca88e2f4fa 100644
--- a/packages/design/package.json
+++ b/packages/design/package.json
@@ -13,7 +13,7 @@
"url": "https://github.com/remotion-dev/remotion/issues"
},
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"watch": "tsgo -w",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
diff --git a/packages/design/src/Select.tsx b/packages/design/src/Select.tsx
index b4c1379de70..495f83e409b 100644
--- a/packages/design/src/Select.tsx
+++ b/packages/design/src/Select.tsx
@@ -1,7 +1,6 @@
import * as SelectPrimitive from '@radix-ui/react-select';
import {Check, ChevronDown, ChevronUp} from 'lucide-react';
import * as React from 'react';
-
import {cn} from './helpers/cn';
const Select = SelectPrimitive.Root;
diff --git a/packages/design/src/Tabs.tsx b/packages/design/src/Tabs.tsx
index 054cb1891b9..2b6aaee8cfc 100644
--- a/packages/design/src/Tabs.tsx
+++ b/packages/design/src/Tabs.tsx
@@ -1,6 +1,5 @@
import * as TabsPrimitive from '@radix-ui/react-tabs';
import * as React from 'react';
-
import {cn} from './helpers/cn';
const Tabs = TabsPrimitive.Root;
diff --git a/packages/discord-poster/README.md b/packages/discord-poster/README.md
index 018de17e5e4..7cff0d275dc 100644
--- a/packages/discord-poster/README.md
+++ b/packages/discord-poster/README.md
@@ -1,5 +1,5 @@
# @remotion/discord-poster
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/dockerfiles/README.md b/packages/dockerfiles/README.md
index 94e4fe7bd13..517ef69b18d 100644
--- a/packages/dockerfiles/README.md
+++ b/packages/dockerfiles/README.md
@@ -9,12 +9,14 @@ Uses `npx remotion browser ensure` to install the browser, which requires some s
```
This will:
+
1. Build the browser-test bundle from `packages/example` (using `src/browser-test-entry.ts`)
2. Build Docker images for each platform (ubuntu24, ubuntu22, debian, nix)
3. Each Docker build runs `npx remotion compositions` and `npx remotion render`
4. Extract the rendered videos to `out/` directory
Output videos:
+
- `out/ubuntu24.mp4`
- `out/ubuntu22.mp4`
- `out/debian.mp4`
@@ -23,6 +25,7 @@ Output videos:
## browser-test composition
Located in `packages/example/src/BrowserTest/index.tsx`, it tests:
+
- GPU/WebGL rendering (Three.js)
- Video playback with different codecs (H.264, H.265)
- WebGL availability
diff --git a/packages/dockerfiles/ensure.mjs b/packages/dockerfiles/ensure.mjs
index b5d510a516c..aa9528b5721 100644
--- a/packages/dockerfiles/ensure.mjs
+++ b/packages/dockerfiles/ensure.mjs
@@ -1,3 +1,3 @@
-import { ensureBrowser } from "./ensure-browser.mjs";
+import {ensureBrowser} from './ensure-browser.mjs';
await ensureBrowser();
diff --git a/packages/docs/README.md b/packages/docs/README.md
index b370f4f8e79..bd6e0c81255 100644
--- a/packages/docs/README.md
+++ b/packages/docs/README.md
@@ -1,5 +1,5 @@
# @remotion/docs
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/docs/blog/2021-05-06-remotion-2-1.mdx b/packages/docs/blog/2021-05-06-remotion-2-1.mdx
index d3f3b033685..15cf6c231cc 100644
--- a/packages/docs/blog/2021-05-06-remotion-2-1.mdx
+++ b/packages/docs/blog/2021-05-06-remotion-2-1.mdx
@@ -45,6 +45,7 @@ We invested time in making sure that if something goes wrong, you don't get stuc
We are working on a Remotion player component that you can import into your React app. Today we are prereleasing the player for those who wish to experiment and provide us with feedback. Let us know what you think!
[**Read the documentation for `@remotion/player`**](/docs/player)
+
## Test coverage updates
diff --git a/packages/docs/blog/2025-08-21-editor-starter.mdx b/packages/docs/blog/2025-08-21-editor-starter.mdx
index 0892f8d8cdd..4e9e82d3437 100644
--- a/packages/docs/blog/2025-08-21-editor-starter.mdx
+++ b/packages/docs/blog/2025-08-21-editor-starter.mdx
@@ -10,7 +10,6 @@ image: https://pub-646d808d9cb240cea53bedc76dd3cd0c.r2.dev/editor-starter-og-ima
import {TableOfContents} from '../docs/editor-starter/TableOfContents';
-
Today, we're launching the Editor Starter, a paid template for building your own video editor!
\ No newline at end of file
+
diff --git a/packages/docs/components/3DPhone/helpers/constants.ts b/packages/docs/components/3DPhone/helpers/constants.ts
index d8529a51361..0228f68c62a 100644
--- a/packages/docs/components/3DPhone/helpers/constants.ts
+++ b/packages/docs/components/3DPhone/helpers/constants.ts
@@ -1,4 +1,4 @@
-import type { Vector3 } from "@react-three/fiber";
+import type {Vector3} from '@react-three/fiber';
// The distance from which the camera is pointing to the phone.
export const CAMERA_DISTANCE = 2.5;
@@ -20,84 +20,84 @@ export const PHONE_COLOR = 0x61a9e8;
// Calculate phone size. Whichever side is smaller gets
// normalized to the base scale.
const getPhoneHeight = (aspectRatio: number, baseScale: number): number => {
- if (aspectRatio > 1) {
- return baseScale;
- }
+ if (aspectRatio > 1) {
+ return baseScale;
+ }
- return baseScale / aspectRatio;
+ return baseScale / aspectRatio;
};
const getPhoneWidth = (aspectRatio: number, baseScale: number): number => {
- if (aspectRatio < 1) {
- return baseScale;
- }
+ if (aspectRatio < 1) {
+ return baseScale;
+ }
- return baseScale * aspectRatio;
+ return baseScale * aspectRatio;
};
type Layout = {
- position: Vector3;
- height: number;
- width: number;
- radius: number;
+ position: Vector3;
+ height: number;
+ width: number;
+ radius: number;
};
type PhoneLayout = {
- phone: Layout & {
- thickness: number;
- bevel: number;
- };
- screen: Layout;
+ phone: Layout & {
+ thickness: number;
+ bevel: number;
+ };
+ screen: Layout;
};
export const getPhoneLayout = (
- // I recommend building the phone layout based
- // on the aspect ratio of the phone
- aspectRatio: number,
- // This value can be increased or decreased to tweak the
- // base value of the phone.
- baseScale: number
+ // I recommend building the phone layout based
+ // on the aspect ratio of the phone
+ aspectRatio: number,
+ // This value can be increased or decreased to tweak the
+ // base value of the phone.
+ baseScale: number,
): PhoneLayout => {
- // The depth of the phone body
- const phoneThickness = baseScale * 0.15;
-
- // How big the border of the phone is.
- const phoneBevel = baseScale * 0.04;
-
- // The inner radius of the phone, aka the screen radius
- const screenRadius = baseScale * 0.07;
-
- const phoneHeight = getPhoneHeight(aspectRatio, baseScale);
- const phoneWidth = getPhoneWidth(aspectRatio, baseScale);
- const phonePosition: Vector3 = [-phoneWidth / 2, -phoneHeight / 2, 0];
- const screenWidth = phoneWidth - phoneBevel * 2;
- const screenHeight = phoneHeight - phoneBevel * 2;
- const screenPosition: Vector3 = [
- -screenWidth / 2,
- -screenHeight / 2,
- phoneThickness + Z_FLICKER_PREVENTION,
- ];
-
- // Define the outer radius of the phone.
- // It looks better if the outer radius is a bit bigger than the screen radios,
- // formula taken from https://twitter.com/joshwcomeau/status/134978208002102886
- const phoneRadius =
- screenRadius + (getPhoneWidth(aspectRatio, baseScale) - screenWidth) / 2;
-
- return {
- phone: {
- position: phonePosition,
- height: phoneHeight,
- width: phoneWidth,
- radius: phoneRadius,
- thickness: phoneThickness,
- bevel: phoneBevel,
- },
- screen: {
- position: screenPosition,
- height: screenHeight,
- width: screenWidth,
- radius: screenRadius,
- },
- };
+ // The depth of the phone body
+ const phoneThickness = baseScale * 0.15;
+
+ // How big the border of the phone is.
+ const phoneBevel = baseScale * 0.04;
+
+ // The inner radius of the phone, aka the screen radius
+ const screenRadius = baseScale * 0.07;
+
+ const phoneHeight = getPhoneHeight(aspectRatio, baseScale);
+ const phoneWidth = getPhoneWidth(aspectRatio, baseScale);
+ const phonePosition: Vector3 = [-phoneWidth / 2, -phoneHeight / 2, 0];
+ const screenWidth = phoneWidth - phoneBevel * 2;
+ const screenHeight = phoneHeight - phoneBevel * 2;
+ const screenPosition: Vector3 = [
+ -screenWidth / 2,
+ -screenHeight / 2,
+ phoneThickness + Z_FLICKER_PREVENTION,
+ ];
+
+ // Define the outer radius of the phone.
+ // It looks better if the outer radius is a bit bigger than the screen radios,
+ // formula taken from https://twitter.com/joshwcomeau/status/134978208002102886
+ const phoneRadius =
+ screenRadius + (getPhoneWidth(aspectRatio, baseScale) - screenWidth) / 2;
+
+ return {
+ phone: {
+ position: phonePosition,
+ height: phoneHeight,
+ width: phoneWidth,
+ radius: phoneRadius,
+ thickness: phoneThickness,
+ bevel: phoneBevel,
+ },
+ screen: {
+ position: screenPosition,
+ height: screenHeight,
+ width: screenWidth,
+ radius: screenRadius,
+ },
+ };
};
diff --git a/packages/docs/components/Aac/AacConcatenationProblem.tsx b/packages/docs/components/Aac/AacConcatenationProblem.tsx
index 7f1321e2e63..49239ad98ac 100644
--- a/packages/docs/components/Aac/AacConcatenationProblem.tsx
+++ b/packages/docs/components/Aac/AacConcatenationProblem.tsx
@@ -1,92 +1,92 @@
-import React from "react";
+import React from 'react';
export const AacConcatenationProblem: React.FC = () => {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
};
diff --git a/packages/docs/components/Aac/AacConcatenationSolution.tsx b/packages/docs/components/Aac/AacConcatenationSolution.tsx
index 6b6d4903d92..4fb9164c960 100644
--- a/packages/docs/components/Aac/AacConcatenationSolution.tsx
+++ b/packages/docs/components/Aac/AacConcatenationSolution.tsx
@@ -1,709 +1,709 @@
-import React from "react";
+import React from 'react';
export const AacConcatenationSolution = () => {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
- 1024
-
-
-
-
- 2048
-
-
-
-
- 3072
-
-
-
-
- 4096
-
-
-
-
- 5120
-
-
-
-
- 6144
-
-
-
-
- 7168
-
-
-
-
- 8192
-
-
-
-
- 9216
-
-
-
-
- 10240
-
-
-
-
- 11264
-
-
-
-
- 12288
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
- 1024
-
-
-
-
- 2048
-
-
-
-
- 3072
-
-
-
-
- 4096
-
-
-
-
- 5120
-
-
-
-
- 6144
-
-
-
-
- 7168
-
-
-
-
- 8192
-
-
-
-
- 9216
-
-
-
-
- 10240
-
-
-
-
- 11264
-
-
-
-
- 12288
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
- 1024
-
-
-
-
- 2048
-
-
-
-
- 3072
-
-
-
-
- 4096
-
-
-
-
- 5120
-
-
-
-
- 6144
-
-
-
-
- 7168
-
-
-
-
- 8192
-
-
-
-
- 9216
-
-
-
-
- 10240
-
-
-
-
- 11264
-
-
-
-
- 12288
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 1024
+
+
+
+
+ 2048
+
+
+
+
+ 3072
+
+
+
+
+ 4096
+
+
+
+
+ 5120
+
+
+
+
+ 6144
+
+
+
+
+ 7168
+
+
+
+
+ 8192
+
+
+
+
+ 9216
+
+
+
+
+ 10240
+
+
+
+
+ 11264
+
+
+
+
+ 12288
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 1024
+
+
+
+
+ 2048
+
+
+
+
+ 3072
+
+
+
+
+ 4096
+
+
+
+
+ 5120
+
+
+
+
+ 6144
+
+
+
+
+ 7168
+
+
+
+
+ 8192
+
+
+
+
+ 9216
+
+
+
+
+ 10240
+
+
+
+
+ 11264
+
+
+
+
+ 12288
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 1024
+
+
+
+
+ 2048
+
+
+
+
+ 3072
+
+
+
+
+ 4096
+
+
+
+
+ 5120
+
+
+
+
+ 6144
+
+
+
+
+ 7168
+
+
+
+
+ 8192
+
+
+
+
+ 9216
+
+
+
+
+ 10240
+
+
+
+
+ 11264
+
+
+
+
+ 12288
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
};
diff --git a/packages/docs/components/Aac/AacFile.tsx b/packages/docs/components/Aac/AacFile.tsx
index 50a624948b0..1513e5d4ab8 100644
--- a/packages/docs/components/Aac/AacFile.tsx
+++ b/packages/docs/components/Aac/AacFile.tsx
@@ -1,199 +1,199 @@
-import React from "react";
+import React from 'react';
export const AacFile: React.FC = () => {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
- 1024
-
-
-
-
- 2048
-
-
-
-
- 3072
-
-
-
-
- 4096
-
-
-
-
- 5120
-
-
-
-
- 6144
-
-
-
-
- 7168
-
-
-
-
- 8192
-
-
-
-
- 9216
-
-
-
-
- 10240
-
-
-
-
- 11264
-
-
-
-
- 12288
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 1024
+
+
+
+
+ 2048
+
+
+
+
+ 3072
+
+
+
+
+ 4096
+
+
+
+
+ 5120
+
+
+
+
+ 6144
+
+
+
+
+ 7168
+
+
+
+
+ 8192
+
+
+
+
+ 9216
+
+
+
+
+ 10240
+
+
+
+
+ 11264
+
+
+
+
+ 12288
+
+
+
+ );
};
diff --git a/packages/docs/components/Aac/AacKeyframes.tsx b/packages/docs/components/Aac/AacKeyframes.tsx
index bf0b324ed0d..805d96b678f 100644
--- a/packages/docs/components/Aac/AacKeyframes.tsx
+++ b/packages/docs/components/Aac/AacKeyframes.tsx
@@ -1,203 +1,203 @@
-import React from "react";
+import React from 'react';
export const AacKeyframes: React.FC = () => {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
- 1024
-
-
-
-
- 2048
-
-
-
-
- 3072
-
-
-
-
- 4096
-
-
-
-
- 5120
-
-
-
-
- 6144
-
-
-
-
- 7168
-
-
-
-
- 8192
-
-
-
-
- 9216
-
-
-
-
- 10240
-
-
-
-
- 11264
-
-
-
-
- 12288
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 1024
+
+
+
+
+ 2048
+
+
+
+
+ 3072
+
+
+
+
+ 4096
+
+
+
+
+ 5120
+
+
+
+
+ 6144
+
+
+
+
+ 7168
+
+
+
+
+ 8192
+
+
+
+
+ 9216
+
+
+
+
+ 10240
+
+
+
+
+ 11264
+
+
+
+
+ 12288
+
+
+
+
+
+
+ );
};
diff --git a/packages/docs/components/Aac/AacPadding.tsx b/packages/docs/components/Aac/AacPadding.tsx
index a90fbfb4856..3b57ba1b0ec 100644
--- a/packages/docs/components/Aac/AacPadding.tsx
+++ b/packages/docs/components/Aac/AacPadding.tsx
@@ -1,207 +1,207 @@
-import React from "react";
+import React from 'react';
export const AacPadding: React.FC = () => {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
- 1024
-
-
-
-
- 2048
-
-
-
-
- 3072
-
-
-
-
- 4096
-
-
-
-
- 5120
-
-
-
-
- 6144
-
-
-
-
- 7168
-
-
-
-
- 8192
-
-
-
-
- 9216
-
-
-
-
- 10240
-
-
-
-
- 11264
-
-
-
-
- 12288
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 1024
+
+
+
+
+ 2048
+
+
+
+
+ 3072
+
+
+
+
+ 4096
+
+
+
+
+ 5120
+
+
+
+
+ 6144
+
+
+
+
+ 7168
+
+
+
+
+ 8192
+
+
+
+
+ 9216
+
+
+
+
+ 10240
+
+
+
+
+ 11264
+
+
+
+
+ 12288
+
+
+
+
+ );
};
diff --git a/packages/docs/components/Aac/Benchmarks.tsx b/packages/docs/components/Aac/Benchmarks.tsx
index 33a8d85e6ab..447fcbcdd22 100644
--- a/packages/docs/components/Aac/Benchmarks.tsx
+++ b/packages/docs/components/Aac/Benchmarks.tsx
@@ -1,236 +1,236 @@
-import React from "react";
+import React from 'react';
export const AacBenchmarks: React.FC = () => {
- return (
-
-
-
-
-
-
-
-
-
-
- 28.3s
-
-
-
-
- 64.8s
-
-
-
-
- 264.2s
-
-
-
-
- 31.8s
-
-
-
-
- 134.7s
-
-
-
-
- 582.6s
-
-
-
-
- 1 Minute video
-
-
-
-
- 1 Minute video
-
-
-
-
- 10 Minute video
-
-
-
-
- 40 Minute video
-
-
-
-
- v4.0.129
-
-
-
-
- v4.0.126
-
-
-
-
- v4.0.129
-
-
-
-
- v4.0.129
-
-
-
-
- v4.0.126
-
-
-
-
- v4.0.126
-
-
- {" "}
-
- );
+ return (
+
+
+
+
+
+
+
+
+
+
+ 28.3s
+
+
+
+
+ 64.8s
+
+
+
+
+ 264.2s
+
+
+
+
+ 31.8s
+
+
+
+
+ 134.7s
+
+
+
+
+ 582.6s
+
+
+
+
+ 1 Minute video
+
+
+
+
+ 1 Minute video
+
+
+
+
+ 10 Minute video
+
+
+
+
+ 40 Minute video
+
+
+
+
+ v4.0.129
+
+
+
+
+ v4.0.126
+
+
+
+
+ v4.0.129
+
+
+
+
+ v4.0.129
+
+
+
+
+ v4.0.126
+
+
+
+
+ v4.0.126
+
+
+ {' '}
+
+ );
};
diff --git a/packages/docs/components/AvailableFonts/index.tsx b/packages/docs/components/AvailableFonts/index.tsx
index 48c04c2d90b..8ae3fb0b969 100644
--- a/packages/docs/components/AvailableFonts/index.tsx
+++ b/packages/docs/components/AvailableFonts/index.tsx
@@ -1,23 +1,23 @@
-import { getAvailableFonts } from "@remotion/google-fonts";
-import React from "react";
+import {getAvailableFonts} from '@remotion/google-fonts';
+import React from 'react';
export const AvailableFonts: React.FC = () => {
- return (
-
-
- Font Family
- import statement
-
- {getAvailableFonts().map((font) => {
- return (
-
- {font.fontFamily}
-
- {`import {loadFont} from "@remotion/google-fonts/${font.importName}"`}
-
-
- );
- })}
-
- );
+ return (
+
+
+ Font Family
+ import statement
+
+ {getAvailableFonts().map((font) => {
+ return (
+
+ {font.fontFamily}
+
+ {`import {loadFont} from "@remotion/google-fonts/${font.importName}"`}
+
+
+ );
+ })}
+
+ );
};
diff --git a/packages/docs/components/Bounties.tsx b/packages/docs/components/Bounties.tsx
index 1d8bd3417d7..9a2b1062a50 100644
--- a/packages/docs/components/Bounties.tsx
+++ b/packages/docs/components/Bounties.tsx
@@ -2,7 +2,6 @@ import {algora, type AlgoraOutput} from '@algora/sdk';
import {useColorMode} from '@docusaurus/theme-common';
import clsx from 'clsx';
import React, {useEffect, useState} from 'react';
-
import './bounties.css';
const org = 'remotion';
diff --git a/packages/docs/components/CameraMotionBlurExample/CameraMotionBlurExample.tsx b/packages/docs/components/CameraMotionBlurExample/CameraMotionBlurExample.tsx
index 1a27c8d7eb3..5bf09bdbd4f 100644
--- a/packages/docs/components/CameraMotionBlurExample/CameraMotionBlurExample.tsx
+++ b/packages/docs/components/CameraMotionBlurExample/CameraMotionBlurExample.tsx
@@ -1,3 +1,4 @@
+import {CameraMotionBlur} from '@remotion/motion-blur';
import {Player} from '@remotion/player';
import React, {useState} from 'react';
import {
@@ -9,8 +10,6 @@ import {
useVideoConfig,
} from 'remotion';
-import {CameraMotionBlur} from '@remotion/motion-blur';
-
const square: React.CSSProperties = {
height: 150,
width: 150,
diff --git a/packages/docs/components/ColorDemo/readable-color.ts b/packages/docs/components/ColorDemo/readable-color.ts
index 6c44e9a700e..de27e5b1074 100644
--- a/packages/docs/components/ColorDemo/readable-color.ts
+++ b/packages/docs/components/ColorDemo/readable-color.ts
@@ -1,4 +1,4 @@
-import { getLuminance } from 'polished';
+import {getLuminance} from 'polished';
export const getReadableColor = (color: string): string => {
const luminance = getLuminance(color);
diff --git a/packages/docs/components/ColorDemo/styles.tsx b/packages/docs/components/ColorDemo/styles.tsx
index 68dfc52909f..27358bb9058 100644
--- a/packages/docs/components/ColorDemo/styles.tsx
+++ b/packages/docs/components/ColorDemo/styles.tsx
@@ -1,13 +1,13 @@
-import type React from "react";
+import type React from 'react';
export const defaultStyles: React.CSSProperties = {
- display: "flex",
+ display: 'flex',
flex: 1,
- justifyContent: "center",
- alignItems: "center",
+ justifyContent: 'center',
+ alignItems: 'center',
fontFamily:
- "--apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif",
- fontWeight: "bold",
+ "--apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif",
+ fontWeight: 'bold',
fontSize: 100,
lineHeight: 1.1,
};
diff --git a/packages/docs/components/Concurrency.tsx b/packages/docs/components/Concurrency.tsx
index 8de6016ee5f..aa7cade1444 100644
--- a/packages/docs/components/Concurrency.tsx
+++ b/packages/docs/components/Concurrency.tsx
@@ -1,38 +1,37 @@
-import React from "react";
-
-import { interpolate } from "remotion";
+import React from 'react';
+import {interpolate} from 'remotion';
const bestFramesPerLambdaParam = (frameCount: number) => {
- // Between 0 and 10 minutes (at 30fps), interpolate the concurrency from 75 to 150
- const concurrency = interpolate(frameCount, [0, 18000], [75, 150], {
- extrapolateRight: "clamp",
- });
+ // Between 0 and 10 minutes (at 30fps), interpolate the concurrency from 75 to 150
+ const concurrency = interpolate(frameCount, [0, 18000], [75, 150], {
+ extrapolateRight: 'clamp',
+ });
- // At least have 20 as a `framesPerLambda` value
- const framesPerLambda = Math.max(frameCount / concurrency, 20);
+ // At least have 20 as a `framesPerLambda` value
+ const framesPerLambda = Math.max(frameCount / concurrency, 20);
- // Evenly distribute: For 21 frames over 2 lambda functions, distribute as 11 + 10 ==> framesPerLambda = 11
- const lambdasNeeded = Math.ceil(frameCount / framesPerLambda);
+ // Evenly distribute: For 21 frames over 2 lambda functions, distribute as 11 + 10 ==> framesPerLambda = 11
+ const lambdasNeeded = Math.ceil(frameCount / framesPerLambda);
- return Math.ceil(frameCount / lambdasNeeded);
+ return Math.ceil(frameCount / lambdasNeeded);
};
export const ConcurrencyCalculator: React.FC = () => {
- const [state, setState] = React.useState(900);
- const value = bestFramesPerLambdaParam(state);
- return (
-
- Enter number of frames:{" "}
- {
- setState(parseInt(e.target.value, 10));
- }}
- />
-
- The default framesPerLambda is {value}
-
- );
+ const [state, setState] = React.useState(900);
+ const value = bestFramesPerLambdaParam(state);
+ return (
+
+ Enter number of frames:{' '}
+ {
+ setState(parseInt(e.target.value, 10));
+ }}
+ />
+
+ The default framesPerLambda is {value}
+
+ );
};
diff --git a/packages/docs/components/Dataset/MyComp.tsx b/packages/docs/components/Dataset/MyComp.tsx
index d18f122a6d2..23f06079433 100644
--- a/packages/docs/components/Dataset/MyComp.tsx
+++ b/packages/docs/components/Dataset/MyComp.tsx
@@ -1,91 +1,91 @@
-import React from "react";
+import React from 'react';
import {
- AbsoluteFill,
- Img,
- interpolate,
- spring,
- useCurrentFrame,
- useVideoConfig,
-} from "remotion";
+ AbsoluteFill,
+ Img,
+ interpolate,
+ spring,
+ useCurrentFrame,
+ useVideoConfig,
+} from 'remotion';
interface Props {
- readonly name: string;
- readonly logo: string;
- readonly repo: string;
+ readonly name: string;
+ readonly logo: string;
+ readonly repo: string;
}
-export const MyComp: React.FC = ({ name, repo, logo }) => {
- const frame = useCurrentFrame();
- const { fps } = useVideoConfig();
+export const MyComp: React.FC = ({name, repo, logo}) => {
+ const frame = useCurrentFrame();
+ const {fps} = useVideoConfig();
- const scale = spring({
- fps,
- frame: frame - 10,
- config: {
- damping: 100,
- },
- });
+ const scale = spring({
+ fps,
+ frame: frame - 10,
+ config: {
+ damping: 100,
+ },
+ });
- const opacity = interpolate(frame, [30, 40], [0, 1], {
- extrapolateLeft: "clamp",
- extrapolateRight: "clamp",
- });
- const moveY = interpolate(frame, [20, 30], [10, 0], {
- extrapolateLeft: "clamp",
- extrapolateRight: "clamp",
- });
+ const opacity = interpolate(frame, [30, 40], [0, 1], {
+ extrapolateLeft: 'clamp',
+ extrapolateRight: 'clamp',
+ });
+ const moveY = interpolate(frame, [20, 30], [10, 0], {
+ extrapolateLeft: 'clamp',
+ extrapolateRight: 'clamp',
+ });
- return (
-
-
-
-
-
- {name}
-
-
- {repo}
-
-
-
-
- );
+ return (
+
+
+
+
+
+ {name}
+
+
+ {repo}
+
+
+
+
+ );
};
diff --git a/packages/docs/components/DownloadPressRelease.tsx b/packages/docs/components/DownloadPressRelease.tsx
index 35ab525cb70..cec2f919b0c 100644
--- a/packages/docs/components/DownloadPressRelease.tsx
+++ b/packages/docs/components/DownloadPressRelease.tsx
@@ -1,61 +1,61 @@
-import React from "react";
+import React from 'react';
const style: React.CSSProperties = {
- textDecoration: "none",
- fontWeight: "bold",
- flexDirection: "row",
- display: "inline-flex",
- alignItems: "center",
- marginBottom: 15,
+ textDecoration: 'none',
+ fontWeight: 'bold',
+ flexDirection: 'row',
+ display: 'inline-flex',
+ alignItems: 'center',
+ marginBottom: 15,
};
const icon: React.CSSProperties = {
- height: 20,
- marginRight: 10,
- marginTop: -3,
+ height: 20,
+ marginRight: 10,
+ marginTop: -3,
};
export const DownloadPressRelease: React.FC = () => {
- return (
- <>
-
-
- >
- );
+ return (
+ <>
+
+
+ >
+ );
};
diff --git a/packages/docs/components/Experimental.tsx b/packages/docs/components/Experimental.tsx
index d4b63da3c22..49f101c77c8 100644
--- a/packages/docs/components/Experimental.tsx
+++ b/packages/docs/components/Experimental.tsx
@@ -1,32 +1,32 @@
-import React from "react";
+import React from 'react';
export const ExperimentalBadge: React.FC<{
- readonly children: React.ReactNode;
-}> = ({ children }) => {
- return (
-
-
- EXPERIMENTAL
-
-
{children}
-
- );
+ readonly children: React.ReactNode;
+}> = ({children}) => {
+ return (
+
+
+ EXPERIMENTAL
+
+
{children}
+
+ );
};
diff --git a/packages/docs/components/FFmpegVideo.tsx b/packages/docs/components/FFmpegVideo.tsx
index 8f975526b40..371fe28c9bb 100644
--- a/packages/docs/components/FFmpegVideo.tsx
+++ b/packages/docs/components/FFmpegVideo.tsx
@@ -1,19 +1,19 @@
-import { useColorMode } from "@docusaurus/theme-common";
-import React from "react";
+import {useColorMode} from '@docusaurus/theme-common';
+import React from 'react';
export const FfmpegVideo: React.FC = () => {
- const { colorMode } = useColorMode();
- return (
-
- );
+ const {colorMode} = useColorMode();
+ return (
+
+ );
};
diff --git a/packages/docs/components/HowPropsFlow.tsx b/packages/docs/components/HowPropsFlow.tsx
index 0042a5dbdf4..e34ae626b91 100644
--- a/packages/docs/components/HowPropsFlow.tsx
+++ b/packages/docs/components/HowPropsFlow.tsx
@@ -1,199 +1,199 @@
-import React from "react";
+import React from 'react';
export const HowPropsFlow: React.FC = () => {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
};
diff --git a/packages/docs/components/Installation.tsx b/packages/docs/components/Installation.tsx
index 0a5f3f4f49b..21313307f75 100644
--- a/packages/docs/components/Installation.tsx
+++ b/packages/docs/components/Installation.tsx
@@ -1,10 +1,10 @@
-import React from 'react';
// @ts-expect-error
import CodeBlock from '@theme/CodeBlock';
// @ts-expect-error
import TabItem from '@theme/TabItem';
// @ts-expect-error
import Tabs from '@theme/Tabs';
+import React from 'react';
import {VERSION} from 'remotion';
const VersionWarning: React.FC<{
@@ -21,8 +21,8 @@ const VersionWarning: React.FC<{
Also update remotion and all `@remotion/*`{' '}
packages to the same version.
- Remove all ^ character in front of the version numbers of
- it as it can lead to a version conflict.
+ Remove all ^ character in front of the version numbers of it
+ as it can lead to a version conflict.
>
);
};
diff --git a/packages/docs/components/InvestorGrid.tsx b/packages/docs/components/InvestorGrid.tsx
index 487b6c61c73..255fd02ec02 100644
--- a/packages/docs/components/InvestorGrid.tsx
+++ b/packages/docs/components/InvestorGrid.tsx
@@ -1,21 +1,81 @@
import React from 'react';
const investors = [
- {img: '/img/investors/foronered.png', name: 'For One Red', role: 'Design Studio'},
- {img: '/img/investors/heiko.jpeg', name: 'Heiko Hubertz', role: 'Founder & CEO, Oxolo'},
- {img: '/img/investors/simon.jpeg', name: 'Simon Schmid', role: 'Product, iubenda'},
- {img: '/img/investors/william.jpeg', name: 'William Candillon', role: 'Can it be done in React Native?'},
- {img: '/img/investors/sebastien.jpeg', name: 'Sébastien Lorber', role: 'This Week in React, Docusaurus'},
- {img: '/img/investors/nick.jpeg', name: 'Nick Dima', role: 'Senior Engineering Manager, Musixmatch'},
- {img: '/img/investors/steven.jpeg', name: 'Stephen Sullivan', role: 'Founder, Middy.com'},
- {img: '/img/investors/dominic.jpeg', name: 'Dominic Monn', role: 'Founder, MentorCruise'},
- {img: '/img/investors/jeremy.jpeg', name: 'Jeremy Toeman', role: 'Founder, augxlabs.com'},
- {img: '/img/investors/robbie.jpeg', name: 'Robbie Zhang-Smitheran', role: 'Cameo.com'},
- {img: '/img/investors/ilya.jpeg', name: 'Ilya Lyamkin', role: 'Senior Software Engineer, Spotify'},
- {img: '/img/investors/lucas.jpeg', name: 'Lucas Pelloni', role: 'Co-Founder, Nestermind'},
- {img: '/img/investors/michiel.jpeg', name: 'Michiel Westerbeek', role: 'Co-Founder, Tella'},
- {img: '/img/investors/vjeux.jpg', name: 'Christopher Chedeau', role: 'Co-Creator of Excalidraw and React Native'},
- {img: '/img/investors/david.jpeg', name: 'David Salib', role: 'Co-Founder, Momento'},
+ {
+ img: '/img/investors/foronered.png',
+ name: 'For One Red',
+ role: 'Design Studio',
+ },
+ {
+ img: '/img/investors/heiko.jpeg',
+ name: 'Heiko Hubertz',
+ role: 'Founder & CEO, Oxolo',
+ },
+ {
+ img: '/img/investors/simon.jpeg',
+ name: 'Simon Schmid',
+ role: 'Product, iubenda',
+ },
+ {
+ img: '/img/investors/william.jpeg',
+ name: 'William Candillon',
+ role: 'Can it be done in React Native?',
+ },
+ {
+ img: '/img/investors/sebastien.jpeg',
+ name: 'Sébastien Lorber',
+ role: 'This Week in React, Docusaurus',
+ },
+ {
+ img: '/img/investors/nick.jpeg',
+ name: 'Nick Dima',
+ role: 'Senior Engineering Manager, Musixmatch',
+ },
+ {
+ img: '/img/investors/steven.jpeg',
+ name: 'Stephen Sullivan',
+ role: 'Founder, Middy.com',
+ },
+ {
+ img: '/img/investors/dominic.jpeg',
+ name: 'Dominic Monn',
+ role: 'Founder, MentorCruise',
+ },
+ {
+ img: '/img/investors/jeremy.jpeg',
+ name: 'Jeremy Toeman',
+ role: 'Founder, augxlabs.com',
+ },
+ {
+ img: '/img/investors/robbie.jpeg',
+ name: 'Robbie Zhang-Smitheran',
+ role: 'Cameo.com',
+ },
+ {
+ img: '/img/investors/ilya.jpeg',
+ name: 'Ilya Lyamkin',
+ role: 'Senior Software Engineer, Spotify',
+ },
+ {
+ img: '/img/investors/lucas.jpeg',
+ name: 'Lucas Pelloni',
+ role: 'Co-Founder, Nestermind',
+ },
+ {
+ img: '/img/investors/michiel.jpeg',
+ name: 'Michiel Westerbeek',
+ role: 'Co-Founder, Tella',
+ },
+ {
+ img: '/img/investors/vjeux.jpg',
+ name: 'Christopher Chedeau',
+ role: 'Co-Creator of Excalidraw and React Native',
+ },
+ {
+ img: '/img/investors/david.jpeg',
+ name: 'David Salib',
+ role: 'Co-Founder, Momento',
+ },
];
const gridStyles = `
diff --git a/packages/docs/components/LambdaSplash/BuildApps.tsx b/packages/docs/components/LambdaSplash/BuildApps.tsx
index 86f9b020532..c2370cb1e7d 100644
--- a/packages/docs/components/LambdaSplash/BuildApps.tsx
+++ b/packages/docs/components/LambdaSplash/BuildApps.tsx
@@ -1,33 +1,33 @@
-import React from "react";
-import { VideoApps } from "./VideoApps";
+import React from 'react';
+import {VideoApps} from './VideoApps';
const center: React.CSSProperties = {
- textAlign: "center",
+ textAlign: 'center',
};
export const BuildApps: React.FC = () => {
- return (
-
-
- Build video{" "}
-
- apps
-
-
-
- Combine our tools to build apps that leverage programmatic video.
-
-
-
-
-
- All Remotion products are source-available, for self-hosting, free for
- individuals and small businesses, with company licensing available.
-
-
- );
+ return (
+
+
+ Build video{' '}
+
+ apps
+
+
+
+ Combine our tools to build apps that leverage programmatic video.
+
+
+
+
+
+ All Remotion products are source-available, for self-hosting, free for
+ individuals and small businesses, with company licensing available.
+
+
+ );
};
diff --git a/packages/docs/components/LambdaSplash/Easy.tsx b/packages/docs/components/LambdaSplash/Easy.tsx
index d3e04a5701f..2377754b609 100644
--- a/packages/docs/components/LambdaSplash/Easy.tsx
+++ b/packages/docs/components/LambdaSplash/Easy.tsx
@@ -1,40 +1,40 @@
-import { useColorMode } from "@docusaurus/theme-common";
-import React from "react";
-import { Spacer } from "../layout/Spacer";
-import styles from "./easy.module.css";
+import {useColorMode} from '@docusaurus/theme-common';
+import React from 'react';
+import {Spacer} from '../layout/Spacer';
+import styles from './easy.module.css';
export const LambdaEasy: React.FC = () => {
- const { colorMode } = useColorMode();
+ const {colorMode} = useColorMode();
- return (
-
-
-
-
-
-
-
-
-
- Easy to setup.
-
-
- We{"'"}ve figured out hard problems such as cloud architecture,
- scheduling and progress reporting to provide you with a solution that
- you can deploy to your own account by following a series of
- well-defined steps.
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+
+
+ Easy to setup.
+
+
+ We{"'"}ve figured out hard problems such as cloud architecture,
+ scheduling and progress reporting to provide you with a solution that
+ you can deploy to your own account by following a series of
+ well-defined steps.
+
+
+
+ );
};
diff --git a/packages/docs/components/LambdaSplash/Fast.tsx b/packages/docs/components/LambdaSplash/Fast.tsx
index 2987e31287a..1c184004267 100644
--- a/packages/docs/components/LambdaSplash/Fast.tsx
+++ b/packages/docs/components/LambdaSplash/Fast.tsx
@@ -1,38 +1,38 @@
-import { useColorMode } from "@docusaurus/theme-common";
-import React from "react";
-import { Spacer } from "../layout/Spacer";
-import styles from "./fast.module.css";
+import {useColorMode} from '@docusaurus/theme-common';
+import React from 'react';
+import {Spacer} from '../layout/Spacer';
+import styles from './fast.module.css';
export const LambdaFast: React.FC = () => {
- const { colorMode } = useColorMode();
- return (
-
-
-
-
-
-
-
-
-
- Fast because distributed
-
-
- Because you write videos declaratively in React, rendering can be
- distributed to many Lambda functions which can each perform work
- independently. The Remotion masterplan has come alive.
-
-
-
- );
+ const {colorMode} = useColorMode();
+ return (
+
+
+
+
+
+
+
+
+
+ Fast because distributed
+
+
+ Because you write videos declaratively in React, rendering can be
+ distributed to many Lambda functions which can each perform work
+ independently. The Remotion masterplan has come alive.
+
+
+
+ );
};
diff --git a/packages/docs/components/LambdaSplash/LambdaHeader.tsx b/packages/docs/components/LambdaSplash/LambdaHeader.tsx
index c4df015e4ac..1f34363653f 100644
--- a/packages/docs/components/LambdaSplash/LambdaHeader.tsx
+++ b/packages/docs/components/LambdaSplash/LambdaHeader.tsx
@@ -1,67 +1,67 @@
-import React from "react";
-import { BlueButton } from "../layout/Button";
-import styles from "./lambdaheader.module.css";
-import { LambdaLogo } from "./LambdaLogo";
-import { PlayerPreview } from "./PlayerPreview";
+import React from 'react';
+import {BlueButton} from '../layout/Button';
+import {LambdaLogo} from './LambdaLogo';
+import {PlayerPreview} from './PlayerPreview';
+import styles from './lambdaheader.module.css';
const DiscordLogo: React.FC = () => {
- return (
-
-
-
- );
+ return (
+
+
+
+ );
};
export const LambdaHeader: React.FC = () => {
- return (
-
-
-
-
- Rendering. At scale.
-
-
- Distribute render workload over multiple Lambdas and only pay for when
- you are rendering. Slash render times into a fraction of what you are
- used to.
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+ Rendering. At scale.
+
+
+ Distribute render workload over multiple Lambdas and only pay for when
+ you are rendering. Slash render times into a fraction of what you are
+ used to.
+
+
+
+
+
+
+ );
};
diff --git a/packages/docs/components/LambdaSplash/LambdaLogo.tsx b/packages/docs/components/LambdaSplash/LambdaLogo.tsx
index 45753441dee..61493cdcd31 100644
--- a/packages/docs/components/LambdaSplash/LambdaLogo.tsx
+++ b/packages/docs/components/LambdaSplash/LambdaLogo.tsx
@@ -1,11 +1,11 @@
-import React from "react";
+import React from 'react';
const align: React.CSSProperties = {
- fontWeight: "bold",
- fontSize: 20,
- color: "var(--ifm-color-primary)",
+ fontWeight: 'bold',
+ fontSize: 20,
+ color: 'var(--ifm-color-primary)',
};
export const LambdaLogo: React.FC = () => {
- return @remotion/lambda
;
+ return @remotion/lambda
;
};
diff --git a/packages/docs/components/LambdaSplash/PlayerPreview.tsx b/packages/docs/components/LambdaSplash/PlayerPreview.tsx
index adf08df593c..8b871fbaa53 100644
--- a/packages/docs/components/LambdaSplash/PlayerPreview.tsx
+++ b/packages/docs/components/LambdaSplash/PlayerPreview.tsx
@@ -1,57 +1,57 @@
-import React from "react";
-import styles from "./playerpreview.module.css";
+import React from 'react';
+import styles from './playerpreview.module.css';
const rotate: React.CSSProperties = {
- transform: `rotate(90deg)`,
+ transform: `rotate(90deg)`,
};
const ICON_SIZE = 18;
export const PlayerPreview: React.FC = () => {
- return (
-
-
-
-
-
-
-
-
- Watch Promo video (1:20)
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+
+ Watch Promo video (1:20)
+
+
+
+
+ );
};
diff --git a/packages/docs/components/LambdaSplash/VideoApps.tsx b/packages/docs/components/LambdaSplash/VideoApps.tsx
index 49a40b49742..9559b84b93c 100644
--- a/packages/docs/components/LambdaSplash/VideoApps.tsx
+++ b/packages/docs/components/LambdaSplash/VideoApps.tsx
@@ -3,8 +3,8 @@ import React, {useEffect, useState} from 'react';
import {BlueButton} from '../layout/Button';
import {PALETTE} from '../layout/colors';
import {Spacer} from '../layout/Spacer';
-import videoapps from './videoapps.module.css';
import {YouAreHere} from './YouAreHere';
+import videoapps from './videoapps.module.css';
const panel: React.CSSProperties = {
backgroundColor: 'var(--ifm-background-color)',
diff --git a/packages/docs/components/LambdaSplash/YouAreHere.tsx b/packages/docs/components/LambdaSplash/YouAreHere.tsx
index 9566bc37c2d..c96026d1317 100644
--- a/packages/docs/components/LambdaSplash/YouAreHere.tsx
+++ b/packages/docs/components/LambdaSplash/YouAreHere.tsx
@@ -1,30 +1,30 @@
-import React from "react";
+import React from 'react';
const container: React.CSSProperties = {
- width: "100%",
- display: "inline-flex",
- justifyContent: "center",
- position: "relative",
+ width: '100%',
+ display: 'inline-flex',
+ justifyContent: 'center',
+ position: 'relative',
};
const label: React.CSSProperties = {
- backgroundColor: "var(--ifm-color-primary)",
- fontWeight: "bold",
- color: "white",
- paddingLeft: 8,
- paddingRight: 8,
- paddingTop: 4,
- paddingBottom: 4,
- borderRadius: 6,
- fontSize: 13,
- position: "absolute",
- marginTop: -40,
+ backgroundColor: 'var(--ifm-color-primary)',
+ fontWeight: 'bold',
+ color: 'white',
+ paddingLeft: 8,
+ paddingRight: 8,
+ paddingTop: 4,
+ paddingBottom: 4,
+ borderRadius: 6,
+ fontSize: 13,
+ position: 'absolute',
+ marginTop: -40,
};
export const YouAreHere: React.FC = () => {
- return (
-
- );
+ return (
+
+ );
};
diff --git a/packages/docs/components/LambdaSplash/buildapps.module.css b/packages/docs/components/LambdaSplash/buildapps.module.css
index 07ec64502a7..005897e0afc 100644
--- a/packages/docs/components/LambdaSplash/buildapps.module.css
+++ b/packages/docs/components/LambdaSplash/buildapps.module.css
@@ -1,13 +1,13 @@
.panel {
- background-color: var(--ifm-background-color);
- box-shadow: var(--box-shadow);
- padding: 10px;
- border-radius: 15px;
- flex: 1;
- text-align: center;
- padding-top: 30px;
- padding-bottom: 10px;
- min-height: 500px;
- display: flex;
- flex-direction: column;
+ background-color: var(--ifm-background-color);
+ box-shadow: var(--box-shadow);
+ padding: 10px;
+ border-radius: 15px;
+ flex: 1;
+ text-align: center;
+ padding-top: 30px;
+ padding-bottom: 10px;
+ min-height: 500px;
+ display: flex;
+ flex-direction: column;
}
diff --git a/packages/docs/components/LambdaSplash/disclaimers.module.css b/packages/docs/components/LambdaSplash/disclaimers.module.css
index f16a7c248f0..cb66d036e99 100644
--- a/packages/docs/components/LambdaSplash/disclaimers.module.css
+++ b/packages/docs/components/LambdaSplash/disclaimers.module.css
@@ -1,6 +1,6 @@
.disclaimer {
- color: var(--light-text-color);
- font-size: 0.9em;
- margin-top: 12px;
- margin-bottom: 12px;
+ color: var(--light-text-color);
+ font-size: 0.9em;
+ margin-top: 12px;
+ margin-bottom: 12px;
}
diff --git a/packages/docs/components/LambdaSplash/easy.module.css b/packages/docs/components/LambdaSplash/easy.module.css
index fc8df1796bd..42f59a76985 100644
--- a/packages/docs/components/LambdaSplash/easy.module.css
+++ b/packages/docs/components/LambdaSplash/easy.module.css
@@ -1,34 +1,32 @@
.row {
- display: flex;
- flex-direction: row;
- align-items: center;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
}
.tile {
- flex: 1;
+ flex: 1;
}
.title {
- font-size: 2.5em;
- font-weight: 700;
- line-height: 1.1;
+ font-size: 2.5em;
+ font-weight: 700;
+ line-height: 1.1;
}
.realgradient {
- color: rgb(66, 144, 245);
+ color: rgb(66, 144, 245);
}
-
@media screen and (max-width: 900px) {
- .row {
- flex-direction: column-reverse;
- }
- .realmp4container {
- justify-content: flex-start;
- }
- .icon {
- animation: none;
- margin-bottom: 30px;
- }
+ .row {
+ flex-direction: column-reverse;
+ }
+ .realmp4container {
+ justify-content: flex-start;
+ }
+ .icon {
+ animation: none;
+ margin-bottom: 30px;
+ }
}
-
diff --git a/packages/docs/components/LambdaSplash/fast.module.css b/packages/docs/components/LambdaSplash/fast.module.css
index e516cf9d675..42f59a76985 100644
--- a/packages/docs/components/LambdaSplash/fast.module.css
+++ b/packages/docs/components/LambdaSplash/fast.module.css
@@ -1,34 +1,32 @@
.row {
- display: flex;
- flex-direction: row;
- align-items: center;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
}
.tile {
- flex: 1;
+ flex: 1;
}
.title {
- font-size: 2.5em;
- font-weight: 700;
- line-height: 1.1;
+ font-size: 2.5em;
+ font-weight: 700;
+ line-height: 1.1;
}
.realgradient {
- color: rgb(66, 144, 245);
+ color: rgb(66, 144, 245);
}
-
@media screen and (max-width: 900px) {
- .row {
- flex-direction: column-reverse;
- }
- .realmp4container {
- justify-content: flex-start;
- }
- .icon {
- animation: none;
- margin-bottom: 30px;
- }
+ .row {
+ flex-direction: column-reverse;
+ }
+ .realmp4container {
+ justify-content: flex-start;
+ }
+ .icon {
+ animation: none;
+ margin-bottom: 30px;
+ }
}
-
diff --git a/packages/docs/components/LambdaSplash/lambdaheader.module.css b/packages/docs/components/LambdaSplash/lambdaheader.module.css
index 4edefe8850f..0729bd93771 100644
--- a/packages/docs/components/LambdaSplash/lambdaheader.module.css
+++ b/packages/docs/components/LambdaSplash/lambdaheader.module.css
@@ -1,37 +1,37 @@
.writeincss {
- flex-direction: row;
- display: flex;
- align-items: center;
+ flex-direction: row;
+ display: flex;
+ align-items: center;
}
.writeincsstitle {
- font-size: 5em;
- font-weight: 700;
- line-height: 1;
- max-width: 500px;
+ font-size: 5em;
+ font-weight: 700;
+ line-height: 1;
+ max-width: 500px;
}
.writeright {
- flex: 1;
+ flex: 1;
}
@media screen and (max-width: 900px) {
- .writeincss {
- flex-direction: column;
- }
- .writeincsstitle {
- font-size: 3.5em;
- }
- .writeright {
- margin-top: 30px;
- }
+ .writeincss {
+ flex-direction: column;
+ }
+ .writeincsstitle {
+ font-size: 3.5em;
+ }
+ .writeright {
+ margin-top: 30px;
+ }
}
.spacer {
- height: 50px;
- width: 50px;
+ height: 50px;
+ width: 50px;
}
.a:hover {
- text-decoration: none;
+ text-decoration: none;
}
diff --git a/packages/docs/components/LambdaSplash/playerpreview.module.css b/packages/docs/components/LambdaSplash/playerpreview.module.css
index 2289ad75402..ff3008e9348 100644
--- a/packages/docs/components/LambdaSplash/playerpreview.module.css
+++ b/packages/docs/components/LambdaSplash/playerpreview.module.css
@@ -1,13 +1,13 @@
.playerpreview {
- flex: 1;
- cursor: pointer;
- position: relative;
- transition: transform 0.3s;
- background-color: var(--blue-underlay);
- border-radius: 15px;
- padding: 10px;
+ flex: 1;
+ cursor: pointer;
+ position: relative;
+ transition: transform 0.3s;
+ background-color: var(--blue-underlay);
+ border-radius: 15px;
+ padding: 10px;
}
.playerpreview:hover {
- transform: scale(1.015);
+ transform: scale(1.015);
}
diff --git a/packages/docs/components/LambdaSplash/remotionvideoappstitle.module.css b/packages/docs/components/LambdaSplash/remotionvideoappstitle.module.css
index faecd92d405..ae1f78c0b85 100644
--- a/packages/docs/components/LambdaSplash/remotionvideoappstitle.module.css
+++ b/packages/docs/components/LambdaSplash/remotionvideoappstitle.module.css
@@ -1,14 +1,13 @@
.container {
- text-align: center
+ text-align: center;
}
.title {
- font-size: 2.5em;
- font-weight: 700;
- line-height: 1.1;
+ font-size: 2.5em;
+ font-weight: 700;
+ line-height: 1.1;
}
.highlight {
- color: var(--ifm-color-primary);
+ color: var(--ifm-color-primary);
}
-
diff --git a/packages/docs/components/LambdaSplash/videoapps.module.css b/packages/docs/components/LambdaSplash/videoapps.module.css
index e485b9a7425..993f86458d1 100644
--- a/packages/docs/components/LambdaSplash/videoapps.module.css
+++ b/packages/docs/components/LambdaSplash/videoapps.module.css
@@ -1,11 +1,10 @@
.row {
- display: flex;
- flex-direction: row;
+ display: flex;
+ flex-direction: row;
}
-
@media screen and (max-width: 900px) {
- .row {
- flex-direction: column
- }
+ .row {
+ flex-direction: column;
+ }
}
diff --git a/packages/docs/components/LandingPage/SuccessFeatures.tsx b/packages/docs/components/LandingPage/SuccessFeatures.tsx
index b92eedeb826..87d03315e76 100644
--- a/packages/docs/components/LandingPage/SuccessFeatures.tsx
+++ b/packages/docs/components/LandingPage/SuccessFeatures.tsx
@@ -1,58 +1,58 @@
-import React from "react";
-import { BlueButton } from "../layout/Button";
-import styles from "./success.module.css";
+import React from 'react';
+import {BlueButton} from '../layout/Button';
+import styles from './success.module.css';
const container: React.CSSProperties = {
- maxWidth: 400,
+ maxWidth: 400,
};
const card: React.CSSProperties = {
- backgroundColor: "var(--ifm-background-color)",
- boxShadow: "var(--box-shadow)",
- borderRadius: 15,
- overflow: "hidden",
+ backgroundColor: 'var(--ifm-background-color)',
+ boxShadow: 'var(--box-shadow)',
+ borderRadius: 15,
+ overflow: 'hidden',
};
const padding: React.CSSProperties = {
- padding: 16,
+ padding: 16,
};
const p: React.CSSProperties = {
- marginTop: 4,
- marginBottom: 8,
+ marginTop: 4,
+ marginBottom: 8,
};
const titleCard: React.CSSProperties = {
- height: 160,
- backgroundSize: "cover",
- backgroundPosition: "center center",
- backgroundImage: "url(/img/makestoriescard.png)",
+ height: 160,
+ backgroundSize: 'cover',
+ backgroundPosition: 'center center',
+ backgroundImage: 'url(/img/makestoriescard.png)',
};
export const SuccessFeatures: React.FC = () => {
- return (
-
- );
+ return (
+
+ );
};
diff --git a/packages/docs/components/LandingPage/mobileplayer.module.css b/packages/docs/components/LandingPage/mobileplayer.module.css
index 3820e56a841..9f569b56f00 100644
--- a/packages/docs/components/LandingPage/mobileplayer.module.css
+++ b/packages/docs/components/LandingPage/mobileplayer.module.css
@@ -1,10 +1,10 @@
.mobileplayer {
- width: 500px;
- position: relative;
+ width: 500px;
+ position: relative;
}
@media screen and (max-width: 900px) {
- .mobileplayer {
- width: 100%;
- }
+ .mobileplayer {
+ width: 100%;
+ }
}
diff --git a/packages/docs/components/LandingPage/parametrize.module.css b/packages/docs/components/LandingPage/parametrize.module.css
index d0f80bbddd5..21e26f0f143 100644
--- a/packages/docs/components/LandingPage/parametrize.module.css
+++ b/packages/docs/components/LandingPage/parametrize.module.css
@@ -1,39 +1,39 @@
.parametrizerow {
- display: flex;
- flex-direction: row;
- text-align: left;
- align-items: center;
+ display: flex;
+ flex-direction: row;
+ text-align: left;
+ align-items: center;
}
@media screen and (max-width: 900px) {
- .parametrizerow {
- flex-direction: column;
- align-items: flex-start;
- }
+ .parametrizerow {
+ flex-direction: column;
+ align-items: flex-start;
+ }
}
.parametrizetitle {
- font-size: 2.5em;
- font-weight: 700;
- line-height: 1.1;
- text-align: left;
+ font-size: 2.5em;
+ font-weight: 700;
+ line-height: 1.1;
+ text-align: left;
}
.parametrizegradient {
- color: var(--ifm-color-primary);
+ color: var(--ifm-color-primary);
}
.parametrizeinput {
- appearance: none;
- color: var(--text-color);
- padding: 13px;
- font-family: inherit;
- border: 2px solid var(--ifm-code-background);
- border-radius: 6px;
- background-color: transparent;
- outline: none;
+ appearance: none;
+ color: var(--text-color);
+ padding: 13px;
+ font-family: inherit;
+ border: 2px solid var(--ifm-code-background);
+ border-radius: 6px;
+ background-color: transparent;
+ outline: none;
}
.parametrizeinput:focus {
- border-color: var(--ifm-tabs-color-active);
+ border-color: var(--ifm-tabs-color-active);
}
diff --git a/packages/docs/components/LandingPage/playerpreview.module.css b/packages/docs/components/LandingPage/playerpreview.module.css
index 2289ad75402..ff3008e9348 100644
--- a/packages/docs/components/LandingPage/playerpreview.module.css
+++ b/packages/docs/components/LandingPage/playerpreview.module.css
@@ -1,13 +1,13 @@
.playerpreview {
- flex: 1;
- cursor: pointer;
- position: relative;
- transition: transform 0.3s;
- background-color: var(--blue-underlay);
- border-radius: 15px;
- padding: 10px;
+ flex: 1;
+ cursor: pointer;
+ position: relative;
+ transition: transform 0.3s;
+ background-color: var(--blue-underlay);
+ border-radius: 15px;
+ padding: 10px;
}
.playerpreview:hover {
- transform: scale(1.015);
+ transform: scale(1.015);
}
diff --git a/packages/docs/components/LandingPage/success.module.css b/packages/docs/components/LandingPage/success.module.css
index 11dc372b828..655d1464f55 100644
--- a/packages/docs/components/LandingPage/success.module.css
+++ b/packages/docs/components/LandingPage/success.module.css
@@ -1,13 +1,13 @@
.successlink {
- text-decoration: none;
- color: inherit;
- display: inline-block;
- transform: translateY(0px);
- transition: transform 0.2s;
+ text-decoration: none;
+ color: inherit;
+ display: inline-block;
+ transform: translateY(0px);
+ transition: transform 0.2s;
}
.successlink:hover {
- text-decoration: none;
- color: inherit;
- transform: translateY(-4px);
+ text-decoration: none;
+ color: inherit;
+ transform: translateY(-4px);
}
diff --git a/packages/docs/components/PeriodSelector.tsx b/packages/docs/components/PeriodSelector.tsx
index 9bd7f6b9054..6c597970154 100644
--- a/packages/docs/components/PeriodSelector.tsx
+++ b/packages/docs/components/PeriodSelector.tsx
@@ -1,40 +1,38 @@
-import React from "react";
-import { BlueButton, ClearButton } from "./layout/Button";
-import { Spacer } from "./layout/Spacer";
+import React from 'react';
+import {BlueButton, ClearButton} from './layout/Button';
+import {Spacer} from './layout/Spacer';
enum Period {
- Monthly = "monthly",
- Yearly = "yearly",
+ Monthly = 'monthly',
+ Yearly = 'yearly',
}
export const PeriodSelector: React.FC<{
- readonly period: Period;
- readonly setPeriod: (per: Period) => void;
-}> = ({ period, setPeriod }) => {
- const MonthlyComponent = period === Period.Monthly ? BlueButton : ClearButton;
- const YearlyComponent = period === Period.Monthly ? ClearButton : BlueButton;
+ readonly period: Period;
+ readonly setPeriod: (per: Period) => void;
+}> = ({period, setPeriod}) => {
+ const MonthlyComponent = period === Period.Monthly ? BlueButton : ClearButton;
+ const YearlyComponent = period === Period.Monthly ? ClearButton : BlueButton;
- return (
-
- setPeriod(Period.Monthly)}
- >
- Monthly
-
-
- setPeriod(Period.Yearly)}
- >
- Yearly
-
-
- );
+ return (
+
+ setPeriod(Period.Monthly)}
+ >
+ Monthly
+
+
+ setPeriod(Period.Yearly)}
+ >
+ Yearly
+
+
+ );
};
diff --git a/packages/docs/components/Player/ColorPicker.tsx b/packages/docs/components/Player/ColorPicker.tsx
index a014409ffb4..30f43c606eb 100644
--- a/packages/docs/components/Player/ColorPicker.tsx
+++ b/packages/docs/components/Player/ColorPicker.tsx
@@ -1,59 +1,59 @@
-import React from "react";
+import React from 'react';
-export const colorPickerColors = ["#686de0", "#be2edd", "#f0932b", "#f9ca24"];
+export const colorPickerColors = ['#686de0', '#be2edd', '#f0932b', '#f9ca24'];
export const ColorPicker: React.FC<{
- readonly selected: string;
- readonly onSelected: (color: string) => void;
-}> = ({ selected, onSelected }) => {
- return (
-
- {colorPickerColors.map((c) => {
- return (
-
onSelected(c)}
- style={{
- backgroundColor: c,
- height: 40,
- width: 40,
- borderRadius: 20,
- marginRight: 8,
- cursor: "pointer",
- display: "flex",
- justifyContent: "center",
- alignItems: "center",
- }}
- >
- {selected === c ? (
-
-
-
- ) : null}
-
- );
- })}
-
- );
+ readonly selected: string;
+ readonly onSelected: (color: string) => void;
+}> = ({selected, onSelected}) => {
+ return (
+
+ {colorPickerColors.map((c) => {
+ return (
+
onSelected(c)}
+ style={{
+ backgroundColor: c,
+ height: 40,
+ width: 40,
+ borderRadius: 20,
+ marginRight: 8,
+ cursor: 'pointer',
+ display: 'flex',
+ justifyContent: 'center',
+ alignItems: 'center',
+ }}
+ >
+ {selected === c ? (
+
+
+
+ ) : null}
+
+ );
+ })}
+
+ );
};
diff --git a/packages/docs/components/Player/LandingHeader.tsx b/packages/docs/components/Player/LandingHeader.tsx
index 17b0a4d4389..6b90d2d2e7a 100644
--- a/packages/docs/components/Player/LandingHeader.tsx
+++ b/packages/docs/components/Player/LandingHeader.tsx
@@ -1,62 +1,62 @@
-import React from "react";
-import { BlueButton } from "../layout/Button";
-import styles from "./landing.module.css";
-import { useColorMode } from "@docusaurus/theme-common";
+import {useColorMode} from '@docusaurus/theme-common';
+import React from 'react';
+import {BlueButton} from '../layout/Button';
+import styles from './landing.module.css';
const logo: React.CSSProperties = {
- fontWeight: "bold",
- fontSize: 20,
- color: "var(--ifm-color-primary)",
- marginTop: "5vh",
+ fontWeight: 'bold',
+ fontSize: 20,
+ color: 'var(--ifm-color-primary)',
+ marginTop: '5vh',
};
export const LandingHeader: React.FC = () => {
- const { colorMode } = useColorMode();
+ const {colorMode} = useColorMode();
- return (
-
-
@remotion/player
-
- Dynamic embedded
-
- videos in React.
-
-
-
-
+ return (
+
+
@remotion/player
+
+ Dynamic embedded
+
+ videos in React.
+
+
+
+
-
-
-
- With the Remotion Player, you can embed videos that are written in
- React, and change them at runtime. Connect it to server-side rendering
- to turn them into real MP4 videos.
-
-
-
- Documentation
-
-
-
-
-
- );
+
+
+
+ With the Remotion Player, you can embed videos that are written in
+ React, and change them at runtime. Connect it to server-side rendering
+ to turn them into real MP4 videos.
+
+
+
+ Documentation
+
+
+
+
+
+ );
};
diff --git a/packages/docs/components/Player/PoweredByRemotion.tsx b/packages/docs/components/Player/PoweredByRemotion.tsx
index c809500cd71..5d08551287d 100644
--- a/packages/docs/components/Player/PoweredByRemotion.tsx
+++ b/packages/docs/components/Player/PoweredByRemotion.tsx
@@ -1,50 +1,50 @@
-import React from "react";
-import { Button } from "../layout/Button";
-import styles from "./powered.module.css";
+import React from 'react';
+import {Button} from '../layout/Button';
+import styles from './powered.module.css';
export const PoweredByRemotion: React.FC = () => {
- return (
-
-
-
-
- Powered by Remotion
-
-
- Remotion is the premier framework for writing videos in React.
-
- Use the timeline editor with Fast Refresh to get every frame
- perfect, before you embed it in a website.
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+ Powered by Remotion
+
+
+ Remotion is the premier framework for writing videos in React.
+
+ Use the timeline editor with Fast Refresh to get every frame
+ perfect, before you embed it in a website.
+
+
+
+
+
+
+ );
};
diff --git a/packages/docs/components/Player/Wrapped.tsx b/packages/docs/components/Player/Wrapped.tsx
index 940026513ab..6de6cb1cec4 100644
--- a/packages/docs/components/Player/Wrapped.tsx
+++ b/packages/docs/components/Player/Wrapped.tsx
@@ -1,52 +1,52 @@
-import React from "react";
-import { Button } from "../layout/Button";
-import styles from "./powered.module.css";
+import React from 'react';
+import {Button} from '../layout/Button';
+import styles from './powered.module.css';
export const WrappedBanner: React.FC = () => {
- return (
-
-
-
-
- Reference application
-
-
- Check out #GitHubUnwrapped to get your personal GitHub Year in
- Review. Powered by Remotion Player and open source!
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+ Reference application
+
+
+ Check out #GitHubUnwrapped to get your personal GitHub Year in
+ Review. Powered by Remotion Player and open source!
+
+
+
+
+
+
+ );
};
diff --git a/packages/docs/components/Player/features.module.css b/packages/docs/components/Player/features.module.css
index 9d5e82f6ef8..3d784b0a411 100644
--- a/packages/docs/components/Player/features.module.css
+++ b/packages/docs/components/Player/features.module.css
@@ -1,36 +1,36 @@
.title {
- font-size: 2.5em;
- font-weight: 700;
- line-height: 1.1;
+ font-size: 2.5em;
+ font-weight: 700;
+ line-height: 1.1;
}
.keyword {
-color: var(--ifm-color-primary)
+ color: var(--ifm-color-primary);
}
.container {
- margin-top: 80px;
- margin-bottom: 80px;
+ margin-top: 80px;
+ margin-bottom: 80px;
}
.row {
- display: flex;
- flex-direction: row;
- padding-top: 40px;
- padding-bottom: 40px;
- align-items: center;
+ display: flex;
+ flex-direction: row;
+ padding-top: 40px;
+ padding-bottom: 40px;
+ align-items: center;
}
.half {
- flex: 1;
+ flex: 1;
}
@media (max-width: 1000px) {
- .row {
- width: 100%;
- flex-direction: column;
- }
- .half {
- width: 100%;
- }
+ .row {
+ width: 100%;
+ flex-direction: column;
+ }
+ .half {
+ width: 100%;
+ }
}
diff --git a/packages/docs/components/Player/features.tsx b/packages/docs/components/Player/features.tsx
index 9b78f991852..d8a48558f23 100644
--- a/packages/docs/components/Player/features.tsx
+++ b/packages/docs/components/Player/features.tsx
@@ -1,111 +1,111 @@
-import { useColorMode } from "@docusaurus/theme-common";
-import React, { useState } from "react";
-import { ColorPicker, colorPickerColors } from "../Player/ColorPicker";
-import { PlayerExample } from "../PlayerExample";
-import { CoolInput } from "../TextInput";
-import styles from "./features.module.css";
+import {useColorMode} from '@docusaurus/theme-common';
+import React, {useState} from 'react';
+import {ColorPicker, colorPickerColors} from '../Player/ColorPicker';
+import {PlayerExample} from '../PlayerExample';
+import {CoolInput} from '../TextInput';
+import styles from './features.module.css';
export const PlayerFeatures: React.FC = () => {
- const { colorMode } = useColorMode();
- const [name, setName] = useState("");
- const [color, setColor] = useState(colorPickerColors[0]);
+ const {colorMode} = useColorMode();
+ const [name, setName] = useState('');
+ const [color, setColor] = useState(colorPickerColors[0]);
- return (
-
-
-
-
Demo
-
Enter a name and pick a color and watch the video adapt.
-
setName(e.target.value)}
- />
-
-
-
-
-
-
-
-
- Reactive to data
-
-
- Connect the video to an API or a form - the video will update
- immediately once the data changes - simply update a React prop!
-
-
-
-
-
-
-
-
-
-
- Extremely customizable
-
-
- The Remotion Player is inspired by the browsers native{" "}
- <video> tag. Get started by adding the{" "}
- controls prop, or build your own UI using our flexible
- APIs.{" "}
-
-
-
-
-
-
-
-
-
-
- Turn it into real videos
-
-
- Connect to the Remotion server-side rendering APIs to turn the
- preview into real videos. We have support for audio and various
- codecs, and allow rendering in Node.JS or AWS Lambda.
-
-
-
-
-
-
-
-
- );
+ return (
+
+
+
+
Demo
+
Enter a name and pick a color and watch the video adapt.
+
setName(e.target.value)}
+ />
+
+
+
+
+
+
+
+
+ Reactive to data
+
+
+ Connect the video to an API or a form - the video will update
+ immediately once the data changes - simply update a React prop!
+
+
+
+
+
+
+
+
+
+
+ Extremely customizable
+
+
+ The Remotion Player is inspired by the browsers native{' '}
+ <video> tag. Get started by adding the{' '}
+ controls prop, or build your own UI using our flexible
+ APIs.{' '}
+
+
+
+
+
+
+
+
+
+
+ Turn it into real videos
+
+
+ Connect to the Remotion server-side rendering APIs to turn the
+ preview into real videos. We have support for audio and various
+ codecs, and allow rendering in Node.JS or AWS Lambda.
+
+
+
+
+
+
+
+
+ );
};
diff --git a/packages/docs/components/Player/footer.module.css b/packages/docs/components/Player/footer.module.css
index 5f20abeb6be..5fe34041fab 100644
--- a/packages/docs/components/Player/footer.module.css
+++ b/packages/docs/components/Player/footer.module.css
@@ -1,14 +1,14 @@
.title {
- font-size: 2em;
+ font-size: 2em;
}
.footerrow {
- display: flex;
- flex-direction: row;
+ display: flex;
+ flex-direction: row;
}
@media (max-width: 1000px) {
- .footerrow {
- flex-direction: column;
- }
+ .footerrow {
+ flex-direction: column;
+ }
}
diff --git a/packages/docs/components/Player/landing.module.css b/packages/docs/components/Player/landing.module.css
index 33bd08f4068..d0577644ac7 100644
--- a/packages/docs/components/Player/landing.module.css
+++ b/packages/docs/components/Player/landing.module.css
@@ -1,27 +1,27 @@
.container {
- display: flex;
- align-items: center;
- flex-direction: column;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
}
.title {
- font-size: 3.5em;
- text-align: center;
- font-weight: 700;
- line-height: 1.2;
- max-width: 600px;
+ font-size: 3.5em;
+ text-align: center;
+ font-weight: 700;
+ line-height: 1.2;
+ max-width: 600px;
}
@media screen and (max-width: 1000px) {
- .title {
- font-size: 2em;
- }
+ .title {
+ font-size: 2em;
+ }
}
.p {
- text-align: center;
- max-width: 500px;
+ text-align: center;
+ max-width: 500px;
}
.a:hover {
- text-decoration: none;
+ text-decoration: none;
}
diff --git a/packages/docs/components/Player/powered.module.css b/packages/docs/components/Player/powered.module.css
index 846fe2343fc..ec055ecc1a8 100644
--- a/packages/docs/components/Player/powered.module.css
+++ b/packages/docs/components/Player/powered.module.css
@@ -1,24 +1,24 @@
.responsiverow {
- display: flex;
- flex-direction: row;
- align-items: center;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
}
@media (max-width: 1000px) {
- .responsiverow {
- flex-direction: column;
- align-items: flex-start;
- }
+ .responsiverow {
+ flex-direction: column;
+ align-items: flex-start;
+ }
}
.flexer {
- flex: 1;
+ flex: 1;
}
@media (max-width: 1000px) {
- .flexer {
- flex: none;
- height: 20px;
- display: block;
- }
+ .flexer {
+ flex: none;
+ height: 20px;
+ display: block;
+ }
}
diff --git a/packages/docs/components/PlayerExampleWithControls.tsx b/packages/docs/components/PlayerExampleWithControls.tsx
index 265ef25a0bd..a126b9559c4 100644
--- a/packages/docs/components/PlayerExampleWithControls.tsx
+++ b/packages/docs/components/PlayerExampleWithControls.tsx
@@ -1,39 +1,39 @@
-import React, { useState } from "react";
-import { PlayerExample } from "./PlayerExample";
-import { CoolInput } from "./TextInput";
+import React, {useState} from 'react';
+import {PlayerExample} from './PlayerExample';
+import {CoolInput} from './TextInput';
export const PlayerExampleWithControls: React.FC = () => {
- const [name, setName] = useState("");
- const [color, setColor] = useState("#4098f5");
+ const [name, setName] = useState('');
+ const [color, setColor] = useState('#4098f5');
- return (
-
-
-
-
-
Enter your name:
-
-
setName(e.target.value)}
- />
-
-
-
- Select your favorite color:{" "}
- setColor(e.target.value)}
- />
-
-
- );
+ return (
+
+
+
+
+
Enter your name:
+
+
setName(e.target.value)}
+ />
+
+
+
+ Select your favorite color:{' '}
+ setColor(e.target.value)}
+ />
+
+
+ );
};
diff --git a/packages/docs/components/Premounting/NoPremounting.tsx b/packages/docs/components/Premounting/NoPremounting.tsx
index 679c9e2178d..5c907b043da 100644
--- a/packages/docs/components/Premounting/NoPremounting.tsx
+++ b/packages/docs/components/Premounting/NoPremounting.tsx
@@ -1,52 +1,52 @@
-import React from "react";
+import React from 'react';
export const NoPremounting: React.FC = () => {
- return (
-
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+ );
};
diff --git a/packages/docs/components/Premounting/Premounting.tsx b/packages/docs/components/Premounting/Premounting.tsx
index dafa487c699..c9122459857 100644
--- a/packages/docs/components/Premounting/Premounting.tsx
+++ b/packages/docs/components/Premounting/Premounting.tsx
@@ -1,69 +1,69 @@
-import React from "react";
+import React from 'react';
export const Premounting: React.FC = () => {
- return (
-
-
-
-
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+
+
+
+ );
};
diff --git a/packages/docs/components/Redirect.tsx b/packages/docs/components/Redirect.tsx
index 37668a077bc..935916afc0d 100644
--- a/packages/docs/components/Redirect.tsx
+++ b/packages/docs/components/Redirect.tsx
@@ -1,16 +1,16 @@
-import { useEffect } from "react";
+import {useEffect} from 'react';
-export default ({ redirect }) => {
- useEffect(() => {
- if (typeof window === "undefined") {
- return;
- }
+export default ({redirect}) => {
+ useEffect(() => {
+ if (typeof window === 'undefined') {
+ return;
+ }
- if (typeof window.location === "undefined") {
- return;
- }
+ if (typeof window.location === 'undefined') {
+ return;
+ }
- window.location.href = redirect;
- }, [redirect]);
- return null;
+ window.location.href = redirect;
+ }, [redirect]);
+ return null;
};
diff --git a/packages/docs/components/Spinner.tsx b/packages/docs/components/Spinner.tsx
index b706806efa1..c8badf695ca 100644
--- a/packages/docs/components/Spinner.tsx
+++ b/packages/docs/components/Spinner.tsx
@@ -1,12 +1,12 @@
-import React from "react";
+import React from 'react';
const css: React.CSSProperties = {
- border: "10px solid #f3f3f3",
- borderTop: "10px solid var(--ifm-color-primary)",
- borderRadius: "50%",
- width: "80px",
- height: "80px",
- animation: "spin 1s linear infinite",
+ border: '10px solid #f3f3f3',
+ borderTop: '10px solid var(--ifm-color-primary)',
+ borderRadius: '50%',
+ width: '80px',
+ height: '80px',
+ animation: 'spin 1s linear infinite',
};
export const Spinner: React.FC = () =>
;
diff --git a/packages/docs/components/SplineVideo.tsx b/packages/docs/components/SplineVideo.tsx
index 10b5239c609..58339453f41 100644
--- a/packages/docs/components/SplineVideo.tsx
+++ b/packages/docs/components/SplineVideo.tsx
@@ -1,19 +1,19 @@
-import { useColorMode } from "@docusaurus/theme-common";
-import React from "react";
+import {useColorMode} from '@docusaurus/theme-common';
+import React from 'react';
export const SplineVideo: React.FC = () => {
- const { colorMode } = useColorMode();
- return (
-
- );
+ const {colorMode} = useColorMode();
+ return (
+
+ );
};
diff --git a/packages/docs/components/SupportedAudioCodec.tsx b/packages/docs/components/SupportedAudioCodec.tsx
index 2104eeb5398..9925ac09198 100644
--- a/packages/docs/components/SupportedAudioCodec.tsx
+++ b/packages/docs/components/SupportedAudioCodec.tsx
@@ -1,90 +1,90 @@
-import type { AudioCodec, Codec, FileExtension } from "@remotion/renderer";
-import { BrowserSafeApis } from "@remotion/renderer/client";
-import React from "react";
+import type {AudioCodec, Codec, FileExtension} from '@remotion/renderer';
+import {BrowserSafeApis} from '@remotion/renderer/client';
+import React from 'react';
export const SupportedAudioCodecTable = () => {
- return (
-
-
- Video codec
- Default
- Supported audio codecs
- Possible file extensions
-
- {Object.keys(BrowserSafeApis.supportedAudioCodecs).map((api: Codec) => {
- if (api === "h264-mkv") {
- return null;
- }
+ return (
+
+
+ Video codec
+ Default
+ Supported audio codecs
+ Possible file extensions
+
+ {Object.keys(BrowserSafeApis.supportedAudioCodecs).map((api: Codec) => {
+ if (api === 'h264-mkv') {
+ return null;
+ }
- return (
-
- {BrowserSafeApis.supportedAudioCodecs[api].map(
- (audioCodec: AudioCodec, i: number) => {
- const possibleExtensions = BrowserSafeApis
- .defaultFileExtensionMap[api].forAudioCodec[audioCodec] as {
- possible: FileExtension[];
- default: FileExtension;
- };
+ return (
+
+ {BrowserSafeApis.supportedAudioCodecs[api].map(
+ (audioCodec: AudioCodec, i: number) => {
+ const possibleExtensions = BrowserSafeApis
+ .defaultFileExtensionMap[api].forAudioCodec[audioCodec] as {
+ possible: FileExtension[];
+ default: FileExtension;
+ };
- return (
-
- {i === 0 ? {api} : null}
-
- {BrowserSafeApis.defaultAudioCodecs[api].compressed ===
- audioCodec ? (
- ✅
- ) : null}
- {api === "prores" && i === 0 ? * : null}
-
-
- {audioCodec}
-
-
- {possibleExtensions.possible.map((p, index) => {
- return (
-
- .{p}{" "}
- {p === possibleExtensions.default ? (
- (default)
- ) : null}
- {index ===
- possibleExtensions.possible.length - 1 ? null : (
- ,
- )}
-
- );
- })}
-
-
- );
- }
- )}
-
- );
- })}
-
- );
+ return (
+
+ {i === 0 ? {api} : null}
+
+ {BrowserSafeApis.defaultAudioCodecs[api].compressed ===
+ audioCodec ? (
+ ✅
+ ) : null}
+ {api === 'prores' && i === 0 ? * : null}
+
+
+ {audioCodec}
+
+
+ {possibleExtensions.possible.map((p, index) => {
+ return (
+
+ .{p}{' '}
+ {p === possibleExtensions.default ? (
+ (default)
+ ) : null}
+ {index ===
+ possibleExtensions.possible.length - 1 ? null : (
+ ,
+ )}
+
+ );
+ })}
+
+
+ );
+ },
+ )}
+
+ );
+ })}
+
+ );
};
export const FileExtensionTable: React.FC = () => {
- const extensions = Object.keys(BrowserSafeApis.defaultCodecsForFileExtension);
+ const extensions = Object.keys(BrowserSafeApis.defaultCodecsForFileExtension);
- return (
-
-
- File extension
- Default codec
-
- {extensions.map((e) => {
- return (
-
- .{e}
-
- {BrowserSafeApis.defaultCodecsForFileExtension[e]}
-
-
- );
- })}
-
- );
+ return (
+
+
+ File extension
+ Default codec
+
+ {extensions.map((e) => {
+ return (
+
+ .{e}
+
+ {BrowserSafeApis.defaultCodecsForFileExtension[e]}
+
+
+ );
+ })}
+
+ );
};
diff --git a/packages/docs/components/TableOfContents/Grid.tsx b/packages/docs/components/TableOfContents/Grid.tsx
index 23e9ce51eaa..6731df87b40 100644
--- a/packages/docs/components/TableOfContents/Grid.tsx
+++ b/packages/docs/components/TableOfContents/Grid.tsx
@@ -1,8 +1,8 @@
-import React from "react";
-import styles from "./toc.module.css";
+import React from 'react';
+import styles from './toc.module.css';
export const Grid: React.FC<{
- readonly children: React.ReactNode;
-}> = ({ children }) => {
- return {children}
;
+ readonly children: React.ReactNode;
+}> = ({children}) => {
+ return {children}
;
};
diff --git a/packages/docs/components/TableOfContents/TOCItem.tsx b/packages/docs/components/TableOfContents/TOCItem.tsx
index c2bb6308aa8..f76d521e114 100644
--- a/packages/docs/components/TableOfContents/TOCItem.tsx
+++ b/packages/docs/components/TableOfContents/TOCItem.tsx
@@ -1,14 +1,14 @@
-import Link from "@docusaurus/Link";
-import React from "react";
-import styles from "./toc.module.css";
+import Link from '@docusaurus/Link';
+import React from 'react';
+import styles from './toc.module.css';
export const TOCItem: React.FC<{
- readonly link: string;
- readonly children: React.ReactNode;
-}> = ({ link, children }) => {
- return (
-
- {children}
-
- );
+ readonly link: string;
+ readonly children: React.ReactNode;
+}> = ({link, children}) => {
+ return (
+
+ {children}
+
+ );
};
diff --git a/packages/docs/components/TableOfContents/pro-label.tsx b/packages/docs/components/TableOfContents/pro-label.tsx
index 6189b70da2e..d81f99de4d5 100644
--- a/packages/docs/components/TableOfContents/pro-label.tsx
+++ b/packages/docs/components/TableOfContents/pro-label.tsx
@@ -1,26 +1,26 @@
-import React from "react";
+import React from 'react';
export const ProLabel: React.FC = () => {
- return (
-
-
- Paid
-
-
- );
+ return (
+
+
+ Paid
+
+
+ );
};
diff --git a/packages/docs/components/TableOfContents/toc.module.css b/packages/docs/components/TableOfContents/toc.module.css
index 3422d0dac9c..51d0ab7c9e7 100644
--- a/packages/docs/components/TableOfContents/toc.module.css
+++ b/packages/docs/components/TableOfContents/toc.module.css
@@ -1,32 +1,32 @@
.containerrow {
- display: grid;
- grid-template-columns: 1fr 1fr;
- grid-auto-rows: 1fr;
- grid-gap: 15px;
- margin-bottom: 30px;
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-auto-rows: 1fr;
+ grid-gap: 15px;
+ margin-bottom: 30px;
}
.item {
- padding: 18px;
- border: 1px solid var(--border-color);
- border-radius: 10px;
- flex: 1;
+ padding: 18px;
+ border: 1px solid var(--border-color);
+ border-radius: 10px;
+ flex: 1;
}
.link {
- text-decoration: none !important;
- color: inherit;
- display: flex;
- width: 100%;
- height: 100%;
+ text-decoration: none !important;
+ color: inherit;
+ display: flex;
+ width: 100%;
+ height: 100%;
}
.link code {
- color: #0b84f3;
+ color: #0b84f3;
}
@media screen and (max-width: 900px) {
- .containerrow {
- grid-template-columns: 1fr;
- }
+ .containerrow {
+ grid-template-columns: 1fr;
+ }
}
diff --git a/packages/docs/components/TableOfContents/transitions/presentations.tsx b/packages/docs/components/TableOfContents/transitions/presentations.tsx
index ad90a212f91..8a7b3d04dcb 100644
--- a/packages/docs/components/TableOfContents/transitions/presentations.tsx
+++ b/packages/docs/components/TableOfContents/transitions/presentations.tsx
@@ -9,8 +9,8 @@ import {wipe} from '@remotion/transitions/wipe';
import React from 'react';
import {PresentationPreview} from '../../transitions/previews';
import {Grid} from '../Grid';
-import {TOCItem} from '../TOCItem';
import {ProLabel} from '../pro-label';
+import {TOCItem} from '../TOCItem';
const row: React.CSSProperties = {
display: 'flex',
diff --git a/packages/docs/components/TrailExample/TrailExample.tsx b/packages/docs/components/TrailExample/TrailExample.tsx
index 92d3a368c77..c969296c16d 100644
--- a/packages/docs/components/TrailExample/TrailExample.tsx
+++ b/packages/docs/components/TrailExample/TrailExample.tsx
@@ -1,3 +1,4 @@
+import {Trail} from '@remotion/motion-blur';
import {Player} from '@remotion/player';
import React, {useState} from 'react';
import {
@@ -9,8 +10,6 @@ import {
useVideoConfig,
} from 'remotion';
-import {Trail} from '@remotion/motion-blur';
-
const square: React.CSSProperties = {
height: 150,
width: 150,
diff --git a/packages/docs/components/TransitionsDuration.tsx b/packages/docs/components/TransitionsDuration.tsx
index 87cb474194e..50beaed19eb 100644
--- a/packages/docs/components/TransitionsDuration.tsx
+++ b/packages/docs/components/TransitionsDuration.tsx
@@ -1,133 +1,133 @@
-import React from "react";
+import React from 'react';
export const TransitionsDuration: React.FC = () => {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
};
diff --git a/packages/docs/components/Triangle.tsx b/packages/docs/components/Triangle.tsx
index 007a4848ec6..2cc51a5d8d5 100644
--- a/packages/docs/components/Triangle.tsx
+++ b/packages/docs/components/Triangle.tsx
@@ -1,23 +1,23 @@
-import React from "react";
+import React from 'react';
export const Triangle: React.FC<{
- readonly size: number;
- readonly opacity: number;
- readonly color1?: string;
-}> = ({ size, opacity, color1 = "#42e9f5" }) => {
- return (
-
-
-
-
-
- );
+ readonly size: number;
+ readonly opacity: number;
+ readonly color1?: string;
+}> = ({size, opacity, color1 = '#42e9f5'}) => {
+ return (
+
+
+
+
+
+ );
};
diff --git a/packages/docs/components/YouTube.tsx b/packages/docs/components/YouTube.tsx
index eb1cc2750ae..c36b5dc4237 100644
--- a/packages/docs/components/YouTube.tsx
+++ b/packages/docs/components/YouTube.tsx
@@ -1,58 +1,58 @@
-import React from "react";
+import React from 'react';
const link: React.CSSProperties = {
- color: "inherit",
- textDecoration: "none",
+ color: 'inherit',
+ textDecoration: 'none',
};
const container: React.CSSProperties = {
- border: "1px solid #888",
- borderRadius: 10,
- overflow: "hidden",
- marginBottom: 30,
- display: "flex",
- flexDirection: "row",
+ border: '1px solid #888',
+ borderRadius: 10,
+ overflow: 'hidden',
+ marginBottom: 30,
+ display: 'flex',
+ flexDirection: 'row',
};
const thumbnail: React.CSSProperties = {
- height: 100,
- display: "inline",
- marginBottom: 0,
- borderRight: "1px solid #888",
+ height: 100,
+ display: 'inline',
+ marginBottom: 0,
+ borderRight: '1px solid #888',
};
const right: React.CSSProperties = {
- padding: 16,
- lineHeight: 1.5,
- display: "flex",
- flex: 1,
- flexDirection: "column",
- justifyContent: "center",
+ padding: 16,
+ lineHeight: 1.5,
+ display: 'flex',
+ flex: 1,
+ flexDirection: 'column',
+ justifyContent: 'center',
};
const wouldYouRather: React.CSSProperties = {
- fontSize: ".9em",
+ fontSize: '.9em',
};
export const YouTube: React.FC<{
- readonly minutes: number;
- readonly href: string;
- readonly title: string;
- readonly thumb: string;
-}> = ({ minutes, href, title, thumb }) => {
- return (
-
-
-
-
-
- Also available as a {minutes}min video
-
{" "}
-
- {title}
-
-
-
-
- );
+ readonly minutes: number;
+ readonly href: string;
+ readonly title: string;
+ readonly thumb: string;
+}> = ({minutes, href, title, thumb}) => {
+ return (
+
+
+
+
+
+ Also available as a {minutes}min video
+
{' '}
+
+ {title}
+
+
+
+
+ );
};
diff --git a/packages/docs/components/bounties.css b/packages/docs/components/bounties.css
index 841b17dae96..f0b234d9e81 100644
--- a/packages/docs/components/bounties.css
+++ b/packages/docs/components/bounties.css
@@ -1,241 +1,241 @@
.bounty-grid {
- --gray-50: 248, 250, 252;
- --gray-100: 241, 245, 249;
- --gray-200: 226, 232, 240;
- --gray-300: 203, 213, 225;
- --gray-400: 148, 163, 184;
- --gray-500: 100, 116, 139;
- --gray-600: 71, 85, 105;
- --gray-700: 51, 65, 85;
- --gray-800: 30, 41, 59;
- --gray-900: 15, 23, 42;
- --gray-950: 2, 6, 23;
-
- --accent-50: 239, 246, 255;
- --accent-100: 219, 234, 254;
- --accent-200: 191, 219, 254;
- --accent-300: 147, 197, 253;
- --accent-400: 96, 165, 250;
- --accent-500: 59, 130, 246;
- --accent-600: 37, 99, 235;
- --accent-700: 29, 78, 216;
- --accent-800: 30, 64, 175;
- --accent-900: 30, 58, 138;
- --accent-950: 23, 37, 84;
-
- --green-50: 236, 253, 245;
- --green-100: 209, 250, 229;
- --green-200: 167, 243, 208;
- --green-300: 110, 231, 183;
- --green-400: 52, 211, 153;
- --green-500: 16, 185, 129;
- --green-600: 5, 150, 105;
- --green-700: 4, 120, 87;
- --green-800: 6, 95, 70;
- --green-900: 6, 78, 59;
- --green-950: 2, 44, 34;
+ --gray-50: 248, 250, 252;
+ --gray-100: 241, 245, 249;
+ --gray-200: 226, 232, 240;
+ --gray-300: 203, 213, 225;
+ --gray-400: 148, 163, 184;
+ --gray-500: 100, 116, 139;
+ --gray-600: 71, 85, 105;
+ --gray-700: 51, 65, 85;
+ --gray-800: 30, 41, 59;
+ --gray-900: 15, 23, 42;
+ --gray-950: 2, 6, 23;
+
+ --accent-50: 239, 246, 255;
+ --accent-100: 219, 234, 254;
+ --accent-200: 191, 219, 254;
+ --accent-300: 147, 197, 253;
+ --accent-400: 96, 165, 250;
+ --accent-500: 59, 130, 246;
+ --accent-600: 37, 99, 235;
+ --accent-700: 29, 78, 216;
+ --accent-800: 30, 64, 175;
+ --accent-900: 30, 58, 138;
+ --accent-950: 23, 37, 84;
+
+ --green-50: 236, 253, 245;
+ --green-100: 209, 250, 229;
+ --green-200: 167, 243, 208;
+ --green-300: 110, 231, 183;
+ --green-400: 52, 211, 153;
+ --green-500: 16, 185, 129;
+ --green-600: 5, 150, 105;
+ --green-700: 4, 120, 87;
+ --green-800: 6, 95, 70;
+ --green-900: 6, 78, 59;
+ --green-950: 2, 44, 34;
}
.bounty-grid {
- display: grid;
- gap: 0.5rem;
+ display: grid;
+ gap: 0.5rem;
}
.bounty-grid.bounty-grid-clamp > *:not(:first-child) {
- display: none;
+ display: none;
}
@media (min-width: 640px) {
- .bounty-grid {
- grid-template-columns: repeat(2, minmax(0, 1fr));
- }
- .bounty-grid.bounty-grid-clamp > *:nth-child(-n + 2) {
- display: block;
- }
+ .bounty-grid {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+ .bounty-grid.bounty-grid-clamp > *:nth-child(-n + 2) {
+ display: block;
+ }
}
@media (min-width: 768px) {
- .bounty-grid {
- grid-template-columns: repeat(3, minmax(0, 1fr));
- }
- .bounty-grid.bounty-grid-clamp > *:nth-child(-n + 3) {
- display: block;
- }
+ .bounty-grid {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
+ .bounty-grid.bounty-grid-clamp > *:nth-child(-n + 3) {
+ display: block;
+ }
}
@keyframes bounty-pulse {
- 0%,
- 100% {
- opacity: 1;
- }
- 50% {
- opacity: 0.5;
- }
+ 0%,
+ 100% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.5;
+ }
}
.bounty-grid {
- --gradient-to: rgba(var(--accent-400), 0.4);
- --gradient-from: rgba(var(--accent-400), 0.2);
- --gradient-stops: var(--gradient-from), rgba(var(--accent-400), 0.3),
- var(--gradient-to);
+ --gradient-to: rgba(var(--accent-400), 0.4);
+ --gradient-from: rgba(var(--accent-400), 0.2);
+ --gradient-stops:
+ var(--gradient-from), rgba(var(--accent-400), 0.3), var(--gradient-to);
}
.bounty-grid.dark {
- --gradient-to: rgba(var(--accent-600), 0.2);
- --gradient-from: rgba(var(--accent-600), 0.3);
- --gradient-stops: var(--gradient-from), rgba(var(--accent-600), 0.4),
- var(--gradient-to);
+ --gradient-to: rgba(var(--accent-600), 0.2);
+ --gradient-from: rgba(var(--accent-600), 0.3);
+ --gradient-stops:
+ var(--gradient-from), rgba(var(--accent-600), 0.4), var(--gradient-to);
}
.bounty-grid .bounty-card {
- text-decoration-line: none;
- display: block;
- position: relative;
- border-radius: 0.5rem;
- border-width: 1px;
- height: 100%;
- background-image: linear-gradient(to bottom right, var(--gradient-stops));
+ text-decoration-line: none;
+ display: block;
+ position: relative;
+ border-radius: 0.5rem;
+ border-width: 1px;
+ height: 100%;
+ background-image: linear-gradient(to bottom right, var(--gradient-stops));
}
.bounty-grid .bounty-card *,
.bounty-grid .bounty-skeleton * {
- transition-property: background-color, color, border-color;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 300ms;
+ transition-property: background-color, color, border-color;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 300ms;
}
.bounty-grid .bounty-card:hover {
- border-color: rgb(var(--gray-400));
+ border-color: rgb(var(--gray-400));
}
.bounty-grid .bounty-card .bounty-content {
- position: relative;
- padding: 1rem;
- height: 100%;
+ position: relative;
+ padding: 1rem;
+ height: 100%;
}
.bounty-grid .bounty-card .bounty-reward {
- font-size: 1.5rem;
- line-height: 2rem;
- font-weight: 700;
- color: rgb(var(--green-500));
+ font-size: 1.5rem;
+ line-height: 2rem;
+ font-weight: 700;
+ color: rgb(var(--green-500));
}
.bounty-grid .bounty-card .bounty-issue {
- margin-top: 0.125rem;
- font-size: 0.875rem;
- line-height: 1.25rem;
- color: rgb(var(--gray-700));
+ margin-top: 0.125rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ color: rgb(var(--gray-700));
}
.bounty-grid .bounty-card .bounty-title {
- margin-top: 0.75rem;
- font-size: 1.125rem;
- line-height: 1.75rem;
- font-weight: 500;
- line-height: 1.25;
- color: rgb(var(--gray-800));
- word-break: break-all;
- display: -webkit-box;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- overflow: hidden;
+ margin-top: 0.75rem;
+ font-size: 1.125rem;
+ line-height: 1.75rem;
+ font-weight: 500;
+ line-height: 1.25;
+ color: rgb(var(--gray-800));
+ word-break: break-all;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
}
.bounty-grid.dark .bounty-card .bounty-reward {
- color: rgb(var(--green-400));
+ color: rgb(var(--green-400));
}
.bounty-grid.dark .bounty-card .bounty-issue {
- color: rgb(var(--accent-200));
+ color: rgb(var(--accent-200));
}
.bounty-grid.dark .bounty-card .bounty-title {
- color: rgb(var(--accent-50));
+ color: rgb(var(--accent-50));
}
.bounty-grid .bounty-card:hover {
- background-color: rgba(var(--gray-300), 0.1);
- border-color: rgb(var(--gray-400));
+ background-color: rgba(var(--gray-300), 0.1);
+ border-color: rgb(var(--gray-400));
}
.bounty-grid .bounty-card:hover .bounty-reward {
- color: rgb(var(--green-600));
+ color: rgb(var(--green-600));
}
.bounty-grid .bounty-card:hover .bounty-issue {
- color: rgb(var(--gray-800));
+ color: rgb(var(--gray-800));
}
.bounty-grid .bounty-card:hover .bounty-title {
- color: rgb(var(--gray-900));
+ color: rgb(var(--gray-900));
}
.bounty-grid.dark .bounty-card:hover {
- background-color: rgba(var(--gray-600), 0.05);
- border-color: rgb(var(--accent-500));
+ background-color: rgba(var(--gray-600), 0.05);
+ border-color: rgb(var(--accent-500));
}
.bounty-grid.dark .bounty-card:hover .bounty-reward {
- color: rgb(var(--green-300));
+ color: rgb(var(--green-300));
}
.bounty-grid.dark .bounty-card:hover .bounty-issue {
- color: rgb(var(--accent-100));
+ color: rgb(var(--accent-100));
}
.bounty-grid.dark .bounty-card:hover .bounty-title {
- color: white;
+ color: white;
}
.bounty-grid .bounty-skeleton {
- border-radius: 0.5rem;
- background-color: rgb(var(--gray-200));
- animation: bounty-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
- height: 143px;
+ border-radius: 0.5rem;
+ background-color: rgb(var(--gray-200));
+ animation: bounty-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
+ height: 143px;
}
.bounty-grid.dark .bounty-skeleton {
- background-color: rgb(var(--gray-800));
+ background-color: rgb(var(--gray-800));
}
.bounty-grid .bounty-skeleton .bounty-content {
- position: relative;
- padding: 1rem;
- height: 100%;
+ position: relative;
+ padding: 1rem;
+ height: 100%;
}
.bounty-grid .bounty-skeleton .bounty-reward {
- margin-top: 0.25rem;
- border-radius: 0.375rem;
- height: 25px;
- width: 59px;
- background-color: rgb(var(--gray-300));
+ margin-top: 0.25rem;
+ border-radius: 0.375rem;
+ height: 25px;
+ width: 59px;
+ background-color: rgb(var(--gray-300));
}
.bounty-grid .bounty-skeleton .bounty-issue {
- margin-top: 0.625rem;
- border-radius: 0.375rem;
- height: 14px;
- width: 86px;
- background-color: rgb(var(--gray-300));
+ margin-top: 0.625rem;
+ border-radius: 0.375rem;
+ height: 14px;
+ width: 86px;
+ background-color: rgb(var(--gray-300));
}
.bounty-grid .bounty-skeleton .bounty-title {
- margin-top: 1rem;
- border-radius: 0.375rem;
- height: 20px;
- background-color: rgb(var(--gray-300));
+ margin-top: 1rem;
+ border-radius: 0.375rem;
+ height: 20px;
+ background-color: rgb(var(--gray-300));
}
.bounty-grid.dark .bounty-skeleton .bounty-reward {
- background-color: rgb(var(--gray-700));
+ background-color: rgb(var(--gray-700));
}
.bounty-grid.dark .bounty-skeleton .bounty-issue {
- background-color: rgb(var(--gray-700));
+ background-color: rgb(var(--gray-700));
}
.bounty-grid.dark .bounty-skeleton .bounty-title {
- background-color: rgb(var(--gray-700));
+ background-color: rgb(var(--gray-700));
}
diff --git a/packages/docs/components/cloudrun/default-timeout.tsx b/packages/docs/components/cloudrun/default-timeout.tsx
index 43159e3ad0e..073e5b97cc5 100644
--- a/packages/docs/components/cloudrun/default-timeout.tsx
+++ b/packages/docs/components/cloudrun/default-timeout.tsx
@@ -1,6 +1,6 @@
-import { DEFAULT_TIMEOUT } from "@remotion/cloudrun/defaults";
-import React from "react";
+import {DEFAULT_TIMEOUT} from '@remotion/cloudrun/defaults';
+import React from 'react';
export const DefaultTimeout: React.FC = () => {
- return {DEFAULT_TIMEOUT} ;
+ return {DEFAULT_TIMEOUT} ;
};
diff --git a/packages/docs/components/cloudrun/regions.tsx b/packages/docs/components/cloudrun/regions.tsx
index 838375ac108..76e35f5dd7d 100644
--- a/packages/docs/components/cloudrun/regions.tsx
+++ b/packages/docs/components/cloudrun/regions.tsx
@@ -1,16 +1,16 @@
-import { GCP_REGIONS } from "@remotion/cloudrun/regions";
-import React from "react";
+import {GCP_REGIONS} from '@remotion/cloudrun/regions';
+import React from 'react';
export const GcpRegionList: React.FC = () => {
- return (
-
- {GCP_REGIONS.map((region) => {
- return (
-
- {region}{" "}
-
- );
- })}
-
- );
+ return (
+
+ {GCP_REGIONS.map((region) => {
+ return (
+
+ {region}{' '}
+
+ );
+ })}
+
+ );
};
diff --git a/packages/docs/components/cloudrun/sa-permissions.tsx b/packages/docs/components/cloudrun/sa-permissions.tsx
index fa60604e6b8..9fa81b660a9 100644
--- a/packages/docs/components/cloudrun/sa-permissions.tsx
+++ b/packages/docs/components/cloudrun/sa-permissions.tsx
@@ -1,53 +1,56 @@
-import React from "react";
+import React from 'react';
const permissionsJson = require('@remotion/cloudrun/permissions.json');
type Permission = {
- name: string;
- reason: string;
-}
+ name: string;
+ reason: string;
+};
export const SAPermissionList: React.FC = () => {
- return (
-
-
{permissionsJson.list.map((permission: Permission) => {
- return `${permission.name}\n`
- })}
-
- );
+ return (
+
+
+ {permissionsJson.list.map((permission: Permission) => {
+ return `${permission.name}\n`;
+ })}
+
+
+ );
};
export const SAPermissionTable: React.FC = () => {
- return (
-
-
-
- Permission
-
-
- Reason
-
-
- {permissionsJson.list.map((permission: Permission) => {
- return
-
- {permission.name}
-
- {permission.reason}
-
- })}
-
- );
+ return (
+
+
+ Permission
+ Reason
+
+ {permissionsJson.list.map((permission: Permission) => {
+ return (
+
+
+ {permission.name}
+
+
+ {permission.reason}
+
+
+ );
+ })}
+
+ );
};
export const SAPermissionCLI: React.FC = () => {
- return (
-
- Show output
-
- {permissionsJson.list.map((permission: Permission) => {
- return `✅ ${permission.name}\n`
- })}
-
- );
+ return (
+
+ Show output
+
+ {permissionsJson.list.map((permission: Permission) => {
+ return `✅ ${permission.name}\n`;
+ })}
+
+
+ );
};
diff --git a/packages/docs/components/demos/Circle.tsx b/packages/docs/components/demos/Circle.tsx
index be7285f6af3..6a15d54b123 100644
--- a/packages/docs/components/demos/Circle.tsx
+++ b/packages/docs/components/demos/Circle.tsx
@@ -1,22 +1,22 @@
-import { Circle } from "@remotion/shapes";
-import React from "react";
-import { AbsoluteFill } from "remotion";
+import {Circle} from '@remotion/shapes';
+import React from 'react';
+import {AbsoluteFill} from 'remotion';
export const CircleDemo: React.FC<{
- readonly radius: number;
- readonly darkMode: boolean;
-}> = ({ radius, darkMode }) => {
- return (
-
-
-
- );
+ readonly radius: number;
+ readonly darkMode: boolean;
+}> = ({radius, darkMode}) => {
+ return (
+
+
+
+ );
};
diff --git a/packages/docs/components/demos/Ellipse.tsx b/packages/docs/components/demos/Ellipse.tsx
index f27b4ac8b33..dc1d34e6565 100644
--- a/packages/docs/components/demos/Ellipse.tsx
+++ b/packages/docs/components/demos/Ellipse.tsx
@@ -1,24 +1,24 @@
-import { Ellipse } from "@remotion/shapes";
-import React from "react";
-import { AbsoluteFill } from "remotion";
+import {Ellipse} from '@remotion/shapes';
+import React from 'react';
+import {AbsoluteFill} from 'remotion';
export const EllipseDemo: React.FC<{
- readonly darkMode: boolean;
- readonly rx: number;
- readonly ry: number;
-}> = ({ rx, ry, darkMode }) => {
- return (
-
-
-
- );
+ readonly darkMode: boolean;
+ readonly rx: number;
+ readonly ry: number;
+}> = ({rx, ry, darkMode}) => {
+ return (
+
+
+
+ );
};
diff --git a/packages/docs/components/demos/NoiseDemo.tsx b/packages/docs/components/demos/NoiseDemo.tsx
index bb4f20efd40..abc5ecc7b37 100644
--- a/packages/docs/components/demos/NoiseDemo.tsx
+++ b/packages/docs/components/demos/NoiseDemo.tsx
@@ -1,11 +1,11 @@
-import { noise3D } from "@remotion/noise";
-import React from "react";
-import { interpolate, useCurrentFrame, useVideoConfig } from "remotion";
+import {noise3D} from '@remotion/noise';
+import React from 'react';
+import {interpolate, useCurrentFrame, useVideoConfig} from 'remotion';
interface Props {
- readonly speed: number;
- readonly circleRadius: number;
- readonly maxOffset: number;
+ readonly speed: number;
+ readonly circleRadius: number;
+ readonly maxOffset: number;
}
const OVERSCAN_MARGIN = 100;
@@ -13,43 +13,43 @@ const ROWS = 10;
const COLS = 15;
export const NoiseComp: React.FC = ({
- speed,
- circleRadius,
- maxOffset,
+ speed,
+ circleRadius,
+ maxOffset,
}) => {
- const frame = useCurrentFrame();
- const { height, width } = useVideoConfig();
+ const frame = useCurrentFrame();
+ const {height, width} = useVideoConfig();
- return (
-
- {new Array(COLS).fill(0).map((_, i) =>
- new Array(ROWS).fill(0).map((__, j) => {
- const x = i * ((width + OVERSCAN_MARGIN) / COLS);
- const y = j * ((height + OVERSCAN_MARGIN) / ROWS);
- const px = i / COLS;
- const py = j / ROWS;
- const dx = noise3D("x", px, py, frame * speed) * maxOffset;
- const dy = noise3D("y", px, py, frame * speed) * maxOffset;
- const opacity = interpolate(
- noise3D("opacity", i, j, frame * speed),
- [-1, 1],
- [0, 1]
- );
+ return (
+
+ {new Array(COLS).fill(0).map((_, i) =>
+ new Array(ROWS).fill(0).map((__, j) => {
+ const x = i * ((width + OVERSCAN_MARGIN) / COLS);
+ const y = j * ((height + OVERSCAN_MARGIN) / ROWS);
+ const px = i / COLS;
+ const py = j / ROWS;
+ const dx = noise3D('x', px, py, frame * speed) * maxOffset;
+ const dy = noise3D('y', px, py, frame * speed) * maxOffset;
+ const opacity = interpolate(
+ noise3D('opacity', i, j, frame * speed),
+ [-1, 1],
+ [0, 1],
+ );
- const key = `${i}-${j}`;
+ const key = `${i}-${j}`;
- return (
-
- );
- })
- )}
-
- );
+ return (
+
+ );
+ }),
+ )}
+
+ );
};
diff --git a/packages/docs/components/demos/Polygon.tsx b/packages/docs/components/demos/Polygon.tsx
index 909a9cc8739..447fbd54f66 100644
--- a/packages/docs/components/demos/Polygon.tsx
+++ b/packages/docs/components/demos/Polygon.tsx
@@ -1,28 +1,28 @@
-import { Polygon } from "@remotion/shapes";
-import React from "react";
-import { AbsoluteFill } from "remotion";
+import {Polygon} from '@remotion/shapes';
+import React from 'react';
+import {AbsoluteFill} from 'remotion';
export const PolygonDemo: React.FC<{
- readonly darkMode: boolean;
- readonly points: number;
- readonly radius: number;
- readonly cornerRadius: number;
- readonly edgeRoundness: number | null;
-}> = ({ points, radius, darkMode, cornerRadius, edgeRoundness }) => {
- return (
-
-
-
- );
+ readonly darkMode: boolean;
+ readonly points: number;
+ readonly radius: number;
+ readonly cornerRadius: number;
+ readonly edgeRoundness: number | null;
+}> = ({points, radius, darkMode, cornerRadius, edgeRoundness}) => {
+ return (
+
+
+
+ );
};
diff --git a/packages/docs/components/demos/Rect.tsx b/packages/docs/components/demos/Rect.tsx
index 49fe56648af..ff6989f2737 100644
--- a/packages/docs/components/demos/Rect.tsx
+++ b/packages/docs/components/demos/Rect.tsx
@@ -1,30 +1,30 @@
-import { Rect } from "@remotion/shapes";
-import React from "react";
-import { AbsoluteFill } from "remotion";
+import {Rect} from '@remotion/shapes';
+import React from 'react';
+import {AbsoluteFill} from 'remotion';
export const RectDemo: React.FC<{
- readonly width: number;
- readonly height: number;
- readonly edgeRoundness: number;
- readonly darkMode: boolean;
- readonly debug: boolean;
- readonly cornerRadius: number;
-}> = ({ width, height, debug, edgeRoundness, cornerRadius, darkMode }) => {
- return (
-
-
-
- );
+ readonly width: number;
+ readonly height: number;
+ readonly edgeRoundness: number;
+ readonly darkMode: boolean;
+ readonly debug: boolean;
+ readonly cornerRadius: number;
+}> = ({width, height, debug, edgeRoundness, cornerRadius, darkMode}) => {
+ return (
+
+
+
+ );
};
diff --git a/packages/docs/components/demos/Star.tsx b/packages/docs/components/demos/Star.tsx
index 8eaa718d911..cb621bffe02 100644
--- a/packages/docs/components/demos/Star.tsx
+++ b/packages/docs/components/demos/Star.tsx
@@ -1,37 +1,37 @@
-import { Star } from "@remotion/shapes";
-import React from "react";
-import { AbsoluteFill } from "remotion";
+import {Star} from '@remotion/shapes';
+import React from 'react';
+import {AbsoluteFill} from 'remotion';
export const StarDemo: React.FC<{
- readonly darkMode: boolean;
- readonly innerRadius: number;
- readonly outerRadius: number;
- readonly cornerRadius: number;
- readonly edgeRoundness: number | null;
- readonly points: number;
+ readonly darkMode: boolean;
+ readonly innerRadius: number;
+ readonly outerRadius: number;
+ readonly cornerRadius: number;
+ readonly edgeRoundness: number | null;
+ readonly points: number;
}> = ({
- innerRadius,
- points,
- outerRadius,
- darkMode,
- cornerRadius,
- edgeRoundness,
+ innerRadius,
+ points,
+ outerRadius,
+ darkMode,
+ cornerRadius,
+ edgeRoundness,
}) => {
- return (
-
-
-
- );
+ return (
+
+
+
+ );
};
diff --git a/packages/docs/components/demos/SubtractAnimations.tsx b/packages/docs/components/demos/SubtractAnimations.tsx
index d3f0db890d2..8069b47d519 100644
--- a/packages/docs/components/demos/SubtractAnimations.tsx
+++ b/packages/docs/components/demos/SubtractAnimations.tsx
@@ -1,59 +1,54 @@
-import React from "react";
-import {
- AbsoluteFill,
- spring,
- useCurrentFrame,
- useVideoConfig,
-} from "remotion";
+import React from 'react';
+import {AbsoluteFill, spring, useCurrentFrame, useVideoConfig} from 'remotion';
export const AnimationMath: React.FC = () => {
- const frame = useCurrentFrame();
- const { fps, durationInFrames } = useVideoConfig();
+ const frame = useCurrentFrame();
+ const {fps, durationInFrames} = useVideoConfig();
- const enter = spring({
- fps,
- frame,
- config: {
- damping: 200,
- },
- });
+ const enter = spring({
+ fps,
+ frame,
+ config: {
+ damping: 200,
+ },
+ });
- const exit = spring({
- fps,
- config: {
- damping: 200,
- },
- durationInFrames: 20,
- delay: durationInFrames - 20,
- frame,
- });
+ const exit = spring({
+ fps,
+ config: {
+ damping: 200,
+ },
+ durationInFrames: 20,
+ delay: durationInFrames - 20,
+ frame,
+ });
- const scale = enter - exit;
+ const scale = enter - exit;
- return (
-
-
- {frame}
-
-
- );
+ return (
+
+
+ {frame}
+
+
+ );
};
diff --git a/packages/docs/components/demos/Translate.tsx b/packages/docs/components/demos/Translate.tsx
index 2ee3196295d..0282c7e2ae6 100644
--- a/packages/docs/components/demos/Translate.tsx
+++ b/packages/docs/components/demos/Translate.tsx
@@ -1,108 +1,108 @@
-import React from "react";
-import { AbsoluteFill } from "remotion";
+import React from 'react';
+import {AbsoluteFill} from 'remotion';
const Base: React.FC<{
- readonly transform?: string;
- readonly opacity?: number;
- readonly showChip: boolean;
-}> = ({ transform, opacity, showChip }) => {
- return (
-
- {transform ? (
- "transform": "{transform}"
- ) : null}
- {opacity === undefined ? null : "opacity": {opacity}
}
-
-
-
-
- {showChip ? (
-
-
- A
-
-
- ) : null}
- {" "}
-
- );
+ readonly transform?: string;
+ readonly opacity?: number;
+ readonly showChip: boolean;
+}> = ({transform, opacity, showChip}) => {
+ return (
+
+ {transform ? (
+ "transform": "{transform}"
+ ) : null}
+ {opacity === undefined ? null : "opacity": {opacity}
}
+
+
+
+
+ {showChip ? (
+
+
+ A
+
+
+ ) : null}
+ {' '}
+
+ );
};
export const TranslateDemo: React.FC<{
- readonly translateX: number;
- readonly translateY: number;
-}> = ({ translateX: x, translateY: y }) => {
- return (
-
- );
+ readonly translateX: number;
+ readonly translateY: number;
+}> = ({translateX: x, translateY: y}) => {
+ return (
+
+ );
};
export const RotateDemo: React.FC<{
- readonly rotateZ: number;
-}> = ({ rotateZ }) => {
- return ;
+ readonly rotateZ: number;
+}> = ({rotateZ}) => {
+ return ;
};
export const SkewDemo: React.FC<{
- readonly skew: number;
-}> = ({ skew }) => {
- return ;
+ readonly skew: number;
+}> = ({skew}) => {
+ return ;
};
export const ScaleDemo: React.FC<{
- readonly scale: number;
-}> = ({ scale }) => {
- return ;
+ readonly scale: number;
+}> = ({scale}) => {
+ return ;
};
export const OpacityDemo: React.FC<{
- readonly opacity: number;
-}> = ({ opacity }) => {
- return ;
+ readonly opacity: number;
+}> = ({opacity}) => {
+ return ;
};
diff --git a/packages/docs/components/demos/Triangle.tsx b/packages/docs/components/demos/Triangle.tsx
index 56d77dfc5d7..2cf19feb573 100644
--- a/packages/docs/components/demos/Triangle.tsx
+++ b/packages/docs/components/demos/Triangle.tsx
@@ -1,31 +1,31 @@
-import type { TriangleProps } from "@remotion/shapes";
-import { Triangle } from "@remotion/shapes";
-import React from "react";
-import { AbsoluteFill } from "remotion";
+import type {TriangleProps} from '@remotion/shapes';
+import {Triangle} from '@remotion/shapes';
+import React from 'react';
+import {AbsoluteFill} from 'remotion';
export const TriangleDemo: React.FC<{
- readonly length: number;
- readonly edgeRoundness: number;
- readonly darkMode: boolean;
- readonly direction: TriangleProps["direction"];
- readonly debug: boolean;
- readonly cornerRadius: number;
-}> = ({ length, edgeRoundness, debug, direction, cornerRadius, darkMode }) => {
- return (
-
-
-
- );
+ readonly length: number;
+ readonly edgeRoundness: number;
+ readonly darkMode: boolean;
+ readonly direction: TriangleProps['direction'];
+ readonly debug: boolean;
+ readonly cornerRadius: number;
+}> = ({length, edgeRoundness, debug, direction, cornerRadius, darkMode}) => {
+ return (
+
+
+
+ );
};
diff --git a/packages/docs/components/demos/control.tsx b/packages/docs/components/demos/control.tsx
index 0878c3e0003..83cd170e165 100644
--- a/packages/docs/components/demos/control.tsx
+++ b/packages/docs/components/demos/control.tsx
@@ -1,6 +1,6 @@
import React, {useMemo} from 'react';
-import styles from './styles.module.css';
import type {Option} from './types';
+import styles from './styles.module.css';
const left: React.CSSProperties = {
fontFamily: 'GTPlanar',
diff --git a/packages/docs/components/demos/index.tsx b/packages/docs/components/demos/index.tsx
index 16a6432704a..d9f2a56065b 100644
--- a/packages/docs/components/demos/index.tsx
+++ b/packages/docs/components/demos/index.tsx
@@ -3,7 +3,6 @@ import {Player} from '@remotion/player';
import React, {useCallback, useMemo, useState} from 'react';
import {AbsoluteFill} from 'remotion';
import {Control} from './control';
-import styles from './styles.module.css';
import type {DemoType} from './types';
import {
animationMathDemo,
@@ -41,6 +40,7 @@ import {
triangleDemo,
wipePresentationDemo,
} from './types';
+import styles from './styles.module.css';
const container: React.CSSProperties = {
overflow: 'hidden',
diff --git a/packages/docs/components/demos/types.ts b/packages/docs/components/demos/types.ts
index 2cb79257987..b64b2df69c5 100644
--- a/packages/docs/components/demos/types.ts
+++ b/packages/docs/components/demos/types.ts
@@ -20,9 +20,13 @@ import {PieDemo} from './Pie';
import {PolygonDemo} from './Polygon';
import {RectDemo} from './Rect';
import {RoundedTextBox} from './RoundedTextBox';
+import {ShaderDemoComp} from './ShaderDemo';
import {SpringDemo} from './Spring';
import {StarDemo} from './Star';
import {AnimationMath} from './SubtractAnimations';
+import {TransitionSeriesEnterExitDemoComp} from './TransitionSeriesEnterExitDemo';
+import {TransitionSeriesOverlayDemoComp} from './TransitionSeriesOverlayDemo';
+import {TransitionSeriesTransitionDemoComp} from './TransitionSeriesTransitionDemo';
import {
OpacityDemo,
RotateDemo,
@@ -30,10 +34,6 @@ import {
SkewDemo,
TranslateDemo,
} from './Translate';
-import {ShaderDemoComp} from './ShaderDemo';
-import {TransitionSeriesEnterExitDemoComp} from './TransitionSeriesEnterExitDemo';
-import {TransitionSeriesOverlayDemoComp} from './TransitionSeriesOverlayDemo';
-import {TransitionSeriesTransitionDemoComp} from './TransitionSeriesTransitionDemo';
import {TriangleDemo} from './Triangle';
export type Option = {
diff --git a/packages/docs/components/input-fields.css b/packages/docs/components/input-fields.css
index ea79064c55d..9de0fea6e14 100644
--- a/packages/docs/components/input-fields.css
+++ b/packages/docs/components/input-fields.css
@@ -1,11 +1,11 @@
-input[type="text"] {
- padding: 13px;
- font-family: inherit;
- border: 2px solid var(--ifm-code-background);
- border-radius: 6px;
- background-color: transparent;
- outline: none;
+input[type='text'] {
+ padding: 13px;
+ font-family: inherit;
+ border: 2px solid var(--ifm-code-background);
+ border-radius: 6px;
+ background-color: transparent;
+ outline: none;
}
-input[type="text"]:focus {
- border-color: var(--ifm-tabs-color-active);
+input[type='text']:focus {
+ border-color: var(--ifm-tabs-color-active);
}
diff --git a/packages/docs/components/lambda/webhook-test.tsx b/packages/docs/components/lambda/webhook-test.tsx
index 8cb30986670..62b5d2ccdfe 100644
--- a/packages/docs/components/lambda/webhook-test.tsx
+++ b/packages/docs/components/lambda/webhook-test.tsx
@@ -1,221 +1,219 @@
-import type { WebhookPayload } from "@remotion/lambda/client";
-import React, { useCallback, useState } from "react";
-import { BlueButton } from "../layout/Button";
-import { Spinner } from "../Spinner";
-import { CoolInput } from "../TextInput";
+import type {WebhookPayload} from '@remotion/lambda/client';
+import React, {useCallback, useState} from 'react';
+import {BlueButton} from '../layout/Button';
+import {Spinner} from '../Spinner';
+import {CoolInput} from '../TextInput';
// This is a re-implementation of the calculateSignature function
// used in @remotion/lambda. This version uses the Crypto Web APIs
// instead of the NodeJS Crypto library and can therefore run in the browser.
async function calculateSignature(payload: string, secret?: string) {
- if (!secret) {
- return "NO_SECRET_PROVIDED";
- }
+ if (!secret) {
+ return 'NO_SECRET_PROVIDED';
+ }
- const enc = new TextEncoder();
- const algorithm = { name: "HMAC", hash: "SHA-512" };
- const key = await crypto.subtle.importKey(
- "raw",
- enc.encode(secret),
- algorithm,
- false,
- ["sign", "verify"]
- );
- const signature = await crypto.subtle.sign(
- algorithm.name,
- key,
- enc.encode(payload)
- );
- const digest = Array.from(new Uint8Array(signature))
- .map((x) => x.toString(16).padStart(2, "0"))
- .join("");
- return `sha512=${digest}`;
+ const enc = new TextEncoder();
+ const algorithm = {name: 'HMAC', hash: 'SHA-512'};
+ const key = await crypto.subtle.importKey(
+ 'raw',
+ enc.encode(secret),
+ algorithm,
+ false,
+ ['sign', 'verify'],
+ );
+ const signature = await crypto.subtle.sign(
+ algorithm.name,
+ key,
+ enc.encode(payload),
+ );
+ const digest = Array.from(new Uint8Array(signature))
+ .map((x) => x.toString(16).padStart(2, '0'))
+ .join('');
+ return `sha512=${digest}`;
}
const buttonFlex: React.CSSProperties = {
- paddingBottom: 48,
- paddingTop: 8,
- display: "flex",
- justifyContent: "flex-start",
- gap: 16,
+ paddingBottom: 48,
+ paddingTop: 8,
+ display: 'flex',
+ justifyContent: 'flex-start',
+ gap: 16,
};
const inputFlex: React.CSSProperties = {
- paddingBottom: 16,
- paddingTop: 8,
- display: "flex",
- flexDirection: "column",
- gap: 16,
+ paddingBottom: 16,
+ paddingTop: 8,
+ display: 'flex',
+ flexDirection: 'column',
+ gap: 16,
};
export const WebhookTest: React.FC = () => {
- const [request, setRequest] = useState({});
- const [response, setResponse] = useState(null);
- const [responseStatus, setResponseStatus] = useState(null);
- const [loading, setLoading] = useState(false);
- const [data, setData] = useState({
- url: "http://localhost:8080/webhook",
- secret: "",
- });
- const handleWebhook = useCallback(
- async (type: "success" | "error" | "timeout") => {
- setLoading(true);
- setRequest({});
- setResponseStatus(null);
- setResponse(null);
- const payload: WebhookPayload =
- type === "success"
- ? {
- type,
- renderId: "demo-render-id",
- bucketName: "demo-bucket-name",
- customData: {},
- expectedBucketOwner: "demo-bucket-owner",
- outputUrl: "https://www.example.com",
- outputFile: "demo-output.mp4",
- timeToFinish: 1500,
- lambdaErrors: [],
- costs: {
- currency: "USD",
- disclaimer:
- "Estimated cost for lambda invocations only. Does not include cost for S3 storage and data transfer.",
- estimatedCost: 0.01,
- estimatedDisplayCost: new Intl.NumberFormat("en-US", {
- currency: "USD",
- currencyDisplay: "narrowSymbol",
- }).format(0.01),
- },
- }
- : type === "error"
- ? {
- errors: [
- {
- message: "demo-error-message",
- name: "demo-error-name",
- stack: "demo-error-stack",
- },
- ],
- type,
- renderId: "demo-render-id",
- bucketName: "demo-bucket-name",
- customData: {},
- expectedBucketOwner: "demo-bucket-owner",
- }
- : {
- type,
- renderId: "demo-render-id",
- bucketName: "demo-bucket-name",
- customData: {},
- expectedBucketOwner: "demo-bucket-owner",
- };
- const stringifiedPayload = JSON.stringify(payload);
- const req: RequestInit = {
- method: "POST",
- mode: "cors",
- headers: {
- "Content-Type": "application/json",
- "X-Remotion-Signature": await calculateSignature(
- stringifiedPayload,
- data.secret
- ),
- "X-Remotion-Status": type,
- "X-Remotion-Mode": "demo",
- },
- body: stringifiedPayload,
- };
- fetch(data.url, req)
- .then((res) => {
- setResponseStatus(res.ok);
- return res.json();
- })
- .then((res) => {
- setResponse(res);
- })
- .catch((err) => {
- setResponse(err);
- })
- .finally(() => {
- setRequest({ ...req, body: payload });
- setLoading(false);
- });
- },
- [data.secret, data.url]
- );
- return (
-
-
-
- Your webhook URL:
-
- setData((prev) => ({ ...prev, url: e.target.value }))
- }
- />
-
-
- Your webhook secret:
-
- setData((prev) => ({ ...prev, secret: e.target.value }))
- }
- />
-
-
-
- handleWebhook("success")}
- >
- Send success
-
- handleWebhook("timeout")}
- >
- Send timeout
-
- handleWebhook("error")}
- >
- Send error
-
-
- {/* results */}
- {loading ? (
-
-
-
- ) : null}
- {response ? (
- <>
-
What we sent:
-
{JSON.stringify(request, null, 2)}
-
What we received:
-
- {responseStatus ? (
- response ok
- ) : (
- response not ok
- )}
- {JSON.stringify(response, null, 2)}
-
- >
- ) : null}
-
- );
+ const [request, setRequest] = useState({});
+ const [response, setResponse] = useState(null);
+ const [responseStatus, setResponseStatus] = useState(null);
+ const [loading, setLoading] = useState(false);
+ const [data, setData] = useState({
+ url: 'http://localhost:8080/webhook',
+ secret: '',
+ });
+ const handleWebhook = useCallback(
+ async (type: 'success' | 'error' | 'timeout') => {
+ setLoading(true);
+ setRequest({});
+ setResponseStatus(null);
+ setResponse(null);
+ const payload: WebhookPayload =
+ type === 'success'
+ ? {
+ type,
+ renderId: 'demo-render-id',
+ bucketName: 'demo-bucket-name',
+ customData: {},
+ expectedBucketOwner: 'demo-bucket-owner',
+ outputUrl: 'https://www.example.com',
+ outputFile: 'demo-output.mp4',
+ timeToFinish: 1500,
+ lambdaErrors: [],
+ costs: {
+ currency: 'USD',
+ disclaimer:
+ 'Estimated cost for lambda invocations only. Does not include cost for S3 storage and data transfer.',
+ estimatedCost: 0.01,
+ estimatedDisplayCost: new Intl.NumberFormat('en-US', {
+ currency: 'USD',
+ currencyDisplay: 'narrowSymbol',
+ }).format(0.01),
+ },
+ }
+ : type === 'error'
+ ? {
+ errors: [
+ {
+ message: 'demo-error-message',
+ name: 'demo-error-name',
+ stack: 'demo-error-stack',
+ },
+ ],
+ type,
+ renderId: 'demo-render-id',
+ bucketName: 'demo-bucket-name',
+ customData: {},
+ expectedBucketOwner: 'demo-bucket-owner',
+ }
+ : {
+ type,
+ renderId: 'demo-render-id',
+ bucketName: 'demo-bucket-name',
+ customData: {},
+ expectedBucketOwner: 'demo-bucket-owner',
+ };
+ const stringifiedPayload = JSON.stringify(payload);
+ const req: RequestInit = {
+ method: 'POST',
+ mode: 'cors',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'X-Remotion-Signature': await calculateSignature(
+ stringifiedPayload,
+ data.secret,
+ ),
+ 'X-Remotion-Status': type,
+ 'X-Remotion-Mode': 'demo',
+ },
+ body: stringifiedPayload,
+ };
+ fetch(data.url, req)
+ .then((res) => {
+ setResponseStatus(res.ok);
+ return res.json();
+ })
+ .then((res) => {
+ setResponse(res);
+ })
+ .catch((err) => {
+ setResponse(err);
+ })
+ .finally(() => {
+ setRequest({...req, body: payload});
+ setLoading(false);
+ });
+ },
+ [data.secret, data.url],
+ );
+ return (
+
+
+
+ Your webhook URL:
+
+ setData((prev) => ({...prev, url: e.target.value}))
+ }
+ />
+
+
+ Your webhook secret:
+
+ setData((prev) => ({...prev, secret: e.target.value}))
+ }
+ />
+
+
+
+ handleWebhook('success')}
+ >
+ Send success
+
+ handleWebhook('timeout')}
+ >
+ Send timeout
+
+ handleWebhook('error')}
+ >
+ Send error
+
+
+ {/* results */}
+ {loading ? (
+
+
+
+ ) : null}
+ {response ? (
+ <>
+
What we sent:
+
{JSON.stringify(request, null, 2)}
+
What we received:
+
+ {responseStatus ? (
+ response ok
+ ) : (
+ response not ok
+ )}
+ {JSON.stringify(response, null, 2)}
+
+ >
+ ) : null}
+
+ );
};
diff --git a/packages/docs/components/layout/Button.tsx b/packages/docs/components/layout/Button.tsx
index 23b170665f9..809b910b1a6 100644
--- a/packages/docs/components/layout/Button.tsx
+++ b/packages/docs/components/layout/Button.tsx
@@ -1,8 +1,8 @@
import {opacify} from 'polished';
import type {ButtonHTMLAttributes, DetailedHTMLProps} from 'react';
import React from 'react';
-import styles from './button.module.css';
import {RED, UNDERLAY_RED} from './colors';
+import styles from './button.module.css';
type ExtraProps = {
readonly size: Size;
diff --git a/packages/docs/components/layout/RowOnDesktop.tsx b/packages/docs/components/layout/RowOnDesktop.tsx
index 8a468f2cf83..5d978164dd1 100644
--- a/packages/docs/components/layout/RowOnDesktop.tsx
+++ b/packages/docs/components/layout/RowOnDesktop.tsx
@@ -1,9 +1,7 @@
-import React from "react";
+import React from 'react';
export const RowOnDesktop: React.FC<{
- readonly children: React.ReactNode;
-}> = ({ children }) => {
- return (
- {children}
- );
+ readonly children: React.ReactNode;
+}> = ({children}) => {
+ return {children}
;
};
diff --git a/packages/docs/components/layout/Spacer.tsx b/packages/docs/components/layout/Spacer.tsx
index 21fb4b638b1..c4fbb54aafc 100644
--- a/packages/docs/components/layout/Spacer.tsx
+++ b/packages/docs/components/layout/Spacer.tsx
@@ -1,5 +1,5 @@
-import React from "react";
+import React from 'react';
export const Spacer: React.FC = () => {
- return
;
+ return
;
};
diff --git a/packages/docs/components/layout/button.module.css b/packages/docs/components/layout/button.module.css
index ab62f730ca8..1fb4df73b12 100644
--- a/packages/docs/components/layout/button.module.css
+++ b/packages/docs/components/layout/button.module.css
@@ -1,18 +1,18 @@
.buttoncontainer {
- border-radius: 8px;
- font-weight: bold;
- appearance: none;
- border: 2px solid black;
- border-bottom: 4px solid black;
- font: inherit;
- font-weight: bold;
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: center;
- transition: background-color 0.1s;
+ border-radius: 8px;
+ font-weight: bold;
+ appearance: none;
+ border: 2px solid black;
+ border-bottom: 4px solid black;
+ font: inherit;
+ font-weight: bold;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ transition: background-color 0.1s;
}
.buttoncontainer:not([disabled]):hover {
- background-color: var(--hover-color) !important;
+ background-color: var(--hover-color) !important;
}
diff --git a/packages/docs/components/recorder/RecordButton.tsx b/packages/docs/components/recorder/RecordButton.tsx
index 85520d184b8..5e2984dc8c4 100644
--- a/packages/docs/components/recorder/RecordButton.tsx
+++ b/packages/docs/components/recorder/RecordButton.tsx
@@ -1,31 +1,32 @@
-import React from "react";
+import React from 'react';
const recordCircle = (
-
-
-
+
+
+
);
const buttonStyle: React.CSSProperties = {
- display: "flex",
- alignItems: "center",
- gap: 8,
- backgroundColor: "rgb(2, 8, 23)",
- border: "1px solid rgb(255, 255, 255, 0.1)",
- borderRadius: 6,
- padding: "1px 4px",
- width: 140,
- minWidth: 140,
- margin: "0px 4px",
- color: "white",
+ display: 'flex',
+ alignItems: 'center',
+ gap: 8,
+ backgroundColor: 'rgb(2, 8, 23)',
+ border: '1px solid rgb(255, 255, 255, 0.1)',
+ borderRadius: 6,
+ padding: '1px 4px',
+ width: 140,
+ minWidth: 140,
+ margin: '0px 4px',
+ color: 'white',
};
-export const RecordingButton: React.FC<{ readonly type: "start" | "stop" }> = ({
- type,
+export const RecordingButton: React.FC<{readonly type: 'start' | 'stop'}> = ({
+ type,
}) => {
- return (
-
- {recordCircle} {type === "start" ? "Start recording" : "Stop recording"}{" "}
-
- );
+ return (
+
+ {recordCircle}{' '}
+ {type === 'start' ? 'Start recording' : 'Stop recording'}{' '}
+
+ );
};
diff --git a/packages/docs/components/recorder/RenderButton.tsx b/packages/docs/components/recorder/RenderButton.tsx
index 23bf0c2b21b..82f07f99e9a 100644
--- a/packages/docs/components/recorder/RenderButton.tsx
+++ b/packages/docs/components/recorder/RenderButton.tsx
@@ -1,43 +1,43 @@
-import React from "react";
+import React from 'react';
const RenderIcon: React.FC = () => {
- return (
-
-
-
- );
+ return (
+
+
+
+ );
};
const renderButtonStyle: React.CSSProperties = {
- paddingLeft: 7,
- paddingRight: 7,
- paddingTop: 7,
- paddingBottom: 7,
- border: "1px solid rgba(0, 0, 0, 0.6)",
- borderRadius: "4px",
- backgroundColor: "rgb(47, 54, 61)",
- display: "flex",
- justifyContent: "center",
- alignItems: "center",
- width: 86,
- height: 32,
- margin: "0px 4px",
- color: "white",
+ paddingLeft: 7,
+ paddingRight: 7,
+ paddingTop: 7,
+ paddingBottom: 7,
+ border: '1px solid rgba(0, 0, 0, 0.6)',
+ borderRadius: '4px',
+ backgroundColor: 'rgb(47, 54, 61)',
+ display: 'flex',
+ justifyContent: 'center',
+ alignItems: 'center',
+ width: 86,
+ height: 32,
+ margin: '0px 4px',
+ color: 'white',
};
export const RenderButton: React.FC = () => {
- return (
-
- );
+ return (
+
+ );
};
diff --git a/packages/docs/components/recorder/layout.tsx b/packages/docs/components/recorder/layout.tsx
index 2f8b30884e3..d3e8698f135 100644
--- a/packages/docs/components/recorder/layout.tsx
+++ b/packages/docs/components/recorder/layout.tsx
@@ -1,55 +1,55 @@
-import React, { useMemo } from "react";
+import React, {useMemo} from 'react';
const rectangleStyle: React.CSSProperties = {
- display: "flex",
- justifyContent: "center",
- alignItems: "center",
- backgroundColor: "rgb(128, 128, 128)",
- color: "white",
- border: "1px solid #71777f",
+ display: 'flex',
+ justifyContent: 'center',
+ alignItems: 'center',
+ backgroundColor: 'rgb(128, 128, 128)',
+ color: 'white',
+ border: '1px solid #71777f',
};
export const Layout: React.FC<{
- readonly type: "landscape" | "portrait" | "square";
- readonly aspectWidth: number;
- readonly aspectHeight: number;
-}> = ({ type, aspectWidth, aspectHeight }) => {
- const aspectRatioStyle: React.CSSProperties = useMemo(() => {
- if (type === "landscape") {
- return {
- ...rectangleStyle,
- width: 320,
- height: 180,
- };
- }
+ readonly type: 'landscape' | 'portrait' | 'square';
+ readonly aspectWidth: number;
+ readonly aspectHeight: number;
+}> = ({type, aspectWidth, aspectHeight}) => {
+ const aspectRatioStyle: React.CSSProperties = useMemo(() => {
+ if (type === 'landscape') {
+ return {
+ ...rectangleStyle,
+ width: 320,
+ height: 180,
+ };
+ }
- if (type === "portrait") {
- return {
- ...rectangleStyle,
- width: (180 / 16) * 9,
- height: 180,
- };
- }
+ if (type === 'portrait') {
+ return {
+ ...rectangleStyle,
+ width: (180 / 16) * 9,
+ height: 180,
+ };
+ }
- return {
- ...rectangleStyle,
- width: 180,
- height: 180,
- };
- }, [type]);
+ return {
+ ...rectangleStyle,
+ width: 180,
+ height: 180,
+ };
+ }, [type]);
- return (
-
-
-
{type}
- {aspectWidth}x{aspectHeight}
-
-
- );
+ return (
+
+
+
{type}
+ {aspectWidth}x{aspectHeight}
+
+
+ );
};
diff --git a/packages/docs/components/shapes/edge-roundness.tsx b/packages/docs/components/shapes/edge-roundness.tsx
index 714e274d6c4..f999bdfb8a6 100644
--- a/packages/docs/components/shapes/edge-roundness.tsx
+++ b/packages/docs/components/shapes/edge-roundness.tsx
@@ -1,203 +1,203 @@
-import { Rect, Triangle } from "@remotion/shapes";
-import React from "react";
+import {Rect, Triangle} from '@remotion/shapes';
+import React from 'react';
const Header: React.FC = () => {
- return (
- <>
-
- edgeRoundness
-
-
- null | number
-
-
- Allows to modify the shape by rounding the edges using bezier curves.
- Default null.
-
- >
- );
+ return (
+ <>
+
+ edgeRoundness
+
+
+ null | number
+
+
+ Allows to modify the shape by rounding the edges using bezier curves.
+ Default null.
+
+ >
+ );
};
export const DebugOption: React.FC = () => {
- return (
- <>
-
- debug
-
-
- boolean
-
-
- If enabled, draws the lines for Bézier curves. This is meant for
- debugging, note that the visuals may change in any version.
-
- >
- );
+ return (
+ <>
+
+ debug
+
+
+ boolean
+
+
+ If enabled, draws the lines for Bézier curves. This is meant for
+ debugging, note that the visuals may change in any version.
+
+ >
+ );
};
export const RectEdgeRoundness: React.FC = () => {
- return (
- <>
-
-
-
-
-
-
-
- 0 will lead to a rotated rectangle being drawn inside
- the natural dimensions of the rectangle.
-
-
-
-
-
-
-
- (4 * (Math.sqrt(2) - 1)) / 3 will{" "}
-
- draw a circle
-
- .
-
-
-
-
-
-
-
- 1 will draw a squircle.
-
-
-
-
-
-
-
- Values below 0 and above 1 are possible
- and may result in interesting shapes. Pictured: 2
-
-
-
{" "}
-
- Cannot be used together with cornerRadius.
-
- >
- );
+ return (
+ <>
+
+
+
+
+
+
+
+ 0 will lead to a rotated rectangle being drawn inside
+ the natural dimensions of the rectangle.
+
+
+
+
+
+
+
+ (4 * (Math.sqrt(2) - 1)) / 3 will{' '}
+
+ draw a circle
+
+ .
+
+
+
+
+
+
+
+ 1 will draw a squircle.
+
+
+
+
+
+
+
+ Values below 0 and above 1 are possible
+ and may result in interesting shapes. Pictured: 2
+
+
+
{' '}
+
+ Cannot be used together with cornerRadius.
+
+ >
+ );
};
export const TriangleEdgeRoundness = () => {
- return (
- <>
-
-
-
-
-
-
-
- 0 will lead to a rotated triangle being drawn inside
- the natural dimensions of the triangle.
-
-
-
-
-
-
-
- Math.sqrt(2) - 1 will{" "}
-
- draw a circle
-
- .
-
-
-
-
-
-
-
- 1 will draw a shape similar to a {'"squircle"'} but as
- a triangle.
-
-
-
-
-
-
-
- Values below 0 and above 1 may result in
- other interesting shapes. Pictured: 2.
-
-
-
{" "}
-
- Cannot be used together with cornerRadius.
-
- >
- );
+ return (
+ <>
+
+
+
+
+
+
+
+ 0 will lead to a rotated triangle being drawn inside
+ the natural dimensions of the triangle.
+
+
+
+
+
+
+
+ Math.sqrt(2) - 1 will{' '}
+
+ draw a circle
+
+ .
+
+
+
+
+
+
+
+ 1 will draw a shape similar to a {'"squircle"'} but as
+ a triangle.
+
+
+
+
+
+
+
+ Values below 0 and above 1 may result in
+ other interesting shapes. Pictured: 2.
+
+
+
{' '}
+
+ Cannot be used together with cornerRadius.
+
+ >
+ );
};
diff --git a/packages/docs/components/transitions/custom-transition.tsx b/packages/docs/components/transitions/custom-transition.tsx
index 18eada08395..608051b181e 100644
--- a/packages/docs/components/transitions/custom-transition.tsx
+++ b/packages/docs/components/transitions/custom-transition.tsx
@@ -1,75 +1,70 @@
-import { getBoundingBox, translatePath } from "@remotion/paths";
-import { makeStar } from "@remotion/shapes";
+import {getBoundingBox, translatePath} from '@remotion/paths';
+import {makeStar} from '@remotion/shapes';
import type {
- TransitionPresentation,
- TransitionPresentationComponentProps,
-} from "@remotion/transitions";
-import React, { useMemo, useState } from "react";
-import { AbsoluteFill, random } from "remotion";
+ TransitionPresentation,
+ TransitionPresentationComponentProps,
+} from '@remotion/transitions';
+import React, {useMemo, useState} from 'react';
+import {AbsoluteFill, random} from 'remotion';
type CustomPresentationProps = {
- width: number;
- height: number;
+ width: number;
+ height: number;
};
const SlidePresentation: React.FC<
- TransitionPresentationComponentProps
-> = ({
- children,
- presentationDirection,
- presentationProgress,
- passedProps,
-}) => {
- const finishedRadius =
- Math.sqrt(passedProps.width ** 2 + passedProps.height ** 2) / 2;
- const innerRadius = finishedRadius * presentationProgress;
- const outerRadius = finishedRadius * 2 * presentationProgress;
+ TransitionPresentationComponentProps
+> = ({children, presentationDirection, presentationProgress, passedProps}) => {
+ const finishedRadius =
+ Math.sqrt(passedProps.width ** 2 + passedProps.height ** 2) / 2;
+ const innerRadius = finishedRadius * presentationProgress;
+ const outerRadius = finishedRadius * 2 * presentationProgress;
- const { path } = makeStar({
- innerRadius,
- outerRadius,
- points: 5,
- });
+ const {path} = makeStar({
+ innerRadius,
+ outerRadius,
+ points: 5,
+ });
- const boundingBox = getBoundingBox(path);
+ const boundingBox = getBoundingBox(path);
- const translatedPath = translatePath(
- path,
- passedProps.width / 2 - boundingBox.width / 2,
- passedProps.height / 2 - boundingBox.height / 2,
- );
+ const translatedPath = translatePath(
+ path,
+ passedProps.width / 2 - boundingBox.width / 2,
+ passedProps.height / 2 - boundingBox.height / 2,
+ );
- const [clipId] = useState(() => String(random(null)));
+ const [clipId] = useState(() => String(random(null)));
- const style: React.CSSProperties = useMemo(() => {
- return {
- width: "100%",
- height: "100%",
- clipPath:
- presentationDirection === "exiting" ? undefined : `url(#${clipId})`,
- };
- }, [clipId, presentationDirection]);
+ const style: React.CSSProperties = useMemo(() => {
+ return {
+ width: '100%',
+ height: '100%',
+ clipPath:
+ presentationDirection === 'exiting' ? undefined : `url(#${clipId})`,
+ };
+ }, [clipId, presentationDirection]);
- return (
-
- {children}
- {presentationDirection === "exiting" ? null : (
-
-
-
-
-
-
-
-
-
- )}
-
- );
+ return (
+
+ {children}
+ {presentationDirection === 'exiting' ? null : (
+
+
+
+
+
+
+
+
+
+ )}
+
+ );
};
export const customPresentation = (
- props: CustomPresentationProps,
+ props: CustomPresentationProps,
): TransitionPresentation => {
- return { component: SlidePresentation, props };
+ return {component: SlidePresentation, props};
};
diff --git a/packages/docs/components/transparent-video.css b/packages/docs/components/transparent-video.css
index 458add5b211..0b12774f810 100644
--- a/packages/docs/components/transparent-video.css
+++ b/packages/docs/components/transparent-video.css
@@ -1,16 +1,21 @@
.transparent {
- background: linear-gradient(45deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%),
- linear-gradient(135deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%),
- linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%),
- linear-gradient(135deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%), white;
- background-size: 49px 49px;
- background-position: 0 0, 24.5px 0, 24.5px -24.5px, 0px 24.5px;
+ background:
+ linear-gradient(45deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%),
+ linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%),
+ linear-gradient(135deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%), white;
+ background-size: 49px 49px;
+ background-position:
+ 0 0,
+ 24.5px 0,
+ 24.5px -24.5px,
+ 0px 24.5px;
}
video {
- max-width: 100%;
+ max-width: 100%;
}
p.tr-centered {
- text-align: center;
+ text-align: center;
}
diff --git a/packages/docs/copy-convert.ts b/packages/docs/copy-convert.ts
index 5e33bab18e6..29d7cf79883 100644
--- a/packages/docs/copy-convert.ts
+++ b/packages/docs/copy-convert.ts
@@ -1,6 +1,6 @@
-import {$} from 'bun';
import fs, {readFileSync} from 'fs';
import path from 'path';
+import {$} from 'bun';
// @ts-ignore outside project
import * as seo from '../convert/app/seo';
diff --git a/packages/docs/count-pages.ts b/packages/docs/count-pages.ts
index 58a5367ef8a..fe1e22e4a4a 100644
--- a/packages/docs/count-pages.ts
+++ b/packages/docs/count-pages.ts
@@ -1,22 +1,22 @@
-import { readFileSync } from "fs";
-import path from "path";
-import { readDir } from "./get-pages.mjs";
+import {readFileSync} from 'fs';
+import path from 'path';
+import {readDir} from './get-pages.mjs';
-const root = path.join(process.cwd(), "docs");
+const root = path.join(process.cwd(), 'docs');
const pages = readDir(root);
let words = 0;
for (const page of pages) {
- const contents = readFileSync(page);
- const wordCount = contents
- .toString()
- .split("\n")
- .map((s) => s.split(" "))
- .flat(1)
- .filter(Boolean).length;
- words += wordCount;
+ const contents = readFileSync(page);
+ const wordCount = contents
+ .toString()
+ .split('\n')
+ .map((s) => s.split(' '))
+ .flat(1)
+ .filter(Boolean).length;
+ words += wordCount;
}
console.log(`There are ${pages.length} documentation pages. Words: ${words}`);
diff --git a/packages/docs/docs/acknowledgements.mdx b/packages/docs/docs/acknowledgements.mdx
index d0b114c1fb0..42eade42b68 100644
--- a/packages/docs/docs/acknowledgements.mdx
+++ b/packages/docs/docs/acknowledgements.mdx
@@ -8,15 +8,14 @@ Remotion would not be possible without the work of many others.
## Software acknowledgements
-| Software | License | Source Code | Notes |
-| :--- | :--- | :--- | :--- |
-| **FFmpeg** | [LGPLv2.1](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) | [View Source](https://github.com/remotion-dev/rust-ffmpeg-splitter) | Core video processing code ([ffmpeg.org](http://ffmpeg.org)) |
-| **Mediabunny** | [MPLv2.0](https://www.mozilla.org/en-US/MPL/2.0/) | [View Source](https://github.com/Vanilagy/mediabunny) | Media processing library ([mediabunny.dev](https://mediabunny.dev/)) |
-| **Zod** | [MIT](https://opensource.org/license/mit) | [View Source](https://github.com/colinhacks/zod) | TypeScript schema validation ([zod.dev](https://zod.dev/)) |
+| Software | License | Source Code | Notes |
+| :------------- | :----------------------------------------------------------------- | :------------------------------------------------------------------ | :------------------------------------------------------------------- |
+| **FFmpeg** | [LGPLv2.1](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) | [View Source](https://github.com/remotion-dev/rust-ffmpeg-splitter) | Core video processing code ([ffmpeg.org](http://ffmpeg.org)) |
+| **Mediabunny** | [MPLv2.0](https://www.mozilla.org/en-US/MPL/2.0/) | [View Source](https://github.com/Vanilagy/mediabunny) | Media processing library ([mediabunny.dev](https://mediabunny.dev/)) |
+| **Zod** | [MIT](https://opensource.org/license/mit) | [View Source](https://github.com/colinhacks/zod) | TypeScript schema validation ([zod.dev](https://zod.dev/)) |
Remotion depends on many JavaScript packages. View the list of packages for each package that we distribute [here](https://github.com/remotion-dev/remotion/tree/main/packages).
-
## Contributors
More than [300 people](https://github.com/remotion-dev/remotion/graphs/contributors) have contributed to the Remotion codebase.
diff --git a/packages/docs/docs/animation-utils/table-of-contents.tsx b/packages/docs/docs/animation-utils/table-of-contents.tsx
index e0ffbbfb52b..f9850136d97 100644
--- a/packages/docs/docs/animation-utils/table-of-contents.tsx
+++ b/packages/docs/docs/animation-utils/table-of-contents.tsx
@@ -1,24 +1,24 @@
-import React from "react";
-import { Grid } from "../../components/TableOfContents/Grid";
-import { TOCItem } from "../../components/TableOfContents/TOCItem";
+import React from 'react';
+import {Grid} from '../../components/TableOfContents/Grid';
+import {TOCItem} from '../../components/TableOfContents/TOCItem';
export const TableOfContents: React.FC = () => {
- return (
-
-
-
- makeTransform()
-
- Create a value for the CSS transform property
-
-
-
- interpolateStyles()
-
- Map a range of values to CSS style values
-
-
-
-
- );
+ return (
+
+
+
+ makeTransform()
+
+ Create a value for the CSS transform property
+
+
+
+ interpolateStyles()
+
+ Map a range of values to CSS style values
+
+
+
+
+ );
};
diff --git a/packages/docs/docs/bundler/table-of-contents.tsx b/packages/docs/docs/bundler/table-of-contents.tsx
index 2f05aa73efb..c6113a58e78 100644
--- a/packages/docs/docs/bundler/table-of-contents.tsx
+++ b/packages/docs/docs/bundler/table-of-contents.tsx
@@ -1,16 +1,16 @@
-import React from "react";
-import { Grid } from "../../components/TableOfContents/Grid";
-import { TOCItem } from "../../components/TableOfContents/TOCItem";
+import React from 'react';
+import {Grid} from '../../components/TableOfContents/Grid';
+import {TOCItem} from '../../components/TableOfContents/TOCItem';
export const TableOfContents: React.FC = () => {
- return (
-
-
-
- {"bundle()"}
- Create a Webpack bundle
-
-
-
- );
+ return (
+
+
+
+ {'bundle()'}
+ Create a Webpack bundle
+
+
+
+ );
};
diff --git a/packages/docs/docs/captions/GuideTableOfContents.tsx b/packages/docs/docs/captions/GuideTableOfContents.tsx
index 34c801670d1..58a1adcb0ef 100644
--- a/packages/docs/docs/captions/GuideTableOfContents.tsx
+++ b/packages/docs/docs/captions/GuideTableOfContents.tsx
@@ -6,7 +6,7 @@ export const GuideTableOfContents: React.FC = () => {
return (
-
+
{'Importing from .srt'}
Import existing .srt subtitle files
diff --git a/packages/docs/docs/cloudrun/table-of-contents.tsx b/packages/docs/docs/cloudrun/table-of-contents.tsx
index fe06dc02e57..e3695bd6f7a 100644
--- a/packages/docs/docs/cloudrun/table-of-contents.tsx
+++ b/packages/docs/docs/cloudrun/table-of-contents.tsx
@@ -1,64 +1,64 @@
-import React from "react";
-import { Grid } from "../../components/TableOfContents/Grid";
-import { TOCItem } from "../../components/TableOfContents/TOCItem";
+import React from 'react';
+import {Grid} from '../../components/TableOfContents/Grid';
+import {TOCItem} from '../../components/TableOfContents/TOCItem';
export const TableOfContents: React.FC = () => {
- return (
-
-
-
- getServiceInfo()
- Gets information about a service
-
-
- deployService()
- Create a new service in GCP Cloud Run
-
-
- deleteService()
- Delete a service in GCP Cloud Run
-
-
- getServices()
- Lists available Remotion Cloud Run services
-
-
- speculateServiceName()
- Speculate a service name based on its configuration
-
-
- getRegions()
- Get all available regions
-
-
- deploySite()
- Bundle and upload a site to Cloud Storage
-
-
- deleteSite()
- Delete a bundle from Cloud Storage
-
-
- getSites()
- Get all available sites from Cloud Storage
-
-
- getOrCreateBucket()
- Ensure a Remotion Cloud Storage bucket exists
-
-
- renderMediaOnCloudrun()
- Trigger a video or audio render
-
-
- renderStillOnCloudrun()
- Trigger a still render
-
-
- testPermissions()
- Ensure permissions are correctly set up in GCP
-
-
-
- );
+ return (
+
+
+
+ getServiceInfo()
+ Gets information about a service
+
+
+ deployService()
+ Create a new service in GCP Cloud Run
+
+
+ deleteService()
+ Delete a service in GCP Cloud Run
+
+
+ getServices()
+ Lists available Remotion Cloud Run services
+
+
+ speculateServiceName()
+ Speculate a service name based on its configuration
+
+
+ getRegions()
+ Get all available regions
+
+
+ deploySite()
+ Bundle and upload a site to Cloud Storage
+
+
+ deleteSite()
+ Delete a bundle from Cloud Storage
+
+
+ getSites()
+ Get all available sites from Cloud Storage
+
+
+ getOrCreateBucket()
+ Ensure a Remotion Cloud Storage bucket exists
+
+
+ renderMediaOnCloudrun()
+ Trigger a video or audio render
+
+
+ renderStillOnCloudrun()
+ Trigger a still render
+
+
+ testPermissions()
+ Ensure permissions are correctly set up in GCP
+
+
+
+ );
};
diff --git a/packages/docs/docs/contributing/docs.mdx b/packages/docs/docs/contributing/docs.mdx
index a10deae7ffd..4649147b400 100644
--- a/packages/docs/docs/contributing/docs.mdx
+++ b/packages/docs/docs/contributing/docs.mdx
@@ -16,7 +16,6 @@ At the bottom of each page, the `Improve this page` button is the easiest way to
## Submitting a new page
-
1 Set up the Remotion repository according the instructions here .
2 Create a new .mdx document in the packages/docs/docs folder.
3 Add the document to packages/docs/sidebars.ts.
diff --git a/packages/docs/docs/contributing/formatting.mdx b/packages/docs/docs/contributing/formatting.mdx
index b891b6ed203..329c3545362 100644
--- a/packages/docs/docs/contributing/formatting.mdx
+++ b/packages/docs/docs/contributing/formatting.mdx
@@ -5,19 +5,19 @@ sidebar_label: Formatting
crumb: Contributing
---
-The Remotion codebase uses Prettier and ESLint for formatting and requires all code to be formatted correctly before it is merged.
+The Remotion codebase uses Oxfmt and ESLint for formatting and requires all code to be formatted correctly before it is merged.
-## Prettier
+## Oxfmt
-In VS Code, you can install the [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode). Extensions for other editors are available on the [Prettier website](https://prettier.io/docs/en/editors.html).
+In VS Code, you can install the [Oxc extension](https://marketplace.visualstudio.com/items?itemName=oxc.oxc-vscode).
The editor should automatically pick up our `.vscode/settings.json` file and format your code when you save a file.
-To manually format a whole package, run `pnpm exec prettier src --write` on a package. Example:
+To manually format a whole package, run `bunx oxfmt src --write` on a package. Example:
```bash
cd packages/renderer
-pnpm exec prettier src --write
+bunx oxfmt src --write
```
## ESLint
diff --git a/packages/docs/docs/editor-starter/demo.mdx b/packages/docs/docs/editor-starter/demo.mdx
index 30cf2108a82..1f9348ff2d2 100644
--- a/packages/docs/docs/editor-starter/demo.mdx
+++ b/packages/docs/docs/editor-starter/demo.mdx
@@ -44,9 +44,8 @@ Try out the Editor Starter yourself!
-
## Notes
- The announcement video link is a long URL, it might not be sharable everywhere.
- Don't rely on these to edit serious projects. We might change the internal data structure of videos as we develop the Editor Starter, breaking your projects.
-- There is no responsive design, so the demo might not look good on mobile.
\ No newline at end of file
+- There is no responsive design, so the demo might not look good on mobile.
diff --git a/packages/docs/docs/fonts-api/TableOfContents.tsx b/packages/docs/docs/fonts-api/TableOfContents.tsx
index a59613907af..6b3c42aa446 100644
--- a/packages/docs/docs/fonts-api/TableOfContents.tsx
+++ b/packages/docs/docs/fonts-api/TableOfContents.tsx
@@ -1,16 +1,16 @@
-import React from "react";
-import { Grid } from "../../components/TableOfContents/Grid";
-import { TOCItem } from "../../components/TableOfContents/TOCItem";
+import React from 'react';
+import {Grid} from '../../components/TableOfContents/Grid';
+import {TOCItem} from '../../components/TableOfContents/TOCItem';
export const TableOfContents: React.FC = () => {
- return (
-
-
-
- {"loadFont()"}
- Load a font from a URL or a local file
-
-
-
- );
+ return (
+
+
+
+ {'loadFont()'}
+ Load a font from a URL or a local file
+
+
+
+ );
};
diff --git a/packages/docs/docs/gif/table-of-contents.tsx b/packages/docs/docs/gif/table-of-contents.tsx
index 15cbd1c6ae4..3f074a1c3ab 100644
--- a/packages/docs/docs/gif/table-of-contents.tsx
+++ b/packages/docs/docs/gif/table-of-contents.tsx
@@ -1,24 +1,24 @@
-import React from "react";
-import { Grid } from "../../components/TableOfContents/Grid";
-import { TOCItem } from "../../components/TableOfContents/TOCItem";
+import React from 'react';
+import {Grid} from '../../components/TableOfContents/Grid';
+import {TOCItem} from '../../components/TableOfContents/TOCItem';
export const TableOfContents: React.FC = () => {
- return (
-
-
-
- {""}
- Render a GIF
-
-
- getGifDurationInSeconds()
- Get the runtime of a GIF
-
-
- preloadGif()
- Prepare a GIF for displaying in the Player
-
-
-
- );
+ return (
+
+
+
+ {''}
+ Render a GIF
+
+
+ getGifDurationInSeconds()
+ Get the runtime of a GIF
+
+
+ preloadGif()
+ Prepare a GIF for displaying in the Player
+
+
+
+ );
};
diff --git a/packages/docs/docs/lambda/naming-convention.mdx b/packages/docs/docs/lambda/naming-convention.mdx
index d4f6cf07bc7..8b77d9a24c7 100644
--- a/packages/docs/docs/lambda/naming-convention.mdx
+++ b/packages/docs/docs/lambda/naming-convention.mdx
@@ -21,10 +21,10 @@ When you deploy a function, the name is hardcoded. This has two functions:
- 1 Avoid having multiple functions with the same configuration unnecessarily.
- 2 Being able to guess the function name using
-
- speculateFunctionName()
-
- so you don't have to fetch a list of functions in your AWS account.
+
+ speculateFunctionName()
+
+so you don't have to fetch a list of functions in your AWS account.
## See also
diff --git a/packages/docs/docs/lambda/table-of-contents.tsx b/packages/docs/docs/lambda/table-of-contents.tsx
index eff8aa1395b..9bee3e063dc 100644
--- a/packages/docs/docs/lambda/table-of-contents.tsx
+++ b/packages/docs/docs/lambda/table-of-contents.tsx
@@ -108,9 +108,7 @@ export const TableOfContents: React.FC = () => {
expressWebhook()
-
- Handle incoming webhooks specifically for Express.js
-
+ Handle incoming webhooks specifically for Express.js
diff --git a/packages/docs/docs/lambda/without-iam/ec2.mdx b/packages/docs/docs/lambda/without-iam/ec2.mdx
index 7181bd55829..883d6e76642 100644
--- a/packages/docs/docs/lambda/without-iam/ec2.mdx
+++ b/packages/docs/docs/lambda/without-iam/ec2.mdx
@@ -99,18 +99,18 @@ This configuration grants authority to `ec2-remotion-role` to assume the role of
- From AWS Management console:
1 Go to the EC2 dashboard by selecting EC2 from the list of services.
- 2 Click on the "Launch Instance" button.
- 3 Choose an Amazon Machine Image (AMI) that you want to use for your instance. You can select from a variety of pre-configured AMIs, or you can create your own. For this instance chose "Ubuntu AMI".
- 4 Select an instance type that you want to use for your instance. The instance type determines the amount of CPU, memory, storage, and networking capacity that your instance will have. The recommended operating system is Ubuntu and at least 1Gib of RAM.
- 5 Configure your instance details, such as the number of instances you want to launch, the VPC and subnet you want to use, and any advanced settings you want to enable.
- 6 From "Network setting" tick the "Allow SSH traffic from", and from selection of allowing access select "My IP address". This will allow you to connect to the server instance via SSH and SFTP to upload the application code.
- 7 From "Network setting" also, click "Allow HTTP traffic from the internet", this will allow the application to be trigger for REST API operation.
- 8 Add storage to your instance by selecting the storage type and size you want to use.
- 9 From "Advance details", on "IAM instance profile" find the role you specifically created for EC2, this is "ec2-remotion-role".
- 10 Review your instance launch details and click the "Launch" button.
- 11 Choose an existing key pair or create a new key pair to securely connect to your instance. This key pair is necessary to access your instance via SSH.
- 12 Launch your instance by clicking the "Launch Instances" button.
- 13 Wait for your instance to launch. Once it's ready, you can connect to it using SSH, RDP, or other remote access methods.
+2 Click on the "Launch Instance" button.
+3 Choose an Amazon Machine Image (AMI) that you want to use for your instance. You can select from a variety of pre-configured AMIs, or you can create your own. For this instance chose "Ubuntu AMI".
+4 Select an instance type that you want to use for your instance. The instance type determines the amount of CPU, memory, storage, and networking capacity that your instance will have. The recommended operating system is Ubuntu and at least 1Gib of RAM.
+5 Configure your instance details, such as the number of instances you want to launch, the VPC and subnet you want to use, and any advanced settings you want to enable.
+6 From "Network setting" tick the "Allow SSH traffic from", and from selection of allowing access select "My IP address". This will allow you to connect to the server instance via SSH and SFTP to upload the application code.
+7 From "Network setting" also, click "Allow HTTP traffic from the internet", this will allow the application to be trigger for REST API operation.
+8 Add storage to your instance by selecting the storage type and size you want to use.
+9 From "Advance details", on "IAM instance profile" find the role you specifically created for EC2, this is "ec2-remotion-role".
+10 Review your instance launch details and click the "Launch" button.
+11 Choose an existing key pair or create a new key pair to securely connect to your instance. This key pair is necessary to access your instance via SSH.
+12 Launch your instance by clicking the "Launch Instances" button.
+13 Wait for your instance to launch. Once it's ready, you can connect to it using SSH, RDP, or other remote access methods.
### 7. Upload the code to the server and install dependencies
diff --git a/packages/docs/docs/layout-utils/fit-text-on-n-lines.mdx b/packages/docs/docs/layout-utils/fit-text-on-n-lines.mdx
index 5b4dcb3be8a..e37f4988a11 100644
--- a/packages/docs/docs/layout-utils/fit-text-on-n-lines.mdx
+++ b/packages/docs/docs/layout-utils/fit-text-on-n-lines.mdx
@@ -121,8 +121,6 @@ _number_
The maximum font size (in pixels) that the text is allowed to reach. If not specified, defaults to 2000.
-
-
## Return value
An object with the following properties:
diff --git a/packages/docs/docs/layout-utils/table-of-contents.tsx b/packages/docs/docs/layout-utils/table-of-contents.tsx
index 76559588b2c..6f3b99bf8e1 100644
--- a/packages/docs/docs/layout-utils/table-of-contents.tsx
+++ b/packages/docs/docs/layout-utils/table-of-contents.tsx
@@ -1,6 +1,6 @@
-import React from "react";
-import { Grid } from "../../components/TableOfContents/Grid";
-import { TOCItem } from "../../components/TableOfContents/TOCItem";
+import React from 'react';
+import {Grid} from '../../components/TableOfContents/Grid';
+import {TOCItem} from '../../components/TableOfContents/TOCItem';
export const TableOfContents: React.FC = () => {
return (
diff --git a/packages/docs/docs/light-leaks/table-of-contents.tsx b/packages/docs/docs/light-leaks/table-of-contents.tsx
index 61476d09cf7..fb6d7e22a9d 100644
--- a/packages/docs/docs/light-leaks/table-of-contents.tsx
+++ b/packages/docs/docs/light-leaks/table-of-contents.tsx
@@ -1,16 +1,16 @@
-import React from "react";
-import { Grid } from "../../components/TableOfContents/Grid";
-import { TOCItem } from "../../components/TableOfContents/TOCItem";
+import React from 'react';
+import {Grid} from '../../components/TableOfContents/Grid';
+import {TOCItem} from '../../components/TableOfContents/TOCItem';
export const TableOfContents: React.FC = () => {
- return (
-
-
-
- {""}
- Render a light leak effect
-
-
-
- );
+ return (
+
+
+
+ {''}
+ Render a light leak effect
+
+
+
+ );
};
diff --git a/packages/docs/docs/media-parser/tags.mdx b/packages/docs/docs/media-parser/tags.mdx
index 0241d7ee83b..03da3a987cf 100644
--- a/packages/docs/docs/media-parser/tags.mdx
+++ b/packages/docs/docs/media-parser/tags.mdx
@@ -56,7 +56,7 @@ Use the [`container`](/docs/media-parser/fields#container) field to get the cont
| `artist` | ID3 Artist Tag | `"Blender Foundation 2008, Janus Bager Kristensen 2013"` |
| `album` | ID3 Album Tag | `"The Resistance"` |
| `composer` | ID3 Composer Tag | `"Sacha Goedegebure"` |
-| `comment` | ID3 Comment Tag | `"Made with Remotion 4.0.234"` |
+| `comment` | ID3 Comment Tag | `"Made with Remotion 4.0.234"` |
| `releaseDate` | ID3 Release Date Tag | |
| `genre` | ID3 Genre Tag | `"Animation"` |
| `title` | ID3 Title Tag | `"Big Buck Bunny, Sunflower version"` |
diff --git a/packages/docs/docs/miscellaneous/changing-temp-dir.mdx b/packages/docs/docs/miscellaneous/changing-temp-dir.mdx
index d4ca8edf5be..10565c02824 100644
--- a/packages/docs/docs/miscellaneous/changing-temp-dir.mdx
+++ b/packages/docs/docs/miscellaneous/changing-temp-dir.mdx
@@ -18,7 +18,7 @@ TMPDIR=/var/tmp npx remotion render
Remotion will make a new temporary directory in the path that you have specified.
This is because Remotion uses the the Node.JS [`os.tmpdir()`][tmpdir] API, which checks for environment variables in the following order:
-* `TMPDIR`, `TMP`, `TEMP` on non-Windows platforms
-* `TEMP` and `TMP` on Windows platforms
+- `TMPDIR`, `TMP`, `TEMP` on non-Windows platforms
+- `TEMP` and `TMP` on Windows platforms
[tmpdir]: https://github.com/nodejs/node/blob/58431c0e6bb1829b6ccafc5cf6340226c15da790/lib/os.js#L181
diff --git a/packages/docs/docs/motion-blur/table-of-contents.tsx b/packages/docs/docs/motion-blur/table-of-contents.tsx
index 01856194866..c6c4e13b36f 100644
--- a/packages/docs/docs/motion-blur/table-of-contents.tsx
+++ b/packages/docs/docs/motion-blur/table-of-contents.tsx
@@ -1,20 +1,20 @@
-import React from "react";
-import { Grid } from "../../components/TableOfContents/Grid";
-import { TOCItem } from "../../components/TableOfContents/TOCItem";
+import React from 'react';
+import {Grid} from '../../components/TableOfContents/Grid';
+import {TOCItem} from '../../components/TableOfContents/TOCItem';
export const TableOfContents: React.FC = () => {
- return (
-
-
-
- {""}
- Add a trail effect to children
-
-
- {""}
- Add a natural camera motion blur effect to children
-
-
-
- );
+ return (
+
+
+
+ {''}
+ Add a trail effect to children
+
+
+ {''}
+ Add a natural camera motion blur effect to children
+
+
+
+ );
};
diff --git a/packages/docs/docs/noise/table-of-contents.tsx b/packages/docs/docs/noise/table-of-contents.tsx
index d7b443510e6..46a81987270 100644
--- a/packages/docs/docs/noise/table-of-contents.tsx
+++ b/packages/docs/docs/noise/table-of-contents.tsx
@@ -1,24 +1,24 @@
-import React from "react";
-import { Grid } from "../../components/TableOfContents/Grid";
-import { TOCItem } from "../../components/TableOfContents/TOCItem";
+import React from 'react';
+import {Grid} from '../../components/TableOfContents/Grid';
+import {TOCItem} from '../../components/TableOfContents/TOCItem';
export const TableOfContents: React.FC = () => {
- return (
-
-
-
- noise2D()
- Create 2D noise
-
-
- noise3D()
- Create 3D noise
-
-
- noise4D()
- Create 4D noise
-
-
-
- );
-};
\ No newline at end of file
+ return (
+
+
+
+ noise2D()
+ Create 2D noise
+
+
+ noise3D()
+ Create 3D noise
+
+
+ noise4D()
+ Create 4D noise
+
+
+
+ );
+};
diff --git a/packages/docs/docs/paths/cut-path.mdx b/packages/docs/docs/paths/cut-path.mdx
index f53c4cc104e..456dad8c6ad 100644
--- a/packages/docs/docs/paths/cut-path.mdx
+++ b/packages/docs/docs/paths/cut-path.mdx
@@ -81,4 +81,4 @@ console.log(startOnly); // "M 0 0"
- [getLength()](/docs/paths/get-length)
- [getPointAtLength()](/docs/paths/get-point-at-length)
- [Source code for this function](https://github.com/remotion-dev/remotion/blob/main/packages/paths/src/cut-path.ts)
-- [`@remotion/paths`](/docs/paths)
\ No newline at end of file
+- [`@remotion/paths`](/docs/paths)
diff --git a/packages/docs/docs/paths/table-of-contents.tsx b/packages/docs/docs/paths/table-of-contents.tsx
index 125583db3f0..10efcb510e1 100644
--- a/packages/docs/docs/paths/table-of-contents.tsx
+++ b/packages/docs/docs/paths/table-of-contents.tsx
@@ -1,89 +1,89 @@
-import React from "react";
-import { Grid } from "../../components/TableOfContents/Grid";
-import { TOCItem } from "../../components/TableOfContents/TOCItem";
+import React from 'react';
+import {Grid} from '../../components/TableOfContents/Grid';
+import {TOCItem} from '../../components/TableOfContents/TOCItem';
export const TableOfContents: React.FC = () => {
- return (
-
-
-
- getLength()
- Obtain length of an SVG path
-
-
- cutPath()
- Cut an SVG path at a specified length
-
-
- getPointAtLength()
- Get coordinates at a certain point of an SVG path
-
-
- getTangentAtLength()
-
- Gets tangents x and y of a point which is
- on an SVG path
-
-
-
- reversePath()
- Switch direction of an SVG path
-
-
- normalizePath()
- Replace relative with absolute coordinates
-
-
- interpolatePath()
- Interpolates between two SVG paths
-
-
- evolvePath()
- Animate an SVG path
-
-
- translatePath()
- Translates the position of an path against X/Y coordinates
-
-
- warpPath()
- Remap the coordinates of a path
-
-
- scalePath()
- Grow or shrink the size of the path
-
-
- getBoundingBox()
- Get the bounding box of a SVG path
-
-
- resetPath()
-
- Translates an SVG path to (0, 0)
-
-
-
- extendViewBox()
- Widen an SVG viewBox in all directions
-
-
- getSubpaths()
- Split SVG path into its parts
-
-
- parsePath()
- Parse a string into an array of instructions
-
-
- serializeInstructions()
- Turn an array of instructions into a SVG path
- {" "}
-
- reduceInstructions()
- Reduce the amount of instruction types
- {" "}
-
-
- );
-};
\ No newline at end of file
+ return (
+
+
+
+ getLength()
+ Obtain length of an SVG path
+
+
+ cutPath()
+ Cut an SVG path at a specified length
+
+
+ getPointAtLength()
+ Get coordinates at a certain point of an SVG path
+
+
+ getTangentAtLength()
+
+ Gets tangents x and y of a point which is
+ on an SVG path
+
+
+
+ reversePath()
+ Switch direction of an SVG path
+
+
+ normalizePath()
+ Replace relative with absolute coordinates
+
+
+ interpolatePath()
+ Interpolates between two SVG paths
+
+
+ evolvePath()
+ Animate an SVG path
+
+
+ translatePath()
+ Translates the position of an path against X/Y coordinates
+
+
+ warpPath()
+ Remap the coordinates of a path
+
+
+ scalePath()
+ Grow or shrink the size of the path
+
+
+ getBoundingBox()
+ Get the bounding box of a SVG path
+
+
+ resetPath()
+
+ Translates an SVG path to (0, 0)
+
+
+
+ extendViewBox()
+ Widen an SVG viewBox in all directions
+
+
+ getSubpaths()
+ Split SVG path into its parts
+
+
+ parsePath()
+ Parse a string into an array of instructions
+
+
+ serializeInstructions()
+ Turn an array of instructions into a SVG path
+ {' '}
+
+ reduceInstructions()
+ Reduce the amount of instruction types
+ {' '}
+
+
+ );
+};
diff --git a/packages/docs/docs/player/drag-and-drop/Demo.tsx b/packages/docs/docs/player/drag-and-drop/Demo.tsx
index 9e3e62f85b4..947aa551a1b 100644
--- a/packages/docs/docs/player/drag-and-drop/Demo.tsx
+++ b/packages/docs/docs/player/drag-and-drop/Demo.tsx
@@ -1,8 +1,8 @@
import {Player} from '@remotion/player';
import React, {useCallback, useMemo, useState} from 'react';
+import type {Item} from './item';
import type {MainProps} from './Main';
import {Main} from './Main';
-import type {Item} from './item';
export const DragAndDropDemo: React.FC = () => {
const [items, setItems] = useState- ([
diff --git a/packages/docs/docs/player/drag-and-drop/SelectionOutline.tsx b/packages/docs/docs/player/drag-and-drop/SelectionOutline.tsx
index f689fba0056..7b29b29218d 100644
--- a/packages/docs/docs/player/drag-and-drop/SelectionOutline.tsx
+++ b/packages/docs/docs/player/drag-and-drop/SelectionOutline.tsx
@@ -1,8 +1,7 @@
import React, {useCallback, useMemo} from 'react';
import {useCurrentScale} from 'remotion';
-
-import {ResizeHandle} from './ResizeHandle';
import type {Item} from './item';
+import {ResizeHandle} from './ResizeHandle';
export const SelectionOutline: React.FC<{
item: Item;
diff --git a/packages/docs/docs/player/drag-and-drop/SortedOutlines.tsx b/packages/docs/docs/player/drag-and-drop/SortedOutlines.tsx
index 07292c7b4df..e5a62f49159 100644
--- a/packages/docs/docs/player/drag-and-drop/SortedOutlines.tsx
+++ b/packages/docs/docs/player/drag-and-drop/SortedOutlines.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import {Sequence} from 'remotion';
-import {SelectionOutline} from './SelectionOutline';
import type {Item} from './item';
+import {SelectionOutline} from './SelectionOutline';
const displaySelectedItemOnTop = (
items: Item[],
diff --git a/packages/docs/docs/preload/table-of-contents.tsx b/packages/docs/docs/preload/table-of-contents.tsx
index 667156fd681..a66bac09e00 100644
--- a/packages/docs/docs/preload/table-of-contents.tsx
+++ b/packages/docs/docs/preload/table-of-contents.tsx
@@ -1,32 +1,32 @@
-import React from "react";
-import { Grid } from "../../components/TableOfContents/Grid";
-import { TOCItem } from "../../components/TableOfContents/TOCItem";
+import React from 'react';
+import {Grid} from '../../components/TableOfContents/Grid';
+import {TOCItem} from '../../components/TableOfContents/TOCItem';
export const TableOfContents: React.FC = () => {
- return (
-
-
-
- preloadVideo()
- Preload a video source
-
-
- preloadAudio()
- Preload an audio source
-
-
- preloadFont()
- Preload a font
-
-
- preloadImage()
- Preload an image
-
-
- resolveRedirect()
- Get the definitive URL after all redirects
-
-
-
- );
+ return (
+
+
+
+ preloadVideo()
+ Preload a video source
+
+
+ preloadAudio()
+ Preload an audio source
+
+
+ preloadFont()
+ Preload a font
+
+
+ preloadImage()
+ Preload an image
+
+
+ resolveRedirect()
+ Get the definitive URL after all redirects
+
+
+
+ );
};
diff --git a/packages/docs/docs/recorder/demo.mdx b/packages/docs/docs/recorder/demo.mdx
index ab9e058873b..9331e9462f9 100644
--- a/packages/docs/docs/recorder/demo.mdx
+++ b/packages/docs/docs/recorder/demo.mdx
@@ -7,7 +7,7 @@ crumb: Recorder
import {NewMuxVideo} from '../../src/components/MuxVideo';
-Here is a walkthrough of how the Remotion Recorder is used.
+Here is a walkthrough of how the Remotion Recorder is used.
:::note
The video was recorded when the Recorder was still a paid product - it is now a free template!
diff --git a/packages/docs/docs/recorder/roadmap.mdx b/packages/docs/docs/recorder/roadmap.mdx
index 220cb1a3047..72c87ab66e7 100644
--- a/packages/docs/docs/recorder/roadmap.mdx
+++ b/packages/docs/docs/recorder/roadmap.mdx
@@ -4,8 +4,7 @@ title: Roadmap
crumb: Recorder
---
-
-Here is a list of things that we plan to add.
+Here is a list of things that we plan to add.
## ✅ SRT export
diff --git a/packages/docs/docs/recorder/support.mdx b/packages/docs/docs/recorder/support.mdx
index 87e46dfbe4e..189eb6a5557 100644
--- a/packages/docs/docs/recorder/support.mdx
+++ b/packages/docs/docs/recorder/support.mdx
@@ -12,4 +12,3 @@ Talk to the Remotion team and other users in the `#recorder` channel in [Discord
For bugs with the Recorder, file an issue in the [Recorder repo](https://github.com/remotion-dev/recorder/issues).
For issues with Remotion itself, see here how to [get help](/docs/get-help).
-
diff --git a/packages/docs/docs/rive/table-of-contents.tsx b/packages/docs/docs/rive/table-of-contents.tsx
index 1b73a586ef2..5a58b67ef95 100644
--- a/packages/docs/docs/rive/table-of-contents.tsx
+++ b/packages/docs/docs/rive/table-of-contents.tsx
@@ -1,16 +1,16 @@
-import React from "react";
-import { Grid } from "../../components/TableOfContents/Grid";
-import { TOCItem } from "../../components/TableOfContents/TOCItem";
+import React from 'react';
+import {Grid} from '../../components/TableOfContents/Grid';
+import {TOCItem} from '../../components/TableOfContents/TOCItem';
export const TableOfContents: React.FC = () => {
- return (
-
-
-
- {""}
- Render a Rive animation
-
-
-
- );
+ return (
+
+
+
+ {''}
+ Render a Rive animation
+
+
+
+ );
};
diff --git a/packages/docs/docs/security.mdx b/packages/docs/docs/security.mdx
index 89cd2e6aec4..d0ad93cfd8a 100644
--- a/packages/docs/docs/security.mdx
+++ b/packages/docs/docs/security.mdx
@@ -27,7 +27,7 @@ APIs such as `renderMedia()` and `renderMediaOnLambda()` may be expensive (compu
Since Remotion is distributed via NPM, reports of scans of our dependencies can be publicly viewed on platforms such as [Socket](https://socket.dev). You can check specific Remotion packages for vulnerabilities:
-- [Core package (`remotion`)](https://socket.dev/npm/package/remotion)
+- [Core package (`remotion`)](https://socket.dev/npm/package/remotion)
- [`@remotion/lambda`](https://socket.dev/npm/package/@remotion/lambda)
- [`@remotion/player`](https://socket.dev/npm/package/@remotion/player)
diff --git a/packages/docs/docs/shapes/table-of-contents.tsx b/packages/docs/docs/shapes/table-of-contents.tsx
index ac4c0e63b91..d05ce2dfd41 100644
--- a/packages/docs/docs/shapes/table-of-contents.tsx
+++ b/packages/docs/docs/shapes/table-of-contents.tsx
@@ -1,27 +1,27 @@
-import React from "react";
-import { shapeComponents } from "../../components/shapes/shapes-info";
-import { Grid } from "../../components/TableOfContents/Grid";
-import { TOCItem } from "../../components/TableOfContents/TOCItem";
+import React from 'react';
+import {shapeComponents} from '../../components/shapes/shapes-info';
+import {Grid} from '../../components/TableOfContents/Grid';
+import {TOCItem} from '../../components/TableOfContents/TOCItem';
export const TableOfContents: React.FC = () => {
- return (
-
-
- {shapeComponents.map((c) => {
- return (
-
-
- make{c.shape}()
- Generate SVG Path for a {c.shape.toLowerCase()}
-
-
- {"<" + c.shape + "/>"}
- Render a {c.shape.toLowerCase()}
-
-
- );
- })}
-
-
- );
+ return (
+
+
+ {shapeComponents.map((c) => {
+ return (
+
+
+ make{c.shape}()
+ Generate SVG Path for a {c.shape.toLowerCase()}
+
+
+ {'<' + c.shape + '/>'}
+ Render a {c.shape.toLowerCase()}
+
+
+ );
+ })}
+
+
+ );
};
diff --git a/packages/docs/docs/slow-method-to-extract-frame.mdx b/packages/docs/docs/slow-method-to-extract-frame.mdx
index 035185740bd..f924679e673 100644
--- a/packages/docs/docs/slow-method-to-extract-frame.mdx
+++ b/packages/docs/docs/slow-method-to-extract-frame.mdx
@@ -18,7 +18,6 @@ Using a slow method to extract the frame at 1000ms of [video].
While it is not an error itself, it warns that the render must do an expensive operation in order to render the video, in which the whole video must be read in order to extract a single frame in it. This warning currently appears in two occasions:
- If a H.264 video in a MP4 container has it's timestamps corrupted so that it cannot be seeked to the exact frame that Remotion wants to extract.
-
- **Recommendation**: It might be faster to first re-encode the video using FFMPEG to fix the seeking: `npx remotion ffmpeg -i inputvideo.mp4 outputvideo.mp4`
- If it's a VP8 video in a WebM container and the selected image format is PNG, we cannot accurately extract the frame using FFMPEG and need to resort to the slow method.
diff --git a/packages/docs/docs/transitions/table-of-contents.tsx b/packages/docs/docs/transitions/table-of-contents.tsx
index 61a2f53bdd8..b1e05dce320 100644
--- a/packages/docs/docs/transitions/table-of-contents.tsx
+++ b/packages/docs/docs/transitions/table-of-contents.tsx
@@ -27,4 +27,4 @@ export const TableOfContents: React.FC<{
);
-};
\ No newline at end of file
+};
diff --git a/packages/docs/docs/troubleshooting/render-stuck.mdx b/packages/docs/docs/troubleshooting/render-stuck.mdx
index 23ad68bb578..79df4b9a7f8 100644
--- a/packages/docs/docs/troubleshooting/render-stuck.mdx
+++ b/packages/docs/docs/troubleshooting/render-stuck.mdx
@@ -13,7 +13,7 @@ If your render is stuck, proceed as follows:
If the `delayRender()` timeout is too big and does not resolve, a render may get stuck indefinitely without an error message.
This issue may be more confusing on Remotion Lambda, whose runtime also has a timeout.
-If the `delayRender()` timeout is bigger than the Lambda function timeout, the Lambda function will first time out without the `delayRender()` call failing first, leading to no error message.
+If the `delayRender()` timeout is bigger than the Lambda function timeout, the Lambda function will first time out without the `delayRender()` call failing first, leading to no error message.
To debug the issue:
diff --git a/packages/docs/docs/whisper-web/can-use-whisper-web.mdx b/packages/docs/docs/whisper-web/can-use-whisper-web.mdx
index b2bd33f489d..fa81430f4a1 100644
--- a/packages/docs/docs/whisper-web/can-use-whisper-web.mdx
+++ b/packages/docs/docs/whisper-web/can-use-whisper-web.mdx
@@ -91,7 +91,6 @@ If `supported` is `false`, this field may contain a more detailed, human-readabl
## Important considerations
- **Cross-Origin Isolation:** For `SharedArrayBuffer` to work, which is required by `@remotion/whisper-web`, the page must be served with specific HTTP headers:
-
- `Cross-Origin-Opener-Policy: same-origin`
- `Cross-Origin-Embedder-Policy: require-corp`
Ensure your server is configured to send these headers. See [MDN documentation on `crossOriginIsolated`](https://developer.mozilla.org/en-US/docs/Web/API/Window/crossOriginIsolated) for more details.
diff --git a/packages/docs/docs/whisper-web/get-available-models.mdx b/packages/docs/docs/whisper-web/get-available-models.mdx
index 608872b8261..4d60bc465ce 100644
--- a/packages/docs/docs/whisper-web/get-available-models.mdx
+++ b/packages/docs/docs/whisper-web/get-available-models.mdx
@@ -39,4 +39,4 @@ Returns an array of `AvailableModel` objects. Each object contains:
- [Source code for `getAvailableModels()`](https://github.com/remotion-dev/remotion/blob/main/packages/whisper-web/src/get-available-models.ts)
- [`@remotion/whisper-web`](/docs/whisper-web)
- [`downloadWhisperModel()`](/docs/whisper-web/download-whisper-model)
-- [`getLoadedModels()`](/docs/whisper-web/get-loaded-models)
\ No newline at end of file
+- [`getLoadedModels()`](/docs/whisper-web/get-loaded-models)
diff --git a/packages/docs/docs/whisper-web/whisper-web.tsx b/packages/docs/docs/whisper-web/whisper-web.tsx
index 89b22dca8ae..361b4f66464 100644
--- a/packages/docs/docs/whisper-web/whisper-web.tsx
+++ b/packages/docs/docs/whisper-web/whisper-web.tsx
@@ -12,7 +12,9 @@ export const TableOfContents: React.FC = () => {
getAvailableModels()
- Get a list of all available Whisper models with their download sizes
+
+ Get a list of all available Whisper models with their download sizes
+
downloadWhisperModel()
diff --git a/packages/docs/docusaurus-theme-shiki-twoslash/theme/CodeBlock/index.js b/packages/docs/docusaurus-theme-shiki-twoslash/theme/CodeBlock/index.js
index e96ad20a0df..20a57811a79 100644
--- a/packages/docs/docusaurus-theme-shiki-twoslash/theme/CodeBlock/index.js
+++ b/packages/docs/docusaurus-theme-shiki-twoslash/theme/CodeBlock/index.js
@@ -2,7 +2,6 @@
// which is under MIT License as per the banner
import './styles.css';
-
import Translate, {translate} from '@docusaurus/Translate';
import copy from 'copy-text-to-clipboard';
import React, {useRef, useState} from 'react';
diff --git a/packages/docs/docusaurus-theme-shiki-twoslash/theme/MDXComponents/index.js b/packages/docs/docusaurus-theme-shiki-twoslash/theme/MDXComponents/index.js
index cddd6d53c59..60dcff7dae9 100644
--- a/packages/docs/docusaurus-theme-shiki-twoslash/theme/MDXComponents/index.js
+++ b/packages/docs/docusaurus-theme-shiki-twoslash/theme/MDXComponents/index.js
@@ -1,12 +1,17 @@
-import React from "react"
-import CodeBlock from "@theme/CodeBlock"
-import MDXComponents from "@theme-init/MDXComponents"
+import MDXComponents from '@theme-init/MDXComponents';
+import CodeBlock from '@theme/CodeBlock';
+import React from 'react';
const NewComponents = {
- ...MDXComponents,
- div: props => (props.className === "shiki-twoslash-fragment" ? <>{props.children}> :
),
- pre: props => ,
- code: props => ,
-}
+ ...MDXComponents,
+ div: (props) =>
+ props.className === 'shiki-twoslash-fragment' ? (
+ <>{props.children}>
+ ) : (
+
+ ),
+ pre: (props) => ,
+ code: (props) => ,
+};
-export default NewComponents
+export default NewComponents;
diff --git a/packages/docs/make-top-google-fonts.mjs b/packages/docs/make-top-google-fonts.mjs
index 67a0387eed4..68efa69922f 100644
--- a/packages/docs/make-top-google-fonts.mjs
+++ b/packages/docs/make-top-google-fonts.mjs
@@ -1,47 +1,47 @@
-import { getAvailableFonts } from "@remotion/google-fonts";
-import sortBy from "lodash.sortby";
-import prettier from "prettier";
+import {getAvailableFonts} from '@remotion/google-fonts';
+import sortBy from 'lodash.sortby';
+import prettier from 'prettier';
const amount = Number(process.argv[2]);
-const res = await fetch("https://fonts.google.com/metadata/stats");
+const res = await fetch('https://fonts.google.com/metadata/stats');
const json = await res.text();
const bypassCors = json.substring(4).trim();
const allFonts = JSON.parse(bypassCors);
-const sorted = sortBy(allFonts, (f) => 0 - f.viewsByDateRange["7day"].views);
+const sorted = sortBy(allFonts, (f) => 0 - f.viewsByDateRange['7day'].views);
const topFonts = sortBy(
- sorted
- .filter((s) => {
- return (
- s.family !== "Material Icons" &&
- s.family !== "Material Icons Outlined" &&
- s.family !== "Material Icons Round" &&
- s.family !== "Material Icons Sharp" &&
- s.family !== "Material Symbols Outlined" &&
- s.family !== "Material Symbols Rounded" &&
- s.family !== "Material Icons Two Tone"
- );
- })
- .slice(0, amount),
- (s) => s.family,
+ sorted
+ .filter((s) => {
+ return (
+ s.family !== 'Material Icons' &&
+ s.family !== 'Material Icons Outlined' &&
+ s.family !== 'Material Icons Round' &&
+ s.family !== 'Material Icons Sharp' &&
+ s.family !== 'Material Symbols Outlined' &&
+ s.family !== 'Material Symbols Rounded' &&
+ s.family !== 'Material Icons Two Tone'
+ );
+ })
+ .slice(0, amount),
+ (s) => s.family,
);
const availableFonts = getAvailableFonts();
const remotionList = topFonts.map((t) => {
- const { importName } = availableFonts.find((f) => f.fontFamily === t.family);
- return `{family: "${t.family}", load: () => import("@remotion/google-fonts/${importName}") as Promise},`;
+ const {importName} = availableFonts.find((f) => f.fontFamily === t.family);
+ return `{family: "${t.family}", load: () => import("@remotion/google-fonts/${importName}") as Promise},`;
});
const js = `import type {GoogleFont} from '@remotion/google-fonts';\n\nexport const top${amount} = [${remotionList.join(
- "",
+ '',
)}]`;
const prettified = await prettier.format(js, {
- parser: "typescript",
- singleQuote: true,
- quoteProps: "consistent",
- printWidth: 80,
+ parser: 'typescript',
+ singleQuote: true,
+ quoteProps: 'consistent',
+ printWidth: 80,
});
console.log(prettified);
diff --git a/packages/docs/new-article.config.js b/packages/docs/new-article.config.js
index de921e8ec19..3fdb0514caf 100644
--- a/packages/docs/new-article.config.js
+++ b/packages/docs/new-article.config.js
@@ -1,6 +1,6 @@
// A minimal config that can be used to write a new article
// without having to copile all files.
-const { customFields } = require("./docusaurus.config.js");
+const {customFields} = require('./docusaurus.config.js');
-module.exports = customFields.config("new-doc");
+module.exports = customFields.config('new-doc');
diff --git a/packages/docs/package.json b/packages/docs/package.json
index d4ca1e691dc..87909663466 100644
--- a/packages/docs/package.json
+++ b/packages/docs/package.json
@@ -6,7 +6,7 @@
"private": true,
"version": "4.0.428",
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"docusaurus": "docusaurus",
"start": "bun copy-raw-docs.ts && bun fetch-prompt-submissions.ts && bun update-prompt.ts && cd .. && bun run build && cd docs && docusaurus start --host 0.0.0.0",
"build-docs": "bun copy-raw-docs.ts && bun fetch-prompt-submissions.ts && bun prewarm-twoslash.ts && DOCUSAURUS_IGNORE_SSG_WARNINGS=true docusaurus build && bun copy-convert.ts && bun count-pages.ts",
diff --git a/packages/docs/prewarm-twoslash.ts b/packages/docs/prewarm-twoslash.ts
index 11e84fbfce2..edfd28a0335 100644
--- a/packages/docs/prewarm-twoslash.ts
+++ b/packages/docs/prewarm-twoslash.ts
@@ -1,4 +1,3 @@
-import {Glob} from 'bun';
import {spawn} from 'child_process';
import {createHash} from 'crypto';
import {
@@ -12,6 +11,7 @@ import {
import {createRequire} from 'module';
import {cpus} from 'os';
import {join, resolve} from 'path';
+import {Glob} from 'bun';
const DOCS_ROOT = resolve(import.meta.dirname);
const CACHE_ROOT = join(DOCS_ROOT, 'node_modules', '.cache', 'twoslash');
diff --git a/packages/docs/remotion.config.ts b/packages/docs/remotion.config.ts
index 5594a434d0a..267a66cfb23 100644
--- a/packages/docs/remotion.config.ts
+++ b/packages/docs/remotion.config.ts
@@ -1,4 +1,4 @@
-import { Config } from "@remotion/cli/config";
-import path from "path";
+import path from 'path';
+import {Config} from '@remotion/cli/config';
-Config.setPublicDir(path.join(process.cwd(), "static"));
+Config.setPublicDir(path.join(process.cwd(), 'static'));
diff --git a/packages/docs/render-cards.ts b/packages/docs/render-cards.ts
index 8587dc37b20..32135ce96db 100644
--- a/packages/docs/render-cards.ts
+++ b/packages/docs/render-cards.ts
@@ -1,9 +1,9 @@
-import {bundle} from '@remotion/bundler';
-import {getCompositions, renderStill} from '@remotion/renderer';
import {execSync} from 'child_process';
import fs from 'fs';
import os from 'os';
import path from 'path';
+import {bundle} from '@remotion/bundler';
+import {getCompositions, renderStill} from '@remotion/renderer';
import {readDir} from './get-pages.mjs';
const data: {
diff --git a/packages/docs/src/components/TeamCards.tsx b/packages/docs/src/components/TeamCards.tsx
index e7d0ef4bc9f..010cc5a0b92 100644
--- a/packages/docs/src/components/TeamCards.tsx
+++ b/packages/docs/src/components/TeamCards.tsx
@@ -1,8 +1,8 @@
import React from 'react';
import {BlueButton} from '../../components/layout/Button';
import {Spacer} from '../../components/layout/Spacer';
-import TeamCardsCSS from './TeamCardsCSS.module.css';
import {EmailLogo, GitHubLogo, LinkedInLogo, TwitterLogo} from './icons';
+import TeamCardsCSS from './TeamCardsCSS.module.css';
const ButtonMailto = ({mailto, label}) => {
return {label} ;
diff --git a/packages/docs/src/components/TemplatePage.tsx b/packages/docs/src/components/TemplatePage.tsx
index efcd6a8c448..2e7438d637e 100644
--- a/packages/docs/src/components/TemplatePage.tsx
+++ b/packages/docs/src/components/TemplatePage.tsx
@@ -1,10 +1,9 @@
import Head from '@docusaurus/Head';
import {useLocation} from '@docusaurus/router';
-import Layout from '@theme/Layout';
-import React from 'react';
-
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
+import Layout from '@theme/Layout';
import {CreateVideoInternals} from 'create-video';
+import React from 'react';
import {Seo} from './Seo';
import {TemplateModalContent} from './TemplateModalContent';
diff --git a/packages/docs/src/pages/about/index.tsx b/packages/docs/src/pages/about/index.tsx
index 2a6610db06b..fabcf39f3f8 100644
--- a/packages/docs/src/pages/about/index.tsx
+++ b/packages/docs/src/pages/about/index.tsx
@@ -1,8 +1,7 @@
-import Layout from '@theme/Layout';
-import React from 'react';
-
import Head from '@docusaurus/Head';
import {TeamPage} from '@remotion/promo-pages/dist/team.js';
+import Layout from '@theme/Layout';
+import React from 'react';
export default () => {
return (
diff --git a/packages/docs/src/pages/contact/index.tsx b/packages/docs/src/pages/contact/index.tsx
index 42619de0391..653567e7bbd 100644
--- a/packages/docs/src/pages/contact/index.tsx
+++ b/packages/docs/src/pages/contact/index.tsx
@@ -1,3 +1,4 @@
+import Head from '@docusaurus/Head';
import Layout from '@theme/Layout';
import React from 'react';
import {PlainButton} from '../../../components/layout/Button';
@@ -5,8 +6,6 @@ import {Spacer} from '../../../components/layout/Spacer';
import {ContactUsHeader} from '../../components/ContactUsHeader';
import GoogleMaps from '../../components/GoogleMaps';
-import Head from '@docusaurus/Head';
-
const container: React.CSSProperties = {
maxWidth: 1000,
margin: 'auto',
diff --git a/packages/docs/src/pages/player/index.tsx b/packages/docs/src/pages/player/index.tsx
index 310c0402803..67e61a476c9 100644
--- a/packages/docs/src/pages/player/index.tsx
+++ b/packages/docs/src/pages/player/index.tsx
@@ -3,11 +3,11 @@ import Layout from '@theme/Layout';
import React from 'react';
import {VideoApps} from '../../../components/LambdaSplash/VideoApps';
import {VideoAppsTitle} from '../../../components/LambdaSplash/VideoAppsTitle';
+import {PlayerFeatures} from '../../../components/Player/features';
import {PlayerPageFooter} from '../../../components/Player/Footer';
import {LandingHeader} from '../../../components/Player/LandingHeader';
import {PoweredByRemotion} from '../../../components/Player/PoweredByRemotion';
import {WrappedBanner} from '../../../components/Player/Wrapped';
-import {PlayerFeatures} from '../../../components/Player/features';
const container: React.CSSProperties = {
maxWidth: 1000,
diff --git a/packages/docs/src/theme/MDXComponents.js b/packages/docs/src/theme/MDXComponents.js
index 58416a8a2a5..5e2ef0613b3 100644
--- a/packages/docs/src/theme/MDXComponents.js
+++ b/packages/docs/src/theme/MDXComponents.js
@@ -1,11 +1,11 @@
// Import the original mapper
import MDXComponents from '@theme-original/MDXComponents';
+import {Demo} from '../../components/demos';
import {ExperimentalBadge} from '../../components/Experimental';
import {InlineStep, Step, TitleStep} from '../../components/InlineStep';
import {Installation} from '../../components/Installation';
import {JumpToVideoLink} from '../../components/JumpToVideoLink';
import {YouTube} from '../../components/YouTube';
-import {Demo} from '../../components/demos';
import {
AvailableFrom,
MinBunVersion,
diff --git a/packages/docs/twoslash-worker.ts b/packages/docs/twoslash-worker.ts
index 68531f2b01e..1ac1c7b7b00 100644
--- a/packages/docs/twoslash-worker.ts
+++ b/packages/docs/twoslash-worker.ts
@@ -1,6 +1,6 @@
-import {rendererClassic, transformerTwoslash} from '@shikijs/twoslash';
import {existsSync, mkdirSync, readFileSync, writeFileSync} from 'fs';
import {dirname} from 'path';
+import {rendererClassic, transformerTwoslash} from '@shikijs/twoslash';
import {createHighlighter} from 'shiki';
import {createTwoslasher} from 'twoslash';
@@ -72,8 +72,7 @@ for (const item of items) {
// Report progress every 10 items
if ((completed + errors) % 10 === 0) {
process.stdout.write(
- JSON.stringify({completed, errors, total: items.length, timings}) +
- '\n',
+ JSON.stringify({completed, errors, total: items.length, timings}) + '\n',
);
}
}
diff --git a/packages/docs/vercel.ts b/packages/docs/vercel.ts
index a9b70ee1366..5d10307f7aa 100644
--- a/packages/docs/vercel.ts
+++ b/packages/docs/vercel.ts
@@ -275,11 +275,9 @@ export const config: VercelConfig = {
'https://upload.wikimedia.org/wikipedia/commons/transcoded/c/c0/Big_Buck_Bunny_4K.webm/Big_Buck_Bunny_4K.webm.720p.vp9.webm',
{permanent: false},
),
- routes.redirect(
- '/bbb.mp4',
- 'https://remotion.media/BigBuckBunny.mp4',
- {permanent: false},
- ),
+ routes.redirect('/bbb.mp4', 'https://remotion.media/BigBuckBunny.mp4', {
+ permanent: false,
+ }),
routes.redirect(
'/leads',
'https://github.com/orgs/remotion-dev/projects/15/views/1',
@@ -298,11 +296,9 @@ export const config: VercelConfig = {
routes.redirect('/docs/snippets/fps-converter', '/docs/multiple-fps', {
permanent: false,
}),
- routes.redirect(
- '/docs/miscellaneous/vercel-functions',
- '/docs/vercel',
- {permanent: false},
- ),
+ routes.redirect('/docs/miscellaneous/vercel-functions', '/docs/vercel', {
+ permanent: false,
+ }),
routes.redirect('/docs/miscellaneous/vercel', '/docs/vercel', {
permanent: false,
}),
diff --git a/packages/docusaurus-plugin/README.md b/packages/docusaurus-plugin/README.md
index 5db59cdbc89..32cdf9293c1 100644
--- a/packages/docusaurus-plugin/README.md
+++ b/packages/docusaurus-plugin/README.md
@@ -1,5 +1,5 @@
# @remotion/docusaurus-plugin
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/docusaurus-plugin/src/index.ts b/packages/docusaurus-plugin/src/index.ts
index 2289d6362ee..29d24ef0b66 100644
--- a/packages/docusaurus-plugin/src/index.ts
+++ b/packages/docusaurus-plugin/src/index.ts
@@ -1,5 +1,5 @@
-import type {DocusaurusContext} from '@docusaurus/types';
import path from 'path';
+import type {DocusaurusContext} from '@docusaurus/types';
import {remarkTwoslash} from './shiki';
/**
* @param {import("@docusaurus/types").DocusaurusContext} context
diff --git a/packages/docusaurus-plugin/src/shiki.ts b/packages/docusaurus-plugin/src/shiki.ts
index 28039fb581d..95333c25eae 100644
--- a/packages/docusaurus-plugin/src/shiki.ts
+++ b/packages/docusaurus-plugin/src/shiki.ts
@@ -4,7 +4,6 @@ import {createHighlighter} from 'shiki';
import type {BuildVisitor} from 'unist-util-visit';
import {visit} from 'unist-util-visit';
import {cachedTwoslashCall} from './caching';
-
import {setupNodeForTwoslashException} from './exceptionMessageDOM';
import {addIncludes, replaceIncludesInCode} from './includes';
import type {Node} from './unist-types';
diff --git a/packages/enable-scss/README.md b/packages/enable-scss/README.md
index 5283b60767a..fa848c56445 100644
--- a/packages/enable-scss/README.md
+++ b/packages/enable-scss/README.md
@@ -1,18 +1,18 @@
# @remotion/enable-scss
-
+
Enable SCSS support in Remotion
-
+
[](https://npmcharts.com/compare/@remotion/enable-scss?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/enable-scss --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/enable-scss/overview) for more information.
diff --git a/packages/enable-scss/package.json b/packages/enable-scss/package.json
index ad3b2b583a0..e2703628a91 100644
--- a/packages/enable-scss/package.json
+++ b/packages/enable-scss/package.json
@@ -12,7 +12,7 @@
"scripts": {
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts",
- "formatting": "prettier src --check"
+ "formatting": "oxfmt src --check"
},
"author": "Jonny Burger ",
"contributors": [],
diff --git a/packages/eslint-config-flat/README.md b/packages/eslint-config-flat/README.md
index e1c75aad855..65103f72bc5 100644
--- a/packages/eslint-config-flat/README.md
+++ b/packages/eslint-config-flat/README.md
@@ -1,18 +1,18 @@
# @remotion/eslint-config-flat
-
+
Default configuration for Remotion templates (ESLint >= 9)
-
+
[](https://npmcharts.com/compare/@remotion/eslint-config-flat?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/eslint-config-flat --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/brownfield#install-the-eslint-plugin) for more information.
diff --git a/packages/eslint-config-flat/package.json b/packages/eslint-config-flat/package.json
index 6bf15259282..d05000d5766 100644
--- a/packages/eslint-config-flat/package.json
+++ b/packages/eslint-config-flat/package.json
@@ -12,7 +12,7 @@
],
"scripts": {
"lint": "eslint src",
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
},
"bugs": {
diff --git a/packages/eslint-config-internal/README.md b/packages/eslint-config-internal/README.md
index 2bbf3103075..864a369221e 100644
--- a/packages/eslint-config-internal/README.md
+++ b/packages/eslint-config-internal/README.md
@@ -1,7 +1,7 @@
# @remotion/eslint-config-internal
-
+
ESLint condig for Remotion's internal packages
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/eslint-config-internal/src/index.ts b/packages/eslint-config-internal/src/index.ts
index b56b6deb1ac..9c7820ab610 100644
--- a/packages/eslint-config-internal/src/index.ts
+++ b/packages/eslint-config-internal/src/index.ts
@@ -1,8 +1,8 @@
+import {createRequire} from 'node:module';
import {FlatCompat} from '@eslint/eslintrc';
import js from '@eslint/js';
import typescriptPlugin from '@typescript-eslint/eslint-plugin';
import parser from '@typescript-eslint/parser';
-import {createRequire} from 'node:module';
const require = createRequire(import.meta.url);
const __dirname = new URL('.', import.meta.url).pathname;
diff --git a/packages/eslint-config/README.md b/packages/eslint-config/README.md
index 0a94f7bac2c..015f9ecf86c 100644
--- a/packages/eslint-config/README.md
+++ b/packages/eslint-config/README.md
@@ -1,18 +1,18 @@
# @remotion/eslint-config
-
+
Default configuration for Remotion templates (ESLint <= 8)
-
+
[](https://npmcharts.com/compare/@remotion/eslint-config?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/eslint-config --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/brownfield#install-the-eslint-plugin) for more information.
diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json
index 5babae80bef..e8874d76ea9 100644
--- a/packages/eslint-config/package.json
+++ b/packages/eslint-config/package.json
@@ -11,7 +11,7 @@
],
"scripts": {
"lint": "eslint src",
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"make": "tsgo -d"
},
"bugs": {
diff --git a/packages/eslint-config/tsconfig.json b/packages/eslint-config/tsconfig.json
index d28bd8fa9a8..792b3ad6331 100644
--- a/packages/eslint-config/tsconfig.json
+++ b/packages/eslint-config/tsconfig.json
@@ -1,15 +1,15 @@
{
- "extends": "../tsconfig.settings.json",
- "compilerOptions": {
- "rootDir": "./src",
- "outDir": "./dist",
- "skipLibCheck": true,
- "jsx": "react-jsx"
- },
- "include": ["./src"],
- "references": [
- {
- "path": "../eslint-plugin"
- }
- ]
+ "extends": "../tsconfig.settings.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "./dist",
+ "skipLibCheck": true,
+ "jsx": "react-jsx"
+ },
+ "include": ["./src"],
+ "references": [
+ {
+ "path": "../eslint-plugin"
+ }
+ ]
}
diff --git a/packages/eslint-plugin/README.md b/packages/eslint-plugin/README.md
index 8a6fc650b20..e15bb0d7eef 100644
--- a/packages/eslint-plugin/README.md
+++ b/packages/eslint-plugin/README.md
@@ -1,18 +1,18 @@
# @remotion/eslint-plugin
-
+
Rules for writing Remotion code
-
+
[](https://npmcharts.com/compare/@remotion/eslint-plugin?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/eslint-plugin --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/brownfield#install-the-eslint-plugin) for more information.
diff --git a/packages/eslint-plugin/vitest.config.mts b/packages/eslint-plugin/vitest.config.mts
index 10c4bfdcc3f..dcf26d6710f 100644
--- a/packages/eslint-plugin/vitest.config.mts
+++ b/packages/eslint-plugin/vitest.config.mts
@@ -1,10 +1,10 @@
-import { defineConfig } from "vitest/config";
+import {defineConfig} from 'vitest/config';
export default defineConfig({
- test: {
- testTimeout: 90000,
- maxConcurrency: 1,
- threads: false,
- setupFiles: ["src/tests/setup.ts"],
- },
+ test: {
+ testTimeout: 90000,
+ maxConcurrency: 1,
+ threads: false,
+ setupFiles: ['src/tests/setup.ts'],
+ },
});
diff --git a/packages/example-videos/package.json b/packages/example-videos/package.json
index fd508181ff9..eb0b17535dd 100644
--- a/packages/example-videos/package.json
+++ b/packages/example-videos/package.json
@@ -22,6 +22,7 @@
"@remotion/eslint-config-internal": "workspace:*",
"dotenv": "17.3.1",
"eslint": "catalog:",
+ "prettier": "catalog:",
"@typescript/native-preview": "catalog:"
},
"private": true
diff --git a/packages/example-without-zod/README.md b/packages/example-without-zod/README.md
index 50554f4fd43..e12d9f1b6ca 100644
--- a/packages/example-without-zod/README.md
+++ b/packages/example-without-zod/README.md
@@ -1,5 +1,5 @@
# @remotion/example-without-zod
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/example-without-zod/remotion.config.ts b/packages/example-without-zod/remotion.config.ts
index 61184253c80..111b7ea26ed 100644
--- a/packages/example-without-zod/remotion.config.ts
+++ b/packages/example-without-zod/remotion.config.ts
@@ -1 +1 @@
-import { Config } from "@remotion/cli/config";
+import {Config} from '@remotion/cli/config';
diff --git a/packages/example-without-zod/tsconfig.json b/packages/example-without-zod/tsconfig.json
index 57a8c9a8d11..31265da2868 100644
--- a/packages/example-without-zod/tsconfig.json
+++ b/packages/example-without-zod/tsconfig.json
@@ -1,15 +1,15 @@
{
- "extends": "../tsconfig.settings.json",
- "compilerOptions": {
- "rootDir": "./src",
- "outDir": "./dist",
- "jsx": "react-jsx",
- "skipLibCheck": true,
- "allowSyntheticDefaultImports": true,
- "paths": {
- "lib/*": ["./src/lib/*"]
- }
- },
- "include": ["src"],
- "references": [{ "path": "../core" }, { "path": "../cli" }]
+ "extends": "../tsconfig.settings.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "./dist",
+ "jsx": "react-jsx",
+ "skipLibCheck": true,
+ "allowSyntheticDefaultImports": true,
+ "paths": {
+ "lib/*": ["./src/lib/*"]
+ }
+ },
+ "include": ["src"],
+ "references": [{"path": "../core"}, {"path": "../cli"}]
}
diff --git a/packages/fonts/README.md b/packages/fonts/README.md
index 55402b0bc2d..304fc06581d 100644
--- a/packages/fonts/README.md
+++ b/packages/fonts/README.md
@@ -1,18 +1,18 @@
# @remotion/fonts
-
+
Helpers for loading local fonts into Remotion
-
+
[](https://npmcharts.com/compare/@remotion/fonts?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/fonts --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/fonts-api) for more information.
diff --git a/packages/fonts/package.json b/packages/fonts/package.json
index 721d08323cf..ff982fd82f9 100644
--- a/packages/fonts/package.json
+++ b/packages/fonts/package.json
@@ -10,7 +10,7 @@
"module": "dist/esm/index.mjs",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
},
diff --git a/packages/gif/.prettierignore b/packages/gif/.prettierignore
deleted file mode 100644
index adef70ed1a1..00000000000
--- a/packages/gif/.prettierignore
+++ /dev/null
@@ -1 +0,0 @@
-src/worker/source.ts
diff --git a/packages/gif/README.md b/packages/gif/README.md
index 082062e3e4d..c47dfb60ad2 100644
--- a/packages/gif/README.md
+++ b/packages/gif/README.md
@@ -1,18 +1,18 @@
# @remotion/gif
-
+
Embed GIFs in a Remotion video
-
+
[](https://npmcharts.com/compare/@remotion/gif?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/gif --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/gif) for more information.
diff --git a/packages/gif/build.mjs b/packages/gif/build.mjs
index 9bd0ad981ca..218715df3bb 100644
--- a/packages/gif/build.mjs
+++ b/packages/gif/build.mjs
@@ -1,5 +1,5 @@
-import esbuild from 'esbuild';
import fs from 'node:fs';
+import esbuild from 'esbuild';
const tmp = 'bundled-worker.js';
diff --git a/packages/gif/package.json b/packages/gif/package.json
index 54035d2d831..257631194c1 100644
--- a/packages/gif/package.json
+++ b/packages/gif/package.json
@@ -15,7 +15,7 @@
"types": "dist/cjs/index.d.ts",
"module": "dist/esm/index.mjs",
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d && node build.mjs && bun --env-file=../.env.bundle bundle.ts"
},
diff --git a/packages/gif/src/worker/source.ts b/packages/gif/src/worker/source.ts
index 821bbd9b616..e68453f0d02 100644
--- a/packages/gif/src/worker/source.ts
+++ b/packages/gif/src/worker/source.ts
@@ -1,4 +1,4 @@
// Auto-generated by build.mjs
export const src =
-// eslint-disable-next-line no-template-curly-in-string
- "\"use strict\";(()=>{var P=(t,r,e={},n=e)=>{if(Array.isArray(r))r.forEach(o=>P(t,o,e,n));else if(typeof r==\"function\")r(t,e,n,P);else{let o=Object.keys(r)[0];Array.isArray(r[o])?(n[o]={},P(t,r[o],e,n[o])):n[o]=r[o](t,e,n,P)}return e},M=(t,r)=>function(e,n,o,c){let i=[],a=e.pos;for(;r(e,n,o);){let s={};if(c(e,t,n,s),e.pos===a)break;a=e.pos,i.push(s)}return i},g=(t,r)=>(e,n,o,c)=>{r(e,n,o)&&c(e,t,n,o)};var W=t=>({data:t,pos:0}),m=()=>t=>t.data[t.pos++],U=(t=0)=>r=>r.data[r.pos+t],f=t=>r=>r.data.subarray(r.pos,r.pos+=t),k=t=>r=>r.data.subarray(r.pos,r.pos+t),v=t=>r=>Array.from(f(t)(r)).map(e=>String.fromCharCode(e)).join(\"\"),b=t=>r=>{let e=f(2)(r);return t?(e[1]<<8)+e[0]:(e[0]<<8)+e[1]},E=(t,r)=>(e,n,o)=>{let c=typeof r==\"function\"?r(e,n,o):r,i=f(t),a=new Array(c);for(let s=0;s{let n=0;for(let o=0;or=>{let e=m()(r),n=new Array(8);for(let o=0;o<8;o++)n[7-o]=!!(e&1<{let i=t[c];return i.length?o[c]=$(n,i.index,i.length):o[c]=n[i.index],o},{})};var z={blocks:t=>{let e=[],n=t.data.length,o=0;for(let a=m()(t);a!==0&&a;a=m()(t)){if(t.pos+a>=n){let s=n-t.pos;e.push(f(s)(t)),o+=s;break}e.push(f(a)(t)),o+=a}let c=new Uint8Array(o),i=0;for(let a=0;a{let r=k(2)(t);return r[0]===33&&r[1]===249}),H=g({image:[{code:m()},{descriptor:[{left:b(!0)},{top:b(!0)},{width:b(!0)},{height:b(!0)},{lct:I({exists:{index:0},interlaced:{index:1},sort:{index:2},future:{index:3,length:2},size:{index:5,length:3}})}]},g({lct:E(3,(t,r,e)=>2**(e.descriptor.lct.size+1))},(t,r,e)=>e.descriptor.lct.exists),{data:[{minCodeSize:m()},z]}]},t=>U()(t)===44),J=g({text:[{codes:f(2)},{blockSize:m()},{preData:(t,r,e)=>f(e.text.blockSize)(t)},z]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===1}),Q=g({application:[{codes:f(2)},{blockSize:m()},{id:(t,r,e)=>v(e.blockSize)(t)},z]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===255}),V=g({comment:[{codes:f(2)},z]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===254}),K=[{header:[{signature:v(3)},{version:v(3)}]},{lsd:[{width:b(!0)},{height:b(!0)},{gct:I({exists:{index:0},resolution:{index:1,length:3},sort:{index:4},size:{index:5,length:3}})},{backgroundColorIndex:m()},{pixelAspectRatio:m()}]},g({gct:E(3,(t,r)=>2**(r.lsd.gct.size+1))},(t,r)=>r.lsd.gct.exists),{frames:M([q,Q,V,H,J],t=>{let r=U()(t);return r===33||r===44})}];var X=(t,r)=>{let e=new Array(t.length),n=t.length/r,o=function(s,d){let u=t.slice(d*r,(d+1)*r);e.splice(...[s*r,r].concat(u))},c=[0,4,2,1],i=[8,8,4,2],a=0;for(let s=0;s<4;s++)for(let d=c[s];d{let c=e,i,a,s,d,u;var w;let l,p;var C,y,h,_,G;let x=new Array(e),B=new Array(4096),T=new Array(4096),F=new Array(4097),R=t,S=1<>=s,w-=s,l>i||l===O)break;if(l===S){s=R+1,a=(1<S;)F[h++]=T[l],l=B[l];y=T[l]&255,F[h++]=y,i<4096&&(B[i]=u,T[i]=y,i++,(i&a)===0&&i<4096&&(s++,a+=i)),u=d}h--,x[G++]=F[h],p++}for(p=G;p{let r=new Uint8Array(t);return P(W(r),K)},D=(t,r)=>{var i,a,s;if(!t.image)return console.warn(\"gif frame does not have associated image.\"),null;let{image:e}=t,n=e.descriptor.width*e.descriptor.height,o=Z(e.data.minCodeSize,e.data.blocks,n);return(i=e.descriptor.lct)!=null&&i.interlaced&&(o=X(o,e.descriptor.width)),{pixels:o,dims:{top:t.image.descriptor.top,left:t.image.descriptor.left,width:t.image.descriptor.width,height:t.image.descriptor.height},colorTable:(a=e.descriptor.lct)!=null&&a.exists?e.lct:r,delay:(((s=t.gce)==null?void 0:s.delay)||10)*10,disposalType:t.gce?t.gce.extras.disposal:1,transparentIndex:t.gce&&t.gce.extras.transparentColorGiven?t.gce.transparentColorIndex:-1}};var L=t=>t.frames.filter(r=>\"image\"in r).map(r=>D(r,t.gct)).filter(Boolean).map(r=>r);var Y=t=>{let r=null;for(let e of t.frames)r=e.gce?e.gce:r,\"image\"in e&&!(\"gce\"in e)&&r!==null&&(e.gce=r)},ee=({typedArray:t,dx:r,dy:e,width:n,height:o,gifWidth:c})=>{let i=e*c+r;for(let a=0;a{let{width:n,height:o,top:c,left:i}=r.dims,a=c*e.width+i;for(let s=0;sfetch(t,{signal:r}).then(e=>{var n;if(!((n=e.headers.get(\"Content-Type\"))!=null&&n.includes(\"image/gif\")))throw Error(`Wrong content type: \"${e.headers.get(\"Content-Type\")}\"`);return e.arrayBuffer()}).then(e=>j(e)).then(e=>(Y(e),e)).then(e=>Promise.all([L(e),{width:e.lsd.width,height:e.lsd.height}])).then(([e,n])=>{let o=[],c=n.width*n.height*4,i=new Uint8ClampedArray(c);for(let a=0;aa.delay),frames:o}});var A=new Map;self.addEventListener(\"message\",t=>{let{type:r,src:e}=t.data||t;switch(r){case\"parse\":{if(!A.has(e)){let n=new AbortController,o={signal:n.signal};A.set(e,n),N(e,o).then(c=>{self.postMessage(Object.assign(c,{src:e}),c.frames.map(i=>i.buffer))}).catch(c=>{self.postMessage({src:e,error:c,loaded:!0})}).finally(()=>{A.delete(e)})}break}case\"cancel\":{A.has(e)&&(A.get(e).abort(),A.delete(e));break}default:break}});})();\n";
\ No newline at end of file
+ // eslint-disable-next-line no-template-curly-in-string
+ '"use strict";(()=>{var P=(t,r,e={},n=e)=>{if(Array.isArray(r))r.forEach(o=>P(t,o,e,n));else if(typeof r=="function")r(t,e,n,P);else{let o=Object.keys(r)[0];Array.isArray(r[o])?(n[o]={},P(t,r[o],e,n[o])):n[o]=r[o](t,e,n,P)}return e},M=(t,r)=>function(e,n,o,c){let i=[],a=e.pos;for(;r(e,n,o);){let s={};if(c(e,t,n,s),e.pos===a)break;a=e.pos,i.push(s)}return i},g=(t,r)=>(e,n,o,c)=>{r(e,n,o)&&c(e,t,n,o)};var W=t=>({data:t,pos:0}),m=()=>t=>t.data[t.pos++],U=(t=0)=>r=>r.data[r.pos+t],f=t=>r=>r.data.subarray(r.pos,r.pos+=t),k=t=>r=>r.data.subarray(r.pos,r.pos+t),v=t=>r=>Array.from(f(t)(r)).map(e=>String.fromCharCode(e)).join(""),b=t=>r=>{let e=f(2)(r);return t?(e[1]<<8)+e[0]:(e[0]<<8)+e[1]},E=(t,r)=>(e,n,o)=>{let c=typeof r=="function"?r(e,n,o):r,i=f(t),a=new Array(c);for(let s=0;s{let n=0;for(let o=0;or=>{let e=m()(r),n=new Array(8);for(let o=0;o<8;o++)n[7-o]=!!(e&1<{let i=t[c];return i.length?o[c]=$(n,i.index,i.length):o[c]=n[i.index],o},{})};var z={blocks:t=>{let e=[],n=t.data.length,o=0;for(let a=m()(t);a!==0&&a;a=m()(t)){if(t.pos+a>=n){let s=n-t.pos;e.push(f(s)(t)),o+=s;break}e.push(f(a)(t)),o+=a}let c=new Uint8Array(o),i=0;for(let a=0;a{let r=k(2)(t);return r[0]===33&&r[1]===249}),H=g({image:[{code:m()},{descriptor:[{left:b(!0)},{top:b(!0)},{width:b(!0)},{height:b(!0)},{lct:I({exists:{index:0},interlaced:{index:1},sort:{index:2},future:{index:3,length:2},size:{index:5,length:3}})}]},g({lct:E(3,(t,r,e)=>2**(e.descriptor.lct.size+1))},(t,r,e)=>e.descriptor.lct.exists),{data:[{minCodeSize:m()},z]}]},t=>U()(t)===44),J=g({text:[{codes:f(2)},{blockSize:m()},{preData:(t,r,e)=>f(e.text.blockSize)(t)},z]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===1}),Q=g({application:[{codes:f(2)},{blockSize:m()},{id:(t,r,e)=>v(e.blockSize)(t)},z]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===255}),V=g({comment:[{codes:f(2)},z]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===254}),K=[{header:[{signature:v(3)},{version:v(3)}]},{lsd:[{width:b(!0)},{height:b(!0)},{gct:I({exists:{index:0},resolution:{index:1,length:3},sort:{index:4},size:{index:5,length:3}})},{backgroundColorIndex:m()},{pixelAspectRatio:m()}]},g({gct:E(3,(t,r)=>2**(r.lsd.gct.size+1))},(t,r)=>r.lsd.gct.exists),{frames:M([q,Q,V,H,J],t=>{let r=U()(t);return r===33||r===44})}];var X=(t,r)=>{let e=new Array(t.length),n=t.length/r,o=function(s,d){let u=t.slice(d*r,(d+1)*r);e.splice(...[s*r,r].concat(u))},c=[0,4,2,1],i=[8,8,4,2],a=0;for(let s=0;s<4;s++)for(let d=c[s];d{let c=e,i,a,s,d,u;var w;let l,p;var C,y,h,_,G;let x=new Array(e),B=new Array(4096),T=new Array(4096),F=new Array(4097),R=t,S=1<>=s,w-=s,l>i||l===O)break;if(l===S){s=R+1,a=(1<S;)F[h++]=T[l],l=B[l];y=T[l]&255,F[h++]=y,i<4096&&(B[i]=u,T[i]=y,i++,(i&a)===0&&i<4096&&(s++,a+=i)),u=d}h--,x[G++]=F[h],p++}for(p=G;p{let r=new Uint8Array(t);return P(W(r),K)},D=(t,r)=>{var i,a,s;if(!t.image)return console.warn("gif frame does not have associated image."),null;let{image:e}=t,n=e.descriptor.width*e.descriptor.height,o=Z(e.data.minCodeSize,e.data.blocks,n);return(i=e.descriptor.lct)!=null&&i.interlaced&&(o=X(o,e.descriptor.width)),{pixels:o,dims:{top:t.image.descriptor.top,left:t.image.descriptor.left,width:t.image.descriptor.width,height:t.image.descriptor.height},colorTable:(a=e.descriptor.lct)!=null&&a.exists?e.lct:r,delay:(((s=t.gce)==null?void 0:s.delay)||10)*10,disposalType:t.gce?t.gce.extras.disposal:1,transparentIndex:t.gce&&t.gce.extras.transparentColorGiven?t.gce.transparentColorIndex:-1}};var L=t=>t.frames.filter(r=>"image"in r).map(r=>D(r,t.gct)).filter(Boolean).map(r=>r);var Y=t=>{let r=null;for(let e of t.frames)r=e.gce?e.gce:r,"image"in e&&!("gce"in e)&&r!==null&&(e.gce=r)},ee=({typedArray:t,dx:r,dy:e,width:n,height:o,gifWidth:c})=>{let i=e*c+r;for(let a=0;a{let{width:n,height:o,top:c,left:i}=r.dims,a=c*e.width+i;for(let s=0;sfetch(t,{signal:r}).then(e=>{var n;if(!((n=e.headers.get("Content-Type"))!=null&&n.includes("image/gif")))throw Error(`Wrong content type: "${e.headers.get("Content-Type")}"`);return e.arrayBuffer()}).then(e=>j(e)).then(e=>(Y(e),e)).then(e=>Promise.all([L(e),{width:e.lsd.width,height:e.lsd.height}])).then(([e,n])=>{let o=[],c=n.width*n.height*4,i=new Uint8ClampedArray(c);for(let a=0;aa.delay),frames:o}});var A=new Map;self.addEventListener("message",t=>{let{type:r,src:e}=t.data||t;switch(r){case"parse":{if(!A.has(e)){let n=new AbortController,o={signal:n.signal};A.set(e,n),N(e,o).then(c=>{self.postMessage(Object.assign(c,{src:e}),c.frames.map(i=>i.buffer))}).catch(c=>{self.postMessage({src:e,error:c,loaded:!0})}).finally(()=>{A.delete(e)})}break}case"cancel":{A.has(e)&&(A.get(e).abort(),A.delete(e));break}default:break}});})();\n';
diff --git a/packages/google-fonts/README.md b/packages/google-fonts/README.md
index fc7e42dc10b..c1646db3fc2 100644
--- a/packages/google-fonts/README.md
+++ b/packages/google-fonts/README.md
@@ -1,18 +1,18 @@
# @remotion/google-fonts
-
+
Use Google Fonts in Remotion
-
+
[](https://npmcharts.com/compare/@remotion/google-fonts?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/google-fonts --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/google-fonts) for more information.
diff --git a/packages/google-fonts/bundle.ts b/packages/google-fonts/bundle.ts
index 90c707efde1..662d7a9f40f 100644
--- a/packages/google-fonts/bundle.ts
+++ b/packages/google-fonts/bundle.ts
@@ -5,9 +5,9 @@ if (process.env.NODE_ENV !== 'production') {
throw new Error('This script must be run using NODE_ENV=production');
}
-import {$} from 'bun';
import {existsSync, mkdirSync, readFileSync, writeFileSync} from 'fs';
import path from 'path';
+import {$} from 'bun';
import {filteredFonts} from './scripts/filtered-fonts';
import {removeWhitespace} from './scripts/utils';
diff --git a/packages/google-fonts/ensure-generation.ts b/packages/google-fonts/ensure-generation.ts
index 3d97dd5147d..1d88e1e82ab 100644
--- a/packages/google-fonts/ensure-generation.ts
+++ b/packages/google-fonts/ensure-generation.ts
@@ -1,14 +1,14 @@
-import fs from "node:fs";
+import fs from 'node:fs';
-const filesCjs = fs.readdirSync("./dist/cjs");
+const filesCjs = fs.readdirSync('./dist/cjs');
if (filesCjs.length < 2200) {
- console.error("Not publishing, Google fonts have not been generated");
- process.exit(1);
+ console.error('Not publishing, Google fonts have not been generated');
+ process.exit(1);
}
-const filesEsm = fs.readdirSync("./dist/esm");
+const filesEsm = fs.readdirSync('./dist/esm');
if (filesEsm.length < 1100) {
- console.error("Not publishing, Google fonts have not been generated");
- process.exit(1);
+ console.error('Not publishing, Google fonts have not been generated');
+ process.exit(1);
}
diff --git a/packages/google-fonts/package.json b/packages/google-fonts/package.json
index 85c960df90a..61ee0bdd9d3 100644
--- a/packages/google-fonts/package.json
+++ b/packages/google-fonts/package.json
@@ -10,7 +10,7 @@
"scripts": {
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts",
"generate": "bun --env-file=.env scripts/update-font-db.ts",
- "formatting": "prettier src --check"
+ "formatting": "oxfmt src --check"
},
"license": "SEE LICENSE IN LICENSE.md",
"dependencies": {
@@ -20,7 +20,6 @@
"@types/css-font-loading-module": "0.0.14",
"@types/prettier": "^2.7.1",
"postcss": "8.4.47",
- "prettier": "catalog:",
"@typescript/native-preview": "catalog:"
},
"types": "dist/cjs/index.d.ts",
diff --git a/packages/google-fonts/scripts/generate.ts b/packages/google-fonts/scripts/generate.ts
index 0d408a8bc9d..69018740a12 100644
--- a/packages/google-fonts/scripts/generate.ts
+++ b/packages/google-fonts/scripts/generate.ts
@@ -1,6 +1,5 @@
import fs, {mkdirSync} from 'node:fs';
import path from 'path';
-
import limit from 'p-limit';
import {FontInfo, extractInfoFromCss} from './extract-info-from-css';
import {Font, googleFonts} from './google-fonts';
diff --git a/packages/google-fonts/scripts/incompatible-fonts.ts b/packages/google-fonts/scripts/incompatible-fonts.ts
index abe286d6543..5cf130be75b 100644
--- a/packages/google-fonts/scripts/incompatible-fonts.ts
+++ b/packages/google-fonts/scripts/incompatible-fonts.ts
@@ -1,121 +1,121 @@
export const incompatibleFonts = [
- "Allkin",
- "Chiron GoRound TC",
- "Chiron Sung HK",
- "Chiron Hei HK",
- "Linefont",
- "Material Icons",
- "Material Icons Sharp",
- "Material Icons Round",
- "Material Icons Outlined",
- "Material Icons Two Tone",
- "Material Symbols",
- "Material Symbols Outlined",
- "Material Symbols Sharp",
- "Material Symbols Rounded",
- "Playwrite AR",
- "Playwrite AR Guides",
- "Playwrite AT Guides",
- "Playwrite AU NSW",
- "Playwrite AU NSW Guides",
- "Playwrite AT",
- "Playwrite AU QLD",
- "Playwrite AU SA",
- "Playwrite AU QLD Guides",
- "Playwrite AU SA Guides",
- "Playwrite AU TAS",
- "Playwrite AU TAS Guides",
- "Playwrite AU VIC",
- "Playwrite AU VIC Guides",
- "Playwrite BE WAL Guides",
- "Playwrite BE WAL",
- "Playwrite BE VLG Guides",
- "Playwrite BE VLG",
- "Playwrite BR",
- "Playwrite CA",
- "Playwrite BR Guides",
- "Playwrite CA Guides",
- "Playwrite CO Guides",
- "Playwrite CL Guides",
- "Playwrite CO",
- "Playwrite CU",
- "Playwrite CZ",
- "Playwrite CU Guides",
- "Playwrite CZ Guides",
- "Playwrite DE Grund",
- "Playwrite DE LA",
- "Playwrite DE LA Guides",
- "Playwrite DE SAS",
- "Playwrite DE SAS Guides",
- "Playwrite DE VA",
- "Playwrite DE VA Guides",
- "Playwrite DK Loopet",
- "Playwrite DK Loopet Guides",
- "Playwrite DK Uloopet",
- "Playwrite ES Deco",
- "Playwrite ES",
- "Playwrite ES Deco Guides",
- "Playwrite DE Grund Guides",
- "Playwrite ES Guides",
- "Playwrite FR Trad Guides",
- "Playwrite FR Trad",
- "Playwrite FR Moderne Guides",
- "Playwrite DK Uloopet Guides",
- "Playwrite FR Moderne",
- "Playwrite GB J",
- "Playwrite GB J Guides",
- "Playwrite CL",
- "Playwrite HR",
- "Playwrite GB S Guides",
- "Playwrite HR Lijeva",
- "Playwrite GB S",
- "Playwrite HU",
- "Playwrite HR Lijeva Guides",
- "Playwrite HR Guides",
- "Playwrite HU Guides",
- "Playwrite ID",
- "Playwrite IE",
- "Playwrite IE Guides",
- "Playwrite ID Guides",
- "Playwrite IN",
- "Playwrite IN Guides",
- "Playwrite IS",
- "Playwrite IS Guides",
- "Playwrite IT Trad",
- "Playwrite IT Moderna Guides",
- "Playwrite IT Moderna",
- "Playwrite NG Modern",
- "Playwrite MX",
- "Playwrite MX Guides",
- "Playwrite IT Trad Guides",
- "Playwrite NL",
- "Playwrite NO Guides",
- "Playwrite NO",
- "Playwrite NZ",
- "Playwrite NL Guides",
- "Playwrite NZ Basic",
- "Playwrite NZ Basic Guides",
- "Playwrite NG Modern Guides",
- "Playwrite PE Guides",
- "Playwrite NZ Guides",
- "Playwrite PL",
- "Playwrite PT",
- "Playwrite PE",
- "Playwrite PT Guides",
- "Playwrite PL Guides",
- "Playwrite TZ Guides",
- "Playwrite RO Guides",
- "Playwrite TZ",
- "Playwrite SK Guides",
- "Playwrite SK",
- "Playwrite RO",
- "Playwrite US Trad Guides",
- "Playwrite US Modern Guides",
- "Playwrite ZA",
- "Playwrite VN Guides",
- "Playwrite US Modern",
- "Playwrite US Trad",
- "Playwrite VN",
- "Playwrite ZA Guides",
- "Wavefont"
-];
\ No newline at end of file
+ 'Allkin',
+ 'Chiron GoRound TC',
+ 'Chiron Sung HK',
+ 'Chiron Hei HK',
+ 'Linefont',
+ 'Material Icons',
+ 'Material Icons Sharp',
+ 'Material Icons Round',
+ 'Material Icons Outlined',
+ 'Material Icons Two Tone',
+ 'Material Symbols',
+ 'Material Symbols Outlined',
+ 'Material Symbols Sharp',
+ 'Material Symbols Rounded',
+ 'Playwrite AR',
+ 'Playwrite AR Guides',
+ 'Playwrite AT Guides',
+ 'Playwrite AU NSW',
+ 'Playwrite AU NSW Guides',
+ 'Playwrite AT',
+ 'Playwrite AU QLD',
+ 'Playwrite AU SA',
+ 'Playwrite AU QLD Guides',
+ 'Playwrite AU SA Guides',
+ 'Playwrite AU TAS',
+ 'Playwrite AU TAS Guides',
+ 'Playwrite AU VIC',
+ 'Playwrite AU VIC Guides',
+ 'Playwrite BE WAL Guides',
+ 'Playwrite BE WAL',
+ 'Playwrite BE VLG Guides',
+ 'Playwrite BE VLG',
+ 'Playwrite BR',
+ 'Playwrite CA',
+ 'Playwrite BR Guides',
+ 'Playwrite CA Guides',
+ 'Playwrite CO Guides',
+ 'Playwrite CL Guides',
+ 'Playwrite CO',
+ 'Playwrite CU',
+ 'Playwrite CZ',
+ 'Playwrite CU Guides',
+ 'Playwrite CZ Guides',
+ 'Playwrite DE Grund',
+ 'Playwrite DE LA',
+ 'Playwrite DE LA Guides',
+ 'Playwrite DE SAS',
+ 'Playwrite DE SAS Guides',
+ 'Playwrite DE VA',
+ 'Playwrite DE VA Guides',
+ 'Playwrite DK Loopet',
+ 'Playwrite DK Loopet Guides',
+ 'Playwrite DK Uloopet',
+ 'Playwrite ES Deco',
+ 'Playwrite ES',
+ 'Playwrite ES Deco Guides',
+ 'Playwrite DE Grund Guides',
+ 'Playwrite ES Guides',
+ 'Playwrite FR Trad Guides',
+ 'Playwrite FR Trad',
+ 'Playwrite FR Moderne Guides',
+ 'Playwrite DK Uloopet Guides',
+ 'Playwrite FR Moderne',
+ 'Playwrite GB J',
+ 'Playwrite GB J Guides',
+ 'Playwrite CL',
+ 'Playwrite HR',
+ 'Playwrite GB S Guides',
+ 'Playwrite HR Lijeva',
+ 'Playwrite GB S',
+ 'Playwrite HU',
+ 'Playwrite HR Lijeva Guides',
+ 'Playwrite HR Guides',
+ 'Playwrite HU Guides',
+ 'Playwrite ID',
+ 'Playwrite IE',
+ 'Playwrite IE Guides',
+ 'Playwrite ID Guides',
+ 'Playwrite IN',
+ 'Playwrite IN Guides',
+ 'Playwrite IS',
+ 'Playwrite IS Guides',
+ 'Playwrite IT Trad',
+ 'Playwrite IT Moderna Guides',
+ 'Playwrite IT Moderna',
+ 'Playwrite NG Modern',
+ 'Playwrite MX',
+ 'Playwrite MX Guides',
+ 'Playwrite IT Trad Guides',
+ 'Playwrite NL',
+ 'Playwrite NO Guides',
+ 'Playwrite NO',
+ 'Playwrite NZ',
+ 'Playwrite NL Guides',
+ 'Playwrite NZ Basic',
+ 'Playwrite NZ Basic Guides',
+ 'Playwrite NG Modern Guides',
+ 'Playwrite PE Guides',
+ 'Playwrite NZ Guides',
+ 'Playwrite PL',
+ 'Playwrite PT',
+ 'Playwrite PE',
+ 'Playwrite PT Guides',
+ 'Playwrite PL Guides',
+ 'Playwrite TZ Guides',
+ 'Playwrite RO Guides',
+ 'Playwrite TZ',
+ 'Playwrite SK Guides',
+ 'Playwrite SK',
+ 'Playwrite RO',
+ 'Playwrite US Trad Guides',
+ 'Playwrite US Modern Guides',
+ 'Playwrite ZA',
+ 'Playwrite VN Guides',
+ 'Playwrite US Modern',
+ 'Playwrite US Trad',
+ 'Playwrite VN',
+ 'Playwrite ZA Guides',
+ 'Wavefont',
+];
diff --git a/packages/google-fonts/scripts/utils.ts b/packages/google-fonts/scripts/utils.ts
index cea134ac6bd..8090180cc35 100644
--- a/packages/google-fonts/scripts/utils.ts
+++ b/packages/google-fonts/scripts/utils.ts
@@ -1,43 +1,43 @@
-import type { Font } from "./google-fonts";
+import type {Font} from './google-fonts';
export const unquote = (str: string) =>
- str.replace(/^['"]/g, "").replace(/['"]$/g, "");
+ str.replace(/^['"]/g, '').replace(/['"]$/g, '');
// Firefox does not support numbers in fontFamily
export const replaceDigitsWithWords = (str: string): string => {
- const numWords = [
- "Zero",
- "One",
- "Two",
- "Three",
- "Four",
- "Five",
- "Six",
- "Seven",
- "Eight",
- "Nine",
- ];
- return str.replace(/\d/g, (digit) => numWords[parseInt(digit)]);
+ const numWords = [
+ 'Zero',
+ 'One',
+ 'Two',
+ 'Three',
+ 'Four',
+ 'Five',
+ 'Six',
+ 'Seven',
+ 'Eight',
+ 'Nine',
+ ];
+ return str.replace(/\d/g, (digit) => numWords[parseInt(digit)]);
};
export const quote = (str: string) => `'${str}'`;
-export const removeWhitespace = (str: string) => str.replace(/\s/g, "");
+export const removeWhitespace = (str: string) => str.replace(/\s/g, '');
export const getCssLink = (font: Font) => {
- let url = "https://fonts.googleapis.com/css2?family=";
- url += font.family.replace(/ /g, "+");
- url += ":ital,wght@";
+ let url = 'https://fonts.googleapis.com/css2?family=';
+ url += font.family.replace(/ /g, '+');
+ url += ':ital,wght@';
- let tupleList: string[] = [];
- for (const variant of font.variants) {
- const weight = variant.match(/^(regular|italic)$/)
- ? "400"
- : variant.replace(/italic/g, "");
- tupleList.push(`${Number(variant.endsWith("italic"))},${weight}`);
- }
+ let tupleList: string[] = [];
+ for (const variant of font.variants) {
+ const weight = variant.match(/^(regular|italic)$/)
+ ? '400'
+ : variant.replace(/italic/g, '');
+ tupleList.push(`${Number(variant.endsWith('italic'))},${weight}`);
+ }
- url += tupleList.sort().join(";");
+ url += tupleList.sort().join(';');
- return url;
+ return url;
};
diff --git a/packages/google-fonts/test/generate-info.test.ts b/packages/google-fonts/test/generate-info.test.ts
index 82a23c37c52..9e779452bae 100644
--- a/packages/google-fonts/test/generate-info.test.ts
+++ b/packages/google-fonts/test/generate-info.test.ts
@@ -1,5 +1,5 @@
-import { test, expect } from "bun:test";
-import { extractInfoFromCss } from "../scripts/extract-info-from-css";
+import {test, expect} from 'bun:test';
+import {extractInfoFromCss} from '../scripts/extract-info-from-css';
const testFile = `
/* latin-ext */
@@ -36,42 +36,42 @@ const testFile = `
}
`;
-test("Should extract correctly", () => {
- const data = extractInfoFromCss({
- contents: testFile,
- fontFamily: "ABeeZee",
- importName: "ABeeZee",
- url: "https://fonts.googleapis.com/css2?family=ABeeZee:ital,wght@0,400;1,400",
- version: "v22",
- });
- expect(data).toEqual({
- fontFamily: "ABeeZee",
- importName: "ABeeZee",
- version: "v22",
- url: "https://fonts.googleapis.com/css2?family=ABeeZee:ital,wght@0,400;1,400",
- unicodeRanges: {
- "latin-ext":
- "U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF",
- latin:
- "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD",
- },
- fonts: {
- italic: {
- "400": {
- "latin-ext":
- "https://fonts.gstatic.com/s/abeezee/v22/esDT31xSG-6AGleN2tCUnJ8DKpE.woff2",
- latin:
- "https://fonts.gstatic.com/s/abeezee/v22/esDT31xSG-6AGleN2tCUkp8D.woff2",
- },
- },
- normal: {
- "400": {
- "latin-ext":
- "https://fonts.gstatic.com/s/abeezee/v22/esDR31xSG-6AGleN2tukkIcH.woff2",
- latin:
- "https://fonts.gstatic.com/s/abeezee/v22/esDR31xSG-6AGleN2tWkkA.woff2",
- },
- },
- },
- });
+test('Should extract correctly', () => {
+ const data = extractInfoFromCss({
+ contents: testFile,
+ fontFamily: 'ABeeZee',
+ importName: 'ABeeZee',
+ url: 'https://fonts.googleapis.com/css2?family=ABeeZee:ital,wght@0,400;1,400',
+ version: 'v22',
+ });
+ expect(data).toEqual({
+ fontFamily: 'ABeeZee',
+ importName: 'ABeeZee',
+ version: 'v22',
+ url: 'https://fonts.googleapis.com/css2?family=ABeeZee:ital,wght@0,400;1,400',
+ unicodeRanges: {
+ 'latin-ext':
+ 'U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF',
+ latin:
+ 'U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD',
+ },
+ fonts: {
+ italic: {
+ '400': {
+ 'latin-ext':
+ 'https://fonts.gstatic.com/s/abeezee/v22/esDT31xSG-6AGleN2tCUnJ8DKpE.woff2',
+ latin:
+ 'https://fonts.gstatic.com/s/abeezee/v22/esDT31xSG-6AGleN2tCUkp8D.woff2',
+ },
+ },
+ normal: {
+ '400': {
+ 'latin-ext':
+ 'https://fonts.gstatic.com/s/abeezee/v22/esDR31xSG-6AGleN2tukkIcH.woff2',
+ latin:
+ 'https://fonts.gstatic.com/s/abeezee/v22/esDR31xSG-6AGleN2tWkkA.woff2',
+ },
+ },
+ },
+ });
});
diff --git a/packages/google-fonts/tsconfig.json b/packages/google-fonts/tsconfig.json
index 278690148d7..20f6182881f 100644
--- a/packages/google-fonts/tsconfig.json
+++ b/packages/google-fonts/tsconfig.json
@@ -1,11 +1,11 @@
{
- "extends": "../tsconfig.settings.json",
- "compilerOptions": {
- "rootDir": "./src",
- "skipLibCheck": true,
- "noUnusedLocals": true,
- "outDir": "./dist/cjs"
- },
- "include": ["./src"],
- "references": [{ "path": "../core" }]
+ "extends": "../tsconfig.settings.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "skipLibCheck": true,
+ "noUnusedLocals": true,
+ "outDir": "./dist/cjs"
+ },
+ "include": ["./src"],
+ "references": [{"path": "../core"}]
}
diff --git a/packages/install-whisper-cpp/README.md b/packages/install-whisper-cpp/README.md
index c6b3a024e6a..c71090856ea 100644
--- a/packages/install-whisper-cpp/README.md
+++ b/packages/install-whisper-cpp/README.md
@@ -1,18 +1,18 @@
# @remotion/install-whisper-cpp
-
+
Helpers for installing and using Whisper.cpp
-
+
[](https://npmcharts.com/compare/@remotion/install-whisper-cpp?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/install-whisper-cpp --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/install-whisper-cpp) for more information.
diff --git a/packages/install-whisper-cpp/package.json b/packages/install-whisper-cpp/package.json
index 621973788af..da437f74484 100644
--- a/packages/install-whisper-cpp/package.json
+++ b/packages/install-whisper-cpp/package.json
@@ -11,7 +11,7 @@
"url": "https://github.com/remotion-dev/remotion/issues"
},
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"test": "bun test src",
"make": "tsgo -d"
diff --git a/packages/install-whisper-cpp/src/test/convert-to-captions.test.ts b/packages/install-whisper-cpp/src/test/convert-to-captions.test.ts
index b2b874faf3f..3322b5c2b58 100644
--- a/packages/install-whisper-cpp/src/test/convert-to-captions.test.ts
+++ b/packages/install-whisper-cpp/src/test/convert-to-captions.test.ts
@@ -1,5 +1,5 @@
-import {createTikTokStyleCaptions} from '@remotion/captions';
import {expect, test} from 'bun:test';
+import {createTikTokStyleCaptions} from '@remotion/captions';
import {convertToCaptions} from '../convert-to-captions';
import {toCaptions} from '../to-captions';
import {examplePayload} from './example-payload';
diff --git a/packages/it-tests/.prettierignore b/packages/it-tests/.prettierignore
deleted file mode 100644
index af40199f039..00000000000
--- a/packages/it-tests/.prettierignore
+++ /dev/null
@@ -1 +0,0 @@
-src/size-benchmark/results.json
diff --git a/packages/it-tests/README.md b/packages/it-tests/README.md
index eede8e9058e..dcdd71edaf4 100644
--- a/packages/it-tests/README.md
+++ b/packages/it-tests/README.md
@@ -1,5 +1,5 @@
# @remotion/it-tests
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/it-tests/download-whisper.ts b/packages/it-tests/download-whisper.ts
index 87e24bdc659..89e642ae5e7 100644
--- a/packages/it-tests/download-whisper.ts
+++ b/packages/it-tests/download-whisper.ts
@@ -1,9 +1,9 @@
+import path from 'path';
import {
downloadWhisperModel,
installWhisperCpp,
transcribe,
} from '@remotion/install-whisper-cpp';
-import path from 'path';
const to = path.join(process.cwd(), 'whisper.cpp');
diff --git a/packages/it-tests/package.json b/packages/it-tests/package.json
index 05efd187733..033d9142b2f 100644
--- a/packages/it-tests/package.json
+++ b/packages/it-tests/package.json
@@ -10,7 +10,7 @@
"testssr": "bun test src/ssr src/bundle src/webcodecs src/templates src/monorepo --timeout 40000",
"testlambda": "exit 0",
"lint": "tsc -d",
- "formatting": "prettier src --check"
+ "formatting": "oxfmt src --check"
},
"private": true,
"devDependencies": {
diff --git a/packages/it-tests/props.json b/packages/it-tests/props.json
index 3380bed7414..3e739752250 100644
--- a/packages/it-tests/props.json
+++ b/packages/it-tests/props.json
@@ -1 +1 @@
-{"flag":true}
\ No newline at end of file
+{"flag": true}
diff --git a/packages/it-tests/pure.js b/packages/it-tests/pure.js
index c32df4d746f..75bf5080d72 100644
--- a/packages/it-tests/pure.js
+++ b/packages/it-tests/pure.js
@@ -1,563 +1,639 @@
-var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
+var __commonJS = (cb, mod) => () => (
+ mod || cb((mod = {exports: {}}).exports, mod), mod.exports
+);
// ../renderer/dist/codec.js
var require_codec = __commonJS((exports) => {
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.DEFAULT_CODEC = exports.validCodecs = undefined;
- exports.validCodecs = [
- "h264",
- "h265",
- "vp8",
- "vp9",
- "mp3",
- "aac",
- "wav",
- "prores",
- "h264-mkv",
- "h264-ts",
- "gif"
- ];
- exports.DEFAULT_CODEC = "h264";
+ Object.defineProperty(exports, '__esModule', {value: true});
+ exports.DEFAULT_CODEC = exports.validCodecs = undefined;
+ exports.validCodecs = [
+ 'h264',
+ 'h265',
+ 'vp8',
+ 'vp9',
+ 'mp3',
+ 'aac',
+ 'wav',
+ 'prores',
+ 'h264-mkv',
+ 'h264-ts',
+ 'gif',
+ ];
+ exports.DEFAULT_CODEC = 'h264';
});
// ../renderer/dist/file-extensions.js
var require_file_extensions = __commonJS((exports) => {
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.defaultFileExtensionMap = undefined;
- exports.defaultFileExtensionMap = {
- "h264-mkv": {
- default: "mkv",
- forAudioCodec: {
- "pcm-16": { possible: ["mkv"], default: "mkv" },
- mp3: { possible: ["mkv"], default: "mkv" }
- }
- },
- "h264-ts": {
- default: "ts",
- forAudioCodec: {
- "pcm-16": { possible: ["ts"], default: "ts" },
- aac: { possible: ["ts"], default: "ts" }
- }
- },
- aac: {
- default: "aac",
- forAudioCodec: {
- aac: {
- possible: ["aac", "3gp", "m4a", "m4b", "mpg", "mpeg"],
- default: "aac"
- },
- "pcm-16": {
- possible: ["wav"],
- default: "wav"
- }
- }
- },
- gif: {
- default: "gif",
- forAudioCodec: {}
- },
- h264: {
- default: "mp4",
- forAudioCodec: {
- "pcm-16": { possible: ["mkv", "mov"], default: "mkv" },
- aac: { possible: ["mp4", "mkv", "mov"], default: "mp4" },
- mp3: { possible: ["mp4", "mkv", "mov"], default: "mp4" }
- }
- },
- h265: {
- default: "mp4",
- forAudioCodec: {
- aac: { possible: ["mp4", "mkv", "hevc"], default: "mp4" },
- "pcm-16": { possible: ["mkv"], default: "mkv" }
- }
- },
- mp3: {
- default: "mp3",
- forAudioCodec: {
- mp3: { possible: ["mp3"], default: "mp3" },
- "pcm-16": { possible: ["wav"], default: "wav" }
- }
- },
- prores: {
- default: "mov",
- forAudioCodec: {
- aac: { possible: ["mov", "mkv", "mxf"], default: "mov" },
- "pcm-16": { possible: ["mov", "mkv", "mxf"], default: "mov" }
- }
- },
- vp8: {
- default: "webm",
- forAudioCodec: {
- "pcm-16": { possible: ["mkv"], default: "mkv" },
- opus: { possible: ["webm"], default: "webm" }
- }
- },
- vp9: {
- default: "webm",
- forAudioCodec: {
- "pcm-16": { possible: ["mkv"], default: "mkv" },
- opus: { possible: ["webm"], default: "webm" }
- }
- },
- wav: {
- default: "wav",
- forAudioCodec: {
- "pcm-16": { possible: ["wav"], default: "wav" }
- }
- }
- };
+ Object.defineProperty(exports, '__esModule', {value: true});
+ exports.defaultFileExtensionMap = undefined;
+ exports.defaultFileExtensionMap = {
+ 'h264-mkv': {
+ default: 'mkv',
+ forAudioCodec: {
+ 'pcm-16': {possible: ['mkv'], default: 'mkv'},
+ mp3: {possible: ['mkv'], default: 'mkv'},
+ },
+ },
+ 'h264-ts': {
+ default: 'ts',
+ forAudioCodec: {
+ 'pcm-16': {possible: ['ts'], default: 'ts'},
+ aac: {possible: ['ts'], default: 'ts'},
+ },
+ },
+ aac: {
+ default: 'aac',
+ forAudioCodec: {
+ aac: {
+ possible: ['aac', '3gp', 'm4a', 'm4b', 'mpg', 'mpeg'],
+ default: 'aac',
+ },
+ 'pcm-16': {
+ possible: ['wav'],
+ default: 'wav',
+ },
+ },
+ },
+ gif: {
+ default: 'gif',
+ forAudioCodec: {},
+ },
+ h264: {
+ default: 'mp4',
+ forAudioCodec: {
+ 'pcm-16': {possible: ['mkv', 'mov'], default: 'mkv'},
+ aac: {possible: ['mp4', 'mkv', 'mov'], default: 'mp4'},
+ mp3: {possible: ['mp4', 'mkv', 'mov'], default: 'mp4'},
+ },
+ },
+ h265: {
+ default: 'mp4',
+ forAudioCodec: {
+ aac: {possible: ['mp4', 'mkv', 'hevc'], default: 'mp4'},
+ 'pcm-16': {possible: ['mkv'], default: 'mkv'},
+ },
+ },
+ mp3: {
+ default: 'mp3',
+ forAudioCodec: {
+ mp3: {possible: ['mp3'], default: 'mp3'},
+ 'pcm-16': {possible: ['wav'], default: 'wav'},
+ },
+ },
+ prores: {
+ default: 'mov',
+ forAudioCodec: {
+ aac: {possible: ['mov', 'mkv', 'mxf'], default: 'mov'},
+ 'pcm-16': {possible: ['mov', 'mkv', 'mxf'], default: 'mov'},
+ },
+ },
+ vp8: {
+ default: 'webm',
+ forAudioCodec: {
+ 'pcm-16': {possible: ['mkv'], default: 'mkv'},
+ opus: {possible: ['webm'], default: 'webm'},
+ },
+ },
+ vp9: {
+ default: 'webm',
+ forAudioCodec: {
+ 'pcm-16': {possible: ['mkv'], default: 'mkv'},
+ opus: {possible: ['webm'], default: 'webm'},
+ },
+ },
+ wav: {
+ default: 'wav',
+ forAudioCodec: {
+ 'pcm-16': {possible: ['wav'], default: 'wav'},
+ },
+ },
+ };
});
// ../renderer/dist/get-extension-from-codec.js
var require_get_extension_from_codec = __commonJS((exports) => {
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.defaultCodecsForFileExtension = exports.makeFileExtensionMap = exports.getFileExtensionFromCodec = undefined;
- var codec_1 = require_codec();
- var file_extensions_1 = require_file_extensions();
- var getFileExtensionFromCodec = (codec, audioCodec) => {
- if (!codec_1.validCodecs.includes(codec)) {
- throw new Error(`Codec must be one of the following: ${codec_1.validCodecs.join(", ")}, but got ${codec}`);
- }
- const map = file_extensions_1.defaultFileExtensionMap[codec];
- if (audioCodec === null) {
- return map.default;
- }
- const typedAudioCodec = audioCodec;
- if (!(typedAudioCodec in map.forAudioCodec)) {
- throw new Error(`Audio codec ${typedAudioCodec} is not supported for codec ${codec}`);
- }
- return map.forAudioCodec[audioCodec].default;
- };
- exports.getFileExtensionFromCodec = getFileExtensionFromCodec;
- var makeFileExtensionMap = () => {
- const map = {};
- Object.keys(file_extensions_1.defaultFileExtensionMap).forEach((_codec) => {
- const codec = _codec;
- const fileExtMap = file_extensions_1.defaultFileExtensionMap[codec];
- const audioCodecs = Object.keys(fileExtMap.forAudioCodec);
- const possibleExtensionsForAudioCodec = audioCodecs.map((audioCodec) => fileExtMap.forAudioCodec[audioCodec].possible);
- const allPossibleExtensions = [
- fileExtMap.default,
- ...possibleExtensionsForAudioCodec.flat(1)
- ];
- for (const extension of allPossibleExtensions) {
- if (!map[extension]) {
- map[extension] = [];
- }
- if (!map[extension].includes(codec)) {
- map[extension].push(codec);
- }
- }
- });
- return map;
- };
- exports.makeFileExtensionMap = makeFileExtensionMap;
- exports.defaultCodecsForFileExtension = {
- "3gp": "aac",
- aac: "aac",
- gif: "gif",
- hevc: "h265",
- m4a: "aac",
- m4b: "aac",
- mkv: "h264-mkv",
- mov: "prores",
- mp3: "mp3",
- mp4: "h264",
- mpeg: "aac",
- mpg: "aac",
- mxf: "prores",
- wav: "wav",
- webm: "vp8",
- ts: "h264-ts"
- };
+ Object.defineProperty(exports, '__esModule', {value: true});
+ exports.defaultCodecsForFileExtension =
+ exports.makeFileExtensionMap =
+ exports.getFileExtensionFromCodec =
+ undefined;
+ var codec_1 = require_codec();
+ var file_extensions_1 = require_file_extensions();
+ var getFileExtensionFromCodec = (codec, audioCodec) => {
+ if (!codec_1.validCodecs.includes(codec)) {
+ throw new Error(
+ `Codec must be one of the following: ${codec_1.validCodecs.join(', ')}, but got ${codec}`,
+ );
+ }
+ const map = file_extensions_1.defaultFileExtensionMap[codec];
+ if (audioCodec === null) {
+ return map.default;
+ }
+ const typedAudioCodec = audioCodec;
+ if (!(typedAudioCodec in map.forAudioCodec)) {
+ throw new Error(
+ `Audio codec ${typedAudioCodec} is not supported for codec ${codec}`,
+ );
+ }
+ return map.forAudioCodec[audioCodec].default;
+ };
+ exports.getFileExtensionFromCodec = getFileExtensionFromCodec;
+ var makeFileExtensionMap = () => {
+ const map = {};
+ Object.keys(file_extensions_1.defaultFileExtensionMap).forEach((_codec) => {
+ const codec = _codec;
+ const fileExtMap = file_extensions_1.defaultFileExtensionMap[codec];
+ const audioCodecs = Object.keys(fileExtMap.forAudioCodec);
+ const possibleExtensionsForAudioCodec = audioCodecs.map(
+ (audioCodec) => fileExtMap.forAudioCodec[audioCodec].possible,
+ );
+ const allPossibleExtensions = [
+ fileExtMap.default,
+ ...possibleExtensionsForAudioCodec.flat(1),
+ ];
+ for (const extension of allPossibleExtensions) {
+ if (!map[extension]) {
+ map[extension] = [];
+ }
+ if (!map[extension].includes(codec)) {
+ map[extension].push(codec);
+ }
+ }
+ });
+ return map;
+ };
+ exports.makeFileExtensionMap = makeFileExtensionMap;
+ exports.defaultCodecsForFileExtension = {
+ '3gp': 'aac',
+ aac: 'aac',
+ gif: 'gif',
+ hevc: 'h265',
+ m4a: 'aac',
+ m4b: 'aac',
+ mkv: 'h264-mkv',
+ mov: 'prores',
+ mp3: 'mp3',
+ mp4: 'h264',
+ mpeg: 'aac',
+ mpg: 'aac',
+ mxf: 'prores',
+ wav: 'wav',
+ webm: 'vp8',
+ ts: 'h264-ts',
+ };
});
// ../renderer/dist/path-normalize.js
var require_path_normalize = __commonJS((exports) => {
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.pathNormalize = undefined;
- var SLASH = 47;
- var DOT = 46;
- var assertPath = (path) => {
- const t = typeof path;
- if (t !== "string") {
- throw new TypeError(`Expected a string, got a ${t}`);
- }
- };
- var posixNormalize = (path, allowAboveRoot) => {
- let res = "";
- let lastSegmentLength = 0;
- let lastSlash = -1;
- let dots = 0;
- let code;
- for (let i = 0;i <= path.length; ++i) {
- if (i < path.length) {
- code = path.charCodeAt(i);
- } else if (code === SLASH) {
- break;
- } else {
- code = SLASH;
- }
- if (code === SLASH) {
- if (lastSlash === i - 1 || dots === 1) {
- } else if (lastSlash !== i - 1 && dots === 2) {
- if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== DOT || res.charCodeAt(res.length - 2) !== DOT) {
- if (res.length > 2) {
- const lastSlashIndex = res.lastIndexOf("/");
- if (lastSlashIndex !== res.length - 1) {
- if (lastSlashIndex === -1) {
- res = "";
- lastSegmentLength = 0;
- } else {
- res = res.slice(0, lastSlashIndex);
- lastSegmentLength = res.length - 1 - res.lastIndexOf("/");
- }
- lastSlash = i;
- dots = 0;
- continue;
- }
- } else if (res.length === 2 || res.length === 1) {
- res = "";
- lastSegmentLength = 0;
- lastSlash = i;
- dots = 0;
- continue;
- }
- }
- if (allowAboveRoot) {
- if (res.length > 0) {
- res += "/..";
- } else {
- res = "..";
- }
- lastSegmentLength = 2;
- }
- } else {
- if (res.length > 0) {
- res += "/" + path.slice(lastSlash + 1, i);
- } else {
- res = path.slice(lastSlash + 1, i);
- }
- lastSegmentLength = i - lastSlash - 1;
- }
- lastSlash = i;
- dots = 0;
- } else if (code === DOT && dots !== -1) {
- ++dots;
- } else {
- dots = -1;
- }
- }
- return res;
- };
- var decode = (s) => {
- try {
- return decodeURIComponent(s);
- } catch (_a) {
- return s;
- }
- };
- var pathNormalize = (p) => {
- assertPath(p);
- let path = p;
- if (path.length === 0) {
- return ".";
- }
- const isAbsolute = path.charCodeAt(0) === SLASH;
- const trailingSeparator = path.charCodeAt(path.length - 1) === SLASH;
- path = decode(path);
- path = posixNormalize(path, !isAbsolute);
- if (path.length === 0 && !isAbsolute) {
- path = ".";
- }
- if (path.length > 0 && trailingSeparator) {
- path += "/";
- }
- if (isAbsolute) {
- return "/" + path;
- }
- return path;
- };
- exports.pathNormalize = pathNormalize;
+ Object.defineProperty(exports, '__esModule', {value: true});
+ exports.pathNormalize = undefined;
+ var SLASH = 47;
+ var DOT = 46;
+ var assertPath = (path) => {
+ const t = typeof path;
+ if (t !== 'string') {
+ throw new TypeError(`Expected a string, got a ${t}`);
+ }
+ };
+ var posixNormalize = (path, allowAboveRoot) => {
+ let res = '';
+ let lastSegmentLength = 0;
+ let lastSlash = -1;
+ let dots = 0;
+ let code;
+ for (let i = 0; i <= path.length; ++i) {
+ if (i < path.length) {
+ code = path.charCodeAt(i);
+ } else if (code === SLASH) {
+ break;
+ } else {
+ code = SLASH;
+ }
+ if (code === SLASH) {
+ if (lastSlash === i - 1 || dots === 1) {
+ } else if (lastSlash !== i - 1 && dots === 2) {
+ if (
+ res.length < 2 ||
+ lastSegmentLength !== 2 ||
+ res.charCodeAt(res.length - 1) !== DOT ||
+ res.charCodeAt(res.length - 2) !== DOT
+ ) {
+ if (res.length > 2) {
+ const lastSlashIndex = res.lastIndexOf('/');
+ if (lastSlashIndex !== res.length - 1) {
+ if (lastSlashIndex === -1) {
+ res = '';
+ lastSegmentLength = 0;
+ } else {
+ res = res.slice(0, lastSlashIndex);
+ lastSegmentLength = res.length - 1 - res.lastIndexOf('/');
+ }
+ lastSlash = i;
+ dots = 0;
+ continue;
+ }
+ } else if (res.length === 2 || res.length === 1) {
+ res = '';
+ lastSegmentLength = 0;
+ lastSlash = i;
+ dots = 0;
+ continue;
+ }
+ }
+ if (allowAboveRoot) {
+ if (res.length > 0) {
+ res += '/..';
+ } else {
+ res = '..';
+ }
+ lastSegmentLength = 2;
+ }
+ } else {
+ if (res.length > 0) {
+ res += '/' + path.slice(lastSlash + 1, i);
+ } else {
+ res = path.slice(lastSlash + 1, i);
+ }
+ lastSegmentLength = i - lastSlash - 1;
+ }
+ lastSlash = i;
+ dots = 0;
+ } else if (code === DOT && dots !== -1) {
+ ++dots;
+ } else {
+ dots = -1;
+ }
+ }
+ return res;
+ };
+ var decode = (s) => {
+ try {
+ return decodeURIComponent(s);
+ } catch (_a) {
+ return s;
+ }
+ };
+ var pathNormalize = (p) => {
+ assertPath(p);
+ let path = p;
+ if (path.length === 0) {
+ return '.';
+ }
+ const isAbsolute = path.charCodeAt(0) === SLASH;
+ const trailingSeparator = path.charCodeAt(path.length - 1) === SLASH;
+ path = decode(path);
+ path = posixNormalize(path, !isAbsolute);
+ if (path.length === 0 && !isAbsolute) {
+ path = '.';
+ }
+ if (path.length > 0 && trailingSeparator) {
+ path += '/';
+ }
+ if (isAbsolute) {
+ return '/' + path;
+ }
+ return path;
+ };
+ exports.pathNormalize = pathNormalize;
});
// ../renderer/dist/get-extension-of-filename.js
var require_get_extension_of_filename = __commonJS((exports) => {
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.getExtensionOfFilename = undefined;
- var path_normalize_1 = require_path_normalize();
- var getExtensionOfFilename = (filename) => {
- if (filename === null) {
- return null;
- }
- const filenameArr = (0, path_normalize_1.pathNormalize)(filename).split(".");
- const hasExtension = filenameArr.length >= 2;
- const filenameArrLength = filenameArr.length;
- const extension = hasExtension ? filenameArr[filenameArrLength - 1] : null;
- return extension;
- };
- exports.getExtensionOfFilename = getExtensionOfFilename;
+ Object.defineProperty(exports, '__esModule', {value: true});
+ exports.getExtensionOfFilename = undefined;
+ var path_normalize_1 = require_path_normalize();
+ var getExtensionOfFilename = (filename) => {
+ if (filename === null) {
+ return null;
+ }
+ const filenameArr = (0, path_normalize_1.pathNormalize)(filename).split(
+ '.',
+ );
+ const hasExtension = filenameArr.length >= 2;
+ const filenameArrLength = filenameArr.length;
+ const extension = hasExtension ? filenameArr[filenameArrLength - 1] : null;
+ return extension;
+ };
+ exports.getExtensionOfFilename = getExtensionOfFilename;
});
// ../renderer/dist/options/separate-audio.js
var require_separate_audio = __commonJS((exports) => {
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.separateAudioOption = undefined;
- var DEFAULT = null;
- var cliFlag = "separate-audio-to";
- exports.separateAudioOption = {
- cliFlag,
- description: () => `If set, the audio will not be included in the main output but rendered as a separate file at the location you pass. It is recommended to use an absolute path. If a relative path is passed, it is relative to the Remotion Root.`,
- docLink: "https://remotion.dev/docs/renderer/render-media",
- getValue: ({ commandLine }) => {
- if (commandLine[cliFlag]) {
- return {
- source: "cli",
- value: commandLine[cliFlag]
- };
- }
- return {
- source: "default",
- value: DEFAULT
- };
- },
- name: "Separate audio to",
- setConfig: () => {
- throw new Error("Not implemented");
- },
- ssrName: "separateAudioTo",
- type: "string"
- };
+ Object.defineProperty(exports, '__esModule', {value: true});
+ exports.separateAudioOption = undefined;
+ var DEFAULT = null;
+ var cliFlag = 'separate-audio-to';
+ exports.separateAudioOption = {
+ cliFlag,
+ description: () =>
+ `If set, the audio will not be included in the main output but rendered as a separate file at the location you pass. It is recommended to use an absolute path. If a relative path is passed, it is relative to the Remotion Root.`,
+ docLink: 'https://remotion.dev/docs/renderer/render-media',
+ getValue: ({commandLine}) => {
+ if (commandLine[cliFlag]) {
+ return {
+ source: 'cli',
+ value: commandLine[cliFlag],
+ };
+ }
+ return {
+ source: 'default',
+ value: DEFAULT,
+ };
+ },
+ name: 'Separate audio to',
+ setConfig: () => {
+ throw new Error('Not implemented');
+ },
+ ssrName: 'separateAudioTo',
+ type: 'string',
+ };
});
// ../renderer/dist/options/audio-codec.js
var require_audio_codec = __commonJS((exports) => {
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.audioCodecOption = exports.getDefaultAudioCodec = exports.resolveAudioCodec = exports.getExtensionFromAudioCodec = exports.defaultAudioCodecs = exports.mapAudioCodecToFfmpegAudioCodecName = exports.supportedAudioCodecs = exports.isAudioCodec = exports.validAudioCodecs = undefined;
- var separate_audio_1 = require_separate_audio();
- exports.validAudioCodecs = ["pcm-16", "aac", "mp3", "opus"];
- var isAudioCodec = (codec) => {
- return codec === "mp3" || codec === "aac" || codec === "wav";
- };
- exports.isAudioCodec = isAudioCodec;
- exports.supportedAudioCodecs = {
- h264: ["aac", "pcm-16", "mp3"],
- "h264-mkv": ["pcm-16", "mp3"],
- "h264-ts": ["pcm-16", "aac"],
- aac: ["aac", "pcm-16"],
- avi: [],
- gif: [],
- h265: ["aac", "pcm-16"],
- mp3: ["mp3", "pcm-16"],
- prores: ["aac", "pcm-16"],
- vp8: ["opus", "pcm-16"],
- vp9: ["opus", "pcm-16"],
- wav: ["pcm-16"]
- };
- var _satisfies = exports.supportedAudioCodecs;
- if (_satisfies) {
- }
- var mapAudioCodecToFfmpegAudioCodecName = (audioCodec) => {
- if (audioCodec === "aac") {
- return "libfdk_aac";
- }
- if (audioCodec === "mp3") {
- return "libmp3lame";
- }
- if (audioCodec === "opus") {
- return "libopus";
- }
- if (audioCodec === "pcm-16") {
- return "pcm_s16le";
- }
- throw new Error("unknown audio codec: " + audioCodec);
- };
- exports.mapAudioCodecToFfmpegAudioCodecName = mapAudioCodecToFfmpegAudioCodecName;
- var cliFlag = "audio-codec";
- var ssrName = "audioCodec";
- exports.defaultAudioCodecs = {
- "h264-mkv": {
- lossless: "pcm-16",
- compressed: "pcm-16"
- },
- "h264-ts": {
- lossless: "pcm-16",
- compressed: "aac"
- },
- aac: {
- lossless: "pcm-16",
- compressed: "aac"
- },
- gif: {
- lossless: null,
- compressed: null
- },
- h264: {
- lossless: "pcm-16",
- compressed: "aac"
- },
- h265: {
- lossless: "pcm-16",
- compressed: "aac"
- },
- mp3: {
- lossless: "pcm-16",
- compressed: "mp3"
- },
- prores: {
- lossless: "pcm-16",
- compressed: "pcm-16"
- },
- vp8: {
- lossless: "pcm-16",
- compressed: "opus"
- },
- vp9: {
- lossless: "pcm-16",
- compressed: "opus"
- },
- wav: {
- lossless: "pcm-16",
- compressed: "pcm-16"
- }
- };
- var extensionMap = {
- aac: "aac",
- mp3: "mp3",
- opus: "opus",
- "pcm-16": "wav"
- };
- var getExtensionFromAudioCodec = (audioCodec) => {
- if (extensionMap[audioCodec]) {
- return extensionMap[audioCodec];
- }
- throw new Error(`Unsupported audio codec: ${audioCodec}`);
- };
- exports.getExtensionFromAudioCodec = getExtensionFromAudioCodec;
- var resolveAudioCodec = ({ codec, setting, preferLossless, separateAudioTo }) => {
- let derivedFromSeparateAudioToExtension = null;
- if (separateAudioTo) {
- const extension = separateAudioTo.split(".").pop();
- for (const [key, value] of Object.entries(extensionMap)) {
- if (value === extension) {
- derivedFromSeparateAudioToExtension = key;
- if (!exports.supportedAudioCodecs[codec].includes(derivedFromSeparateAudioToExtension) && derivedFromSeparateAudioToExtension) {
- throw new Error(`The codec is ${codec} but the audio codec derived from --${separate_audio_1.separateAudioOption.cliFlag} is ${derivedFromSeparateAudioToExtension}. The only supported codecs are: ${exports.supportedAudioCodecs[codec].join(", ")}`);
- }
- }
- }
- }
- if (preferLossless) {
- const selected = (0, exports.getDefaultAudioCodec)({ codec, preferLossless });
- if (derivedFromSeparateAudioToExtension && selected !== derivedFromSeparateAudioToExtension) {
- throw new Error(`The audio codec derived from --${separate_audio_1.separateAudioOption.cliFlag} is ${derivedFromSeparateAudioToExtension}, but does not match the audio codec derived from the "Prefer lossless" option (${selected}). Remove any conflicting options.`);
- }
- return selected;
- }
- if (setting === null) {
- if (derivedFromSeparateAudioToExtension) {
- return derivedFromSeparateAudioToExtension;
- }
- return (0, exports.getDefaultAudioCodec)({ codec, preferLossless });
- }
- if (derivedFromSeparateAudioToExtension !== setting && derivedFromSeparateAudioToExtension) {
- throw new Error(`The audio codec derived from --${separate_audio_1.separateAudioOption.cliFlag} is ${derivedFromSeparateAudioToExtension}, but does not match the audio codec derived from your ${exports.audioCodecOption.name} setting (${setting}). Remove any conflicting options.`);
- }
- return setting;
- };
- exports.resolveAudioCodec = resolveAudioCodec;
- var getDefaultAudioCodec = ({ codec, preferLossless }) => {
- return exports.defaultAudioCodecs[codec][preferLossless ? "lossless" : "compressed"];
- };
- exports.getDefaultAudioCodec = getDefaultAudioCodec;
- var _audioCodec = null;
- exports.audioCodecOption = {
- cliFlag,
- setConfig: (audioCodec) => {
- if (audioCodec === null) {
- _audioCodec = null;
- return;
- }
- if (!exports.validAudioCodecs.includes(audioCodec)) {
- throw new Error(`Audio codec must be one of the following: ${exports.validAudioCodecs.join(", ")}, but got ${audioCodec}`);
- }
- _audioCodec = audioCodec;
- },
- getValue: ({ commandLine }) => {
- if (commandLine[cliFlag]) {
- const codec = commandLine[cliFlag];
- if (!exports.validAudioCodecs.includes(commandLine[cliFlag])) {
- throw new Error(`Audio codec must be one of the following: ${exports.validAudioCodecs.join(", ")}, but got ${codec}`);
- }
- return {
- source: "cli",
- value: commandLine[cliFlag]
- };
- }
- if (_audioCodec !== null) {
- return {
- source: "config",
- value: _audioCodec
- };
- }
- return {
- source: "default",
- value: null
- };
- },
- description: () => `Set the format of the audio that is embedded in the video. Not all codec and audio codec combinations are supported and certain combinations require a certain file extension and container format. See the table in the docs to see possible combinations.`,
- docLink: "https://www.remotion.dev/docs/encoding/#audio-codec",
- name: "Audio Codec",
- ssrName,
- type: "aac"
- };
+ Object.defineProperty(exports, '__esModule', {value: true});
+ exports.audioCodecOption =
+ exports.getDefaultAudioCodec =
+ exports.resolveAudioCodec =
+ exports.getExtensionFromAudioCodec =
+ exports.defaultAudioCodecs =
+ exports.mapAudioCodecToFfmpegAudioCodecName =
+ exports.supportedAudioCodecs =
+ exports.isAudioCodec =
+ exports.validAudioCodecs =
+ undefined;
+ var separate_audio_1 = require_separate_audio();
+ exports.validAudioCodecs = ['pcm-16', 'aac', 'mp3', 'opus'];
+ var isAudioCodec = (codec) => {
+ return codec === 'mp3' || codec === 'aac' || codec === 'wav';
+ };
+ exports.isAudioCodec = isAudioCodec;
+ exports.supportedAudioCodecs = {
+ h264: ['aac', 'pcm-16', 'mp3'],
+ 'h264-mkv': ['pcm-16', 'mp3'],
+ 'h264-ts': ['pcm-16', 'aac'],
+ aac: ['aac', 'pcm-16'],
+ avi: [],
+ gif: [],
+ h265: ['aac', 'pcm-16'],
+ mp3: ['mp3', 'pcm-16'],
+ prores: ['aac', 'pcm-16'],
+ vp8: ['opus', 'pcm-16'],
+ vp9: ['opus', 'pcm-16'],
+ wav: ['pcm-16'],
+ };
+ var _satisfies = exports.supportedAudioCodecs;
+ if (_satisfies) {
+ }
+ var mapAudioCodecToFfmpegAudioCodecName = (audioCodec) => {
+ if (audioCodec === 'aac') {
+ return 'libfdk_aac';
+ }
+ if (audioCodec === 'mp3') {
+ return 'libmp3lame';
+ }
+ if (audioCodec === 'opus') {
+ return 'libopus';
+ }
+ if (audioCodec === 'pcm-16') {
+ return 'pcm_s16le';
+ }
+ throw new Error('unknown audio codec: ' + audioCodec);
+ };
+ exports.mapAudioCodecToFfmpegAudioCodecName =
+ mapAudioCodecToFfmpegAudioCodecName;
+ var cliFlag = 'audio-codec';
+ var ssrName = 'audioCodec';
+ exports.defaultAudioCodecs = {
+ 'h264-mkv': {
+ lossless: 'pcm-16',
+ compressed: 'pcm-16',
+ },
+ 'h264-ts': {
+ lossless: 'pcm-16',
+ compressed: 'aac',
+ },
+ aac: {
+ lossless: 'pcm-16',
+ compressed: 'aac',
+ },
+ gif: {
+ lossless: null,
+ compressed: null,
+ },
+ h264: {
+ lossless: 'pcm-16',
+ compressed: 'aac',
+ },
+ h265: {
+ lossless: 'pcm-16',
+ compressed: 'aac',
+ },
+ mp3: {
+ lossless: 'pcm-16',
+ compressed: 'mp3',
+ },
+ prores: {
+ lossless: 'pcm-16',
+ compressed: 'pcm-16',
+ },
+ vp8: {
+ lossless: 'pcm-16',
+ compressed: 'opus',
+ },
+ vp9: {
+ lossless: 'pcm-16',
+ compressed: 'opus',
+ },
+ wav: {
+ lossless: 'pcm-16',
+ compressed: 'pcm-16',
+ },
+ };
+ var extensionMap = {
+ aac: 'aac',
+ mp3: 'mp3',
+ opus: 'opus',
+ 'pcm-16': 'wav',
+ };
+ var getExtensionFromAudioCodec = (audioCodec) => {
+ if (extensionMap[audioCodec]) {
+ return extensionMap[audioCodec];
+ }
+ throw new Error(`Unsupported audio codec: ${audioCodec}`);
+ };
+ exports.getExtensionFromAudioCodec = getExtensionFromAudioCodec;
+ var resolveAudioCodec = ({
+ codec,
+ setting,
+ preferLossless,
+ separateAudioTo,
+ }) => {
+ let derivedFromSeparateAudioToExtension = null;
+ if (separateAudioTo) {
+ const extension = separateAudioTo.split('.').pop();
+ for (const [key, value] of Object.entries(extensionMap)) {
+ if (value === extension) {
+ derivedFromSeparateAudioToExtension = key;
+ if (
+ !exports.supportedAudioCodecs[codec].includes(
+ derivedFromSeparateAudioToExtension,
+ ) &&
+ derivedFromSeparateAudioToExtension
+ ) {
+ throw new Error(
+ `The codec is ${codec} but the audio codec derived from --${separate_audio_1.separateAudioOption.cliFlag} is ${derivedFromSeparateAudioToExtension}. The only supported codecs are: ${exports.supportedAudioCodecs[codec].join(', ')}`,
+ );
+ }
+ }
+ }
+ }
+ if (preferLossless) {
+ const selected = (0, exports.getDefaultAudioCodec)({
+ codec,
+ preferLossless,
+ });
+ if (
+ derivedFromSeparateAudioToExtension &&
+ selected !== derivedFromSeparateAudioToExtension
+ ) {
+ throw new Error(
+ `The audio codec derived from --${separate_audio_1.separateAudioOption.cliFlag} is ${derivedFromSeparateAudioToExtension}, but does not match the audio codec derived from the "Prefer lossless" option (${selected}). Remove any conflicting options.`,
+ );
+ }
+ return selected;
+ }
+ if (setting === null) {
+ if (derivedFromSeparateAudioToExtension) {
+ return derivedFromSeparateAudioToExtension;
+ }
+ return (0, exports.getDefaultAudioCodec)({codec, preferLossless});
+ }
+ if (
+ derivedFromSeparateAudioToExtension !== setting &&
+ derivedFromSeparateAudioToExtension
+ ) {
+ throw new Error(
+ `The audio codec derived from --${separate_audio_1.separateAudioOption.cliFlag} is ${derivedFromSeparateAudioToExtension}, but does not match the audio codec derived from your ${exports.audioCodecOption.name} setting (${setting}). Remove any conflicting options.`,
+ );
+ }
+ return setting;
+ };
+ exports.resolveAudioCodec = resolveAudioCodec;
+ var getDefaultAudioCodec = ({codec, preferLossless}) => {
+ return exports.defaultAudioCodecs[codec][
+ preferLossless ? 'lossless' : 'compressed'
+ ];
+ };
+ exports.getDefaultAudioCodec = getDefaultAudioCodec;
+ var _audioCodec = null;
+ exports.audioCodecOption = {
+ cliFlag,
+ setConfig: (audioCodec) => {
+ if (audioCodec === null) {
+ _audioCodec = null;
+ return;
+ }
+ if (!exports.validAudioCodecs.includes(audioCodec)) {
+ throw new Error(
+ `Audio codec must be one of the following: ${exports.validAudioCodecs.join(', ')}, but got ${audioCodec}`,
+ );
+ }
+ _audioCodec = audioCodec;
+ },
+ getValue: ({commandLine}) => {
+ if (commandLine[cliFlag]) {
+ const codec = commandLine[cliFlag];
+ if (!exports.validAudioCodecs.includes(commandLine[cliFlag])) {
+ throw new Error(
+ `Audio codec must be one of the following: ${exports.validAudioCodecs.join(', ')}, but got ${codec}`,
+ );
+ }
+ return {
+ source: 'cli',
+ value: commandLine[cliFlag],
+ };
+ }
+ if (_audioCodec !== null) {
+ return {
+ source: 'config',
+ value: _audioCodec,
+ };
+ }
+ return {
+ source: 'default',
+ value: null,
+ };
+ },
+ description: () =>
+ `Set the format of the audio that is embedded in the video. Not all codec and audio codec combinations are supported and certain combinations require a certain file extension and container format. See the table in the docs to see possible combinations.`,
+ docLink: 'https://www.remotion.dev/docs/encoding/#audio-codec',
+ name: 'Audio Codec',
+ ssrName,
+ type: 'aac',
+ };
});
// ../renderer/dist/validate-output-filename.js
var require_validate_output_filename = __commonJS((exports) => {
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.validateOutputFilename = undefined;
- var file_extensions_1 = require_file_extensions();
- var audio_codec_1 = require_audio_codec();
- var validateOutputFilename = ({ codec, audioCodecSetting, extension, preferLossless, separateAudioTo }) => {
- if (!file_extensions_1.defaultFileExtensionMap[codec]) {
- throw new TypeError(`The codec "${codec}" is not supported. Supported codecs are: ${Object.keys(file_extensions_1.defaultFileExtensionMap).join(", ")}`);
- }
- const map = file_extensions_1.defaultFileExtensionMap[codec];
- const resolvedAudioCodec = (0, audio_codec_1.resolveAudioCodec)({
- codec,
- preferLossless,
- setting: audioCodecSetting,
- separateAudioTo
- });
- if (resolvedAudioCodec === null) {
- if (extension !== map.default) {
- throw new TypeError(`When using the ${codec} codec, the output filename must end in .${map.default}.`);
- }
- return;
- }
- if (!(resolvedAudioCodec in map.forAudioCodec)) {
- throw new Error(`Audio codec ${resolvedAudioCodec} is not supported for codec ${codec}`);
- }
- const acceptableExtensions = map.forAudioCodec[resolvedAudioCodec].possible;
- if (!acceptableExtensions.includes(extension) && !separateAudioTo) {
- throw new TypeError(`When using the ${codec} codec with the ${resolvedAudioCodec} audio codec, the output filename must end in one of the following: ${acceptableExtensions.join(", ")}.`);
- }
- };
- exports.validateOutputFilename = validateOutputFilename;
+ Object.defineProperty(exports, '__esModule', {value: true});
+ exports.validateOutputFilename = undefined;
+ var file_extensions_1 = require_file_extensions();
+ var audio_codec_1 = require_audio_codec();
+ var validateOutputFilename = ({
+ codec,
+ audioCodecSetting,
+ extension,
+ preferLossless,
+ separateAudioTo,
+ }) => {
+ if (!file_extensions_1.defaultFileExtensionMap[codec]) {
+ throw new TypeError(
+ `The codec "${codec}" is not supported. Supported codecs are: ${Object.keys(file_extensions_1.defaultFileExtensionMap).join(', ')}`,
+ );
+ }
+ const map = file_extensions_1.defaultFileExtensionMap[codec];
+ const resolvedAudioCodec = (0, audio_codec_1.resolveAudioCodec)({
+ codec,
+ preferLossless,
+ setting: audioCodecSetting,
+ separateAudioTo,
+ });
+ if (resolvedAudioCodec === null) {
+ if (extension !== map.default) {
+ throw new TypeError(
+ `When using the ${codec} codec, the output filename must end in .${map.default}.`,
+ );
+ }
+ return;
+ }
+ if (!(resolvedAudioCodec in map.forAudioCodec)) {
+ throw new Error(
+ `Audio codec ${resolvedAudioCodec} is not supported for codec ${codec}`,
+ );
+ }
+ const acceptableExtensions = map.forAudioCodec[resolvedAudioCodec].possible;
+ if (!acceptableExtensions.includes(extension) && !separateAudioTo) {
+ throw new TypeError(
+ `When using the ${codec} codec with the ${resolvedAudioCodec} audio codec, the output filename must end in one of the following: ${acceptableExtensions.join(', ')}.`,
+ );
+ }
+ };
+ exports.validateOutputFilename = validateOutputFilename;
});
// ../renderer/dist/pure.js
var require_pure = __commonJS((exports) => {
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.NoReactAPIs = undefined;
- var get_extension_from_codec_1 = require_get_extension_from_codec();
- var get_extension_of_filename_1 = require_get_extension_of_filename();
- var validate_output_filename_1 = require_validate_output_filename();
- exports.NoReactAPIs = {
- getExtensionOfFilename: get_extension_of_filename_1.getExtensionOfFilename,
- getFileExtensionFromCodec: get_extension_from_codec_1.getFileExtensionFromCodec,
- validateOutputFilename: validate_output_filename_1.validateOutputFilename
- };
+ Object.defineProperty(exports, '__esModule', {value: true});
+ exports.NoReactAPIs = undefined;
+ var get_extension_from_codec_1 = require_get_extension_from_codec();
+ var get_extension_of_filename_1 = require_get_extension_of_filename();
+ var validate_output_filename_1 = require_validate_output_filename();
+ exports.NoReactAPIs = {
+ getExtensionOfFilename: get_extension_of_filename_1.getExtensionOfFilename,
+ getFileExtensionFromCodec:
+ get_extension_from_codec_1.getFileExtensionFromCodec,
+ validateOutputFilename: validate_output_filename_1.validateOutputFilename,
+ };
});
export default require_pure();
diff --git a/packages/it-tests/src/bundle/bundle-studio.test.ts b/packages/it-tests/src/bundle/bundle-studio.test.ts
index eb07b23f4c0..f1e8fc9c653 100644
--- a/packages/it-tests/src/bundle/bundle-studio.test.ts
+++ b/packages/it-tests/src/bundle/bundle-studio.test.ts
@@ -1,7 +1,7 @@
-import {RenderInternals, openBrowser} from '@remotion/renderer';
import {expect, test} from 'bun:test';
import {existsSync, readFileSync} from 'fs';
import path from 'path';
+import {RenderInternals, openBrowser} from '@remotion/renderer';
test(
'Bundle studio',
diff --git a/packages/it-tests/src/cloudrun/cloudrun-browser-bundle.test.ts b/packages/it-tests/src/cloudrun/cloudrun-browser-bundle.test.ts
index b77c6fb7d71..158f4d6319a 100644
--- a/packages/it-tests/src/cloudrun/cloudrun-browser-bundle.test.ts
+++ b/packages/it-tests/src/cloudrun/cloudrun-browser-bundle.test.ts
@@ -1,8 +1,8 @@
-import {BundlerInternals} from '@remotion/bundler';
import {describe, expect, test} from 'bun:test';
import fs from 'fs';
import {tmpdir} from 'os';
import path from 'path';
+import {BundlerInternals} from '@remotion/bundler';
test('Should not be able to bundle @remotion/cloudrun directly', async () => {
expect(() =>
diff --git a/packages/it-tests/src/codemods/codemods.test.ts b/packages/it-tests/src/codemods/codemods.test.ts
index 44ae16b1c60..18b6071dd58 100644
--- a/packages/it-tests/src/codemods/codemods.test.ts
+++ b/packages/it-tests/src/codemods/codemods.test.ts
@@ -1,7 +1,7 @@
-import {StudioServerInternals} from '@remotion/studio-server';
import {expect, test} from 'bun:test';
import {readFileSync} from 'fs';
import {resolve} from 'path';
+import {StudioServerInternals} from '@remotion/studio-server';
const rootFile = resolve(
__dirname,
diff --git a/packages/it-tests/src/codemods/visual-controls.test.ts b/packages/it-tests/src/codemods/visual-controls.test.ts
index b20e55aaab5..8282c2b5805 100644
--- a/packages/it-tests/src/codemods/visual-controls.test.ts
+++ b/packages/it-tests/src/codemods/visual-controls.test.ts
@@ -1,5 +1,5 @@
-import {StudioServerInternals} from '@remotion/studio-server';
import {expect, test} from 'bun:test';
+import {StudioServerInternals} from '@remotion/studio-server';
const contents = `
import {makeTransform, matrix3d} from '@remotion/animation-utils';
diff --git a/packages/it-tests/src/lambda/lambda-browser-bundle.test.ts b/packages/it-tests/src/lambda/lambda-browser-bundle.test.ts
index aed41484b8f..53e6d4f29f8 100644
--- a/packages/it-tests/src/lambda/lambda-browser-bundle.test.ts
+++ b/packages/it-tests/src/lambda/lambda-browser-bundle.test.ts
@@ -1,8 +1,8 @@
-import {BundlerInternals} from '@remotion/bundler';
import {describe, expect, test} from 'bun:test';
import fs from 'fs';
import {tmpdir} from 'os';
import path from 'path';
+import {BundlerInternals} from '@remotion/bundler';
test('Should not be able to bundle @remotion/lambda directly', async () => {
expect(() =>
diff --git a/packages/it-tests/src/lambda/lambda-integration.test.ts b/packages/it-tests/src/lambda/lambda-integration.test.ts
index fed853826b5..25101653986 100644
--- a/packages/it-tests/src/lambda/lambda-integration.test.ts
+++ b/packages/it-tests/src/lambda/lambda-integration.test.ts
@@ -1,6 +1,6 @@
import {expect, test} from 'bun:test';
-import execa from 'execa';
import path from 'path';
+import execa from 'execa';
test('Should be able to call pnpm exec remotion lambda', async () => {
const task = await execa('bun', ['x', 'remotion', 'lambda'], {
diff --git a/packages/it-tests/src/monorepo/cli-versions.test.ts b/packages/it-tests/src/monorepo/cli-versions.test.ts
index bdf69449602..e84201ab97d 100644
--- a/packages/it-tests/src/monorepo/cli-versions.test.ts
+++ b/packages/it-tests/src/monorepo/cli-versions.test.ts
@@ -1,6 +1,6 @@
-import {$} from 'bun';
import {expect, test} from 'bun:test';
import path from 'node:path';
+import {$} from 'bun';
import {VERSION} from 'remotion';
test('should return list of versions', async () => {
diff --git a/packages/it-tests/src/monorepo/get-all-packages.ts b/packages/it-tests/src/monorepo/get-all-packages.ts
index 37b858a3af2..a54a7384099 100644
--- a/packages/it-tests/src/monorepo/get-all-packages.ts
+++ b/packages/it-tests/src/monorepo/get-all-packages.ts
@@ -1,8 +1,8 @@
-import {Pkgs, packages} from '@remotion/studio-shared';
-import {CreateVideoInternals} from 'create-video';
import {existsSync, lstatSync, readdirSync, writeFileSync} from 'fs';
import {readFileSync} from 'node:fs';
import path from 'path';
+import {Pkgs, packages} from '@remotion/studio-shared';
+import {CreateVideoInternals} from 'create-video';
export const getAllPackages = () => {
const pkgDir = path.join(__dirname, '..', '..', '..');
diff --git a/packages/it-tests/src/monorepo/go-package.test.ts b/packages/it-tests/src/monorepo/go-package.test.ts
index 073c95c5e1e..5e0e94b379a 100644
--- a/packages/it-tests/src/monorepo/go-package.test.ts
+++ b/packages/it-tests/src/monorepo/go-package.test.ts
@@ -1,8 +1,8 @@
-import {LambdaClientInternals} from '@remotion/lambda-client';
import {expect, test} from 'bun:test';
import {execSync} from 'child_process';
import {readFileSync, writeFileSync} from 'fs';
import path from 'path';
+import {LambdaClientInternals} from '@remotion/lambda-client';
test('Set the right version for gotest', () => {
const referenceVersion = readFileSync(
diff --git a/packages/it-tests/src/monorepo/no-dev-files.test.ts b/packages/it-tests/src/monorepo/no-dev-files.test.ts
index 674bca1ce61..14ebec10691 100644
--- a/packages/it-tests/src/monorepo/no-dev-files.test.ts
+++ b/packages/it-tests/src/monorepo/no-dev-files.test.ts
@@ -1,6 +1,6 @@
-import {$} from 'bun';
import {test} from 'bun:test';
import path from 'path';
+import {$} from 'bun';
import {getAllPackages} from './get-all-packages';
const packages = getAllPackages();
diff --git a/packages/it-tests/src/monorepo/package-metadata.test.ts b/packages/it-tests/src/monorepo/package-metadata.test.ts
index 5944fd6f440..14339ffa734 100644
--- a/packages/it-tests/src/monorepo/package-metadata.test.ts
+++ b/packages/it-tests/src/monorepo/package-metadata.test.ts
@@ -1,7 +1,7 @@
-import {Pkgs, apiDocs, descriptions} from '@remotion/studio-shared';
import {expect, test} from 'bun:test';
import {writeFileSync} from 'fs';
import {join} from 'path';
+import {Pkgs, apiDocs, descriptions} from '@remotion/studio-shared';
import {getAllPackages, updatePackageJson} from './get-all-packages';
test('All packages should have a repository field', () => {
diff --git a/packages/it-tests/src/monorepo/package-sync.test.ts b/packages/it-tests/src/monorepo/package-sync.test.ts
index 743c2b146a5..d001892f55d 100644
--- a/packages/it-tests/src/monorepo/package-sync.test.ts
+++ b/packages/it-tests/src/monorepo/package-sync.test.ts
@@ -1,9 +1,9 @@
-import {CliInternals} from '@remotion/cli';
-import {packages} from '@remotion/studio-shared';
import {expect, test} from 'bun:test';
-import {CreateVideoInternals} from 'create-video';
import {writeFileSync} from 'node:fs';
import path from 'node:path';
+import {CliInternals} from '@remotion/cli';
+import {packages} from '@remotion/studio-shared';
+import {CreateVideoInternals} from 'create-video';
test('create-video and cli should have the same list of packages', () => {
const list1 = path.resolve(
diff --git a/packages/it-tests/src/monorepo/php-package.test.ts b/packages/it-tests/src/monorepo/php-package.test.ts
index db318b002e7..f2a635e40c3 100644
--- a/packages/it-tests/src/monorepo/php-package.test.ts
+++ b/packages/it-tests/src/monorepo/php-package.test.ts
@@ -1,9 +1,9 @@
-import {LambdaClientInternals} from '@remotion/lambda-client';
-import {$} from 'bun';
import {beforeAll, describe, expect, test} from 'bun:test';
import {execSync} from 'child_process';
import {readFileSync, writeFileSync} from 'fs';
import path from 'path';
+import {LambdaClientInternals} from '@remotion/lambda-client';
+import {$} from 'bun';
const referenceVersion = readFileSync(
path.join(process.cwd(), '..', 'core', 'package.json'),
diff --git a/packages/it-tests/src/monorepo/python-package.test.ts b/packages/it-tests/src/monorepo/python-package.test.ts
index c31bb3a7921..8fe86adf70b 100644
--- a/packages/it-tests/src/monorepo/python-package.test.ts
+++ b/packages/it-tests/src/monorepo/python-package.test.ts
@@ -1,8 +1,8 @@
-import {LambdaClientInternals} from '@remotion/lambda-client';
import {beforeAll, expect, test} from 'bun:test';
import {execSync} from 'child_process';
import {readFileSync, writeFileSync} from 'fs';
import path from 'path';
+import {LambdaClientInternals} from '@remotion/lambda-client';
const PYTHON_OUTPUT_MARKER = 10;
const referenceVersion = readFileSync(
diff --git a/packages/it-tests/src/monorepo/ruby-package.test.ts b/packages/it-tests/src/monorepo/ruby-package.test.ts
index 38475b71617..5f905d91e78 100644
--- a/packages/it-tests/src/monorepo/ruby-package.test.ts
+++ b/packages/it-tests/src/monorepo/ruby-package.test.ts
@@ -1,8 +1,8 @@
-import {LambdaClientInternals} from '@remotion/lambda-client';
import {beforeAll, expect, test} from 'bun:test';
import {execSync} from 'child_process';
import fs from 'fs';
import path from 'path';
+import {LambdaClientInternals} from '@remotion/lambda-client';
import {VERSION} from 'remotion';
const rubySdk = path.join(__dirname, '..', '..', '..', 'lambda-ruby');
diff --git a/packages/it-tests/src/monorepo/statistics-file.test.ts b/packages/it-tests/src/monorepo/statistics-file.test.ts
index 93f5326a19b..8a7dd78afe5 100644
--- a/packages/it-tests/src/monorepo/statistics-file.test.ts
+++ b/packages/it-tests/src/monorepo/statistics-file.test.ts
@@ -1,7 +1,7 @@
-import {Pkgs, descriptions} from '@remotion/studio-shared';
import {expect, test} from 'bun:test';
import {writeFileSync} from 'fs';
import {join} from 'path';
+import {Pkgs, descriptions} from '@remotion/studio-shared';
import {getAllPackages} from './get-all-packages';
test('Should make a STATS.md file', () => {
diff --git a/packages/it-tests/src/node-version/media-parser.mjs b/packages/it-tests/src/node-version/media-parser.mjs
index 5749bfd2bf1..57731afcde6 100644
--- a/packages/it-tests/src/node-version/media-parser.mjs
+++ b/packages/it-tests/src/node-version/media-parser.mjs
@@ -1,8 +1,8 @@
+import assert from 'node:assert';
+import {test} from 'node:test';
import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '@remotion/media-parser';
import {nodeReader} from '@remotion/media-parser/node';
-import assert from 'node:assert';
-import {test} from 'node:test';
const major = parseInt(process.version.split('.')[0].slice(1));
if (major > 16) {
diff --git a/packages/it-tests/src/rendering/base64-audio.test.ts b/packages/it-tests/src/rendering/base64-audio.test.ts
index 3cda23a36f9..5aa2ddc8c6c 100644
--- a/packages/it-tests/src/rendering/base64-audio.test.ts
+++ b/packages/it-tests/src/rendering/base64-audio.test.ts
@@ -1,8 +1,8 @@
-import {RenderInternals} from '@remotion/renderer';
import {afterEach, beforeEach, expect, test} from 'bun:test';
-import execa from 'execa';
import fs from 'fs';
import path from 'path';
+import {RenderInternals} from '@remotion/renderer';
+import execa from 'execa';
const outputPath = path.join(process.cwd(), 'packages/example/out.mp3');
diff --git a/packages/it-tests/src/rendering/bundle-renderer.test.ts b/packages/it-tests/src/rendering/bundle-renderer.test.ts
index 14d85108d19..0f7c1a8b428 100644
--- a/packages/it-tests/src/rendering/bundle-renderer.test.ts
+++ b/packages/it-tests/src/rendering/bundle-renderer.test.ts
@@ -1,11 +1,11 @@
-import {BundlerInternals} from '@remotion/bundler';
-import {exampleVideos} from '@remotion/example-videos';
-import {RenderInternals} from '@remotion/renderer';
import {expect, test} from 'bun:test';
import {execSync} from 'node:child_process';
import {copyFileSync, cpSync, readdirSync, rmSync} from 'node:fs';
import {tmpdir} from 'node:os';
import path from 'node:path';
+import {BundlerInternals} from '@remotion/bundler';
+import {exampleVideos} from '@remotion/example-videos';
+import {RenderInternals} from '@remotion/renderer';
test(
'Should be able to bundle the renderer',
diff --git a/packages/it-tests/src/rendering/call-ffmpeg-from-node-modules.test.ts b/packages/it-tests/src/rendering/call-ffmpeg-from-node-modules.test.ts
index f3aa933ea78..3fc7ac2fc41 100644
--- a/packages/it-tests/src/rendering/call-ffmpeg-from-node-modules.test.ts
+++ b/packages/it-tests/src/rendering/call-ffmpeg-from-node-modules.test.ts
@@ -1,7 +1,7 @@
-import {RenderInternals} from '@remotion/renderer';
import {expect, test} from 'bun:test';
import {execSync} from 'child_process';
import path from 'path';
+import {RenderInternals} from '@remotion/renderer';
test('Should be able to call ffmpeg from node_modules (not officially supported)', async () => {
const binary = RenderInternals.getExecutablePath({
diff --git a/packages/it-tests/src/rendering/cancel-render.test.ts b/packages/it-tests/src/rendering/cancel-render.test.ts
index ad7e2755885..eb68ff3f66c 100644
--- a/packages/it-tests/src/rendering/cancel-render.test.ts
+++ b/packages/it-tests/src/rendering/cancel-render.test.ts
@@ -1,7 +1,7 @@
import {afterEach, beforeEach, expect, test} from 'bun:test';
-import execa from 'execa';
import fs from 'fs';
import path from 'path';
+import execa from 'execa';
const outputPath = path.join(process.cwd(), 'packages/example/out-cancel.mp4');
diff --git a/packages/it-tests/src/rendering/frame-accuracy-gif.test.ts b/packages/it-tests/src/rendering/frame-accuracy-gif.test.ts
index ae3112c2f22..293f7bd8148 100644
--- a/packages/it-tests/src/rendering/frame-accuracy-gif.test.ts
+++ b/packages/it-tests/src/rendering/frame-accuracy-gif.test.ts
@@ -1,9 +1,9 @@
-import {RenderInternals} from '@remotion/renderer';
import {expect, test} from 'bun:test';
-import execa from 'execa';
import fs from 'fs';
import os from 'os';
import path from 'path';
+import {RenderInternals} from '@remotion/renderer';
+import execa from 'execa';
import {random} from 'remotion';
import sharp from 'sharp';
diff --git a/packages/it-tests/src/rendering/get-compositions.test.ts b/packages/it-tests/src/rendering/get-compositions.test.ts
index 542672b3cfc..54d6caaac5e 100644
--- a/packages/it-tests/src/rendering/get-compositions.test.ts
+++ b/packages/it-tests/src/rendering/get-compositions.test.ts
@@ -1,5 +1,5 @@
-import {getCompositions} from '@remotion/renderer';
import {expect, test} from 'bun:test';
+import {getCompositions} from '@remotion/renderer';
test('getCompositions() should give a good error message if there is no compositions file', async () => {
// @ts-expect-error
diff --git a/packages/it-tests/src/rendering/get-video-metadata.test.ts b/packages/it-tests/src/rendering/get-video-metadata.test.ts
index 1dde228dd00..042b9790b49 100644
--- a/packages/it-tests/src/rendering/get-video-metadata.test.ts
+++ b/packages/it-tests/src/rendering/get-video-metadata.test.ts
@@ -1,9 +1,8 @@
-import {exampleVideos} from '@remotion/example-videos';
-import {VideoMetadata, getVideoMetadata} from '@remotion/renderer';
import {expect, test} from 'bun:test';
-import path from 'node:path';
-
import {existsSync} from 'node:fs';
+import path from 'node:path';
+import {exampleVideos} from '@remotion/example-videos';
+import {VideoMetadata, getVideoMetadata} from '@remotion/renderer';
test('Should return video metadata', async () => {
const metadataResponse = await getVideoMetadata(exampleVideos.framer24fps, {
diff --git a/packages/it-tests/src/rendering/render-scale.test.ts b/packages/it-tests/src/rendering/render-scale.test.ts
index 54359d34f34..055dc14e5b5 100644
--- a/packages/it-tests/src/rendering/render-scale.test.ts
+++ b/packages/it-tests/src/rendering/render-scale.test.ts
@@ -1,8 +1,8 @@
-import {RenderInternals} from '@remotion/renderer';
import {afterEach, beforeEach, expect, test} from 'bun:test';
-import execa from 'execa';
import fs from 'fs';
import path from 'path';
+import {RenderInternals} from '@remotion/renderer';
+import execa from 'execa';
import {NoReactInternals} from 'remotion/no-react';
const outputPath = path.join(process.cwd(), 'packages/example/out-scale.mp4');
diff --git a/packages/it-tests/src/rendering/rendering.test.ts b/packages/it-tests/src/rendering/rendering.test.ts
index 9c269933493..dc920ec7755 100644
--- a/packages/it-tests/src/rendering/rendering.test.ts
+++ b/packages/it-tests/src/rendering/rendering.test.ts
@@ -1,8 +1,8 @@
-import {RenderInternals} from '@remotion/renderer';
import {afterEach, beforeAll, beforeEach, expect, test} from 'bun:test';
-import execa from 'execa';
import fs from 'fs';
import path from 'path';
+import {RenderInternals} from '@remotion/renderer';
+import execa from 'execa';
import {NoReactInternals} from 'remotion/no-react';
const outputPath = path.join(process.cwd(), 'packages/example/out.mp4');
diff --git a/packages/it-tests/src/rendering/test-utils.ts b/packages/it-tests/src/rendering/test-utils.ts
index b18f4730bc3..0ddf3af9826 100644
--- a/packages/it-tests/src/rendering/test-utils.ts
+++ b/packages/it-tests/src/rendering/test-utils.ts
@@ -1,8 +1,8 @@
-import {RenderInternals} from '@remotion/renderer';
-import execa from 'execa';
import fs from 'fs';
import os from 'os';
import path from 'path';
+import {RenderInternals} from '@remotion/renderer';
+import execa from 'execa';
import {random} from 'remotion';
import sharp from 'sharp';
diff --git a/packages/it-tests/src/size-benchmark/benchmark.ts b/packages/it-tests/src/size-benchmark/benchmark.ts
index 1956e1b70b5..18453191bd9 100644
--- a/packages/it-tests/src/size-benchmark/benchmark.ts
+++ b/packages/it-tests/src/size-benchmark/benchmark.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import path from 'path';
+import {exampleVideos} from '@remotion/example-videos';
import {getQualityControlModesForEncoder} from './get-quality-control-modes';
import {getBenchmarks, hasBenchmark, saveBenchmark} from './persistance';
import {runBenchmark} from './run-benchmark';
diff --git a/packages/it-tests/src/size-benchmark/results.json b/packages/it-tests/src/size-benchmark/results.json
index 6c90da0dc3f..f9ff81fe9eb 100644
--- a/packages/it-tests/src/size-benchmark/results.json
+++ b/packages/it-tests/src/size-benchmark/results.json
@@ -1,6834 +1,6834 @@
[
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 0,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 246604324,
- "timeToEncodeInMs": 11777
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 1,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 98887629,
- "timeToEncodeInMs": 11928
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 2,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 90903539,
- "timeToEncodeInMs": 12362
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 3,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 83081856,
- "timeToEncodeInMs": 13876
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 4,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 75594990,
- "timeToEncodeInMs": 13975
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 5,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 68409627,
- "timeToEncodeInMs": 13241
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 6,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 61812641,
- "timeToEncodeInMs": 12394
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 7,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 55540797,
- "timeToEncodeInMs": 12004
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 8,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 49413975,
- "timeToEncodeInMs": 11783
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 9,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 43612594,
- "timeToEncodeInMs": 12132
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 10,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 38383797,
- "timeToEncodeInMs": 13105
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 11,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 33651997,
- "timeToEncodeInMs": 12172
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 12,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 29730600,
- "timeToEncodeInMs": 17480
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 13,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 26389569,
- "timeToEncodeInMs": 19595
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 14,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 23645605,
- "timeToEncodeInMs": 43297
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 15,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 21327699,
- "timeToEncodeInMs": 22315
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 16,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 19435573,
- "timeToEncodeInMs": 22603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 17,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 18007002,
- "timeToEncodeInMs": 20885
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 18,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 17126255,
- "timeToEncodeInMs": 18942
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 19,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 16249972,
- "timeToEncodeInMs": 29963
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 20,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 15200205,
- "timeToEncodeInMs": 22438
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 21,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 14111418,
- "timeToEncodeInMs": 19990
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 22,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 13066738,
- "timeToEncodeInMs": 16022
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 23,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 12037412,
- "timeToEncodeInMs": 14112
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 24,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 10868134,
- "timeToEncodeInMs": 12423
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 25,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 9672964,
- "timeToEncodeInMs": 11603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 26,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 8527982,
- "timeToEncodeInMs": 11265
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 27,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 7478470,
- "timeToEncodeInMs": 10576
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 28,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 6532610,
- "timeToEncodeInMs": 9697
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 29,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5724305,
- "timeToEncodeInMs": 9413
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 30,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5022907,
- "timeToEncodeInMs": 9078
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 31,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 4424114,
- "timeToEncodeInMs": 13898
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 32,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3894945,
- "timeToEncodeInMs": 16242
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 33,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3426716,
- "timeToEncodeInMs": 13754
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 34,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3022185,
- "timeToEncodeInMs": 8995
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 35,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2671958,
- "timeToEncodeInMs": 8494
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 36,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2378150,
- "timeToEncodeInMs": 8317
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 37,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2122997,
- "timeToEncodeInMs": 8017
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 38,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1897971,
- "timeToEncodeInMs": 9509
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 39,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1701013,
- "timeToEncodeInMs": 9254
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 40,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1529536,
- "timeToEncodeInMs": 7442
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 41,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1378689,
- "timeToEncodeInMs": 7429
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 42,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1240261,
- "timeToEncodeInMs": 7425
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 43,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1117290,
- "timeToEncodeInMs": 7071
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 44,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1013609,
- "timeToEncodeInMs": 6839
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 45,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 920255,
- "timeToEncodeInMs": 6763
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 46,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 830023,
- "timeToEncodeInMs": 7080
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 47,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 741358,
- "timeToEncodeInMs": 7128
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 48,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 666054,
- "timeToEncodeInMs": 6947
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 49,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 581346,
- "timeToEncodeInMs": 7428
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 50,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 517246,
- "timeToEncodeInMs": 7959
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 51,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 454983,
- "timeToEncodeInMs": 7757
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 0,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 246604324,
- "timeToEncodeInMs": 11777
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 1,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 98887629,
- "timeToEncodeInMs": 11928
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 2,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 90903539,
- "timeToEncodeInMs": 12362
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 3,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 83081856,
- "timeToEncodeInMs": 13876
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 4,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 75594990,
- "timeToEncodeInMs": 13975
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 5,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 68409627,
- "timeToEncodeInMs": 13241
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 6,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 61812641,
- "timeToEncodeInMs": 12394
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 7,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 55540797,
- "timeToEncodeInMs": 12004
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 8,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 49413975,
- "timeToEncodeInMs": 11783
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 9,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 43612594,
- "timeToEncodeInMs": 12132
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 10,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 38383797,
- "timeToEncodeInMs": 13105
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 11,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 33651997,
- "timeToEncodeInMs": 12172
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 12,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 29730600,
- "timeToEncodeInMs": 17480
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 13,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 26389569,
- "timeToEncodeInMs": 19595
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 14,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 23645605,
- "timeToEncodeInMs": 43297
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 15,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 21327699,
- "timeToEncodeInMs": 22315
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 16,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 19435573,
- "timeToEncodeInMs": 22603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 17,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 18007002,
- "timeToEncodeInMs": 20885
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 18,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 17126255,
- "timeToEncodeInMs": 18942
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 19,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 16249972,
- "timeToEncodeInMs": 29963
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 20,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 15200205,
- "timeToEncodeInMs": 22438
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 21,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 14111418,
- "timeToEncodeInMs": 19990
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 22,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 13066738,
- "timeToEncodeInMs": 16022
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 23,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 12037412,
- "timeToEncodeInMs": 14112
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 24,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 10868134,
- "timeToEncodeInMs": 12423
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 25,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 9672964,
- "timeToEncodeInMs": 11603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 26,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 8527982,
- "timeToEncodeInMs": 11265
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 27,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 7478470,
- "timeToEncodeInMs": 10576
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 28,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 6532610,
- "timeToEncodeInMs": 9697
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 29,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5724305,
- "timeToEncodeInMs": 9413
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 30,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5022907,
- "timeToEncodeInMs": 9078
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 31,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 4424114,
- "timeToEncodeInMs": 13898
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 32,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3894945,
- "timeToEncodeInMs": 16242
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 33,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3426716,
- "timeToEncodeInMs": 13754
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 34,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3022185,
- "timeToEncodeInMs": 8995
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 35,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2671958,
- "timeToEncodeInMs": 8494
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 36,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2378150,
- "timeToEncodeInMs": 8317
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 37,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2122997,
- "timeToEncodeInMs": 8017
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 38,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1897971,
- "timeToEncodeInMs": 9509
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 39,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1701013,
- "timeToEncodeInMs": 9254
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 40,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1529536,
- "timeToEncodeInMs": 7442
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 41,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1378689,
- "timeToEncodeInMs": 7429
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 42,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1240261,
- "timeToEncodeInMs": 7425
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 43,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1117290,
- "timeToEncodeInMs": 7071
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 44,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1013609,
- "timeToEncodeInMs": 6839
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 45,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 920255,
- "timeToEncodeInMs": 6763
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 46,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 830023,
- "timeToEncodeInMs": 7080
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 47,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 741358,
- "timeToEncodeInMs": 7128
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 48,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 666054,
- "timeToEncodeInMs": 6947
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 49,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 581346,
- "timeToEncodeInMs": 7428
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 50,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 517246,
- "timeToEncodeInMs": 7959
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 51,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 454983,
- "timeToEncodeInMs": 7757
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 0,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 246604324,
- "timeToEncodeInMs": 11777
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 1,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 98887629,
- "timeToEncodeInMs": 11928
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 2,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 90903539,
- "timeToEncodeInMs": 12362
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 3,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 83081856,
- "timeToEncodeInMs": 13876
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 4,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 75594990,
- "timeToEncodeInMs": 13975
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 5,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 68409627,
- "timeToEncodeInMs": 13241
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 6,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 61812641,
- "timeToEncodeInMs": 12394
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 7,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 55540797,
- "timeToEncodeInMs": 12004
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 8,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 49413975,
- "timeToEncodeInMs": 11783
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 9,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 43612594,
- "timeToEncodeInMs": 12132
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 10,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 38383797,
- "timeToEncodeInMs": 13105
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 11,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 33651997,
- "timeToEncodeInMs": 12172
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 12,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 29730600,
- "timeToEncodeInMs": 17480
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 13,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 26389569,
- "timeToEncodeInMs": 19595
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 14,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 23645605,
- "timeToEncodeInMs": 43297
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 15,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 21327699,
- "timeToEncodeInMs": 22315
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 16,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 19435573,
- "timeToEncodeInMs": 22603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 17,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 18007002,
- "timeToEncodeInMs": 20885
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 18,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 17126255,
- "timeToEncodeInMs": 18942
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 19,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 16249972,
- "timeToEncodeInMs": 29963
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 20,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 15200205,
- "timeToEncodeInMs": 22438
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 21,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 14111418,
- "timeToEncodeInMs": 19990
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 22,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 13066738,
- "timeToEncodeInMs": 16022
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 23,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 12037412,
- "timeToEncodeInMs": 14112
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 24,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 10868134,
- "timeToEncodeInMs": 12423
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 25,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 9672964,
- "timeToEncodeInMs": 11603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 26,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 8527982,
- "timeToEncodeInMs": 11265
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 27,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 7478470,
- "timeToEncodeInMs": 10576
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 28,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 6532610,
- "timeToEncodeInMs": 9697
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 29,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5724305,
- "timeToEncodeInMs": 9413
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 30,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5022907,
- "timeToEncodeInMs": 9078
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 31,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 4424114,
- "timeToEncodeInMs": 13898
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 32,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3894945,
- "timeToEncodeInMs": 16242
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 33,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3426716,
- "timeToEncodeInMs": 13754
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 34,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3022185,
- "timeToEncodeInMs": 8995
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 35,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2671958,
- "timeToEncodeInMs": 8494
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 36,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2378150,
- "timeToEncodeInMs": 8317
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 37,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2122997,
- "timeToEncodeInMs": 8017
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 38,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1897971,
- "timeToEncodeInMs": 9509
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 39,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1701013,
- "timeToEncodeInMs": 9254
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 40,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1529536,
- "timeToEncodeInMs": 7442
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 41,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1378689,
- "timeToEncodeInMs": 7429
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 42,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1240261,
- "timeToEncodeInMs": 7425
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 43,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1117290,
- "timeToEncodeInMs": 7071
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 44,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1013609,
- "timeToEncodeInMs": 6839
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 45,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 920255,
- "timeToEncodeInMs": 6763
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 46,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 830023,
- "timeToEncodeInMs": 7080
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 47,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 741358,
- "timeToEncodeInMs": 7128
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 48,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 666054,
- "timeToEncodeInMs": 6947
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 49,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 581346,
- "timeToEncodeInMs": 7428
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 50,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 517246,
- "timeToEncodeInMs": 7959
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 51,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 454983,
- "timeToEncodeInMs": 7757
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 0,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 246604324,
- "timeToEncodeInMs": 11777
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 1,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 98887629,
- "timeToEncodeInMs": 11928
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 2,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 90903539,
- "timeToEncodeInMs": 12362
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 3,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 83081856,
- "timeToEncodeInMs": 13876
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 4,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 75594990,
- "timeToEncodeInMs": 13975
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 5,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 68409627,
- "timeToEncodeInMs": 13241
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 6,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 61812641,
- "timeToEncodeInMs": 12394
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 7,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 55540797,
- "timeToEncodeInMs": 12004
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 8,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 49413975,
- "timeToEncodeInMs": 11783
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 9,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 43612594,
- "timeToEncodeInMs": 12132
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 10,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 38383797,
- "timeToEncodeInMs": 13105
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 11,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 33651997,
- "timeToEncodeInMs": 12172
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 12,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 29730600,
- "timeToEncodeInMs": 17480
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 13,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 26389569,
- "timeToEncodeInMs": 19595
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 14,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 23645605,
- "timeToEncodeInMs": 43297
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 15,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 21327699,
- "timeToEncodeInMs": 22315
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 16,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 19435573,
- "timeToEncodeInMs": 22603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 17,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 18007002,
- "timeToEncodeInMs": 20885
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 18,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 17126255,
- "timeToEncodeInMs": 18942
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 19,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 16249972,
- "timeToEncodeInMs": 29963
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 20,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 15200205,
- "timeToEncodeInMs": 22438
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 21,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 14111418,
- "timeToEncodeInMs": 19990
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 22,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 13066738,
- "timeToEncodeInMs": 16022
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 23,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 12037412,
- "timeToEncodeInMs": 14112
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 24,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 10868134,
- "timeToEncodeInMs": 12423
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 25,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 9672964,
- "timeToEncodeInMs": 11603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 26,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 8527982,
- "timeToEncodeInMs": 11265
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 27,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 7478470,
- "timeToEncodeInMs": 10576
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 28,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 6532610,
- "timeToEncodeInMs": 9697
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 29,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5724305,
- "timeToEncodeInMs": 9413
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 30,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5022907,
- "timeToEncodeInMs": 9078
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 31,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 4424114,
- "timeToEncodeInMs": 13898
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 32,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3894945,
- "timeToEncodeInMs": 16242
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 33,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3426716,
- "timeToEncodeInMs": 13754
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 34,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3022185,
- "timeToEncodeInMs": 8995
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 35,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2671958,
- "timeToEncodeInMs": 8494
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 36,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2378150,
- "timeToEncodeInMs": 8317
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 37,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2122997,
- "timeToEncodeInMs": 8017
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 38,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1897971,
- "timeToEncodeInMs": 9509
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 39,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1701013,
- "timeToEncodeInMs": 9254
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 40,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1529536,
- "timeToEncodeInMs": 7442
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 41,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1378689,
- "timeToEncodeInMs": 7429
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 42,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1240261,
- "timeToEncodeInMs": 7425
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 43,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1117290,
- "timeToEncodeInMs": 7071
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 44,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1013609,
- "timeToEncodeInMs": 6839
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 45,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 920255,
- "timeToEncodeInMs": 6763
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 46,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 830023,
- "timeToEncodeInMs": 7080
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 47,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 741358,
- "timeToEncodeInMs": 7128
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 48,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 666054,
- "timeToEncodeInMs": 6947
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 49,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 581346,
- "timeToEncodeInMs": 7428
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 50,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 517246,
- "timeToEncodeInMs": 7959
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 51,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 454983,
- "timeToEncodeInMs": 7757
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 0,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 246604324,
- "timeToEncodeInMs": 11777
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 1,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 98887629,
- "timeToEncodeInMs": 11928
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 2,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 90903539,
- "timeToEncodeInMs": 12362
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 3,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 83081856,
- "timeToEncodeInMs": 13876
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 4,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 75594990,
- "timeToEncodeInMs": 13975
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 5,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 68409627,
- "timeToEncodeInMs": 13241
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 6,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 61812641,
- "timeToEncodeInMs": 12394
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 7,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 55540797,
- "timeToEncodeInMs": 12004
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 8,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 49413975,
- "timeToEncodeInMs": 11783
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 9,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 43612594,
- "timeToEncodeInMs": 12132
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 10,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 38383797,
- "timeToEncodeInMs": 13105
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 11,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 33651997,
- "timeToEncodeInMs": 12172
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 12,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 29730600,
- "timeToEncodeInMs": 17480
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 13,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 26389569,
- "timeToEncodeInMs": 19595
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 14,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 23645605,
- "timeToEncodeInMs": 43297
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 15,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 21327699,
- "timeToEncodeInMs": 22315
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 16,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 19435573,
- "timeToEncodeInMs": 22603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 17,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 18007002,
- "timeToEncodeInMs": 20885
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 18,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 17126255,
- "timeToEncodeInMs": 18942
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 19,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 16249972,
- "timeToEncodeInMs": 29963
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 20,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 15200205,
- "timeToEncodeInMs": 22438
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 21,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 14111418,
- "timeToEncodeInMs": 19990
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 22,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 13066738,
- "timeToEncodeInMs": 16022
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 23,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 12037412,
- "timeToEncodeInMs": 14112
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 24,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 10868134,
- "timeToEncodeInMs": 12423
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 25,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 9672964,
- "timeToEncodeInMs": 11603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 26,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 8527982,
- "timeToEncodeInMs": 11265
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 27,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 7478470,
- "timeToEncodeInMs": 10576
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 28,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 6532610,
- "timeToEncodeInMs": 9697
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 29,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5724305,
- "timeToEncodeInMs": 9413
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 30,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5022907,
- "timeToEncodeInMs": 9078
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 31,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 4424114,
- "timeToEncodeInMs": 13898
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 32,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3894945,
- "timeToEncodeInMs": 16242
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 33,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3426716,
- "timeToEncodeInMs": 13754
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 34,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3022185,
- "timeToEncodeInMs": 8995
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 35,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2671958,
- "timeToEncodeInMs": 8494
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 36,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2378150,
- "timeToEncodeInMs": 8317
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 37,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2122997,
- "timeToEncodeInMs": 8017
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 38,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1897971,
- "timeToEncodeInMs": 9509
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 39,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1701013,
- "timeToEncodeInMs": 9254
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 40,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1529536,
- "timeToEncodeInMs": 7442
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 41,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1378689,
- "timeToEncodeInMs": 7429
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 42,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1240261,
- "timeToEncodeInMs": 7425
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 43,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1117290,
- "timeToEncodeInMs": 7071
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 44,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1013609,
- "timeToEncodeInMs": 6839
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 45,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 920255,
- "timeToEncodeInMs": 6763
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 46,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 830023,
- "timeToEncodeInMs": 7080
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 47,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 741358,
- "timeToEncodeInMs": 7128
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 48,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 666054,
- "timeToEncodeInMs": 6947
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 49,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 581346,
- "timeToEncodeInMs": 7428
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 50,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 517246,
- "timeToEncodeInMs": 7959
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 51,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 454983,
- "timeToEncodeInMs": 7757
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "crf": 0,
- "type": "crf"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 444365459,
- "timeToEncodeInMs": 151786
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "crf": 1,
- "type": "crf"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 398444341,
- "timeToEncodeInMs": 167196
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "crf": 2,
- "type": "crf"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 357021513,
- "timeToEncodeInMs": 175792
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 0,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 246604324,
- "timeToEncodeInMs": 11777
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 1,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 98887629,
- "timeToEncodeInMs": 11928
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 2,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 90903539,
- "timeToEncodeInMs": 12362
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 3,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 83081856,
- "timeToEncodeInMs": 13876
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 4,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 75594990,
- "timeToEncodeInMs": 13975
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 5,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 68409627,
- "timeToEncodeInMs": 13241
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 6,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 61812641,
- "timeToEncodeInMs": 12394
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 7,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 55540797,
- "timeToEncodeInMs": 12004
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 8,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 49413975,
- "timeToEncodeInMs": 11783
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 9,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 43612594,
- "timeToEncodeInMs": 12132
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 10,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 38383797,
- "timeToEncodeInMs": 13105
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 11,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 33651997,
- "timeToEncodeInMs": 12172
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 12,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 29730600,
- "timeToEncodeInMs": 17480
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 13,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 26389569,
- "timeToEncodeInMs": 19595
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 14,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 23645605,
- "timeToEncodeInMs": 43297
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 15,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 21327699,
- "timeToEncodeInMs": 22315
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 16,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 19435573,
- "timeToEncodeInMs": 22603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 17,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 18007002,
- "timeToEncodeInMs": 20885
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 18,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 17126255,
- "timeToEncodeInMs": 18942
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 19,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 16249972,
- "timeToEncodeInMs": 29963
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 20,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 15200205,
- "timeToEncodeInMs": 22438
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 21,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 14111418,
- "timeToEncodeInMs": 19990
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 22,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 13066738,
- "timeToEncodeInMs": 16022
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 23,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 12037412,
- "timeToEncodeInMs": 14112
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 24,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 10868134,
- "timeToEncodeInMs": 12423
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 25,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 9672964,
- "timeToEncodeInMs": 11603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 26,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 8527982,
- "timeToEncodeInMs": 11265
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 27,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 7478470,
- "timeToEncodeInMs": 10576
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 28,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 6532610,
- "timeToEncodeInMs": 9697
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 29,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5724305,
- "timeToEncodeInMs": 9413
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 30,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5022907,
- "timeToEncodeInMs": 9078
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 31,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 4424114,
- "timeToEncodeInMs": 13898
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 32,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3894945,
- "timeToEncodeInMs": 16242
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 33,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3426716,
- "timeToEncodeInMs": 13754
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 34,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3022185,
- "timeToEncodeInMs": 8995
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 35,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2671958,
- "timeToEncodeInMs": 8494
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 36,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2378150,
- "timeToEncodeInMs": 8317
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 37,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2122997,
- "timeToEncodeInMs": 8017
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 38,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1897971,
- "timeToEncodeInMs": 9509
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 39,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1701013,
- "timeToEncodeInMs": 9254
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 40,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1529536,
- "timeToEncodeInMs": 7442
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 41,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1378689,
- "timeToEncodeInMs": 7429
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 42,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1240261,
- "timeToEncodeInMs": 7425
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 43,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1117290,
- "timeToEncodeInMs": 7071
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 44,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1013609,
- "timeToEncodeInMs": 6839
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 45,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 920255,
- "timeToEncodeInMs": 6763
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 46,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 830023,
- "timeToEncodeInMs": 7080
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 47,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 741358,
- "timeToEncodeInMs": 7128
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 48,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 666054,
- "timeToEncodeInMs": 6947
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 49,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 581346,
- "timeToEncodeInMs": 7428
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 50,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 517246,
- "timeToEncodeInMs": 7959
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 51,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 454983,
- "timeToEncodeInMs": 7757
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 0,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 246604324,
- "timeToEncodeInMs": 11777
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 1,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 98887629,
- "timeToEncodeInMs": 11928
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 2,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 90903539,
- "timeToEncodeInMs": 12362
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 3,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 83081856,
- "timeToEncodeInMs": 13876
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 4,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 75594990,
- "timeToEncodeInMs": 13975
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 5,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 68409627,
- "timeToEncodeInMs": 13241
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 6,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 61812641,
- "timeToEncodeInMs": 12394
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 7,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 55540797,
- "timeToEncodeInMs": 12004
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 8,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 49413975,
- "timeToEncodeInMs": 11783
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 9,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 43612594,
- "timeToEncodeInMs": 12132
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 10,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 38383797,
- "timeToEncodeInMs": 13105
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 11,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 33651997,
- "timeToEncodeInMs": 12172
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 12,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 29730600,
- "timeToEncodeInMs": 17480
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 13,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 26389569,
- "timeToEncodeInMs": 19595
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 14,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 23645605,
- "timeToEncodeInMs": 43297
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 15,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 21327699,
- "timeToEncodeInMs": 22315
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 16,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 19435573,
- "timeToEncodeInMs": 22603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 17,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 18007002,
- "timeToEncodeInMs": 20885
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 18,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 17126255,
- "timeToEncodeInMs": 18942
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 19,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 16249972,
- "timeToEncodeInMs": 29963
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 20,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 15200205,
- "timeToEncodeInMs": 22438
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 21,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 14111418,
- "timeToEncodeInMs": 19990
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 22,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 13066738,
- "timeToEncodeInMs": 16022
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 23,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 12037412,
- "timeToEncodeInMs": 14112
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 24,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 10868134,
- "timeToEncodeInMs": 12423
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 25,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 9672964,
- "timeToEncodeInMs": 11603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 26,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 8527982,
- "timeToEncodeInMs": 11265
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 27,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 7478470,
- "timeToEncodeInMs": 10576
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 28,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 6532610,
- "timeToEncodeInMs": 9697
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 29,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5724305,
- "timeToEncodeInMs": 9413
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 30,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5022907,
- "timeToEncodeInMs": 9078
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 31,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 4424114,
- "timeToEncodeInMs": 13898
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 32,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3894945,
- "timeToEncodeInMs": 16242
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 33,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3426716,
- "timeToEncodeInMs": 13754
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 34,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3022185,
- "timeToEncodeInMs": 8995
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 35,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2671958,
- "timeToEncodeInMs": 8494
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 36,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2378150,
- "timeToEncodeInMs": 8317
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 37,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2122997,
- "timeToEncodeInMs": 8017
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 38,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1897971,
- "timeToEncodeInMs": 9509
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 39,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1701013,
- "timeToEncodeInMs": 9254
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 40,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1529536,
- "timeToEncodeInMs": 7442
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 41,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1378689,
- "timeToEncodeInMs": 7429
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 42,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1240261,
- "timeToEncodeInMs": 7425
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 43,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1117290,
- "timeToEncodeInMs": 7071
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 44,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1013609,
- "timeToEncodeInMs": 6839
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 45,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 920255,
- "timeToEncodeInMs": 6763
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 46,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 830023,
- "timeToEncodeInMs": 7080
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 47,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 741358,
- "timeToEncodeInMs": 7128
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 48,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 666054,
- "timeToEncodeInMs": 6947
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 49,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 581346,
- "timeToEncodeInMs": 7428
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 50,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 517246,
- "timeToEncodeInMs": 7959
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 51,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 454983,
- "timeToEncodeInMs": 7757
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 0,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 246604324,
- "timeToEncodeInMs": 11777
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 1,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 98887629,
- "timeToEncodeInMs": 11928
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 2,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 90903539,
- "timeToEncodeInMs": 12362
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 3,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 83081856,
- "timeToEncodeInMs": 13876
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 4,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 75594990,
- "timeToEncodeInMs": 13975
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 5,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 68409627,
- "timeToEncodeInMs": 13241
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 6,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 61812641,
- "timeToEncodeInMs": 12394
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 7,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 55540797,
- "timeToEncodeInMs": 12004
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 8,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 49413975,
- "timeToEncodeInMs": 11783
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 9,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 43612594,
- "timeToEncodeInMs": 12132
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 10,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 38383797,
- "timeToEncodeInMs": 13105
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 11,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 33651997,
- "timeToEncodeInMs": 12172
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 12,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 29730600,
- "timeToEncodeInMs": 17480
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 13,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 26389569,
- "timeToEncodeInMs": 19595
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 14,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 23645605,
- "timeToEncodeInMs": 43297
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 15,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 21327699,
- "timeToEncodeInMs": 22315
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 16,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 19435573,
- "timeToEncodeInMs": 22603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 17,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 18007002,
- "timeToEncodeInMs": 20885
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 18,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 17126255,
- "timeToEncodeInMs": 18942
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 19,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 16249972,
- "timeToEncodeInMs": 29963
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 20,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 15200205,
- "timeToEncodeInMs": 22438
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 21,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 14111418,
- "timeToEncodeInMs": 19990
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 22,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 13066738,
- "timeToEncodeInMs": 16022
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 23,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 12037412,
- "timeToEncodeInMs": 14112
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 24,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 10868134,
- "timeToEncodeInMs": 12423
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 25,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 9672964,
- "timeToEncodeInMs": 11603
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 26,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 8527982,
- "timeToEncodeInMs": 11265
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 27,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 7478470,
- "timeToEncodeInMs": 10576
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 28,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 6532610,
- "timeToEncodeInMs": 9697
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 29,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5724305,
- "timeToEncodeInMs": 9413
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 30,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 5022907,
- "timeToEncodeInMs": 9078
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 31,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 4424114,
- "timeToEncodeInMs": 13898
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 32,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3894945,
- "timeToEncodeInMs": 16242
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 33,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3426716,
- "timeToEncodeInMs": 13754
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 34,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3022185,
- "timeToEncodeInMs": 8995
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 35,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2671958,
- "timeToEncodeInMs": 8494
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 36,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2378150,
- "timeToEncodeInMs": 8317
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 37,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 2122997,
- "timeToEncodeInMs": 8017
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 38,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1897971,
- "timeToEncodeInMs": 9509
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 39,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1701013,
- "timeToEncodeInMs": 9254
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 40,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1529536,
- "timeToEncodeInMs": 7442
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 41,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1378689,
- "timeToEncodeInMs": 7429
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 42,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1240261,
- "timeToEncodeInMs": 7425
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 43,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1117290,
- "timeToEncodeInMs": 7071
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 44,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 1013609,
- "timeToEncodeInMs": 6839
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 45,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 920255,
- "timeToEncodeInMs": 6763
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 46,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 830023,
- "timeToEncodeInMs": 7080
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 47,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 741358,
- "timeToEncodeInMs": 7128
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 48,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 666054,
- "timeToEncodeInMs": 6947
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 49,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 581346,
- "timeToEncodeInMs": 7428
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 50,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 517246,
- "timeToEncodeInMs": 7959
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "libx264",
- "quality": {
- "crf": 51,
- "type": "crf"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 454983,
- "timeToEncodeInMs": 7757
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "crf": 1,
- "type": "crf"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 398444341,
- "timeToEncodeInMs": 167196
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "crf": 2,
- "type": "crf"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 357021513,
- "timeToEncodeInMs": 175792
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "500000"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 3778859,
- "timeToEncodeInMs": 3798
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "1000000"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 7542953,
- "timeToEncodeInMs": 3803
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "2000000"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 14869133,
- "timeToEncodeInMs": 3792
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "3000000"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 22058520,
- "timeToEncodeInMs": 3835
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "4000000"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 29263288,
- "timeToEncodeInMs": 3869
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "5000000"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 36335336,
- "timeToEncodeInMs": 3928
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "6000000"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 43446418,
- "timeToEncodeInMs": 3970
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "7000000"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 50573128,
- "timeToEncodeInMs": 3985
- },
- {
- "filename": "bigbuckbunny.mp4",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "8000000"
- },
- "width": 1280,
- "height": 720,
- "fps": 24,
- "durationInSeconds": 60,
- "size": 57469676,
- "timeToEncodeInMs": 4008
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 3
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 320193887,
- "timeToEncodeInMs": 206649
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 4
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 287365266,
- "timeToEncodeInMs": 244951
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 5
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 258048513,
- "timeToEncodeInMs": 279582
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 6
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 232030802,
- "timeToEncodeInMs": 309354
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 7
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 208775556,
- "timeToEncodeInMs": 299031
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 8
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 187671654,
- "timeToEncodeInMs": 260517
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 9
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 168542921,
- "timeToEncodeInMs": 207770
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 10
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 150963889,
- "timeToEncodeInMs": 212364
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 11
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 134773325,
- "timeToEncodeInMs": 223136
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 12
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 119903697,
- "timeToEncodeInMs": 205683
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 13
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 106117969,
- "timeToEncodeInMs": 184638
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 14
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 93354172,
- "timeToEncodeInMs": 180160
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 15
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 81503450,
- "timeToEncodeInMs": 178905
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 16
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 70527992,
- "timeToEncodeInMs": 156085
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 17
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 60482314,
- "timeToEncodeInMs": 143540
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 18
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 51468476,
- "timeToEncodeInMs": 140512
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 19
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 43499253,
- "timeToEncodeInMs": 132588
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 20
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 36499378,
- "timeToEncodeInMs": 127633
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 21
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 30534133,
- "timeToEncodeInMs": 118942
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 22
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 25541713,
- "timeToEncodeInMs": 115276
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 23
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 21475560,
- "timeToEncodeInMs": 109353
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 24
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 18242168,
- "timeToEncodeInMs": 104462
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 25
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 15643919,
- "timeToEncodeInMs": 102861
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 26
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 13542768,
- "timeToEncodeInMs": 97372
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 27
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 11800382,
- "timeToEncodeInMs": 96759
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 28
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 10349169,
- "timeToEncodeInMs": 93897
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 29
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 9146009,
- "timeToEncodeInMs": 91426
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 30
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 8119224,
- "timeToEncodeInMs": 89986
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 31
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 7266917,
- "timeToEncodeInMs": 86744
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 32
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 6540337,
- "timeToEncodeInMs": 87596
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 33
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 5938219,
- "timeToEncodeInMs": 84750
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 34
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 5406400,
- "timeToEncodeInMs": 78658
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 35
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 4957195,
- "timeToEncodeInMs": 67139
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 36
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 4553306,
- "timeToEncodeInMs": 68876
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 37
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 4213039,
- "timeToEncodeInMs": 69359
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 38
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 3892723,
- "timeToEncodeInMs": 68564
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 39
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 3622088,
- "timeToEncodeInMs": 68043
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 40
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 3377395,
- "timeToEncodeInMs": 65807
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 41
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 3143006,
- "timeToEncodeInMs": 63255
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 42
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 2948517,
- "timeToEncodeInMs": 63229
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 43
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 2771683,
- "timeToEncodeInMs": 62379
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 44
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 2607742,
- "timeToEncodeInMs": 61932
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 45
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 2460915,
- "timeToEncodeInMs": 60120
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 46
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 2275453,
- "timeToEncodeInMs": 64899
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 47
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 2133352,
- "timeToEncodeInMs": 69417
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 48
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 1993645,
- "timeToEncodeInMs": 65603
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 49
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 1875386,
- "timeToEncodeInMs": 60261
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 50
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 1765278,
- "timeToEncodeInMs": 55183
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "libx264",
- "quality": {
- "type": "crf",
- "crf": 51
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 1654051,
- "timeToEncodeInMs": 53485
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "500000"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 4586903,
- "timeToEncodeInMs": 10275
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "1000000"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 4597140,
- "timeToEncodeInMs": 10975
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "2000000"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 4704589,
- "timeToEncodeInMs": 11032
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "3000000"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 5005355,
- "timeToEncodeInMs": 11023
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "4000000"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 6311372,
- "timeToEncodeInMs": 11111
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "5000000"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 7877722,
- "timeToEncodeInMs": 11152
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "6000000"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 9447452,
- "timeToEncodeInMs": 11124
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "7000000"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 10974363,
- "timeToEncodeInMs": 11216
- },
- {
- "filename": "iphonevideo.mov",
- "encoder": "h264_videotoolbox",
- "quality": {
- "type": "bitrate",
- "value": "8000000"
- },
- "width": 2160,
- "height": 3840,
- "fps": 29.99602174777881,
- "durationInSeconds": 12.568333333333333,
- "size": 12553090,
- "timeToEncodeInMs": 10837
- }
-]
\ No newline at end of file
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 0,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 246604324,
+ "timeToEncodeInMs": 11777
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 1,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 98887629,
+ "timeToEncodeInMs": 11928
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 2,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 90903539,
+ "timeToEncodeInMs": 12362
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 3,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 83081856,
+ "timeToEncodeInMs": 13876
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 4,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 75594990,
+ "timeToEncodeInMs": 13975
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 5,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 68409627,
+ "timeToEncodeInMs": 13241
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 6,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 61812641,
+ "timeToEncodeInMs": 12394
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 7,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 55540797,
+ "timeToEncodeInMs": 12004
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 8,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 49413975,
+ "timeToEncodeInMs": 11783
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 9,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 43612594,
+ "timeToEncodeInMs": 12132
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 10,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 38383797,
+ "timeToEncodeInMs": 13105
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 11,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 33651997,
+ "timeToEncodeInMs": 12172
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 12,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 29730600,
+ "timeToEncodeInMs": 17480
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 13,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 26389569,
+ "timeToEncodeInMs": 19595
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 14,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 23645605,
+ "timeToEncodeInMs": 43297
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 15,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 21327699,
+ "timeToEncodeInMs": 22315
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 16,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 19435573,
+ "timeToEncodeInMs": 22603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 17,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 18007002,
+ "timeToEncodeInMs": 20885
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 18,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 17126255,
+ "timeToEncodeInMs": 18942
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 19,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 16249972,
+ "timeToEncodeInMs": 29963
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 20,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 15200205,
+ "timeToEncodeInMs": 22438
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 21,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 14111418,
+ "timeToEncodeInMs": 19990
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 22,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 13066738,
+ "timeToEncodeInMs": 16022
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 23,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 12037412,
+ "timeToEncodeInMs": 14112
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 24,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 10868134,
+ "timeToEncodeInMs": 12423
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 25,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 9672964,
+ "timeToEncodeInMs": 11603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 26,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 8527982,
+ "timeToEncodeInMs": 11265
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 27,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 7478470,
+ "timeToEncodeInMs": 10576
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 28,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 6532610,
+ "timeToEncodeInMs": 9697
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 29,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5724305,
+ "timeToEncodeInMs": 9413
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 30,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5022907,
+ "timeToEncodeInMs": 9078
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 31,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 4424114,
+ "timeToEncodeInMs": 13898
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 32,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3894945,
+ "timeToEncodeInMs": 16242
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 33,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3426716,
+ "timeToEncodeInMs": 13754
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 34,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3022185,
+ "timeToEncodeInMs": 8995
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 35,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2671958,
+ "timeToEncodeInMs": 8494
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 36,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2378150,
+ "timeToEncodeInMs": 8317
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 37,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2122997,
+ "timeToEncodeInMs": 8017
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 38,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1897971,
+ "timeToEncodeInMs": 9509
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 39,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1701013,
+ "timeToEncodeInMs": 9254
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 40,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1529536,
+ "timeToEncodeInMs": 7442
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 41,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1378689,
+ "timeToEncodeInMs": 7429
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 42,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1240261,
+ "timeToEncodeInMs": 7425
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 43,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1117290,
+ "timeToEncodeInMs": 7071
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 44,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1013609,
+ "timeToEncodeInMs": 6839
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 45,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 920255,
+ "timeToEncodeInMs": 6763
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 46,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 830023,
+ "timeToEncodeInMs": 7080
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 47,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 741358,
+ "timeToEncodeInMs": 7128
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 48,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 666054,
+ "timeToEncodeInMs": 6947
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 49,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 581346,
+ "timeToEncodeInMs": 7428
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 50,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 517246,
+ "timeToEncodeInMs": 7959
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 51,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 454983,
+ "timeToEncodeInMs": 7757
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 0,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 246604324,
+ "timeToEncodeInMs": 11777
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 1,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 98887629,
+ "timeToEncodeInMs": 11928
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 2,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 90903539,
+ "timeToEncodeInMs": 12362
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 3,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 83081856,
+ "timeToEncodeInMs": 13876
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 4,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 75594990,
+ "timeToEncodeInMs": 13975
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 5,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 68409627,
+ "timeToEncodeInMs": 13241
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 6,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 61812641,
+ "timeToEncodeInMs": 12394
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 7,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 55540797,
+ "timeToEncodeInMs": 12004
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 8,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 49413975,
+ "timeToEncodeInMs": 11783
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 9,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 43612594,
+ "timeToEncodeInMs": 12132
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 10,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 38383797,
+ "timeToEncodeInMs": 13105
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 11,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 33651997,
+ "timeToEncodeInMs": 12172
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 12,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 29730600,
+ "timeToEncodeInMs": 17480
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 13,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 26389569,
+ "timeToEncodeInMs": 19595
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 14,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 23645605,
+ "timeToEncodeInMs": 43297
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 15,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 21327699,
+ "timeToEncodeInMs": 22315
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 16,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 19435573,
+ "timeToEncodeInMs": 22603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 17,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 18007002,
+ "timeToEncodeInMs": 20885
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 18,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 17126255,
+ "timeToEncodeInMs": 18942
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 19,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 16249972,
+ "timeToEncodeInMs": 29963
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 20,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 15200205,
+ "timeToEncodeInMs": 22438
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 21,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 14111418,
+ "timeToEncodeInMs": 19990
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 22,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 13066738,
+ "timeToEncodeInMs": 16022
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 23,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 12037412,
+ "timeToEncodeInMs": 14112
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 24,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 10868134,
+ "timeToEncodeInMs": 12423
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 25,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 9672964,
+ "timeToEncodeInMs": 11603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 26,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 8527982,
+ "timeToEncodeInMs": 11265
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 27,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 7478470,
+ "timeToEncodeInMs": 10576
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 28,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 6532610,
+ "timeToEncodeInMs": 9697
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 29,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5724305,
+ "timeToEncodeInMs": 9413
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 30,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5022907,
+ "timeToEncodeInMs": 9078
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 31,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 4424114,
+ "timeToEncodeInMs": 13898
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 32,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3894945,
+ "timeToEncodeInMs": 16242
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 33,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3426716,
+ "timeToEncodeInMs": 13754
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 34,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3022185,
+ "timeToEncodeInMs": 8995
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 35,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2671958,
+ "timeToEncodeInMs": 8494
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 36,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2378150,
+ "timeToEncodeInMs": 8317
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 37,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2122997,
+ "timeToEncodeInMs": 8017
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 38,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1897971,
+ "timeToEncodeInMs": 9509
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 39,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1701013,
+ "timeToEncodeInMs": 9254
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 40,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1529536,
+ "timeToEncodeInMs": 7442
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 41,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1378689,
+ "timeToEncodeInMs": 7429
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 42,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1240261,
+ "timeToEncodeInMs": 7425
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 43,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1117290,
+ "timeToEncodeInMs": 7071
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 44,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1013609,
+ "timeToEncodeInMs": 6839
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 45,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 920255,
+ "timeToEncodeInMs": 6763
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 46,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 830023,
+ "timeToEncodeInMs": 7080
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 47,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 741358,
+ "timeToEncodeInMs": 7128
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 48,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 666054,
+ "timeToEncodeInMs": 6947
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 49,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 581346,
+ "timeToEncodeInMs": 7428
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 50,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 517246,
+ "timeToEncodeInMs": 7959
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 51,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 454983,
+ "timeToEncodeInMs": 7757
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 0,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 246604324,
+ "timeToEncodeInMs": 11777
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 1,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 98887629,
+ "timeToEncodeInMs": 11928
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 2,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 90903539,
+ "timeToEncodeInMs": 12362
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 3,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 83081856,
+ "timeToEncodeInMs": 13876
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 4,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 75594990,
+ "timeToEncodeInMs": 13975
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 5,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 68409627,
+ "timeToEncodeInMs": 13241
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 6,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 61812641,
+ "timeToEncodeInMs": 12394
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 7,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 55540797,
+ "timeToEncodeInMs": 12004
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 8,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 49413975,
+ "timeToEncodeInMs": 11783
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 9,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 43612594,
+ "timeToEncodeInMs": 12132
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 10,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 38383797,
+ "timeToEncodeInMs": 13105
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 11,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 33651997,
+ "timeToEncodeInMs": 12172
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 12,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 29730600,
+ "timeToEncodeInMs": 17480
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 13,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 26389569,
+ "timeToEncodeInMs": 19595
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 14,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 23645605,
+ "timeToEncodeInMs": 43297
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 15,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 21327699,
+ "timeToEncodeInMs": 22315
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 16,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 19435573,
+ "timeToEncodeInMs": 22603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 17,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 18007002,
+ "timeToEncodeInMs": 20885
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 18,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 17126255,
+ "timeToEncodeInMs": 18942
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 19,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 16249972,
+ "timeToEncodeInMs": 29963
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 20,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 15200205,
+ "timeToEncodeInMs": 22438
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 21,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 14111418,
+ "timeToEncodeInMs": 19990
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 22,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 13066738,
+ "timeToEncodeInMs": 16022
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 23,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 12037412,
+ "timeToEncodeInMs": 14112
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 24,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 10868134,
+ "timeToEncodeInMs": 12423
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 25,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 9672964,
+ "timeToEncodeInMs": 11603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 26,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 8527982,
+ "timeToEncodeInMs": 11265
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 27,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 7478470,
+ "timeToEncodeInMs": 10576
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 28,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 6532610,
+ "timeToEncodeInMs": 9697
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 29,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5724305,
+ "timeToEncodeInMs": 9413
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 30,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5022907,
+ "timeToEncodeInMs": 9078
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 31,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 4424114,
+ "timeToEncodeInMs": 13898
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 32,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3894945,
+ "timeToEncodeInMs": 16242
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 33,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3426716,
+ "timeToEncodeInMs": 13754
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 34,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3022185,
+ "timeToEncodeInMs": 8995
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 35,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2671958,
+ "timeToEncodeInMs": 8494
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 36,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2378150,
+ "timeToEncodeInMs": 8317
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 37,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2122997,
+ "timeToEncodeInMs": 8017
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 38,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1897971,
+ "timeToEncodeInMs": 9509
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 39,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1701013,
+ "timeToEncodeInMs": 9254
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 40,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1529536,
+ "timeToEncodeInMs": 7442
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 41,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1378689,
+ "timeToEncodeInMs": 7429
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 42,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1240261,
+ "timeToEncodeInMs": 7425
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 43,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1117290,
+ "timeToEncodeInMs": 7071
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 44,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1013609,
+ "timeToEncodeInMs": 6839
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 45,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 920255,
+ "timeToEncodeInMs": 6763
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 46,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 830023,
+ "timeToEncodeInMs": 7080
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 47,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 741358,
+ "timeToEncodeInMs": 7128
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 48,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 666054,
+ "timeToEncodeInMs": 6947
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 49,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 581346,
+ "timeToEncodeInMs": 7428
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 50,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 517246,
+ "timeToEncodeInMs": 7959
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 51,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 454983,
+ "timeToEncodeInMs": 7757
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 0,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 246604324,
+ "timeToEncodeInMs": 11777
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 1,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 98887629,
+ "timeToEncodeInMs": 11928
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 2,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 90903539,
+ "timeToEncodeInMs": 12362
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 3,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 83081856,
+ "timeToEncodeInMs": 13876
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 4,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 75594990,
+ "timeToEncodeInMs": 13975
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 5,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 68409627,
+ "timeToEncodeInMs": 13241
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 6,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 61812641,
+ "timeToEncodeInMs": 12394
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 7,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 55540797,
+ "timeToEncodeInMs": 12004
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 8,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 49413975,
+ "timeToEncodeInMs": 11783
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 9,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 43612594,
+ "timeToEncodeInMs": 12132
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 10,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 38383797,
+ "timeToEncodeInMs": 13105
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 11,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 33651997,
+ "timeToEncodeInMs": 12172
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 12,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 29730600,
+ "timeToEncodeInMs": 17480
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 13,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 26389569,
+ "timeToEncodeInMs": 19595
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 14,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 23645605,
+ "timeToEncodeInMs": 43297
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 15,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 21327699,
+ "timeToEncodeInMs": 22315
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 16,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 19435573,
+ "timeToEncodeInMs": 22603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 17,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 18007002,
+ "timeToEncodeInMs": 20885
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 18,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 17126255,
+ "timeToEncodeInMs": 18942
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 19,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 16249972,
+ "timeToEncodeInMs": 29963
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 20,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 15200205,
+ "timeToEncodeInMs": 22438
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 21,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 14111418,
+ "timeToEncodeInMs": 19990
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 22,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 13066738,
+ "timeToEncodeInMs": 16022
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 23,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 12037412,
+ "timeToEncodeInMs": 14112
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 24,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 10868134,
+ "timeToEncodeInMs": 12423
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 25,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 9672964,
+ "timeToEncodeInMs": 11603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 26,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 8527982,
+ "timeToEncodeInMs": 11265
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 27,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 7478470,
+ "timeToEncodeInMs": 10576
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 28,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 6532610,
+ "timeToEncodeInMs": 9697
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 29,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5724305,
+ "timeToEncodeInMs": 9413
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 30,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5022907,
+ "timeToEncodeInMs": 9078
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 31,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 4424114,
+ "timeToEncodeInMs": 13898
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 32,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3894945,
+ "timeToEncodeInMs": 16242
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 33,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3426716,
+ "timeToEncodeInMs": 13754
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 34,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3022185,
+ "timeToEncodeInMs": 8995
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 35,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2671958,
+ "timeToEncodeInMs": 8494
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 36,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2378150,
+ "timeToEncodeInMs": 8317
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 37,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2122997,
+ "timeToEncodeInMs": 8017
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 38,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1897971,
+ "timeToEncodeInMs": 9509
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 39,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1701013,
+ "timeToEncodeInMs": 9254
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 40,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1529536,
+ "timeToEncodeInMs": 7442
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 41,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1378689,
+ "timeToEncodeInMs": 7429
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 42,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1240261,
+ "timeToEncodeInMs": 7425
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 43,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1117290,
+ "timeToEncodeInMs": 7071
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 44,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1013609,
+ "timeToEncodeInMs": 6839
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 45,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 920255,
+ "timeToEncodeInMs": 6763
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 46,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 830023,
+ "timeToEncodeInMs": 7080
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 47,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 741358,
+ "timeToEncodeInMs": 7128
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 48,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 666054,
+ "timeToEncodeInMs": 6947
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 49,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 581346,
+ "timeToEncodeInMs": 7428
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 50,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 517246,
+ "timeToEncodeInMs": 7959
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 51,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 454983,
+ "timeToEncodeInMs": 7757
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 0,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 246604324,
+ "timeToEncodeInMs": 11777
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 1,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 98887629,
+ "timeToEncodeInMs": 11928
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 2,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 90903539,
+ "timeToEncodeInMs": 12362
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 3,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 83081856,
+ "timeToEncodeInMs": 13876
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 4,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 75594990,
+ "timeToEncodeInMs": 13975
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 5,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 68409627,
+ "timeToEncodeInMs": 13241
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 6,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 61812641,
+ "timeToEncodeInMs": 12394
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 7,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 55540797,
+ "timeToEncodeInMs": 12004
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 8,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 49413975,
+ "timeToEncodeInMs": 11783
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 9,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 43612594,
+ "timeToEncodeInMs": 12132
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 10,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 38383797,
+ "timeToEncodeInMs": 13105
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 11,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 33651997,
+ "timeToEncodeInMs": 12172
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 12,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 29730600,
+ "timeToEncodeInMs": 17480
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 13,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 26389569,
+ "timeToEncodeInMs": 19595
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 14,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 23645605,
+ "timeToEncodeInMs": 43297
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 15,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 21327699,
+ "timeToEncodeInMs": 22315
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 16,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 19435573,
+ "timeToEncodeInMs": 22603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 17,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 18007002,
+ "timeToEncodeInMs": 20885
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 18,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 17126255,
+ "timeToEncodeInMs": 18942
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 19,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 16249972,
+ "timeToEncodeInMs": 29963
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 20,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 15200205,
+ "timeToEncodeInMs": 22438
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 21,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 14111418,
+ "timeToEncodeInMs": 19990
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 22,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 13066738,
+ "timeToEncodeInMs": 16022
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 23,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 12037412,
+ "timeToEncodeInMs": 14112
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 24,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 10868134,
+ "timeToEncodeInMs": 12423
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 25,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 9672964,
+ "timeToEncodeInMs": 11603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 26,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 8527982,
+ "timeToEncodeInMs": 11265
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 27,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 7478470,
+ "timeToEncodeInMs": 10576
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 28,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 6532610,
+ "timeToEncodeInMs": 9697
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 29,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5724305,
+ "timeToEncodeInMs": 9413
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 30,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5022907,
+ "timeToEncodeInMs": 9078
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 31,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 4424114,
+ "timeToEncodeInMs": 13898
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 32,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3894945,
+ "timeToEncodeInMs": 16242
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 33,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3426716,
+ "timeToEncodeInMs": 13754
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 34,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3022185,
+ "timeToEncodeInMs": 8995
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 35,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2671958,
+ "timeToEncodeInMs": 8494
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 36,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2378150,
+ "timeToEncodeInMs": 8317
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 37,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2122997,
+ "timeToEncodeInMs": 8017
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 38,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1897971,
+ "timeToEncodeInMs": 9509
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 39,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1701013,
+ "timeToEncodeInMs": 9254
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 40,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1529536,
+ "timeToEncodeInMs": 7442
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 41,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1378689,
+ "timeToEncodeInMs": 7429
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 42,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1240261,
+ "timeToEncodeInMs": 7425
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 43,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1117290,
+ "timeToEncodeInMs": 7071
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 44,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1013609,
+ "timeToEncodeInMs": 6839
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 45,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 920255,
+ "timeToEncodeInMs": 6763
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 46,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 830023,
+ "timeToEncodeInMs": 7080
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 47,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 741358,
+ "timeToEncodeInMs": 7128
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 48,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 666054,
+ "timeToEncodeInMs": 6947
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 49,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 581346,
+ "timeToEncodeInMs": 7428
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 50,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 517246,
+ "timeToEncodeInMs": 7959
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 51,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 454983,
+ "timeToEncodeInMs": 7757
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 0,
+ "type": "crf"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 444365459,
+ "timeToEncodeInMs": 151786
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 1,
+ "type": "crf"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 398444341,
+ "timeToEncodeInMs": 167196
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 2,
+ "type": "crf"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 357021513,
+ "timeToEncodeInMs": 175792
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 0,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 246604324,
+ "timeToEncodeInMs": 11777
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 1,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 98887629,
+ "timeToEncodeInMs": 11928
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 2,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 90903539,
+ "timeToEncodeInMs": 12362
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 3,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 83081856,
+ "timeToEncodeInMs": 13876
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 4,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 75594990,
+ "timeToEncodeInMs": 13975
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 5,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 68409627,
+ "timeToEncodeInMs": 13241
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 6,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 61812641,
+ "timeToEncodeInMs": 12394
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 7,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 55540797,
+ "timeToEncodeInMs": 12004
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 8,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 49413975,
+ "timeToEncodeInMs": 11783
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 9,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 43612594,
+ "timeToEncodeInMs": 12132
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 10,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 38383797,
+ "timeToEncodeInMs": 13105
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 11,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 33651997,
+ "timeToEncodeInMs": 12172
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 12,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 29730600,
+ "timeToEncodeInMs": 17480
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 13,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 26389569,
+ "timeToEncodeInMs": 19595
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 14,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 23645605,
+ "timeToEncodeInMs": 43297
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 15,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 21327699,
+ "timeToEncodeInMs": 22315
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 16,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 19435573,
+ "timeToEncodeInMs": 22603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 17,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 18007002,
+ "timeToEncodeInMs": 20885
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 18,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 17126255,
+ "timeToEncodeInMs": 18942
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 19,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 16249972,
+ "timeToEncodeInMs": 29963
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 20,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 15200205,
+ "timeToEncodeInMs": 22438
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 21,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 14111418,
+ "timeToEncodeInMs": 19990
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 22,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 13066738,
+ "timeToEncodeInMs": 16022
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 23,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 12037412,
+ "timeToEncodeInMs": 14112
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 24,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 10868134,
+ "timeToEncodeInMs": 12423
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 25,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 9672964,
+ "timeToEncodeInMs": 11603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 26,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 8527982,
+ "timeToEncodeInMs": 11265
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 27,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 7478470,
+ "timeToEncodeInMs": 10576
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 28,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 6532610,
+ "timeToEncodeInMs": 9697
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 29,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5724305,
+ "timeToEncodeInMs": 9413
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 30,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5022907,
+ "timeToEncodeInMs": 9078
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 31,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 4424114,
+ "timeToEncodeInMs": 13898
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 32,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3894945,
+ "timeToEncodeInMs": 16242
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 33,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3426716,
+ "timeToEncodeInMs": 13754
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 34,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3022185,
+ "timeToEncodeInMs": 8995
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 35,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2671958,
+ "timeToEncodeInMs": 8494
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 36,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2378150,
+ "timeToEncodeInMs": 8317
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 37,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2122997,
+ "timeToEncodeInMs": 8017
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 38,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1897971,
+ "timeToEncodeInMs": 9509
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 39,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1701013,
+ "timeToEncodeInMs": 9254
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 40,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1529536,
+ "timeToEncodeInMs": 7442
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 41,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1378689,
+ "timeToEncodeInMs": 7429
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 42,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1240261,
+ "timeToEncodeInMs": 7425
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 43,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1117290,
+ "timeToEncodeInMs": 7071
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 44,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1013609,
+ "timeToEncodeInMs": 6839
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 45,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 920255,
+ "timeToEncodeInMs": 6763
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 46,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 830023,
+ "timeToEncodeInMs": 7080
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 47,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 741358,
+ "timeToEncodeInMs": 7128
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 48,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 666054,
+ "timeToEncodeInMs": 6947
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 49,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 581346,
+ "timeToEncodeInMs": 7428
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 50,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 517246,
+ "timeToEncodeInMs": 7959
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 51,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 454983,
+ "timeToEncodeInMs": 7757
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 0,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 246604324,
+ "timeToEncodeInMs": 11777
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 1,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 98887629,
+ "timeToEncodeInMs": 11928
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 2,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 90903539,
+ "timeToEncodeInMs": 12362
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 3,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 83081856,
+ "timeToEncodeInMs": 13876
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 4,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 75594990,
+ "timeToEncodeInMs": 13975
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 5,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 68409627,
+ "timeToEncodeInMs": 13241
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 6,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 61812641,
+ "timeToEncodeInMs": 12394
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 7,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 55540797,
+ "timeToEncodeInMs": 12004
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 8,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 49413975,
+ "timeToEncodeInMs": 11783
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 9,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 43612594,
+ "timeToEncodeInMs": 12132
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 10,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 38383797,
+ "timeToEncodeInMs": 13105
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 11,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 33651997,
+ "timeToEncodeInMs": 12172
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 12,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 29730600,
+ "timeToEncodeInMs": 17480
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 13,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 26389569,
+ "timeToEncodeInMs": 19595
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 14,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 23645605,
+ "timeToEncodeInMs": 43297
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 15,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 21327699,
+ "timeToEncodeInMs": 22315
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 16,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 19435573,
+ "timeToEncodeInMs": 22603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 17,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 18007002,
+ "timeToEncodeInMs": 20885
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 18,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 17126255,
+ "timeToEncodeInMs": 18942
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 19,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 16249972,
+ "timeToEncodeInMs": 29963
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 20,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 15200205,
+ "timeToEncodeInMs": 22438
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 21,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 14111418,
+ "timeToEncodeInMs": 19990
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 22,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 13066738,
+ "timeToEncodeInMs": 16022
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 23,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 12037412,
+ "timeToEncodeInMs": 14112
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 24,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 10868134,
+ "timeToEncodeInMs": 12423
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 25,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 9672964,
+ "timeToEncodeInMs": 11603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 26,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 8527982,
+ "timeToEncodeInMs": 11265
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 27,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 7478470,
+ "timeToEncodeInMs": 10576
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 28,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 6532610,
+ "timeToEncodeInMs": 9697
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 29,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5724305,
+ "timeToEncodeInMs": 9413
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 30,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5022907,
+ "timeToEncodeInMs": 9078
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 31,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 4424114,
+ "timeToEncodeInMs": 13898
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 32,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3894945,
+ "timeToEncodeInMs": 16242
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 33,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3426716,
+ "timeToEncodeInMs": 13754
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 34,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3022185,
+ "timeToEncodeInMs": 8995
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 35,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2671958,
+ "timeToEncodeInMs": 8494
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 36,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2378150,
+ "timeToEncodeInMs": 8317
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 37,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2122997,
+ "timeToEncodeInMs": 8017
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 38,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1897971,
+ "timeToEncodeInMs": 9509
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 39,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1701013,
+ "timeToEncodeInMs": 9254
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 40,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1529536,
+ "timeToEncodeInMs": 7442
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 41,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1378689,
+ "timeToEncodeInMs": 7429
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 42,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1240261,
+ "timeToEncodeInMs": 7425
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 43,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1117290,
+ "timeToEncodeInMs": 7071
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 44,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1013609,
+ "timeToEncodeInMs": 6839
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 45,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 920255,
+ "timeToEncodeInMs": 6763
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 46,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 830023,
+ "timeToEncodeInMs": 7080
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 47,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 741358,
+ "timeToEncodeInMs": 7128
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 48,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 666054,
+ "timeToEncodeInMs": 6947
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 49,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 581346,
+ "timeToEncodeInMs": 7428
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 50,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 517246,
+ "timeToEncodeInMs": 7959
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 51,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 454983,
+ "timeToEncodeInMs": 7757
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 0,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 246604324,
+ "timeToEncodeInMs": 11777
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 1,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 98887629,
+ "timeToEncodeInMs": 11928
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 2,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 90903539,
+ "timeToEncodeInMs": 12362
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 3,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 83081856,
+ "timeToEncodeInMs": 13876
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 4,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 75594990,
+ "timeToEncodeInMs": 13975
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 5,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 68409627,
+ "timeToEncodeInMs": 13241
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 6,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 61812641,
+ "timeToEncodeInMs": 12394
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 7,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 55540797,
+ "timeToEncodeInMs": 12004
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 8,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 49413975,
+ "timeToEncodeInMs": 11783
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 9,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 43612594,
+ "timeToEncodeInMs": 12132
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 10,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 38383797,
+ "timeToEncodeInMs": 13105
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 11,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 33651997,
+ "timeToEncodeInMs": 12172
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 12,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 29730600,
+ "timeToEncodeInMs": 17480
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 13,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 26389569,
+ "timeToEncodeInMs": 19595
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 14,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 23645605,
+ "timeToEncodeInMs": 43297
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 15,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 21327699,
+ "timeToEncodeInMs": 22315
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 16,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 19435573,
+ "timeToEncodeInMs": 22603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 17,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 18007002,
+ "timeToEncodeInMs": 20885
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 18,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 17126255,
+ "timeToEncodeInMs": 18942
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 19,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 16249972,
+ "timeToEncodeInMs": 29963
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 20,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 15200205,
+ "timeToEncodeInMs": 22438
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 21,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 14111418,
+ "timeToEncodeInMs": 19990
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 22,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 13066738,
+ "timeToEncodeInMs": 16022
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 23,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 12037412,
+ "timeToEncodeInMs": 14112
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 24,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 10868134,
+ "timeToEncodeInMs": 12423
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 25,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 9672964,
+ "timeToEncodeInMs": 11603
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 26,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 8527982,
+ "timeToEncodeInMs": 11265
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 27,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 7478470,
+ "timeToEncodeInMs": 10576
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 28,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 6532610,
+ "timeToEncodeInMs": 9697
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 29,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5724305,
+ "timeToEncodeInMs": 9413
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 30,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 5022907,
+ "timeToEncodeInMs": 9078
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 31,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 4424114,
+ "timeToEncodeInMs": 13898
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 32,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3894945,
+ "timeToEncodeInMs": 16242
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 33,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3426716,
+ "timeToEncodeInMs": 13754
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 34,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3022185,
+ "timeToEncodeInMs": 8995
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 35,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2671958,
+ "timeToEncodeInMs": 8494
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 36,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2378150,
+ "timeToEncodeInMs": 8317
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 37,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 2122997,
+ "timeToEncodeInMs": 8017
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 38,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1897971,
+ "timeToEncodeInMs": 9509
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 39,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1701013,
+ "timeToEncodeInMs": 9254
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 40,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1529536,
+ "timeToEncodeInMs": 7442
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 41,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1378689,
+ "timeToEncodeInMs": 7429
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 42,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1240261,
+ "timeToEncodeInMs": 7425
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 43,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1117290,
+ "timeToEncodeInMs": 7071
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 44,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 1013609,
+ "timeToEncodeInMs": 6839
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 45,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 920255,
+ "timeToEncodeInMs": 6763
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 46,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 830023,
+ "timeToEncodeInMs": 7080
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 47,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 741358,
+ "timeToEncodeInMs": 7128
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 48,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 666054,
+ "timeToEncodeInMs": 6947
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 49,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 581346,
+ "timeToEncodeInMs": 7428
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 50,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 517246,
+ "timeToEncodeInMs": 7959
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 51,
+ "type": "crf"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 454983,
+ "timeToEncodeInMs": 7757
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 1,
+ "type": "crf"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 398444341,
+ "timeToEncodeInMs": 167196
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "crf": 2,
+ "type": "crf"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 357021513,
+ "timeToEncodeInMs": 175792
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "500000"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 3778859,
+ "timeToEncodeInMs": 3798
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "1000000"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 7542953,
+ "timeToEncodeInMs": 3803
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "2000000"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 14869133,
+ "timeToEncodeInMs": 3792
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "3000000"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 22058520,
+ "timeToEncodeInMs": 3835
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "4000000"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 29263288,
+ "timeToEncodeInMs": 3869
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "5000000"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 36335336,
+ "timeToEncodeInMs": 3928
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "6000000"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 43446418,
+ "timeToEncodeInMs": 3970
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "7000000"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 50573128,
+ "timeToEncodeInMs": 3985
+ },
+ {
+ "filename": "bigbuckbunny.mp4",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "8000000"
+ },
+ "width": 1280,
+ "height": 720,
+ "fps": 24,
+ "durationInSeconds": 60,
+ "size": 57469676,
+ "timeToEncodeInMs": 4008
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 3
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 320193887,
+ "timeToEncodeInMs": 206649
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 4
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 287365266,
+ "timeToEncodeInMs": 244951
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 5
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 258048513,
+ "timeToEncodeInMs": 279582
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 6
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 232030802,
+ "timeToEncodeInMs": 309354
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 7
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 208775556,
+ "timeToEncodeInMs": 299031
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 8
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 187671654,
+ "timeToEncodeInMs": 260517
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 9
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 168542921,
+ "timeToEncodeInMs": 207770
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 10
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 150963889,
+ "timeToEncodeInMs": 212364
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 11
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 134773325,
+ "timeToEncodeInMs": 223136
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 12
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 119903697,
+ "timeToEncodeInMs": 205683
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 13
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 106117969,
+ "timeToEncodeInMs": 184638
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 14
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 93354172,
+ "timeToEncodeInMs": 180160
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 15
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 81503450,
+ "timeToEncodeInMs": 178905
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 16
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 70527992,
+ "timeToEncodeInMs": 156085
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 17
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 60482314,
+ "timeToEncodeInMs": 143540
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 18
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 51468476,
+ "timeToEncodeInMs": 140512
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 19
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 43499253,
+ "timeToEncodeInMs": 132588
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 20
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 36499378,
+ "timeToEncodeInMs": 127633
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 21
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 30534133,
+ "timeToEncodeInMs": 118942
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 22
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 25541713,
+ "timeToEncodeInMs": 115276
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 23
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 21475560,
+ "timeToEncodeInMs": 109353
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 24
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 18242168,
+ "timeToEncodeInMs": 104462
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 25
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 15643919,
+ "timeToEncodeInMs": 102861
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 26
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 13542768,
+ "timeToEncodeInMs": 97372
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 27
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 11800382,
+ "timeToEncodeInMs": 96759
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 28
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 10349169,
+ "timeToEncodeInMs": 93897
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 29
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 9146009,
+ "timeToEncodeInMs": 91426
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 30
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 8119224,
+ "timeToEncodeInMs": 89986
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 31
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 7266917,
+ "timeToEncodeInMs": 86744
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 32
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 6540337,
+ "timeToEncodeInMs": 87596
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 33
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 5938219,
+ "timeToEncodeInMs": 84750
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 34
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 5406400,
+ "timeToEncodeInMs": 78658
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 35
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 4957195,
+ "timeToEncodeInMs": 67139
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 36
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 4553306,
+ "timeToEncodeInMs": 68876
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 37
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 4213039,
+ "timeToEncodeInMs": 69359
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 38
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 3892723,
+ "timeToEncodeInMs": 68564
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 39
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 3622088,
+ "timeToEncodeInMs": 68043
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 40
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 3377395,
+ "timeToEncodeInMs": 65807
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 41
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 3143006,
+ "timeToEncodeInMs": 63255
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 42
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 2948517,
+ "timeToEncodeInMs": 63229
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 43
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 2771683,
+ "timeToEncodeInMs": 62379
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 44
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 2607742,
+ "timeToEncodeInMs": 61932
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 45
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 2460915,
+ "timeToEncodeInMs": 60120
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 46
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 2275453,
+ "timeToEncodeInMs": 64899
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 47
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 2133352,
+ "timeToEncodeInMs": 69417
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 48
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 1993645,
+ "timeToEncodeInMs": 65603
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 49
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 1875386,
+ "timeToEncodeInMs": 60261
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 50
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 1765278,
+ "timeToEncodeInMs": 55183
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "libx264",
+ "quality": {
+ "type": "crf",
+ "crf": 51
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 1654051,
+ "timeToEncodeInMs": 53485
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "500000"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 4586903,
+ "timeToEncodeInMs": 10275
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "1000000"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 4597140,
+ "timeToEncodeInMs": 10975
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "2000000"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 4704589,
+ "timeToEncodeInMs": 11032
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "3000000"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 5005355,
+ "timeToEncodeInMs": 11023
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "4000000"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 6311372,
+ "timeToEncodeInMs": 11111
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "5000000"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 7877722,
+ "timeToEncodeInMs": 11152
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "6000000"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 9447452,
+ "timeToEncodeInMs": 11124
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "7000000"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 10974363,
+ "timeToEncodeInMs": 11216
+ },
+ {
+ "filename": "iphonevideo.mov",
+ "encoder": "h264_videotoolbox",
+ "quality": {
+ "type": "bitrate",
+ "value": "8000000"
+ },
+ "width": 2160,
+ "height": 3840,
+ "fps": 29.99602174777881,
+ "durationInSeconds": 12.568333333333333,
+ "size": 12553090,
+ "timeToEncodeInMs": 10837
+ }
+]
diff --git a/packages/it-tests/src/size-benchmark/run-benchmark.ts b/packages/it-tests/src/size-benchmark/run-benchmark.ts
index 3e04c53877d..37bc767e841 100644
--- a/packages/it-tests/src/size-benchmark/run-benchmark.ts
+++ b/packages/it-tests/src/size-benchmark/run-benchmark.ts
@@ -1,9 +1,9 @@
-import {parseMedia} from '@remotion/media-parser';
-import {nodeReader} from '@remotion/media-parser/node';
-import {$} from 'bun';
import fs from 'fs';
import os from 'os';
import path from 'path';
+import {parseMedia} from '@remotion/media-parser';
+import {nodeReader} from '@remotion/media-parser/node';
+import {$} from 'bun';
import {hasBenchmark} from './persistance';
import {BenchmarkItem, getBenchmarkKey, QualityControl} from './types';
diff --git a/packages/it-tests/src/ssr/cancel-after-success.test.ts b/packages/it-tests/src/ssr/cancel-after-success.test.ts
index d73a8c78558..ca4fb988668 100644
--- a/packages/it-tests/src/ssr/cancel-after-success.test.ts
+++ b/packages/it-tests/src/ssr/cancel-after-success.test.ts
@@ -1,7 +1,7 @@
-import {makeCancelSignal, renderMedia} from '@remotion/renderer';
import {test} from 'bun:test';
import fs from 'fs';
import path from 'path';
+import {makeCancelSignal, renderMedia} from '@remotion/renderer';
test('Cancelling after success should not throw error', async () => {
const {cancel, cancelSignal} = makeCancelSignal();
diff --git a/packages/it-tests/src/ssr/cancel-renderframes.test.ts b/packages/it-tests/src/ssr/cancel-renderframes.test.ts
index 5e5562fe3bf..b134962ed6d 100644
--- a/packages/it-tests/src/ssr/cancel-renderframes.test.ts
+++ b/packages/it-tests/src/ssr/cancel-renderframes.test.ts
@@ -1,9 +1,9 @@
+import {beforeAll, expect, test} from 'bun:test';
import {
ensureBrowser,
makeCancelSignal,
renderFrames,
} from '@remotion/renderer';
-import {beforeAll, expect, test} from 'bun:test';
beforeAll(async () => {
await ensureBrowser();
diff --git a/packages/it-tests/src/ssr/cancel-rendermedia.test.ts b/packages/it-tests/src/ssr/cancel-rendermedia.test.ts
index 67a2e5046d1..3279aa1588f 100644
--- a/packages/it-tests/src/ssr/cancel-rendermedia.test.ts
+++ b/packages/it-tests/src/ssr/cancel-rendermedia.test.ts
@@ -1,5 +1,5 @@
-import {makeCancelSignal, renderMedia} from '@remotion/renderer';
import {expect, test} from 'bun:test';
+import {makeCancelSignal, renderMedia} from '@remotion/renderer';
test('Should be able to cancel render', async () => {
try {
diff --git a/packages/it-tests/src/ssr/cancel-renderstill.test.ts b/packages/it-tests/src/ssr/cancel-renderstill.test.ts
index 09ce420ea1f..19703797bf0 100644
--- a/packages/it-tests/src/ssr/cancel-renderstill.test.ts
+++ b/packages/it-tests/src/ssr/cancel-renderstill.test.ts
@@ -1,5 +1,5 @@
-import {makeCancelSignal, renderStill} from '@remotion/renderer';
import {expect, test} from 'bun:test';
+import {makeCancelSignal, renderStill} from '@remotion/renderer';
test('Should be able to cancel render', async () => {
try {
diff --git a/packages/it-tests/src/ssr/fatal-error-correct-error.test.ts b/packages/it-tests/src/ssr/fatal-error-correct-error.test.ts
index ef8c94a94e7..6e8378d731d 100644
--- a/packages/it-tests/src/ssr/fatal-error-correct-error.test.ts
+++ b/packages/it-tests/src/ssr/fatal-error-correct-error.test.ts
@@ -1,5 +1,5 @@
-import {renderMedia} from '@remotion/renderer';
import {expect, test} from 'bun:test';
+import {renderMedia} from '@remotion/renderer';
test('Fatal error on frame 10 should yield correct error', async () => {
await expect(() => {
diff --git a/packages/it-tests/src/ssr/render-frames.test.ts b/packages/it-tests/src/ssr/render-frames.test.ts
index f5f6d1c2c52..ab49ac64df4 100644
--- a/packages/it-tests/src/ssr/render-frames.test.ts
+++ b/packages/it-tests/src/ssr/render-frames.test.ts
@@ -1,3 +1,7 @@
+import {expect, test} from 'bun:test';
+import fs from 'fs';
+import os from 'os';
+import path from 'path';
import {
RenderInternals,
getCompositions,
@@ -5,10 +9,6 @@ import {
renderFrames,
stitchFramesToVideo,
} from '@remotion/renderer';
-import {expect, test} from 'bun:test';
-import fs from 'fs';
-import os from 'os';
-import path from 'path';
test('Legacy SSR way of rendering videos should still work', async () => {
const puppeteerInstance = await openBrowser('chrome');
diff --git a/packages/it-tests/src/ssr/render-media.test.ts b/packages/it-tests/src/ssr/render-media.test.ts
index 487997b1165..ae4ad8c6caa 100644
--- a/packages/it-tests/src/ssr/render-media.test.ts
+++ b/packages/it-tests/src/ssr/render-media.test.ts
@@ -1,8 +1,8 @@
-import {getCompositions, openBrowser, renderMedia} from '@remotion/renderer';
import {expect, test} from 'bun:test';
import {existsSync} from 'fs';
import os from 'os';
import path from 'path';
+import {getCompositions, openBrowser, renderMedia} from '@remotion/renderer';
test(
'Render video with browser instance open',
diff --git a/packages/it-tests/src/ssr/render-still.test.ts b/packages/it-tests/src/ssr/render-still.test.ts
index e70172bf5c8..196ccd950dd 100644
--- a/packages/it-tests/src/ssr/render-still.test.ts
+++ b/packages/it-tests/src/ssr/render-still.test.ts
@@ -1,13 +1,13 @@
+import {beforeAll, expect, test} from 'bun:test';
+import {existsSync} from 'fs';
+import os from 'os';
+import path from 'path';
import {
ensureBrowser,
getCompositions,
openBrowser,
renderStill,
} from '@remotion/renderer';
-import {beforeAll, expect, test} from 'bun:test';
-import {existsSync} from 'fs';
-import os from 'os';
-import path from 'path';
beforeAll(async () => {
await ensureBrowser();
diff --git a/packages/it-tests/src/templates/publish.ts b/packages/it-tests/src/templates/publish.ts
index d57fdb528a2..ce22e984f4d 100644
--- a/packages/it-tests/src/templates/publish.ts
+++ b/packages/it-tests/src/templates/publish.ts
@@ -1,8 +1,8 @@
-import {$} from 'bun';
-import {CreateVideoInternals} from 'create-video';
import {cpSync} from 'node:fs';
import {tmpdir} from 'node:os';
import path from 'path';
+import {$} from 'bun';
+import {CreateVideoInternals} from 'create-video';
type MinimalTemplate = {
shortName: string;
diff --git a/packages/it-tests/src/templates/validate-templates.test.ts b/packages/it-tests/src/templates/validate-templates.test.ts
index eba23c12c1b..31c0d61db76 100644
--- a/packages/it-tests/src/templates/validate-templates.test.ts
+++ b/packages/it-tests/src/templates/validate-templates.test.ts
@@ -1,7 +1,7 @@
import {describe, expect, it} from 'bun:test';
-import {CreateVideoInternals, Template} from 'create-video';
import {existsSync, readFileSync} from 'node:fs';
import path from 'node:path';
+import {CreateVideoInternals, Template} from 'create-video';
const {FEATURED_TEMPLATES} = CreateVideoInternals;
diff --git a/packages/lambda-client/README.md b/packages/lambda-client/README.md
index a9d81115d43..e530fa5289d 100644
--- a/packages/lambda-client/README.md
+++ b/packages/lambda-client/README.md
@@ -1,5 +1,5 @@
# @remotion/lambda-client
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/lambda-client/package.json b/packages/lambda-client/package.json
index b01bc323bd0..4d9679a45e3 100644
--- a/packages/lambda-client/package.json
+++ b/packages/lambda-client/package.json
@@ -7,7 +7,7 @@
"main": "dist/cjs/index.js",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"test": "bun test src",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
diff --git a/packages/lambda-client/src/aws-provider.ts b/packages/lambda-client/src/aws-provider.ts
index 96259394fef..259a81cf45b 100644
--- a/packages/lambda-client/src/aws-provider.ts
+++ b/packages/lambda-client/src/aws-provider.ts
@@ -22,10 +22,10 @@ export type AwsProvider = {
requestHandler: RequestHandler | null | undefined;
};
+import {EventEmitter} from 'node:events';
import type {StorageClass} from '@aws-sdk/client-s3';
import type {ProviderSpecifics} from '@remotion/serverless-client';
import {expiryDays} from '@remotion/serverless-client';
-import {EventEmitter} from 'node:events';
import {bucketExistsInRegionImplementation} from './bucket-exists';
import {callFunctionAsyncImplementation} from './call-lambda-async';
import {callFunctionWithStreamingImplementation} from './call-lambda-streaming';
diff --git a/packages/lambda-client/src/make-lambda-payload.ts b/packages/lambda-client/src/make-lambda-payload.ts
index c98c2852ca1..8bdc4a6cb22 100644
--- a/packages/lambda-client/src/make-lambda-payload.ts
+++ b/packages/lambda-client/src/make-lambda-payload.ts
@@ -1,3 +1,4 @@
+import type {StorageClass} from '@aws-sdk/client-s3';
import type {
_InternalTypes,
AudioCodec,
@@ -29,11 +30,9 @@ import {
validateDownloadBehavior,
VERSION,
} from '@remotion/serverless-client';
+import {validateWebhook} from '@remotion/serverless-client';
import type {AwsProvider} from './aws-provider';
import {awsImplementation} from './aws-provider';
-
-import type {StorageClass} from '@aws-sdk/client-s3';
-import {validateWebhook} from '@remotion/serverless-client';
import type {GetRenderProgressInput} from './get-render-progress';
import type {AwsRegion} from './regions';
import type {RenderStillOnLambdaNonNullInput} from './render-still-on-lambda';
diff --git a/packages/lambda-client/src/read-file.ts b/packages/lambda-client/src/read-file.ts
index 5b18da7068c..739db614258 100644
--- a/packages/lambda-client/src/read-file.ts
+++ b/packages/lambda-client/src/read-file.ts
@@ -1,5 +1,5 @@
-import {GetObjectCommand} from '@aws-sdk/client-s3';
import type {Readable} from 'stream';
+import {GetObjectCommand} from '@aws-sdk/client-s3';
import {getS3Client} from './get-s3-client';
import type {AwsRegion} from './regions';
import type {RequestHandler} from './types';
diff --git a/packages/lambda-client/src/render-still-on-lambda.ts b/packages/lambda-client/src/render-still-on-lambda.ts
index e5a411ef7ea..77307151886 100644
--- a/packages/lambda-client/src/render-still-on-lambda.ts
+++ b/packages/lambda-client/src/render-still-on-lambda.ts
@@ -1,3 +1,4 @@
+import type {StorageClass} from '@aws-sdk/client-s3';
import type {
BrowserSafeApis,
ChromiumOptions,
@@ -6,8 +7,6 @@ import type {
ToOptions,
} from '@remotion/serverless-client';
import {ServerlessRoutines} from '@remotion/serverless-client';
-
-import type {StorageClass} from '@aws-sdk/client-s3';
import type {
CostsInfo,
OutNameInput,
diff --git a/packages/lambda-client/src/test/concurrency-payload.test.ts b/packages/lambda-client/src/test/concurrency-payload.test.ts
index cc720cd4e92..14bbd0545df 100644
--- a/packages/lambda-client/src/test/concurrency-payload.test.ts
+++ b/packages/lambda-client/src/test/concurrency-payload.test.ts
@@ -1,5 +1,5 @@
-import {ServerlessRoutines} from '@remotion/serverless-client';
import {expect, test} from 'bun:test';
+import {ServerlessRoutines} from '@remotion/serverless-client';
import {makeLambdaRenderMediaPayload} from '../make-lambda-payload';
test('Should include concurrency field in payload', async () => {
diff --git a/packages/lambda-client/src/test/price-calculation.test.ts b/packages/lambda-client/src/test/price-calculation.test.ts
index 9182321bb51..9b7838845ee 100644
--- a/packages/lambda-client/src/test/price-calculation.test.ts
+++ b/packages/lambda-client/src/test/price-calculation.test.ts
@@ -1,5 +1,5 @@
-import {estimatePriceFromMetadata} from '@remotion/serverless-client';
import {expect, test} from 'bun:test';
+import {estimatePriceFromMetadata} from '@remotion/serverless-client';
import {awsImplementation} from '../aws-provider';
test('Should not throw while calculating prices when time shifts occur', () => {
diff --git a/packages/lambda-go-example/README.md b/packages/lambda-go-example/README.md
index 9f896b1ecb7..0825bf08af4 100644
--- a/packages/lambda-go-example/README.md
+++ b/packages/lambda-go-example/README.md
@@ -1,5 +1,5 @@
# @remotion/lambda-go-example
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/lambda-go-example/build.mjs b/packages/lambda-go-example/build.mjs
index b024583bcc1..04b103b31a8 100644
--- a/packages/lambda-go-example/build.mjs
+++ b/packages/lambda-go-example/build.mjs
@@ -1,20 +1,20 @@
-import { execSync } from "child_process";
+import {execSync} from 'child_process';
-const where = process.platform === "win32" ? "where" : "which";
+const where = process.platform === 'win32' ? 'where' : 'which';
const hasGo = () => {
- try {
- execSync(`${where} go`);
- return true;
- } catch (err) {
- console.log(err);
- return false;
- }
+ try {
+ execSync(`${where} go`);
+ return true;
+ } catch (err) {
+ console.log(err);
+ return false;
+ }
};
if (!hasGo()) {
- console.log("Environment has no Go. Skipping...");
- process.exit(0);
+ console.log('Environment has no Go. Skipping...');
+ process.exit(0);
}
-execSync("go mod tidy", { stdio: "inherit" });
-console.log("Linted lambda-go!");
+execSync('go mod tidy', {stdio: 'inherit'});
+console.log('Linted lambda-go!');
diff --git a/packages/lambda-go/README.md b/packages/lambda-go/README.md
index a87fca887b8..e70f8aef646 100644
--- a/packages/lambda-go/README.md
+++ b/packages/lambda-go/README.md
@@ -1,5 +1,5 @@
# @remotion/lambda-go
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/lambda-go/build.mjs b/packages/lambda-go/build.mjs
index 3f1c02d6930..58ca7ae99c1 100644
--- a/packages/lambda-go/build.mjs
+++ b/packages/lambda-go/build.mjs
@@ -1,20 +1,20 @@
-import { execSync } from "child_process";
+import {execSync} from 'child_process';
-const where = process.platform === "win32" ? "where" : "which";
+const where = process.platform === 'win32' ? 'where' : 'which';
const hasGo = () => {
- try {
- execSync(`${where} go`);
- return true;
- } catch (err) {
- console.log(err);
- return false;
- }
+ try {
+ execSync(`${where} go`);
+ return true;
+ } catch (err) {
+ console.log(err);
+ return false;
+ }
};
if (!hasGo()) {
- console.log("Environment has no Go. Skipping...");
- process.exit(0);
+ console.log('Environment has no Go. Skipping...');
+ process.exit(0);
}
-execSync("go build ./...", { stdio: "inherit" });
-console.log("Linted lambda-go!");
+execSync('go build ./...', {stdio: 'inherit'});
+console.log('Linted lambda-go!');
diff --git a/packages/lambda-php-example/build.mjs b/packages/lambda-php-example/build.mjs
index b978ac8b3f9..80462601cda 100644
--- a/packages/lambda-php-example/build.mjs
+++ b/packages/lambda-php-example/build.mjs
@@ -1,20 +1,20 @@
-import { execSync } from "child_process";
+import {execSync} from 'child_process';
-const where = process.platform === "win32" ? "where" : "which";
+const where = process.platform === 'win32' ? 'where' : 'which';
const hasComposer = () => {
- try {
- execSync(`${where} composer`);
- return true;
- } catch (err) {
- console.log(err);
- return false;
- }
+ try {
+ execSync(`${where} composer`);
+ return true;
+ } catch (err) {
+ console.log(err);
+ return false;
+ }
};
if (!hasComposer()) {
- console.log("Environment has no Composer. Skipping...");
- process.exit(0);
+ console.log('Environment has no Composer. Skipping...');
+ process.exit(0);
}
-execSync("composer install --quiet", { stdio: "inherit" });
-console.log("composer installed deps.");
+execSync('composer install --quiet', {stdio: 'inherit'});
+console.log('composer installed deps.');
diff --git a/packages/lambda-php-example/composer.json b/packages/lambda-php-example/composer.json
index ee970baa459..20bcfd55a3a 100644
--- a/packages/lambda-php-example/composer.json
+++ b/packages/lambda-php-example/composer.json
@@ -1,24 +1,24 @@
{
- "name": "remotion/lambda-php-example",
- "type": "project",
- "description": "Example project for using Remotion Lambda PHP",
- "scripts": {
- "render": "php src/render.php"
- },
- "autoload": {
- "psr-4": {
- "remotion\\LambdaPhpExample\\": "src/"
- }
- },
- "authors": [],
- "repositories": [
- {
- "type": "path",
- "url": "../lambda-php"
- }
- ],
- "require": {
- "vlucas/phpdotenv": "^5.5",
- "remotion/lambda": "4.0.428"
- }
+ "name": "remotion/lambda-php-example",
+ "type": "project",
+ "description": "Example project for using Remotion Lambda PHP",
+ "scripts": {
+ "render": "php src/render.php"
+ },
+ "autoload": {
+ "psr-4": {
+ "remotion\\LambdaPhpExample\\": "src/"
+ }
+ },
+ "authors": [],
+ "repositories": [
+ {
+ "type": "path",
+ "url": "../lambda-php"
+ }
+ ],
+ "require": {
+ "vlucas/phpdotenv": "^5.5",
+ "remotion/lambda": "4.0.428"
+ }
}
diff --git a/packages/lambda-php/README.md b/packages/lambda-php/README.md
index b66328af237..47e203d5541 100644
--- a/packages/lambda-php/README.md
+++ b/packages/lambda-php/README.md
@@ -1,5 +1,5 @@
# @remotion/lambda-php
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/lambda-php/build.mjs b/packages/lambda-php/build.mjs
index 66ce49a621c..19d6c299ba6 100644
--- a/packages/lambda-php/build.mjs
+++ b/packages/lambda-php/build.mjs
@@ -1,24 +1,24 @@
-import { execSync } from "child_process";
+import {execSync} from 'child_process';
-const where = process.platform === "win32" ? "where" : "which";
+const where = process.platform === 'win32' ? 'where' : 'which';
const hasComposer = () => {
- try {
- execSync(`${where} php`);
- return true;
- } catch (err) {
- console.log(err);
- return false;
- }
+ try {
+ execSync(`${where} php`);
+ return true;
+ } catch (err) {
+ console.log(err);
+ return false;
+ }
};
if (!hasComposer()) {
- if (process.env.CI) {
- console.log("CI Environment has no Composer.");
- process.exit(1);
- }
- console.log("Environment has no Composer. Skipping...");
- process.exit(0);
+ if (process.env.CI) {
+ console.log('CI Environment has no Composer.');
+ process.exit(1);
+ }
+ console.log('Environment has no Composer. Skipping...');
+ process.exit(0);
}
-execSync("php composer.phar install", { stdio: "inherit" });
-console.log("composer installed deps.");
+execSync('php composer.phar install', {stdio: 'inherit'});
+console.log('composer installed deps.');
diff --git a/packages/lambda-php/composer.json b/packages/lambda-php/composer.json
index 08196f6429e..99b4158e243 100644
--- a/packages/lambda-php/composer.json
+++ b/packages/lambda-php/composer.json
@@ -1,22 +1,22 @@
{
- "name": "remotion/lambda",
- "type": "library",
- "version": "4.0.428",
- "description": "A PHP library for working with Remotion Lambda",
- "license": "proprietary",
- "autoload": {
- "psr-4": {
- "Remotion\\LambdaPhp\\": "src/",
- "Remotion\\LambdaPhp\\Tests\\": "tests/"
- }
- },
- "require": {
- "aws/aws-sdk-php": "^3.269"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.1"
- },
- "scripts": {
- "test": "phpunit tests"
- }
+ "name": "remotion/lambda",
+ "type": "library",
+ "version": "4.0.428",
+ "description": "A PHP library for working with Remotion Lambda",
+ "license": "proprietary",
+ "autoload": {
+ "psr-4": {
+ "Remotion\\LambdaPhp\\": "src/",
+ "Remotion\\LambdaPhp\\Tests\\": "tests/"
+ }
+ },
+ "require": {
+ "aws/aws-sdk-php": "^3.269"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.1"
+ },
+ "scripts": {
+ "test": "phpunit tests"
+ }
}
diff --git a/packages/lambda-python/README.md b/packages/lambda-python/README.md
index 7fe541db98b..b950a7d0242 100644
--- a/packages/lambda-python/README.md
+++ b/packages/lambda-python/README.md
@@ -1,5 +1,5 @@
# @remotion/lambda-python
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/lambda-python/build.mjs b/packages/lambda-python/build.mjs
index 2fa258f19b7..a403d263ef9 100644
--- a/packages/lambda-python/build.mjs
+++ b/packages/lambda-python/build.mjs
@@ -1,33 +1,33 @@
-import { execSync } from "child_process";
+import {execSync} from 'child_process';
-const where = process.platform === "win32" ? "where" : "which";
+const where = process.platform === 'win32' ? 'where' : 'which';
const hasPython = () => {
- try {
- execSync(`${where} python`);
- return true;
- } catch (err) {
- return false;
- }
+ try {
+ execSync(`${where} python`);
+ return true;
+ } catch (err) {
+ return false;
+ }
};
if (!hasPython()) {
- console.log("Environment has no Python. Skipping...");
- process.exit(0);
+ console.log('Environment has no Python. Skipping...');
+ process.exit(0);
}
const commands = [
- "python -m venv remotion-env-lint",
- ". ./remotion-env-lint/bin/activate",
- "pip install boto3 pylint mypy 'boto3-stubs[essential]'",
- "pylint ./remotion_lambda",
- "mypy ./remotion_lambda",
- "deactivate",
- "rm -rf remotion-env-lint",
+ 'python -m venv remotion-env-lint',
+ '. ./remotion-env-lint/bin/activate',
+ "pip install boto3 pylint mypy 'boto3-stubs[essential]'",
+ 'pylint ./remotion_lambda',
+ 'mypy ./remotion_lambda',
+ 'deactivate',
+ 'rm -rf remotion-env-lint',
];
-execSync(commands.join(" && "), {
- stdio: "inherit",
+execSync(commands.join(' && '), {
+ stdio: 'inherit',
});
-console.log("Linted python lint!");
+console.log('Linted python lint!');
diff --git a/packages/lambda-python/publish.mjs b/packages/lambda-python/publish.mjs
index 3e60b6f7653..9d631205fab 100644
--- a/packages/lambda-python/publish.mjs
+++ b/packages/lambda-python/publish.mjs
@@ -1,5 +1,5 @@
-import dotenv from 'dotenv';
import {execSync} from 'node:child_process';
+import dotenv from 'dotenv';
dotenv.config({quiet: true});
const isTest = false;
diff --git a/packages/lambda-ruby/README.md b/packages/lambda-ruby/README.md
index 02124f8b6d8..15c1b6ba2a0 100644
--- a/packages/lambda-ruby/README.md
+++ b/packages/lambda-ruby/README.md
@@ -1,16 +1,16 @@
# @remotion/lambda-ruby
-
+
[](https://npmcharts.com/compare/@remotion/lambda-ruby?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/lambda-ruby --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/lambda/ruby) for more information.
diff --git a/packages/lambda/README.md b/packages/lambda/README.md
index 9db43c65b99..c015182ac6e 100644
--- a/packages/lambda/README.md
+++ b/packages/lambda/README.md
@@ -1,18 +1,18 @@
# @remotion/lambda
-
+
Render Remotion videos on AWS Lambda
-
+
[](https://npmcharts.com/compare/@remotion/lambda?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/lambda --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/lambda) for more information.
diff --git a/packages/lambda/build.ts b/packages/lambda/build.ts
index 874f72467ae..83782fabcc3 100644
--- a/packages/lambda/build.ts
+++ b/packages/lambda/build.ts
@@ -1,9 +1,9 @@
-import {BundlerInternals} from '@remotion/bundler';
-import {dir} from '@remotion/compositor-linux-arm64-gnu';
import fs, {cpSync, readdirSync} from 'node:fs';
import path from 'node:path';
-import {FUNCTION_ZIP_ARM64} from './src/shared/function-zip-path';
+import {BundlerInternals} from '@remotion/bundler';
+import {dir} from '@remotion/compositor-linux-arm64-gnu';
import {$} from 'bun';
+import {FUNCTION_ZIP_ARM64} from './src/shared/function-zip-path';
const outdir = path.join(__dirname, `build-render`);
fs.mkdirSync(outdir, {
diff --git a/packages/lambda/package.json b/packages/lambda/package.json
index 820761a98b3..0f5de9d448f 100644
--- a/packages/lambda/package.json
+++ b/packages/lambda/package.json
@@ -8,7 +8,7 @@
"main": "dist/index.js",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"testlambda": "exit 0",
"test": "bun test src/test/unit",
diff --git a/packages/lambda/src/api/create-function.ts b/packages/lambda/src/api/create-function.ts
index e0be0894bd9..8c7d5e4a0af 100644
--- a/packages/lambda/src/api/create-function.ts
+++ b/packages/lambda/src/api/create-function.ts
@@ -1,3 +1,4 @@
+import {readFileSync} from 'node:fs';
import {
CreateLogGroupCommand,
PutRetentionPolicyCommand,
@@ -19,7 +20,6 @@ import {
import {LOG_GROUP_PREFIX} from '@remotion/lambda-client/constants';
import type {LogLevel} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
-import {readFileSync} from 'node:fs';
import {VERSION} from 'remotion/version';
import {getLayers} from '../shared/get-layers';
import {lambdaInsightsExtensions} from '../shared/lambda-insights-extensions';
diff --git a/packages/lambda/src/api/deploy-site.ts b/packages/lambda/src/api/deploy-site.ts
index 41689059177..69d50822242 100644
--- a/packages/lambda/src/api/deploy-site.ts
+++ b/packages/lambda/src/api/deploy-site.ts
@@ -1,3 +1,4 @@
+import fs from 'node:fs';
import {type GitSource, type WebpackOverrideFn} from '@remotion/bundler';
import type {AwsRegion, RequestHandler} from '@remotion/lambda-client';
import {LambdaClientInternals, type AwsProvider} from '@remotion/lambda-client';
@@ -14,7 +15,6 @@ import type {
UploadDirProgress,
} from '@remotion/serverless';
import {validateBucketName, validatePrivacy} from '@remotion/serverless';
-import fs from 'node:fs';
import {awsFullClientSpecifics} from '../functions/full-client-implementation';
import {getS3DiffOperations} from '../shared/get-s3-operations';
import {validateSiteName} from '../shared/validate-site-name';
diff --git a/packages/lambda/src/api/download-media.ts b/packages/lambda/src/api/download-media.ts
index a10b4d71a6e..ab268b3180b 100644
--- a/packages/lambda/src/api/download-media.ts
+++ b/packages/lambda/src/api/download-media.ts
@@ -1,3 +1,4 @@
+import path from 'node:path';
import type {AwsRegion, RequestHandler} from '@remotion/lambda-client';
import {LambdaClientInternals, type AwsProvider} from '@remotion/lambda-client';
import {REMOTION_BUCKET_PREFIX} from '@remotion/lambda-client/constants';
@@ -9,7 +10,6 @@ import {
getOverallProgressFromStorage,
type CustomCredentials,
} from '@remotion/serverless';
-import path from 'node:path';
import type {LambdaReadFileProgress} from '../functions/helpers/read-with-progress';
import {lambdaDownloadFileWithProgress} from '../functions/helpers/read-with-progress';
diff --git a/packages/lambda/src/api/upload-dir.ts b/packages/lambda/src/api/upload-dir.ts
index cb3c9d63f43..543d51b67fd 100644
--- a/packages/lambda/src/api/upload-dir.ts
+++ b/packages/lambda/src/api/upload-dir.ts
@@ -1,11 +1,11 @@
+import type {Dirent} from 'node:fs';
+import {createReadStream, promises as fs} from 'node:fs';
+import path from 'node:path';
import {Upload} from '@aws-sdk/lib-storage';
import type {AwsRegion, RequestHandler} from '@remotion/lambda-client';
import {LambdaClientInternals} from '@remotion/lambda-client';
import type {Privacy, UploadDirProgress} from '@remotion/serverless';
import mimeTypes from 'mime-types';
-import type {Dirent} from 'node:fs';
-import {createReadStream, promises as fs} from 'node:fs';
-import path from 'node:path';
import {makeS3Key} from '../shared/make-s3-key';
type FileInfo = {
diff --git a/packages/lambda/src/cli/args.ts b/packages/lambda/src/cli/args.ts
index 84bb0115b2f..6e5925a1564 100644
--- a/packages/lambda/src/cli/args.ts
+++ b/packages/lambda/src/cli/args.ts
@@ -1,9 +1,8 @@
+import {StorageClass} from '@aws-sdk/client-s3';
import {CliInternals} from '@remotion/cli';
import type {BrowserSafeApis} from '@remotion/renderer/client';
-import type {AwsRegion, DeleteAfter, RuntimePreference} from '../client';
-
-import {StorageClass} from '@aws-sdk/client-s3';
import type {Privacy} from '@remotion/serverless';
+import type {AwsRegion, DeleteAfter, RuntimePreference} from '../client';
const LambdaBooleanFlags = [
...CliInternals.BooleanFlags,
diff --git a/packages/lambda/src/cli/commands/quotas/increase.ts b/packages/lambda/src/cli/commands/quotas/increase.ts
index bea70f251bc..8d7586fcede 100644
--- a/packages/lambda/src/cli/commands/quotas/increase.ts
+++ b/packages/lambda/src/cli/commands/quotas/increase.ts
@@ -1,3 +1,4 @@
+import {exit} from 'node:process';
import {
GetAWSDefaultServiceQuotaCommand,
GetServiceQuotaCommand,
@@ -14,7 +15,6 @@ import {
LAMBDA_CONCURRENCY_LIMIT_QUOTA,
} from '@remotion/lambda-client/constants';
import type {LogLevel, LogOptions} from '@remotion/renderer';
-import {exit} from 'node:process';
import {QUOTAS_COMMAND} from '.';
import {forceFlagProvided} from '../../args';
import {getAwsRegion} from '../../get-aws-region';
diff --git a/packages/lambda/src/cli/commands/render/render.ts b/packages/lambda/src/cli/commands/render/render.ts
index d435064cf4a..ceb4b046428 100644
--- a/packages/lambda/src/cli/commands/render/render.ts
+++ b/packages/lambda/src/cli/commands/render/render.ts
@@ -1,12 +1,6 @@
+import path from 'path';
import {CliInternals} from '@remotion/cli';
import {ConfigInternals} from '@remotion/cli/config';
-import type {ChromiumOptions, LogLevel} from '@remotion/renderer';
-import {RenderInternals} from '@remotion/renderer';
-import {BrowserSafeApis} from '@remotion/renderer/client';
-import path from 'path';
-import {NoReactInternals} from 'remotion/no-react';
-import {internalDownloadMedia} from '../../../api/download-media';
-
import {
AwsProvider,
getRenderProgress,
@@ -17,8 +11,13 @@ import {
DEFAULT_MAX_RETRIES,
DEFAULT_OUTPUT_PRIVACY,
} from '@remotion/lambda-client/constants';
+import type {ChromiumOptions, LogLevel} from '@remotion/renderer';
+import {RenderInternals} from '@remotion/renderer';
+import {BrowserSafeApis} from '@remotion/renderer/client';
import type {EnhancedErrorInfo, ProviderSpecifics} from '@remotion/serverless';
import {validatePrivacy, type ServerlessCodec} from '@remotion/serverless';
+import {NoReactInternals} from 'remotion/no-react';
+import {internalDownloadMedia} from '../../../api/download-media';
import {sleep} from '../../../shared/sleep';
import {validateMaxRetries} from '../../../shared/validate-retries';
import {parsedLambdaCli} from '../../args';
diff --git a/packages/lambda/src/cli/commands/sites/create.ts b/packages/lambda/src/cli/commands/sites/create.ts
index 490012e5e7b..8e01b8b23cb 100644
--- a/packages/lambda/src/cli/commands/sites/create.ts
+++ b/packages/lambda/src/cli/commands/sites/create.ts
@@ -1,10 +1,9 @@
import {CliInternals} from '@remotion/cli';
import {ConfigInternals} from '@remotion/cli/config';
-import type {LogLevel} from '@remotion/renderer';
-import {BrowserSafeApis} from '@remotion/renderer/client';
-
import {AwsProvider} from '@remotion/lambda-client';
import {BINARY_NAME} from '@remotion/lambda-client/constants';
+import type {LogLevel} from '@remotion/renderer';
+import {BrowserSafeApis} from '@remotion/renderer/client';
import type {ProviderSpecifics} from '@remotion/serverless';
import {internalGetOrCreateBucket, type Privacy} from '@remotion/serverless';
import {NoReactInternals} from 'remotion/no-react';
diff --git a/packages/lambda/src/cli/commands/still.ts b/packages/lambda/src/cli/commands/still.ts
index 4012c3623fd..8ecdac04359 100644
--- a/packages/lambda/src/cli/commands/still.ts
+++ b/packages/lambda/src/cli/commands/still.ts
@@ -1,3 +1,4 @@
+import path from 'path';
import {CliInternals} from '@remotion/cli';
import {ConfigInternals} from '@remotion/cli/config';
import {AwsProvider, LambdaClientInternals} from '@remotion/lambda-client';
@@ -11,7 +12,6 @@ import {RenderInternals} from '@remotion/renderer';
import {BrowserSafeApis} from '@remotion/renderer/client';
import type {ProviderSpecifics} from '@remotion/serverless';
import {validatePrivacy} from '@remotion/serverless';
-import path from 'path';
import {NoReactInternals} from 'remotion/no-react';
import {internalDownloadMedia} from '../../api/download-media';
import {validateMaxRetries} from '../../shared/validate-retries';
diff --git a/packages/lambda/src/cli/helpers/get-webhook-custom-data.ts b/packages/lambda/src/cli/helpers/get-webhook-custom-data.ts
index 7b8c79f27af..93959aa1343 100644
--- a/packages/lambda/src/cli/helpers/get-webhook-custom-data.ts
+++ b/packages/lambda/src/cli/helpers/get-webhook-custom-data.ts
@@ -1,8 +1,8 @@
-import type {LogLevel, LogOptions} from '@remotion/renderer';
-import {BrowserSafeApis} from '@remotion/renderer/client';
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
+import type {LogLevel, LogOptions} from '@remotion/renderer';
+import {BrowserSafeApis} from '@remotion/renderer/client';
import {parsedLambdaCli} from '../args';
import {Log} from '../log';
diff --git a/packages/lambda/src/functions/helpers/get-folder-files.ts b/packages/lambda/src/functions/helpers/get-folder-files.ts
index b649c8cbcfe..8cac4affaa0 100644
--- a/packages/lambda/src/functions/helpers/get-folder-files.ts
+++ b/packages/lambda/src/functions/helpers/get-folder-files.ts
@@ -1,6 +1,6 @@
-import type {FileNameAndSize, GetFolderFiles} from '@remotion/serverless';
import fs from 'fs';
import path from 'path';
+import type {FileNameAndSize, GetFolderFiles} from '@remotion/serverless';
export const getFolderFiles: GetFolderFiles = (folder) => {
const files = fs.readdirSync(folder);
const paths: FileNameAndSize[] = [];
diff --git a/packages/lambda/src/shared/read-dir.ts b/packages/lambda/src/shared/read-dir.ts
index b73fd5b5386..157dc4ee8bf 100644
--- a/packages/lambda/src/shared/read-dir.ts
+++ b/packages/lambda/src/shared/read-dir.ts
@@ -1,6 +1,6 @@
-import type {ReadDir} from '@remotion/serverless';
import * as fs from 'node:fs';
import * as path from 'node:path';
+import type {ReadDir} from '@remotion/serverless';
import {getEtagOfFile} from './get-etag';
// Function to recursively read a directory and return a list of files
diff --git a/packages/lambda/src/test/integration/cli.test.ts b/packages/lambda/src/test/integration/cli.test.ts
index 387b45542cc..ea0f9178bdb 100644
--- a/packages/lambda/src/test/integration/cli.test.ts
+++ b/packages/lambda/src/test/integration/cli.test.ts
@@ -1,3 +1,4 @@
+import {afterEach, beforeEach, expect, test} from 'bun:test';
// eslint-disable-next-line no-restricted-imports
import {CliInternals} from '@remotion/cli';
import {LambdaClientInternals} from '@remotion/lambda-client';
@@ -6,7 +7,6 @@ import {
DEFAULT_MEMORY_SIZE,
DEFAULT_TIMEOUT,
} from '@remotion/lambda-client/constants';
-import {afterEach, beforeEach, expect, test} from 'bun:test';
import {LambdaInternals} from '../../internals';
import {mockFullClientSpecifics} from '../mock-implementation';
import {mockImplementation} from '../mocks/mock-implementation';
diff --git a/packages/lambda/src/test/integration/delete-site.test.ts b/packages/lambda/src/test/integration/delete-site.test.ts
index 3be9f35283d..ff9e1a9fdbc 100644
--- a/packages/lambda/src/test/integration/delete-site.test.ts
+++ b/packages/lambda/src/test/integration/delete-site.test.ts
@@ -1,5 +1,5 @@
-import {internalGetOrCreateBucket} from '@remotion/serverless';
import {expect, test} from 'bun:test';
+import {internalGetOrCreateBucket} from '@remotion/serverless';
import {internalDeleteSite} from '../../api/delete-site';
import {internalDeploySite} from '../../api/deploy-site';
import {mockFullClientSpecifics} from '../mock-implementation';
diff --git a/packages/lambda/src/test/integration/deploy-function.test.ts b/packages/lambda/src/test/integration/deploy-function.test.ts
index caf64d00f77..81119c3ab40 100644
--- a/packages/lambda/src/test/integration/deploy-function.test.ts
+++ b/packages/lambda/src/test/integration/deploy-function.test.ts
@@ -1,8 +1,8 @@
+import {expect, test} from 'bun:test';
import {
LambdaClientInternals,
speculateFunctionName,
} from '@remotion/lambda-client';
-import {expect, test} from 'bun:test';
import {VERSION} from 'remotion/version';
import {internalDeployFunction} from '../../api/deploy-function';
import {mockFullClientSpecifics} from '../mock-implementation';
diff --git a/packages/lambda/src/test/integration/deploy-site.test.ts b/packages/lambda/src/test/integration/deploy-site.test.ts
index 7e8d90f3d2e..8d3718b4b80 100644
--- a/packages/lambda/src/test/integration/deploy-site.test.ts
+++ b/packages/lambda/src/test/integration/deploy-site.test.ts
@@ -1,6 +1,6 @@
+import {expect, test} from 'bun:test';
import {LambdaClientInternals} from '@remotion/lambda-client';
import {internalGetOrCreateBucket} from '@remotion/serverless';
-import {expect, test} from 'bun:test';
import {internalDeleteSite} from '../../api/delete-site';
import {internalDeploySite} from '../../api/deploy-site';
import {mockFullClientSpecifics} from '../mock-implementation';
diff --git a/packages/lambda/src/test/integration/get-sites.test.ts b/packages/lambda/src/test/integration/get-sites.test.ts
index 7a0d0a56184..aa26f36542a 100644
--- a/packages/lambda/src/test/integration/get-sites.test.ts
+++ b/packages/lambda/src/test/integration/get-sites.test.ts
@@ -1,6 +1,6 @@
+import {expect, test} from 'bun:test';
import {LambdaClientInternals} from '@remotion/lambda-client';
import {internalGetOrCreateBucket} from '@remotion/serverless';
-import {expect, test} from 'bun:test';
import {internalDeploySite} from '../../api/deploy-site';
import {mockFullClientSpecifics} from '../mock-implementation';
import {mockImplementation} from '../mocks/mock-implementation';
diff --git a/packages/lambda/src/test/integration/handlers.test.ts b/packages/lambda/src/test/integration/handlers.test.ts
index ac160eb0740..e1bd731e506 100644
--- a/packages/lambda/src/test/integration/handlers.test.ts
+++ b/packages/lambda/src/test/integration/handlers.test.ts
@@ -1,5 +1,5 @@
-import {ServerlessRoutines} from '@remotion/serverless';
import {expect, test} from 'bun:test';
+import {ServerlessRoutines} from '@remotion/serverless';
import {VERSION} from 'remotion/version';
import {mockImplementation} from '../mocks/mock-implementation';
diff --git a/packages/lambda/src/test/integration/lifecycle.test.ts b/packages/lambda/src/test/integration/lifecycle.test.ts
index 02cc2d1b9f5..7ff44320022 100644
--- a/packages/lambda/src/test/integration/lifecycle.test.ts
+++ b/packages/lambda/src/test/integration/lifecycle.test.ts
@@ -1,5 +1,5 @@
-import {LambdaClientInternals} from '@remotion/lambda-client';
import {expect, test} from 'bun:test';
+import {LambdaClientInternals} from '@remotion/lambda-client';
test('Lifecycle', () => {
expect(LambdaClientInternals.getLifeCycleRules()).toEqual([
diff --git a/packages/lambda/src/test/integration/renders/gif.test.ts b/packages/lambda/src/test/integration/renders/gif.test.ts
index 57c23f6248a..5a05c854c65 100644
--- a/packages/lambda/src/test/integration/renders/gif.test.ts
+++ b/packages/lambda/src/test/integration/renders/gif.test.ts
@@ -1,8 +1,8 @@
-import {RenderInternals} from '@remotion/renderer';
import {expect, test} from 'bun:test';
import {createWriteStream, unlinkSync} from 'node:fs';
import {tmpdir} from 'node:os';
import path from 'node:path';
+import {RenderInternals} from '@remotion/renderer';
import {simulateLambdaRender} from '../simulate-lambda-render';
test('Should make a distributed GIF', async () => {
diff --git a/packages/lambda/src/test/integration/renders/muted-render.test.ts b/packages/lambda/src/test/integration/renders/muted-render.test.ts
index 035b88a3812..e2c7c3ac160 100644
--- a/packages/lambda/src/test/integration/renders/muted-render.test.ts
+++ b/packages/lambda/src/test/integration/renders/muted-render.test.ts
@@ -1,10 +1,10 @@
-import {LambdaClientInternals} from '@remotion/lambda-client';
-import {RenderInternals, getVideoMetadata} from '@remotion/renderer';
-import {rendersPrefix} from '@remotion/serverless';
import {expect, test} from 'bun:test';
import {createWriteStream, unlinkSync} from 'node:fs';
import {tmpdir} from 'node:os';
import path from 'path';
+import {LambdaClientInternals} from '@remotion/lambda-client';
+import {RenderInternals, getVideoMetadata} from '@remotion/renderer';
+import {rendersPrefix} from '@remotion/serverless';
import {mockImplementation} from '../../mocks/mock-implementation';
import {simulateLambdaRender} from '../simulate-lambda-render';
diff --git a/packages/lambda/src/test/integration/renders/old-version.test.ts b/packages/lambda/src/test/integration/renders/old-version.test.ts
index 1daad0951da..a1f2ccb7d6e 100644
--- a/packages/lambda/src/test/integration/renders/old-version.test.ts
+++ b/packages/lambda/src/test/integration/renders/old-version.test.ts
@@ -1,5 +1,5 @@
-import {ServerlessRoutines} from '@remotion/serverless';
import {expect, test} from 'bun:test';
+import {ServerlessRoutines} from '@remotion/serverless';
import {mockImplementation} from '../../mocks/mock-implementation';
test(
diff --git a/packages/lambda/src/test/integration/renders/other-bucket.test.ts b/packages/lambda/src/test/integration/renders/other-bucket.test.ts
index b7da6d67157..7337188f37e 100644
--- a/packages/lambda/src/test/integration/renders/other-bucket.test.ts
+++ b/packages/lambda/src/test/integration/renders/other-bucket.test.ts
@@ -1,6 +1,6 @@
-import {$} from 'bun';
import {expect, test} from 'bun:test';
import path from 'path';
+import {$} from 'bun';
import {streamToUint8Array} from '../../mocks/mock-store';
import {simulateLambdaRender} from '../simulate-lambda-render';
diff --git a/packages/lambda/src/test/integration/renders/regular-audio.test.ts b/packages/lambda/src/test/integration/renders/regular-audio.test.ts
index 297c84abe5d..e1e30c993c2 100644
--- a/packages/lambda/src/test/integration/renders/regular-audio.test.ts
+++ b/packages/lambda/src/test/integration/renders/regular-audio.test.ts
@@ -1,8 +1,8 @@
-import {LambdaClientInternals} from '@remotion/lambda-client';
-import {rendersPrefix} from '@remotion/serverless';
import {expect, test} from 'bun:test';
import {createWriteStream, unlinkSync} from 'fs';
import path from 'path';
+import {LambdaClientInternals} from '@remotion/lambda-client';
+import {rendersPrefix} from '@remotion/serverless';
import {mockImplementation} from '../../mocks/mock-implementation';
import {Wavedraw} from '../draw-wav';
import {simulateLambdaRender} from '../simulate-lambda-render';
diff --git a/packages/lambda/src/test/integration/renders/seamless-audio.test.ts b/packages/lambda/src/test/integration/renders/seamless-audio.test.ts
index 737a22baaf9..0669a6f71d1 100644
--- a/packages/lambda/src/test/integration/renders/seamless-audio.test.ts
+++ b/packages/lambda/src/test/integration/renders/seamless-audio.test.ts
@@ -1,9 +1,9 @@
-import {LambdaClientInternals} from '@remotion/lambda-client';
-import {rendersPrefix} from '@remotion/serverless';
-import {$} from 'bun';
import {expect, test} from 'bun:test';
import {existsSync, unlinkSync} from 'fs';
import path from 'path';
+import {LambdaClientInternals} from '@remotion/lambda-client';
+import {rendersPrefix} from '@remotion/serverless';
+import {$} from 'bun';
import {mockImplementation} from '../../mocks/mock-implementation';
import {streamToUint8Array} from '../../mocks/mock-store';
import {Wavedraw} from '../draw-wav';
diff --git a/packages/lambda/src/test/integration/renders/slow-seamless-audio.test.ts b/packages/lambda/src/test/integration/renders/slow-seamless-audio.test.ts
index ffc24728a2f..dbe639a25b1 100644
--- a/packages/lambda/src/test/integration/renders/slow-seamless-audio.test.ts
+++ b/packages/lambda/src/test/integration/renders/slow-seamless-audio.test.ts
@@ -1,9 +1,9 @@
-import {LambdaClientInternals} from '@remotion/lambda-client';
-import {rendersPrefix} from '@remotion/serverless';
-import {$} from 'bun';
import {expect, test} from 'bun:test';
import {existsSync, unlinkSync} from 'fs';
import path from 'path';
+import {LambdaClientInternals} from '@remotion/lambda-client';
+import {rendersPrefix} from '@remotion/serverless';
+import {$} from 'bun';
import {mockImplementation} from '../../mocks/mock-implementation';
import {streamToUint8Array} from '../../mocks/mock-store';
import {Wavedraw} from '../draw-wav';
diff --git a/packages/lambda/src/test/integration/renders/transparent-webm.test.ts b/packages/lambda/src/test/integration/renders/transparent-webm.test.ts
index 75de856eb33..97f05ea551d 100644
--- a/packages/lambda/src/test/integration/renders/transparent-webm.test.ts
+++ b/packages/lambda/src/test/integration/renders/transparent-webm.test.ts
@@ -1,10 +1,10 @@
-import {LambdaClientInternals} from '@remotion/lambda-client';
-import {ensureBrowser, RenderInternals} from '@remotion/renderer';
-import {rendersPrefix} from '@remotion/serverless';
import {beforeAll, expect, test} from 'bun:test';
import fs, {createWriteStream} from 'node:fs';
import os from 'node:os';
import path from 'node:path';
+import {LambdaClientInternals} from '@remotion/lambda-client';
+import {ensureBrowser, RenderInternals} from '@remotion/renderer';
+import {rendersPrefix} from '@remotion/serverless';
import {mockImplementation} from '../../mocks/mock-implementation';
import {simulateLambdaRender} from '../simulate-lambda-render';
diff --git a/packages/lambda/src/test/integration/simulate-lambda-render.ts b/packages/lambda/src/test/integration/simulate-lambda-render.ts
index 59a56c3d26d..f7b7fae9d7f 100644
--- a/packages/lambda/src/test/integration/simulate-lambda-render.ts
+++ b/packages/lambda/src/test/integration/simulate-lambda-render.ts
@@ -1,10 +1,10 @@
+import path from 'path';
import {
LambdaClientInternals,
type RenderMediaOnLambdaInput,
} from '@remotion/lambda-client';
import {RenderInternals} from '@remotion/renderer';
import {ServerlessRoutines} from '@remotion/serverless';
-import path from 'path';
import {mockImplementation} from '../mocks/mock-implementation';
import {waitUntilDone} from './wait-until-done';
diff --git a/packages/lambda/src/test/integration/webhooks.test.ts b/packages/lambda/src/test/integration/webhooks.test.ts
index 3cdb4b697b9..81e8b90d265 100644
--- a/packages/lambda/src/test/integration/webhooks.test.ts
+++ b/packages/lambda/src/test/integration/webhooks.test.ts
@@ -1,7 +1,7 @@
-import {RenderInternals, ensureBrowser} from '@remotion/renderer';
-import {ServerlessRoutines} from '@remotion/serverless';
import {beforeAll, expect, test} from 'bun:test';
import path from 'path';
+import {RenderInternals, ensureBrowser} from '@remotion/renderer';
+import {ServerlessRoutines} from '@remotion/serverless';
import {VERSION} from 'remotion/version';
import {getWebhookCalls, resetWebhookCalls} from '../mock-implementation';
import {mockImplementation} from '../mocks/mock-implementation';
diff --git a/packages/lambda/src/test/mocks/mock-implementation.ts b/packages/lambda/src/test/mocks/mock-implementation.ts
index 114eb7cbaf0..92724143cb1 100644
--- a/packages/lambda/src/test/mocks/mock-implementation.ts
+++ b/packages/lambda/src/test/mocks/mock-implementation.ts
@@ -1,10 +1,10 @@
+import {createReadStream, writeFileSync} from 'fs';
+import path from 'path';
import type {AwsProvider} from '@remotion/lambda-client';
import {estimatePrice, LambdaClientInternals} from '@remotion/lambda-client';
import {REMOTION_BUCKET_PREFIX} from '@remotion/lambda-client/constants';
import {RenderInternals} from '@remotion/renderer';
import type {ProviderSpecifics} from '@remotion/serverless';
-import {createReadStream, writeFileSync} from 'fs';
-import path from 'path';
import {
getMockCallFunctionAsync,
getMockCallFunctionStreaming,
diff --git a/packages/lambda/src/test/mocks/mock-store.ts b/packages/lambda/src/test/mocks/mock-store.ts
index 8f93a816feb..2d6951dd2e8 100644
--- a/packages/lambda/src/test/mocks/mock-store.ts
+++ b/packages/lambda/src/test/mocks/mock-store.ts
@@ -1,10 +1,10 @@
+import {Readable} from 'stream';
import type {AwsProvider, AwsRegion} from '@remotion/lambda-client';
import type {
BucketWithLocation,
CloudProvider,
Privacy,
} from '@remotion/serverless';
-import {Readable} from 'stream';
export const mockBucketStore: BucketWithLocation[] = [];
diff --git a/packages/lambda/src/test/unit/best-bucketnames.test.ts b/packages/lambda/src/test/unit/best-bucketnames.test.ts
index d9834f351b2..1acfa6fdd29 100644
--- a/packages/lambda/src/test/unit/best-bucketnames.test.ts
+++ b/packages/lambda/src/test/unit/best-bucketnames.test.ts
@@ -1,6 +1,6 @@
+import {expect, test} from 'bun:test';
import {LambdaClientInternals} from '@remotion/lambda-client';
import {makeBucketName} from '@remotion/serverless';
-import {expect, test} from 'bun:test';
import {mockImplementation} from '../mocks/mock-implementation';
test('Generate and parse bucket names correctly', () => {
diff --git a/packages/lambda/src/test/unit/handlers.test.ts b/packages/lambda/src/test/unit/handlers.test.ts
index ab3cdfd4c23..6635d6fea27 100644
--- a/packages/lambda/src/test/unit/handlers.test.ts
+++ b/packages/lambda/src/test/unit/handlers.test.ts
@@ -1,5 +1,5 @@
-import {ServerlessRoutines} from '@remotion/serverless';
import {expect, test} from 'bun:test';
+import {ServerlessRoutines} from '@remotion/serverless';
import {mockImplementation} from '../mocks/mock-implementation';
test('Info handler should return version', async () => {
diff --git a/packages/layout-utils/README.md b/packages/layout-utils/README.md
index 2251c16dd9e..1611893850a 100644
--- a/packages/layout-utils/README.md
+++ b/packages/layout-utils/README.md
@@ -1,18 +1,18 @@
# @remotion/layout-utils
-
+
Utilities for working with layouts
-
+
[](https://npmcharts.com/compare/@remotion/layout-utils?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/layout-utils --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/layout-utils) for more information.
diff --git a/packages/layout-utils/package.json b/packages/layout-utils/package.json
index 6f6e8c76af0..284ad95fb7c 100644
--- a/packages/layout-utils/package.json
+++ b/packages/layout-utils/package.json
@@ -10,7 +10,7 @@
"module": "dist/esm/index.mjs",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
},
diff --git a/packages/licensing/README.md b/packages/licensing/README.md
index 01b16bd8302..c0c60e3cedd 100644
--- a/packages/licensing/README.md
+++ b/packages/licensing/README.md
@@ -1,18 +1,18 @@
# @remotion/licensing
-
+
Manage your Remotion.pro license
-
+
[](https://npmcharts.com/compare/@remotion/licensing?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/licensing --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/licensing) for more information.
diff --git a/packages/licensing/package.json b/packages/licensing/package.json
index 362a73e44e5..10847bea4bc 100644
--- a/packages/licensing/package.json
+++ b/packages/licensing/package.json
@@ -9,7 +9,7 @@
"sideEffects": false,
"scripts": {
"lint": "eslint src",
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts",
"test": "bun test src/test/prod-domain.test.ts src/test/register-usage-event-retry.test.ts"
},
diff --git a/packages/light-leaks/README.md b/packages/light-leaks/README.md
index 864d2926ff0..1e755a09121 100644
--- a/packages/light-leaks/README.md
+++ b/packages/light-leaks/README.md
@@ -1,18 +1,18 @@
# @remotion/light-leaks
-
+
Light leak effects for Remotion
-
+
[](https://npmcharts.com/compare/@remotion/light-leaks?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/light-leaks --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/light-leaks) for more information.
diff --git a/packages/light-leaks/bundle.ts b/packages/light-leaks/bundle.ts
index 846bbbc8a07..f7b114c5c35 100644
--- a/packages/light-leaks/bundle.ts
+++ b/packages/light-leaks/bundle.ts
@@ -1,5 +1,5 @@
-import {build} from 'bun';
import path from 'path';
+import {build} from 'bun';
if (process.env.NODE_ENV !== 'production') {
throw new Error('This script must be run using NODE_ENV=production');
diff --git a/packages/light-leaks/package.json b/packages/light-leaks/package.json
index 93159adefde..defc5720d39 100644
--- a/packages/light-leaks/package.json
+++ b/packages/light-leaks/package.json
@@ -11,7 +11,7 @@
"sideEffects": false,
"type": "module",
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"watch": "tsgo -w",
"make": "tsgo && bun --env-file=../.env.bundle bundle.ts"
diff --git a/packages/lottie/README.md b/packages/lottie/README.md
index c91232ffead..4aaa239ae78 100644
--- a/packages/lottie/README.md
+++ b/packages/lottie/README.md
@@ -1,18 +1,18 @@
# @remotion/lottie
-
+
Include Lottie animations in Remotion
-
+
[](https://npmcharts.com/compare/@remotion/lottie?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/lottie --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/lottie) for more information.
diff --git a/packages/lottie/package.json b/packages/lottie/package.json
index 2147f231d3d..ae09592c5b5 100644
--- a/packages/lottie/package.json
+++ b/packages/lottie/package.json
@@ -10,7 +10,7 @@
"module": "dist/esm/index.mjs",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"test": "bun test src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
diff --git a/packages/mcp/README.md b/packages/mcp/README.md
index 487b700739e..5695afe9db7 100644
--- a/packages/mcp/README.md
+++ b/packages/mcp/README.md
@@ -1,18 +1,18 @@
# @remotion/mcp
-
+
Remotion's Model Context Protocol
-
+
[](https://npmcharts.com/compare/@remotion/mcp?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/mcp --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/ai/mcp) for more information.
diff --git a/packages/media-parser/README.md b/packages/media-parser/README.md
index 2871010c815..eecd96be439 100644
--- a/packages/media-parser/README.md
+++ b/packages/media-parser/README.md
@@ -1,18 +1,18 @@
# @remotion/media-parser
-
+
A pure JavaScript library for parsing video files
-
+
[](https://npmcharts.com/compare/@remotion/media-parser?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/media-parser --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/media-parser) for more information.
diff --git a/packages/media-parser/package.json b/packages/media-parser/package.json
index 402bbc45934..ff4dc9534ae 100644
--- a/packages/media-parser/package.json
+++ b/packages/media-parser/package.json
@@ -7,7 +7,7 @@
"main": "dist/index.js",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"testwebcodecs": "bun test src/test --timeout=30000",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts",
diff --git a/packages/media-parser/src/containers/webm/make-track.ts b/packages/media-parser/src/containers/webm/make-track.ts
index 103bc2263e6..9ab9530e78a 100644
--- a/packages/media-parser/src/containers/webm/make-track.ts
+++ b/packages/media-parser/src/containers/webm/make-track.ts
@@ -235,7 +235,7 @@ const getMatroskaAudioCodecString = (track: TrackEntry): string => {
â—¦ 5 for SBR (Spectral Band Replication)
â—¦ 29 for HE-AAC (which uses SBR with AAC LC)
*/
- /**
+ /**
* Fully qualified codec:
* This codec has multiple possible codec strings:
"mp4a.40.2" — MPEG-4 AAC LC
diff --git a/packages/media-parser/src/test/av1.test.ts b/packages/media-parser/src/test/av1.test.ts
index 340db19d96e..433991baf3e 100644
--- a/packages/media-parser/src/test/av1.test.ts
+++ b/packages/media-parser/src/test/av1.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {getTraks} from '../containers/iso-base-media/traversal';
import {trakBoxContainsVideo} from '../get-fps';
import {getAv1CBox} from '../get-sample-aspect-ratio';
diff --git a/packages/media-parser/src/test/callback-fields.test.ts b/packages/media-parser/src/test/callback-fields.test.ts
index dfef2c07d7c..091b5d411c7 100644
--- a/packages/media-parser/src/test/callback-fields.test.ts
+++ b/packages/media-parser/src/test/callback-fields.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/duration.test.ts b/packages/media-parser/src/test/duration.test.ts
index 6b199cdfee6..c0ec6b25667 100644
--- a/packages/media-parser/src/test/duration.test.ts
+++ b/packages/media-parser/src/test/duration.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/elst-offset.test.ts b/packages/media-parser/src/test/elst-offset.test.ts
index 50d0987d218..1b6c05c993f 100644
--- a/packages/media-parser/src/test/elst-offset.test.ts
+++ b/packages/media-parser/src/test/elst-offset.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../controller/media-parser-controller';
import {hasBeenAborted} from '../errors';
import {nodeReader} from '../node';
diff --git a/packages/media-parser/src/test/empty-video.test.ts b/packages/media-parser/src/test/empty-video.test.ts
index ce6dc269669..67bd178ec6a 100644
--- a/packages/media-parser/src/test/empty-video.test.ts
+++ b/packages/media-parser/src/test/empty-video.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/error-messages.test.ts b/packages/media-parser/src/test/error-messages.test.ts
index e54fb042614..7bfe8becc75 100644
--- a/packages/media-parser/src/test/error-messages.test.ts
+++ b/packages/media-parser/src/test/error-messages.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/fast-mehmet.test.ts b/packages/media-parser/src/test/fast-mehmet.test.ts
index c4a8c5fbbde..b5c20618163 100644
--- a/packages/media-parser/src/test/fast-mehmet.test.ts
+++ b/packages/media-parser/src/test/fast-mehmet.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/finish-callback.test.ts b/packages/media-parser/src/test/finish-callback.test.ts
index 23e8202fcdb..420c8088b54 100644
--- a/packages/media-parser/src/test/finish-callback.test.ts
+++ b/packages/media-parser/src/test/finish-callback.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../controller/media-parser-controller';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/flac.test.ts b/packages/media-parser/src/test/flac.test.ts
index 994964d6bf2..703e932bef6 100644
--- a/packages/media-parser/src/test/flac.test.ts
+++ b/packages/media-parser/src/test/flac.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
import {WEBCODECS_TIMESCALE} from '../webcodecs-timescale';
diff --git a/packages/media-parser/src/test/foreign-types.test.ts b/packages/media-parser/src/test/foreign-types.test.ts
index de91b6045b6..b190e9b203f 100644
--- a/packages/media-parser/src/test/foreign-types.test.ts
+++ b/packages/media-parser/src/test/foreign-types.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {
IsAnImageError,
IsAnUnsupportedFileTypeError,
diff --git a/packages/media-parser/src/test/fragmented-mp4-with-no-duration-metadata.test.ts b/packages/media-parser/src/test/fragmented-mp4-with-no-duration-metadata.test.ts
index abc418ae5a9..b6675e6f646 100644
--- a/packages/media-parser/src/test/fragmented-mp4-with-no-duration-metadata.test.ts
+++ b/packages/media-parser/src/test/fragmented-mp4-with-no-duration-metadata.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../controller/media-parser-controller';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/fragmented-mp4a.test.ts b/packages/media-parser/src/test/fragmented-mp4a.test.ts
index 97b9f11fcaf..26704e41138 100644
--- a/packages/media-parser/src/test/fragmented-mp4a.test.ts
+++ b/packages/media-parser/src/test/fragmented-mp4a.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/h262-unsupported.test.ts b/packages/media-parser/src/test/h262-unsupported.test.ts
index 06d68d261b9..a616b25c5c5 100644
--- a/packages/media-parser/src/test/h262-unsupported.test.ts
+++ b/packages/media-parser/src/test/h262-unsupported.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/iso-base-media.test.ts b/packages/media-parser/src/test/iso-base-media.test.ts
index 6ad3489a8a6..b371c499ee5 100644
--- a/packages/media-parser/src/test/iso-base-media.test.ts
+++ b/packages/media-parser/src/test/iso-base-media.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/keyframes.test.ts b/packages/media-parser/src/test/keyframes.test.ts
index a2487c26950..dcdbcaac8aa 100644
--- a/packages/media-parser/src/test/keyframes.test.ts
+++ b/packages/media-parser/src/test/keyframes.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/m3u8-multiple-audio-streams.test.ts b/packages/media-parser/src/test/m3u8-multiple-audio-streams.test.ts
index d8461d6c9cf..72c6d7a19e5 100644
--- a/packages/media-parser/src/test/m3u8-multiple-audio-streams.test.ts
+++ b/packages/media-parser/src/test/m3u8-multiple-audio-streams.test.ts
@@ -1,6 +1,6 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
import path from 'path';
+import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/m4a.test.ts b/packages/media-parser/src/test/m4a.test.ts
index be7168d8e91..43318a2eb19 100644
--- a/packages/media-parser/src/test/m4a.test.ts
+++ b/packages/media-parser/src/test/m4a.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
import {WEBCODECS_TIMESCALE} from '../webcodecs-timescale';
diff --git a/packages/media-parser/src/test/matroska.test.ts b/packages/media-parser/src/test/matroska.test.ts
index 57121c0907c..dde1050bed6 100644
--- a/packages/media-parser/src/test/matroska.test.ts
+++ b/packages/media-parser/src/test/matroska.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/mp3-mpeg25.test.ts b/packages/media-parser/src/test/mp3-mpeg25.test.ts
index a3800729b0d..b5f2848e9a6 100644
--- a/packages/media-parser/src/test/mp3-mpeg25.test.ts
+++ b/packages/media-parser/src/test/mp3-mpeg25.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../controller/media-parser-controller';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/mp3-no-magic.test.ts b/packages/media-parser/src/test/mp3-no-magic.test.ts
index 0e5d1d39a03..d7b526edfa5 100644
--- a/packages/media-parser/src/test/mp3-no-magic.test.ts
+++ b/packages/media-parser/src/test/mp3-no-magic.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/mp3-syncsafe.test.ts b/packages/media-parser/src/test/mp3-syncsafe.test.ts
index 35e2ec4c5c6..b1cebf37d21 100644
--- a/packages/media-parser/src/test/mp3-syncsafe.test.ts
+++ b/packages/media-parser/src/test/mp3-syncsafe.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/mp3-vbr.test.ts b/packages/media-parser/src/test/mp3-vbr.test.ts
index b109401dca8..53d4913e359 100644
--- a/packages/media-parser/src/test/mp3-vbr.test.ts
+++ b/packages/media-parser/src/test/mp3-vbr.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/mp4-av1.test.ts b/packages/media-parser/src/test/mp4-av1.test.ts
index 11640e283b8..33d8a973369 100644
--- a/packages/media-parser/src/test/mp4-av1.test.ts
+++ b/packages/media-parser/src/test/mp4-av1.test.ts
@@ -1,5 +1,5 @@
-import {getRemoteExampleVideo} from '@remotion/example-videos';
import {beforeAll, expect, test} from 'bun:test';
+import {getRemoteExampleVideo} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/mp4-resiliency.test.ts b/packages/media-parser/src/test/mp4-resiliency.test.ts
index be504d44ec4..82641a1f979 100644
--- a/packages/media-parser/src/test/mp4-resiliency.test.ts
+++ b/packages/media-parser/src/test/mp4-resiliency.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/no-codecprivate.test.ts b/packages/media-parser/src/test/no-codecprivate.test.ts
index 711ead8ef11..66ada56d530 100644
--- a/packages/media-parser/src/test/no-codecprivate.test.ts
+++ b/packages/media-parser/src/test/no-codecprivate.test.ts
@@ -1,5 +1,5 @@
-import {getRemoteExampleVideo} from '@remotion/example-videos';
import {beforeAll, expect, test} from 'bun:test';
+import {getRemoteExampleVideo} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
import {WEBCODECS_TIMESCALE} from '../webcodecs-timescale';
diff --git a/packages/media-parser/src/test/no-fields.test.ts b/packages/media-parser/src/test/no-fields.test.ts
index 3706750c496..c40325f1fc9 100644
--- a/packages/media-parser/src/test/no-fields.test.ts
+++ b/packages/media-parser/src/test/no-fields.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/parse-aac.test.ts b/packages/media-parser/src/test/parse-aac.test.ts
index c3f21847cc2..300f095a679 100644
--- a/packages/media-parser/src/test/parse-aac.test.ts
+++ b/packages/media-parser/src/test/parse-aac.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
import {WEBCODECS_TIMESCALE} from '../webcodecs-timescale';
diff --git a/packages/media-parser/src/test/parse-and-download-video.test.ts b/packages/media-parser/src/test/parse-and-download-video.test.ts
index 8b1693faf61..b4013c34055 100644
--- a/packages/media-parser/src/test/parse-and-download-video.test.ts
+++ b/packages/media-parser/src/test/parse-and-download-video.test.ts
@@ -1,6 +1,6 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
import {existsSync, statSync, unlinkSync} from 'node:fs';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../controller/media-parser-controller';
import {downloadAndParseMedia} from '../download-and-parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/parse-avi-file.test.ts b/packages/media-parser/src/test/parse-avi-file.test.ts
index 4a11116eb8f..abf4d55120a 100644
--- a/packages/media-parser/src/test/parse-avi-file.test.ts
+++ b/packages/media-parser/src/test/parse-avi-file.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
import {WEBCODECS_TIMESCALE} from '../webcodecs-timescale';
diff --git a/packages/media-parser/src/test/parse-colr.test.ts b/packages/media-parser/src/test/parse-colr.test.ts
index cb18e4ef402..3a0eec17824 100644
--- a/packages/media-parser/src/test/parse-colr.test.ts
+++ b/packages/media-parser/src/test/parse-colr.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {getStsdBox} from '../containers/iso-base-media/traversal';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/parse-local-m3u8.test.ts b/packages/media-parser/src/test/parse-local-m3u8.test.ts
index a26fa625f7b..3a278e6066d 100644
--- a/packages/media-parser/src/test/parse-local-m3u8.test.ts
+++ b/packages/media-parser/src/test/parse-local-m3u8.test.ts
@@ -1,6 +1,6 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
import path from 'path';
+import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/parse-mfra.test.ts b/packages/media-parser/src/test/parse-mfra.test.ts
index b05ab0305a4..2bd0023fd44 100644
--- a/packages/media-parser/src/test/parse-mfra.test.ts
+++ b/packages/media-parser/src/test/parse-mfra.test.ts
@@ -1,5 +1,5 @@
-import {getRemoteExampleVideo} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {getRemoteExampleVideo} from '@remotion/example-videos';
import {getTfraBoxes} from '../containers/iso-base-media/traversal';
import {mediaParserController} from '../controller/media-parser-controller';
import {nodeReader} from '../node';
diff --git a/packages/media-parser/src/test/parse-mp3.test.ts b/packages/media-parser/src/test/parse-mp3.test.ts
index db94dc15c25..94eed2f720e 100644
--- a/packages/media-parser/src/test/parse-mp3.test.ts
+++ b/packages/media-parser/src/test/parse-mp3.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/parse-mp4-partially.test.ts b/packages/media-parser/src/test/parse-mp4-partially.test.ts
index 43ba3cba54b..46f7af0cb02 100644
--- a/packages/media-parser/src/test/parse-mp4-partially.test.ts
+++ b/packages/media-parser/src/test/parse-mp4-partially.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/parse-transport-stream-partially.test.ts b/packages/media-parser/src/test/parse-transport-stream-partially.test.ts
index 39154f022ee..76fe09a7298 100644
--- a/packages/media-parser/src/test/parse-transport-stream-partially.test.ts
+++ b/packages/media-parser/src/test/parse-transport-stream-partially.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/parse-video.test.ts b/packages/media-parser/src/test/parse-video.test.ts
index 7a4b20da22c..e053bddd5bb 100644
--- a/packages/media-parser/src/test/parse-video.test.ts
+++ b/packages/media-parser/src/test/parse-video.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/parse-webm-partially.test.ts b/packages/media-parser/src/test/parse-webm-partially.test.ts
index 1605342648f..8b59a84b290 100644
--- a/packages/media-parser/src/test/parse-webm-partially.test.ts
+++ b/packages/media-parser/src/test/parse-webm-partially.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/parse-webm.test.ts b/packages/media-parser/src/test/parse-webm.test.ts
index c78f25cb8f0..d27b30ffd47 100644
--- a/packages/media-parser/src/test/parse-webm.test.ts
+++ b/packages/media-parser/src/test/parse-webm.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/read-metadata.test.ts b/packages/media-parser/src/test/read-metadata.test.ts
index 7933100e0a9..cb283356653 100644
--- a/packages/media-parser/src/test/read-metadata.test.ts
+++ b/packages/media-parser/src/test/read-metadata.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/respect-editlist.test.ts b/packages/media-parser/src/test/respect-editlist.test.ts
index adf2d23bd73..199fd013c29 100644
--- a/packages/media-parser/src/test/respect-editlist.test.ts
+++ b/packages/media-parser/src/test/respect-editlist.test.ts
@@ -1,5 +1,5 @@
-import {getRemoteExampleVideo} from '@remotion/example-videos';
import {beforeAll, expect, test} from 'bun:test';
+import {getRemoteExampleVideo} from '@remotion/example-videos';
import {mediaParserController} from '../controller/media-parser-controller';
import {hasBeenAborted} from '../errors';
import {nodeReader} from '../node';
diff --git a/packages/media-parser/src/test/scattered-samples.test.ts b/packages/media-parser/src/test/scattered-samples.test.ts
index bd9de219be0..1b35a0d3562 100644
--- a/packages/media-parser/src/test/scattered-samples.test.ts
+++ b/packages/media-parser/src/test/scattered-samples.test.ts
@@ -1,5 +1,5 @@
-import {getRemoteExampleVideo} from '@remotion/example-videos';
import {beforeAll, expect, test} from 'bun:test';
+import {getRemoteExampleVideo} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/seeking/basic-mp4.test.ts b/packages/media-parser/src/test/seeking/basic-mp4.test.ts
index 84f493ef4fe..7f32a28e87a 100644
--- a/packages/media-parser/src/test/seeking/basic-mp4.test.ts
+++ b/packages/media-parser/src/test/seeking/basic-mp4.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {hasBeenAborted} from '../../errors';
import {nodeReader} from '../../node';
diff --git a/packages/media-parser/src/test/seeking/fetch-idx.test.ts b/packages/media-parser/src/test/seeking/fetch-idx.test.ts
index 357f1e2f7be..c65f2a85967 100644
--- a/packages/media-parser/src/test/seeking/fetch-idx.test.ts
+++ b/packages/media-parser/src/test/seeking/fetch-idx.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {fetchIdx1} from '../../containers/riff/seek/fetch-idx1';
import {mediaParserController} from '../../controller/media-parser-controller';
import {nodeReader} from '../../node';
diff --git a/packages/media-parser/src/test/seeking/no-samples-twice.test.ts b/packages/media-parser/src/test/seeking/no-samples-twice.test.ts
index 11681d8d83b..269a8529e50 100644
--- a/packages/media-parser/src/test/seeking/no-samples-twice.test.ts
+++ b/packages/media-parser/src/test/seeking/no-samples-twice.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {nodeReader} from '../../node';
import {parseMedia} from '../../parse-media';
diff --git a/packages/media-parser/src/test/seeking/seek-aac.test.ts b/packages/media-parser/src/test/seeking/seek-aac.test.ts
index c265be5b540..15485553b2a 100644
--- a/packages/media-parser/src/test/seeking/seek-aac.test.ts
+++ b/packages/media-parser/src/test/seeking/seek-aac.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {nodeReader} from '../../node';
import {parseMedia} from '../../parse-media';
diff --git a/packages/media-parser/src/test/seeking/seek-avi-without-idx.test.ts b/packages/media-parser/src/test/seeking/seek-avi-without-idx.test.ts
index 73be7828785..7d170bcb167 100644
--- a/packages/media-parser/src/test/seeking/seek-avi-without-idx.test.ts
+++ b/packages/media-parser/src/test/seeking/seek-avi-without-idx.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {hasBeenAborted} from '../../errors';
import {nodeReader} from '../../node';
diff --git a/packages/media-parser/src/test/seeking/seek-avi.test.ts b/packages/media-parser/src/test/seeking/seek-avi.test.ts
index 2eb9a24e92c..d1f8704bae4 100644
--- a/packages/media-parser/src/test/seeking/seek-avi.test.ts
+++ b/packages/media-parser/src/test/seeking/seek-avi.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {hasBeenAborted} from '../../errors';
import {nodeReader} from '../../node';
diff --git a/packages/media-parser/src/test/seeking/seek-backwards.test.ts b/packages/media-parser/src/test/seeking/seek-backwards.test.ts
index ceca73e515c..26c0431e45e 100644
--- a/packages/media-parser/src/test/seeking/seek-backwards.test.ts
+++ b/packages/media-parser/src/test/seeking/seek-backwards.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {hasBeenAborted} from '../../errors';
import {nodeReader} from '../../node';
diff --git a/packages/media-parser/src/test/seeking/seek-before.test.ts b/packages/media-parser/src/test/seeking/seek-before.test.ts
index caadf00ff4a..6181b41ef38 100644
--- a/packages/media-parser/src/test/seeking/seek-before.test.ts
+++ b/packages/media-parser/src/test/seeking/seek-before.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {hasBeenAborted} from '../../errors';
import {nodeReader} from '../../node';
diff --git a/packages/media-parser/src/test/seeking/seek-flac.test.ts b/packages/media-parser/src/test/seeking/seek-flac.test.ts
index 2a4525b8404..c1e3fd2e393 100644
--- a/packages/media-parser/src/test/seeking/seek-flac.test.ts
+++ b/packages/media-parser/src/test/seeking/seek-flac.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {nodeReader} from '../../node';
import {parseMedia} from '../../parse-media';
diff --git a/packages/media-parser/src/test/seeking/seek-m3u-mp4.test.ts b/packages/media-parser/src/test/seeking/seek-m3u-mp4.test.ts
index fc7ae810304..3df46b6e6da 100644
--- a/packages/media-parser/src/test/seeking/seek-m3u-mp4.test.ts
+++ b/packages/media-parser/src/test/seeking/seek-m3u-mp4.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {hasBeenAborted} from '../../errors';
import {nodeReader} from '../../node';
diff --git a/packages/media-parser/src/test/seeking/seek-moof.test.ts b/packages/media-parser/src/test/seeking/seek-moof.test.ts
index 5ec2cdeb5f9..7581c2b039f 100644
--- a/packages/media-parser/src/test/seeking/seek-moof.test.ts
+++ b/packages/media-parser/src/test/seeking/seek-moof.test.ts
@@ -1,5 +1,5 @@
-import {getRemoteExampleVideo} from '@remotion/example-videos';
import {beforeAll, expect, test} from 'bun:test';
+import {getRemoteExampleVideo} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {hasBeenAborted} from '../../errors';
import {parseMedia} from '../../parse-media';
diff --git a/packages/media-parser/src/test/seeking/seek-mp3-cbr.test.ts b/packages/media-parser/src/test/seeking/seek-mp3-cbr.test.ts
index ceebc514d2f..75edaae3626 100644
--- a/packages/media-parser/src/test/seeking/seek-mp3-cbr.test.ts
+++ b/packages/media-parser/src/test/seeking/seek-mp3-cbr.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {nodeReader} from '../../node';
import {parseMedia} from '../../parse-media';
diff --git a/packages/media-parser/src/test/seeking/seek-mp3.test.ts b/packages/media-parser/src/test/seeking/seek-mp3.test.ts
index 2c0db4eb940..35f831e2f8a 100644
--- a/packages/media-parser/src/test/seeking/seek-mp3.test.ts
+++ b/packages/media-parser/src/test/seeking/seek-mp3.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {nodeReader} from '../../node';
import {parseMedia} from '../../parse-media';
diff --git a/packages/media-parser/src/test/seeking/seek-on-worker.test.ts b/packages/media-parser/src/test/seeking/seek-on-worker.test.ts
index c74a800a0d2..2ff56cbe817 100644
--- a/packages/media-parser/src/test/seeking/seek-on-worker.test.ts
+++ b/packages/media-parser/src/test/seeking/seek-on-worker.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {hasBeenAborted} from '../../errors';
import {parseMediaOnServerWorker} from '../../server-worker.module';
diff --git a/packages/media-parser/src/test/seeking/seek-transportstream.test.ts b/packages/media-parser/src/test/seeking/seek-transportstream.test.ts
index 54885369931..3426fa1e687 100644
--- a/packages/media-parser/src/test/seeking/seek-transportstream.test.ts
+++ b/packages/media-parser/src/test/seeking/seek-transportstream.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {nodeReader} from '../../node';
import {parseMedia} from '../../parse-media';
diff --git a/packages/media-parser/src/test/seeking/seek-xing.test.ts b/packages/media-parser/src/test/seeking/seek-xing.test.ts
index e2e017bc90e..bbf1c421fd3 100644
--- a/packages/media-parser/src/test/seeking/seek-xing.test.ts
+++ b/packages/media-parser/src/test/seeking/seek-xing.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {nodeReader} from '../../node';
import {parseMedia} from '../../parse-media';
diff --git a/packages/media-parser/src/test/seeking/seeking-wav.test.ts b/packages/media-parser/src/test/seeking/seeking-wav.test.ts
index f61f4b1fd70..b3c38120592 100644
--- a/packages/media-parser/src/test/seeking/seeking-wav.test.ts
+++ b/packages/media-parser/src/test/seeking/seeking-wav.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {nodeReader} from '../../node';
import {parseMedia} from '../../parse-media';
diff --git a/packages/media-parser/src/test/seeking/slow-fields-forward-seek.test.ts b/packages/media-parser/src/test/seeking/slow-fields-forward-seek.test.ts
index 4bc8837b961..52f963fa06b 100644
--- a/packages/media-parser/src/test/seeking/slow-fields-forward-seek.test.ts
+++ b/packages/media-parser/src/test/seeking/slow-fields-forward-seek.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {nodeReader} from '../../node';
import {parseMedia} from '../../parse-media';
diff --git a/packages/media-parser/src/test/seeking/throw-on-infinite-loop.test.ts b/packages/media-parser/src/test/seeking/throw-on-infinite-loop.test.ts
index a625b5851ee..a6fd3588314 100644
--- a/packages/media-parser/src/test/seeking/throw-on-infinite-loop.test.ts
+++ b/packages/media-parser/src/test/seeking/throw-on-infinite-loop.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../../controller/media-parser-controller';
import {nodeReader} from '../../node';
import {parseMedia} from '../../parse-media';
diff --git a/packages/media-parser/src/test/seeking/webm-cues.test.ts b/packages/media-parser/src/test/seeking/webm-cues.test.ts
index 105ecf04681..6dea50245b8 100644
--- a/packages/media-parser/src/test/seeking/webm-cues.test.ts
+++ b/packages/media-parser/src/test/seeking/webm-cues.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {fetchWebmCues} from '../../containers/webm/seek/fetch-web-cues';
import {mediaParserController} from '../../controller/media-parser-controller';
import {hasBeenAborted} from '../../errors';
diff --git a/packages/media-parser/src/test/skipped-avi.test.ts b/packages/media-parser/src/test/skipped-avi.test.ts
index 609beba220a..936ed91620a 100644
--- a/packages/media-parser/src/test/skipped-avi.test.ts
+++ b/packages/media-parser/src/test/skipped-avi.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/slow-shortcircuit.test.ts b/packages/media-parser/src/test/slow-shortcircuit.test.ts
index a927b8d2846..ba5374d36a7 100644
--- a/packages/media-parser/src/test/slow-shortcircuit.test.ts
+++ b/packages/media-parser/src/test/slow-shortcircuit.test.ts
@@ -1,5 +1,5 @@
-import {getRemoteExampleVideo} from '@remotion/example-videos';
import {beforeAll, expect, test} from 'bun:test';
+import {getRemoteExampleVideo} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/stream-local.test.ts b/packages/media-parser/src/test/stream-local.test.ts
index 433f33b7d7a..8176fc3b998 100644
--- a/packages/media-parser/src/test/stream-local.test.ts
+++ b/packages/media-parser/src/test/stream-local.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import type {MediaParserAudioCodec} from '../get-tracks';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/stream-samples.test.ts b/packages/media-parser/src/test/stream-samples.test.ts
index e2bfdeb30af..4c13777433e 100644
--- a/packages/media-parser/src/test/stream-samples.test.ts
+++ b/packages/media-parser/src/test/stream-samples.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
import {WEBCODECS_TIMESCALE} from '../webcodecs-timescale';
diff --git a/packages/media-parser/src/test/transportstream.test.ts b/packages/media-parser/src/test/transportstream.test.ts
index c9bb71fed83..79082c2061e 100644
--- a/packages/media-parser/src/test/transportstream.test.ts
+++ b/packages/media-parser/src/test/transportstream.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {combineUint8Arrays} from '../combine-uint8-arrays';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/tricky-moof-duration.test.ts b/packages/media-parser/src/test/tricky-moof-duration.test.ts
index e80d7ee90cd..3c49fa9c1d6 100644
--- a/packages/media-parser/src/test/tricky-moof-duration.test.ts
+++ b/packages/media-parser/src/test/tricky-moof-duration.test.ts
@@ -1,5 +1,5 @@
-import {getRemoteExampleVideo} from '@remotion/example-videos';
import {beforeAll, expect, test} from 'bun:test';
+import {getRemoteExampleVideo} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/ts-multiple-keyframes.test.ts b/packages/media-parser/src/test/ts-multiple-keyframes.test.ts
index 32fe2921e06..6b8f0d3e4e6 100644
--- a/packages/media-parser/src/test/ts-multiple-keyframes.test.ts
+++ b/packages/media-parser/src/test/ts-multiple-keyframes.test.ts
@@ -1,5 +1,5 @@
-import {getRemoteExampleVideo} from '@remotion/example-videos';
import {beforeAll, expect, test} from 'bun:test';
+import {getRemoteExampleVideo} from '@remotion/example-videos';
import {mediaParserController} from '../controller/media-parser-controller';
import {hasBeenAborted} from '../errors';
import {nodeReader} from '../node';
diff --git a/packages/media-parser/src/test/very-big-mp4.test.ts b/packages/media-parser/src/test/very-big-mp4.test.ts
index 45bf6a8e171..0637862c32b 100644
--- a/packages/media-parser/src/test/very-big-mp4.test.ts
+++ b/packages/media-parser/src/test/very-big-mp4.test.ts
@@ -1,5 +1,5 @@
-import {getRemoteExampleVideo} from '@remotion/example-videos';
import {beforeAll, expect, test} from 'bun:test';
+import {getRemoteExampleVideo} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/vp9-in-mp4.test.ts b/packages/media-parser/src/test/vp9-in-mp4.test.ts
index 379c7022943..acb89803603 100644
--- a/packages/media-parser/src/test/vp9-in-mp4.test.ts
+++ b/packages/media-parser/src/test/vp9-in-mp4.test.ts
@@ -1,5 +1,5 @@
-import {getRemoteExampleVideo} from '@remotion/example-videos';
import {beforeAll, expect, test} from 'bun:test';
+import {getRemoteExampleVideo} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/wav-junk.test.ts b/packages/media-parser/src/test/wav-junk.test.ts
index 133c573acde..91d9d199f08 100644
--- a/packages/media-parser/src/test/wav-junk.test.ts
+++ b/packages/media-parser/src/test/wav-junk.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/wav.test.ts b/packages/media-parser/src/test/wav.test.ts
index 4e98ffafa50..626470fbc8e 100644
--- a/packages/media-parser/src/test/wav.test.ts
+++ b/packages/media-parser/src/test/wav.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {WAVE_SAMPLES_PER_SECOND} from '../containers/wav/get-seeking-byte';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/wave-format-extensible.test.ts b/packages/media-parser/src/test/wave-format-extensible.test.ts
index 6ffd4277f85..5056bc711e0 100644
--- a/packages/media-parser/src/test/wave-format-extensible.test.ts
+++ b/packages/media-parser/src/test/wave-format-extensible.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {parseMedia} from '../parse-media';
import {nodeReader} from '../readers/from-node';
diff --git a/packages/media-parser/src/test/webm-codec-no-sps.test.ts b/packages/media-parser/src/test/webm-codec-no-sps.test.ts
index bdafac49828..e9a74eb752c 100644
--- a/packages/media-parser/src/test/webm-codec-no-sps.test.ts
+++ b/packages/media-parser/src/test/webm-codec-no-sps.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '../node';
import {parseMedia} from '../parse-media';
diff --git a/packages/media-parser/src/test/worker.test.ts b/packages/media-parser/src/test/worker.test.ts
index acf3f7837d7..dbe50fd8374 100644
--- a/packages/media-parser/src/test/worker.test.ts
+++ b/packages/media-parser/src/test/worker.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {mediaParserController} from '../controller/media-parser-controller';
import {hasBeenAborted, IsAnImageError} from '../errors';
import {parseMediaOnServerWorker} from '../server-worker.module';
diff --git a/packages/media-utils/README.md b/packages/media-utils/README.md
index f47cd9e1626..f1ba9b34dc3 100644
--- a/packages/media-utils/README.md
+++ b/packages/media-utils/README.md
@@ -1,18 +1,18 @@
# @remotion/media-utils
-
+
Utilities for working with media files
-
+
[](https://npmcharts.com/compare/@remotion/media-utils?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/media-utils --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/media-utils) for more information.
diff --git a/packages/media-utils/package.json b/packages/media-utils/package.json
index d3e2ce99926..a111beb12e2 100644
--- a/packages/media-utils/package.json
+++ b/packages/media-utils/package.json
@@ -8,7 +8,7 @@
"main": "dist/index.js",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d"
},
diff --git a/packages/media-utils/src/use-windowed-audio-data.ts b/packages/media-utils/src/use-windowed-audio-data.ts
index af694c84747..4b8caf8fe34 100644
--- a/packages/media-utils/src/use-windowed-audio-data.ts
+++ b/packages/media-utils/src/use-windowed-audio-data.ts
@@ -19,7 +19,6 @@ import {cancelRender, Internals, useDelayRender} from 'remotion';
import {combineFloat32Arrays} from './combine-float32-arrays';
import {getPartialAudioData} from './get-partial-audio-data';
import {isRemoteAsset} from './is-remote-asset';
-
import type {MediaUtilsAudioData} from './types';
type WaveformMap = Record;
diff --git a/packages/media/README.md b/packages/media/README.md
index f0d58f39136..48256a38af9 100644
--- a/packages/media/README.md
+++ b/packages/media/README.md
@@ -1,18 +1,18 @@
# @remotion/media
-
+
Experimental WebCodecs-based media tags
-
+
[](https://npmcharts.com/compare/@remotion/media?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/media --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://remotion.dev/docs/media) for more information.
diff --git a/packages/media/bundle.ts b/packages/media/bundle.ts
index e8e1604e133..23a4d1c63db 100644
--- a/packages/media/bundle.ts
+++ b/packages/media/bundle.ts
@@ -1,5 +1,5 @@
-import {build} from 'bun';
import path from 'path';
+import {build} from 'bun';
if (process.env.NODE_ENV !== 'production') {
throw new Error('This script must be run using NODE_ENV=production');
diff --git a/packages/media/package.json b/packages/media/package.json
index 89003df1651..d3d4b5c7fa5 100644
--- a/packages/media/package.json
+++ b/packages/media/package.json
@@ -14,7 +14,7 @@
"type": "module",
"scripts": {
"if-node-18+": "node -e \"const [maj]=process.versions.node.split('.').map(Number); process.exit(maj>=18?0:1)\"",
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"watch": "tsgo -w",
"test": "node src/test/execute.mjs",
diff --git a/packages/media/vitest.config.ts b/packages/media/vitest.config.ts
index be8d11bfbe0..9460230cbb4 100644
--- a/packages/media/vitest.config.ts
+++ b/packages/media/vitest.config.ts
@@ -1,5 +1,5 @@
-import {webdriverio} from '@vitest/browser-webdriverio';
import path from 'node:path';
+import {webdriverio} from '@vitest/browser-webdriverio';
import {defineConfig} from 'vitest/config';
export default defineConfig({
diff --git a/packages/motion-blur/README.md b/packages/motion-blur/README.md
index 34ebd475059..ed68b7304a8 100644
--- a/packages/motion-blur/README.md
+++ b/packages/motion-blur/README.md
@@ -1,18 +1,18 @@
# @remotion/motion-blur
-
+
Motion blur effect for Remotion
-
+
[](https://npmcharts.com/compare/@remotion/motion-blur?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/motion-blur --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/motion-blur) for more information.
diff --git a/packages/motion-blur/package.json b/packages/motion-blur/package.json
index db248c42f80..d6d1f1e9ecd 100644
--- a/packages/motion-blur/package.json
+++ b/packages/motion-blur/package.json
@@ -10,7 +10,7 @@
"module": "dist/esm/index.mjs",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
},
diff --git a/packages/noise/README.md b/packages/noise/README.md
index 15e0582447d..df8c5dbee56 100644
--- a/packages/noise/README.md
+++ b/packages/noise/README.md
@@ -1,18 +1,18 @@
# @remotion/noise
-
+
Noise generation functions
-
+
[](https://npmcharts.com/compare/@remotion/noise?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/noise --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/noise) for more information.
diff --git a/packages/noise/package.json b/packages/noise/package.json
index 9e8ba6691c2..19d48877eab 100644
--- a/packages/noise/package.json
+++ b/packages/noise/package.json
@@ -10,7 +10,7 @@
"module": "dist/esm/index.mjs",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts",
"test": "bun test src"
diff --git a/packages/openai-whisper/README.md b/packages/openai-whisper/README.md
index 7483705f372..5bdeb4c070d 100644
--- a/packages/openai-whisper/README.md
+++ b/packages/openai-whisper/README.md
@@ -1,18 +1,18 @@
# @remotion/openai-whisper
-
+
Work with the output of the OpenAI Whisper API
-
+
[](https://npmcharts.com/compare/@remotion/openai-whisper?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/openai-whisper --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/openai-whisper) for more information.
diff --git a/packages/openai-whisper/package.json b/packages/openai-whisper/package.json
index d0896006e83..5ebf192fe6c 100644
--- a/packages/openai-whisper/package.json
+++ b/packages/openai-whisper/package.json
@@ -11,7 +11,7 @@
"url": "https://github.com/remotion-dev/remotion/issues"
},
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"test": "bun test src",
"make": "tsgo -d"
diff --git a/packages/openai-whisper/src/test/get-and-convert.test.ts b/packages/openai-whisper/src/test/get-and-convert.test.ts
index 920accb199b..e52a234edb9 100644
--- a/packages/openai-whisper/src/test/get-and-convert.test.ts
+++ b/packages/openai-whisper/src/test/get-and-convert.test.ts
@@ -1,7 +1,7 @@
import {expect, test} from 'bun:test';
import fs from 'fs';
-import OpenAI from 'openai';
import path from 'path';
+import OpenAI from 'openai';
import {openAiWhisperApiToCaptions} from '../openai-whisper-api-to-captions';
import {testOutput} from './output';
diff --git a/packages/paths/README.md b/packages/paths/README.md
index c151329adf3..f171aed84db 100644
--- a/packages/paths/README.md
+++ b/packages/paths/README.md
@@ -1,18 +1,18 @@
# @remotion/paths
-
+
Utilities for working with SVG paths
-
+
[](https://npmcharts.com/compare/@remotion/paths?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/paths --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/paths) for more information.
diff --git a/packages/paths/package.json b/packages/paths/package.json
index 4330d947625..376dbff34c0 100644
--- a/packages/paths/package.json
+++ b/packages/paths/package.json
@@ -10,7 +10,7 @@
"module": "dist/esm/index.mjs",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"test": "bun test src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
diff --git a/packages/paths/src/helpers/bezier.ts b/packages/paths/src/helpers/bezier.ts
index 9d619e0e3b0..bb0c641a5c3 100644
--- a/packages/paths/src/helpers/bezier.ts
+++ b/packages/paths/src/helpers/bezier.ts
@@ -1,7 +1,5 @@
// Copied from: https://github.com/rveciana/svg-path-properties
-import type {Point, Properties} from './types';
-
import {
cubicDerivative,
cubicPoint,
@@ -11,6 +9,7 @@ import {
quadraticPoint,
t2length,
} from './bezier-functions';
+import type {Point, Properties} from './types';
export const makeQuadratic = ({
startX,
diff --git a/packages/player-example/package.json b/packages/player-example/package.json
index 99a6f445ad2..9282e05d91f 100644
--- a/packages/player-example/package.json
+++ b/packages/player-example/package.json
@@ -25,6 +25,7 @@
},
"devDependencies": {
"eslint": "catalog:",
+ "prettier": "catalog:",
"@types/node": "catalog:"
},
"scripts": {
diff --git a/packages/player/README.md b/packages/player/README.md
index b8868c4a1a0..d035cffc3be 100644
--- a/packages/player/README.md
+++ b/packages/player/README.md
@@ -1,18 +1,18 @@
# @remotion/player
-
+
React component for embedding a Remotion preview into your app
-
+
[](https://npmcharts.com/compare/@remotion/player?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/player --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/player) for more information.
diff --git a/packages/player/package.json b/packages/player/package.json
index dd83cf245dd..7524a805712 100644
--- a/packages/player/package.json
+++ b/packages/player/package.json
@@ -10,7 +10,7 @@
"module": "dist/esm/index.mjs",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d && bun ensure-correct-version.ts && bun --env-file=../.env.bundle bundle.ts",
"test": "bun test src",
diff --git a/packages/player/src/Player.tsx b/packages/player/src/Player.tsx
index 03bedf09d20..44704250fe4 100644
--- a/packages/player/src/Player.tsx
+++ b/packages/player/src/Player.tsx
@@ -17,19 +17,19 @@ import type {
TimelineContextValue,
} from 'remotion';
import {Composition, Internals} from 'remotion';
+import type {BrowserMediaControlsBehavior} from './browser-mediasession.js';
import {PlayerEmitterProvider} from './EmitterProvider.js';
import type {RenderMuteButton} from './MediaVolumeSlider.js';
+import {playerCssClassname} from './player-css-classname.js';
+import type {PlayerRef, RenderCustomControls} from './player-methods.js';
import type {
RenderFullscreenButton,
RenderPlayPauseButton,
} from './PlayerControls.js';
import type {PosterFillMode, RenderLoading, RenderPoster} from './PlayerUI.js';
import PlayerUI from './PlayerUI.js';
-import {PLAYER_COMP_ID, SharedPlayerContexts} from './SharedPlayerContext.js';
-import type {BrowserMediaControlsBehavior} from './browser-mediasession.js';
-import {playerCssClassname} from './player-css-classname.js';
-import type {PlayerRef, RenderCustomControls} from './player-methods.js';
import type {RenderVolumeSlider} from './render-volume-slider.js';
+import {PLAYER_COMP_ID, SharedPlayerContexts} from './SharedPlayerContext.js';
import {acknowledgeRemotionLicenseMessage} from './use-remotion-license-acknowledge.js';
import type {PropsIfHasProps} from './utils/props-if-has-props.js';
import {validateInOutFrames} from './utils/validate-in-out-frame.js';
diff --git a/packages/player/src/PlayerControls.tsx b/packages/player/src/PlayerControls.tsx
index 2a87e9da9cd..60519d9c8c9 100644
--- a/packages/player/src/PlayerControls.tsx
+++ b/packages/player/src/PlayerControls.tsx
@@ -1,13 +1,13 @@
import type {MouseEventHandler, ReactNode, SyntheticEvent} from 'react';
import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';
import {DefaultPlayPauseButton} from './DefaultPlayPauseButton.js';
+import {FullscreenIcon} from './icons.js';
import type {RenderMuteButton} from './MediaVolumeSlider.js';
import {MediaVolumeSlider} from './MediaVolumeSlider.js';
import {PlaybackrateControl, playerButtonStyle} from './PlaybackrateControl.js';
+import type {RenderCustomControls} from './player-methods.js';
import {PlayerSeekBar} from './PlayerSeekBar.js';
import {PlayerTimeLabel} from './PlayerTimeLabel.js';
-import {FullscreenIcon} from './icons.js';
-import type {RenderCustomControls} from './player-methods.js';
import type {RenderVolumeSlider} from './render-volume-slider.js';
import {useHoverState} from './use-hover-state.js';
import {
diff --git a/packages/player/src/PlayerUI.tsx b/packages/player/src/PlayerUI.tsx
index 04a967d93fc..bbc64546782 100644
--- a/packages/player/src/PlayerUI.tsx
+++ b/packages/player/src/PlayerUI.tsx
@@ -12,12 +12,6 @@ import React, {
} from 'react';
import type {CurrentScaleContextType} from 'remotion';
import {Internals} from 'remotion';
-import type {RenderMuteButton} from './MediaVolumeSlider.js';
-import type {
- RenderFullscreenButton,
- RenderPlayPauseButton,
-} from './PlayerControls.js';
-import {Controls} from './PlayerControls.js';
import type {BrowserMediaControlsBehavior} from './browser-mediasession.js';
import {
calculateCanvasTransformation,
@@ -27,12 +21,18 @@ import {
} from './calculate-scale.js';
import {ErrorBoundary} from './error-boundary.js';
import {RenderWarningIfBlacklist} from './license-blacklist.js';
+import type {RenderMuteButton} from './MediaVolumeSlider.js';
import {playerCssClassname} from './player-css-classname.js';
import type {
PlayerMethods,
PlayerRef,
RenderCustomControls,
} from './player-methods.js';
+import type {
+ RenderFullscreenButton,
+ RenderPlayPauseButton,
+} from './PlayerControls.js';
+import {Controls} from './PlayerControls.js';
import type {RenderVolumeSlider} from './render-volume-slider.js';
import {usePlayback} from './use-playback.js';
import {usePlayer} from './use-player.js';
diff --git a/packages/player/src/render-volume-slider.tsx b/packages/player/src/render-volume-slider.tsx
index ea0efcf2e7a..954cd2e06c3 100644
--- a/packages/player/src/render-volume-slider.tsx
+++ b/packages/player/src/render-volume-slider.tsx
@@ -1,7 +1,7 @@
import React, {useCallback, useMemo, useState} from 'react';
import {random} from 'remotion';
-import {VOLUME_SLIDER_WIDTH} from './MediaVolumeSlider';
import {ICON_SIZE} from './icons';
+import {VOLUME_SLIDER_WIDTH} from './MediaVolumeSlider';
const KNOB_SIZE = 12;
diff --git a/packages/preload/README.md b/packages/preload/README.md
index 419b93bf99b..b1f86e4e8a8 100644
--- a/packages/preload/README.md
+++ b/packages/preload/README.md
@@ -1,18 +1,18 @@
# @remotion/preload
-
+
Preloads assets for use in Remotion
-
+
[](https://npmcharts.com/compare/@remotion/preload?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/preload --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/preload) for more information.
diff --git a/packages/preload/package.json b/packages/preload/package.json
index 62f8ab14131..a115f27ece8 100644
--- a/packages/preload/package.json
+++ b/packages/preload/package.json
@@ -9,7 +9,7 @@
"types": "dist/index.d.ts",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d"
},
diff --git a/packages/promo-pages/README.md b/packages/promo-pages/README.md
index 439ebe4b17b..5ec2d6e8120 100644
--- a/packages/promo-pages/README.md
+++ b/packages/promo-pages/README.md
@@ -1,5 +1,5 @@
# @remotion/promo-pages
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/promo-pages/bundle.ts b/packages/promo-pages/bundle.ts
index be10afc0d71..57dba853478 100644
--- a/packages/promo-pages/bundle.ts
+++ b/packages/promo-pages/bundle.ts
@@ -1,5 +1,4 @@
import {$, build} from 'bun';
-
import {NoReactInternals} from 'remotion/no-react';
if (process.env.NODE_ENV !== 'production') {
diff --git a/packages/promo-pages/src/components/3DEngine/ButtonDemo.tsx b/packages/promo-pages/src/components/3DEngine/ButtonDemo.tsx
index 1d13143a646..9ad88c36950 100644
--- a/packages/promo-pages/src/components/3DEngine/ButtonDemo.tsx
+++ b/packages/promo-pages/src/components/3DEngine/ButtonDemo.tsx
@@ -1,7 +1,7 @@
import React, {useCallback, useRef, useState} from 'react';
import {cn} from '../../cn';
-import {Outer} from './Outer';
import {useHoverTransforms} from './hover-transforms';
+import {Outer} from './Outer';
export const Button3D: React.FC<
React.ButtonHTMLAttributes
diff --git a/packages/promo-pages/src/components/homepage/ChooseTemplate.tsx b/packages/promo-pages/src/components/homepage/ChooseTemplate.tsx
index 9a6418c2c17..9cbcbd04e19 100644
--- a/packages/promo-pages/src/components/homepage/ChooseTemplate.tsx
+++ b/packages/promo-pages/src/components/homepage/ChooseTemplate.tsx
@@ -1,6 +1,5 @@
import {CreateVideoInternals} from 'create-video';
import React from 'react';
-
import {IconForTemplate} from './IconForTemplate';
import {MoreTemplatesButton} from './MoreTemplatesButton';
import {TemplateIcon} from './TemplateIcon';
diff --git a/packages/promo-pages/src/components/homepage/Demo/DisplayedEmoji.tsx b/packages/promo-pages/src/components/homepage/Demo/DisplayedEmoji.tsx
index 2b7af3d3013..c0c3c26c8fe 100644
--- a/packages/promo-pages/src/components/homepage/Demo/DisplayedEmoji.tsx
+++ b/packages/promo-pages/src/components/homepage/Demo/DisplayedEmoji.tsx
@@ -4,7 +4,6 @@ import {
Lottie,
type LottieAnimationData,
} from '@remotion/lottie';
-
import React, {useEffect, useMemo, useState} from 'react';
import {useDelayRender, useVideoConfig} from 'remotion';
diff --git a/packages/promo-pages/src/components/homepage/Demo/index.tsx b/packages/promo-pages/src/components/homepage/Demo/index.tsx
index 97ef6006032..9b086a55a3a 100644
--- a/packages/promo-pages/src/components/homepage/Demo/index.tsx
+++ b/packages/promo-pages/src/components/homepage/Demo/index.tsx
@@ -8,7 +8,6 @@ import React, {
useState,
type CSSProperties,
} from 'react';
-
import {PALETTE} from '../layout/colors';
import {useColorMode} from '../layout/use-color-mode';
import {SectionTitle} from '../VideoAppsTitle';
diff --git a/packages/promo-pages/src/components/homepage/EditorStarterSection.tsx b/packages/promo-pages/src/components/homepage/EditorStarterSection.tsx
index 52d649092e3..98cf7162a67 100644
--- a/packages/promo-pages/src/components/homepage/EditorStarterSection.tsx
+++ b/packages/promo-pages/src/components/homepage/EditorStarterSection.tsx
@@ -1,5 +1,4 @@
import React from 'react';
-
import {BlueButton, ClearButton} from './layout/Button';
import {MuxVideo} from './MuxVideo';
import {SectionTitle} from './VideoAppsTitle';
diff --git a/packages/promo-pages/src/components/homepage/VideoAppsShowcase.tsx b/packages/promo-pages/src/components/homepage/VideoAppsShowcase.tsx
index 790d404699c..f161497629c 100644
--- a/packages/promo-pages/src/components/homepage/VideoAppsShowcase.tsx
+++ b/packages/promo-pages/src/components/homepage/VideoAppsShowcase.tsx
@@ -1,5 +1,4 @@
import React, {useRef, useState} from 'react';
-
import {IsMutedIcon, NotMutedIcon, PausedIcon, PlayingIcon} from './Demo/icons';
import {MuxVideo} from './MuxVideo';
import {SectionTitle} from './VideoAppsTitle';
diff --git a/packages/promo-pages/src/components/prompts/MuxPlayer.tsx b/packages/promo-pages/src/components/prompts/MuxPlayer.tsx
index dc201ffcb44..e6db36b57eb 100644
--- a/packages/promo-pages/src/components/prompts/MuxPlayer.tsx
+++ b/packages/promo-pages/src/components/prompts/MuxPlayer.tsx
@@ -10,7 +10,6 @@ import {
DefaultVideoLayout,
} from '@vidstack/react/player/layouts/default';
import React, {useCallback} from 'react';
-
import '@vidstack/react/player/styles/default/layouts/video.css';
import '@vidstack/react/player/styles/default/theme.css';
diff --git a/packages/promo-pages/src/prompts-show.tsx b/packages/promo-pages/src/prompts-show.tsx
index 5b60e8aeb34..80a17406268 100644
--- a/packages/promo-pages/src/prompts-show.tsx
+++ b/packages/promo-pages/src/prompts-show.tsx
@@ -1,7 +1,7 @@
import {StrictMode} from 'react';
import {createRoot} from 'react-dom/client';
-import {PromptsShowPage} from './components/prompts/PromptsShow';
import type {PromptSubmission} from './components/prompts/prompt-types';
+import {PromptsShowPage} from './components/prompts/PromptsShow';
import './index.css';
const mockPromptSubmission: PromptSubmission = {
diff --git a/packages/promo-pages/vite.config.ts b/packages/promo-pages/vite.config.ts
index c7501bb1332..d36701ba104 100644
--- a/packages/promo-pages/vite.config.ts
+++ b/packages/promo-pages/vite.config.ts
@@ -1,6 +1,5 @@
import tailwindcss from '@tailwindcss/vite';
import react from '@vitejs/plugin-react-swc';
-
import {defineConfig} from 'vite';
// https://vite.dev/config/
diff --git a/packages/react18-tests/README.md b/packages/react18-tests/README.md
index 57084ad7f6a..b22db2dfa3d 100644
--- a/packages/react18-tests/README.md
+++ b/packages/react18-tests/README.md
@@ -1,5 +1,5 @@
# @remotion/react18-tests
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/react18-tests/package.json b/packages/react18-tests/package.json
index 137ffc41310..a7efdef3dfb 100644
--- a/packages/react18-tests/package.json
+++ b/packages/react18-tests/package.json
@@ -7,7 +7,7 @@
"main": "dist/index.js",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d",
"testwebrenderer": "vitest src/test --browser --run",
diff --git a/packages/react18-tests/tsconfig.json b/packages/react18-tests/tsconfig.json
index 364d1401a88..e6bca7e0e5a 100644
--- a/packages/react18-tests/tsconfig.json
+++ b/packages/react18-tests/tsconfig.json
@@ -7,5 +7,9 @@
"moduleResolution": "bundler"
},
"include": ["src"],
- "references": [{"path": "../core"}, {"path": "../studio"}, {"path": "../web-renderer"}]
+ "references": [
+ {"path": "../core"},
+ {"path": "../studio"},
+ {"path": "../web-renderer"}
+ ]
}
diff --git a/packages/react18-tests/vitest.config.ts b/packages/react18-tests/vitest.config.ts
index 58c0451c112..c871250213d 100644
--- a/packages/react18-tests/vitest.config.ts
+++ b/packages/react18-tests/vitest.config.ts
@@ -1,6 +1,6 @@
+import path from 'node:path';
import react from '@vitejs/plugin-react';
import {playwright} from '@vitest/browser-playwright';
-import path from 'node:path';
import {defineConfig} from 'vitest/config';
type Truthy = T extends false | '' | 0 | null | undefined ? never : T;
diff --git a/packages/renderer/.prettierignore b/packages/renderer/.prettierignore
deleted file mode 100644
index 0d85066ded0..00000000000
--- a/packages/renderer/.prettierignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# Has error in CI even though is formatted
-src/compositor/compositor.ts
diff --git a/packages/renderer/README.md b/packages/renderer/README.md
index 61e781ec322..e49d10551ab 100644
--- a/packages/renderer/README.md
+++ b/packages/renderer/README.md
@@ -1,18 +1,18 @@
# @remotion/renderer
-
+
Render Remotion videos using Node.js or Bun
-
+
[](https://npmcharts.com/compare/@remotion/renderer?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/renderer --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/renderer) for more information.
diff --git a/packages/renderer/package.json b/packages/renderer/package.json
index 7e074b34510..2fb1115d0fb 100644
--- a/packages/renderer/package.json
+++ b/packages/renderer/package.json
@@ -9,7 +9,7 @@
"types": "dist/index.d.ts",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"test": "bun test src",
"watch": "tsgo -w",
diff --git a/packages/renderer/src/browser/BrowserFetcher.ts b/packages/renderer/src/browser/BrowserFetcher.ts
index 5fa7c83c547..cc68455f4cd 100644
--- a/packages/renderer/src/browser/BrowserFetcher.ts
+++ b/packages/renderer/src/browser/BrowserFetcher.ts
@@ -17,11 +17,8 @@
import * as fs from 'node:fs';
import * as os from 'node:os';
import * as path from 'node:path';
-
-import extractZip from 'extract-zip';
-
import {promisify} from 'node:util';
-
+import extractZip from 'extract-zip';
import {downloadFile} from '../assets/download-file';
import {makeFileExecutableIfItIsNot} from '../compositor/make-file-executable';
import type {LogLevel} from '../log-level';
diff --git a/packages/renderer/src/browser/BrowserPage.ts b/packages/renderer/src/browser/BrowserPage.ts
index ecd5f2ea277..01068209a18 100644
--- a/packages/renderer/src/browser/BrowserPage.ts
+++ b/packages/renderer/src/browser/BrowserPage.ts
@@ -19,10 +19,20 @@ import {formatRemoteObject} from '../format-logs';
import type {LogLevel} from '../log-level';
import {Log} from '../logger';
import {truthy} from '../truthy';
+import {assert} from './assert';
import type {HeadlessBrowser} from './Browser';
import type {CDPSession} from './Connection';
import type {ConsoleMessageType} from './ConsoleMessage';
import {ConsoleMessage} from './ConsoleMessage';
+import type {
+ AttachedToTargetEvent,
+ BindingCalledEvent,
+ ConsoleAPICalledEvent,
+ DevtoolsRemoteObject,
+ EntryAddedEvent,
+ SetDeviceMetricsOverrideRequest,
+ StackTrace,
+} from './devtools-types';
import type {
EvaluateFn,
EvaluateFnReturnType,
@@ -37,20 +47,10 @@ import type {HTTPResponse} from './HTTPResponse';
import type {JSHandle} from './JSHandle';
import {_createJSHandle} from './JSHandle';
import type {Viewport} from './PuppeteerViewport';
+import type {SourceMapGetter} from './source-map-getter';
import type {Target} from './Target';
import {TaskQueue} from './TaskQueue';
import {TimeoutSettings} from './TimeoutSettings';
-import {assert} from './assert';
-import type {
- AttachedToTargetEvent,
- BindingCalledEvent,
- ConsoleAPICalledEvent,
- DevtoolsRemoteObject,
- EntryAddedEvent,
- SetDeviceMetricsOverrideRequest,
- StackTrace,
-} from './devtools-types';
-import type {SourceMapGetter} from './source-map-getter';
import {
evaluationString,
isErrorLike,
diff --git a/packages/renderer/src/browser/BrowserRunner.ts b/packages/renderer/src/browser/BrowserRunner.ts
index bc39e8c9870..c5a67617352 100644
--- a/packages/renderer/src/browser/BrowserRunner.ts
+++ b/packages/renderer/src/browser/BrowserRunner.ts
@@ -21,10 +21,10 @@ import type {LogLevel} from '../log-level';
import {isEqualOrBelowLogLevel} from '../log-level';
import {Log} from '../logger';
import {truthy} from '../truthy';
+import {assert} from './assert';
import {Connection} from './Connection';
import {TimeoutError} from './Errors';
import {NodeWebSocketTransport} from './NodeWebSocketTransport';
-import {assert} from './assert';
import {
formatChromeMessage,
shouldLogBrowserMessage,
diff --git a/packages/renderer/src/browser/Connection.ts b/packages/renderer/src/browser/Connection.ts
index a0a33c64dca..3ad55f713a0 100644
--- a/packages/renderer/src/browser/Connection.ts
+++ b/packages/renderer/src/browser/Connection.ts
@@ -16,7 +16,6 @@
import {Log} from '../logger';
import type {Commands} from './devtools-commands';
import type {TargetInfo} from './devtools-types';
-
import {ProtocolError} from './Errors';
import {EventEmitter} from './EventEmitter';
import type {NodeWebSocketTransport} from './NodeWebSocketTransport';
diff --git a/packages/renderer/src/browser/FrameManager.ts b/packages/renderer/src/browser/FrameManager.ts
index 01443a00e12..9361bdaa04c 100644
--- a/packages/renderer/src/browser/FrameManager.ts
+++ b/packages/renderer/src/browser/FrameManager.ts
@@ -15,9 +15,20 @@
*/
import type {LogLevel} from '../log-level';
+import {assert} from './assert';
import type {Page} from './BrowserPage';
import type {CDPSession} from './Connection';
import {Connection} from './Connection';
+import type {
+ AttachedToTargetEvent,
+ DetachedFromTargetEvent,
+ ExecutionContextDescription,
+ FrameDetachedEvent,
+ FrameDetachedEventReason,
+ FrameTree,
+ LifecycleEventEvent,
+ Frame as TFrame,
+} from './devtools-types';
import {DOMWorld} from './DOMWorld';
import type {
EvaluateFn,
@@ -28,23 +39,12 @@ import type {
} from './EvalTypes';
import {EventEmitter} from './EventEmitter';
import {EVALUATION_SCRIPT_URL, ExecutionContext} from './ExecutionContext';
+import {isTargetClosedErr} from './flaky-errors';
import type {HTTPResponse} from './HTTPResponse';
import type {JSHandle} from './JSHandle';
import type {PuppeteerLifeCycleEvent} from './LifecycleWatcher';
import {LifecycleWatcher} from './LifecycleWatcher';
import {NetworkManager} from './NetworkManager';
-import {assert} from './assert';
-import type {
- AttachedToTargetEvent,
- DetachedFromTargetEvent,
- ExecutionContextDescription,
- FrameDetachedEvent,
- FrameDetachedEventReason,
- FrameTree,
- LifecycleEventEvent,
- Frame as TFrame,
-} from './devtools-types';
-import {isTargetClosedErr} from './flaky-errors';
import {isErrorLike} from './util';
const UTILITY_WORLD_NAME = '__puppeteer_utility_world__';
diff --git a/packages/renderer/src/browser/Launcher.ts b/packages/renderer/src/browser/Launcher.ts
index f7dadf32be1..480bb7cf516 100644
--- a/packages/renderer/src/browser/Launcher.ts
+++ b/packages/renderer/src/browser/Launcher.ts
@@ -15,7 +15,6 @@
*/
import {HeadlessBrowser} from './Browser';
-
import type {LaunchOptions} from './LaunchOptions';
export const launchChrome = async ({
diff --git a/packages/renderer/src/browser/handle-failed-resource.ts b/packages/renderer/src/browser/handle-failed-resource.ts
index e3d637e8684..0a62f5fe7bd 100644
--- a/packages/renderer/src/browser/handle-failed-resource.ts
+++ b/packages/renderer/src/browser/handle-failed-resource.ts
@@ -1,10 +1,10 @@
import type {LogLevel} from '../log-level';
import {Log} from '../logger';
-import type {HTTPRequest} from './HTTPRequest';
import type {
LoadingFailedEvent,
ResponseReceivedExtraInfoEvent,
} from './devtools-types';
+import type {HTTPRequest} from './HTTPRequest';
export const handleFailedResource = ({
extraInfo,
diff --git a/packages/renderer/src/call-ffmpeg.ts b/packages/renderer/src/call-ffmpeg.ts
index 3e61e8a9c08..03f4d9db7c9 100644
--- a/packages/renderer/src/call-ffmpeg.ts
+++ b/packages/renderer/src/call-ffmpeg.ts
@@ -1,7 +1,7 @@
-import execa from 'execa';
import type {SpawnOptionsWithoutStdio} from 'node:child_process';
import {spawn} from 'node:child_process';
import path from 'path';
+import execa from 'execa';
import {getExecutablePath} from './compositor/get-executable-path';
import {getExplicitEnv} from './compositor/get-explicit-env';
import {makeFileExecutableIfItIsNot} from './compositor/make-file-executable';
diff --git a/packages/renderer/src/compositor/compositor.ts b/packages/renderer/src/compositor/compositor.ts
index ba9a42db77e..3730229a305 100644
--- a/packages/renderer/src/compositor/compositor.ts
+++ b/packages/renderer/src/compositor/compositor.ts
@@ -1,6 +1,6 @@
-import {makeStreamer} from '@remotion/streaming';
import {spawn} from 'node:child_process';
import path from 'node:path';
+import {makeStreamer} from '@remotion/streaming';
import type {LogLevel} from '../log-level';
import {isEqualOrBelowLogLevel} from '../log-level';
import {Log} from '../logger';
diff --git a/packages/renderer/src/ensure-browser.ts b/packages/renderer/src/ensure-browser.ts
index a06e84015f9..1202b79d91c 100644
--- a/packages/renderer/src/ensure-browser.ts
+++ b/packages/renderer/src/ensure-browser.ts
@@ -1,12 +1,12 @@
import fs from 'fs';
import type {BrowserExecutable} from './browser-executable';
+import {defaultBrowserDownloadProgress} from './browser/browser-download-progress-bar';
import {
downloadBrowser,
getRevisionInfo,
readVersionFile,
TESTED_VERSION,
} from './browser/BrowserFetcher';
-import {defaultBrowserDownloadProgress} from './browser/browser-download-progress-bar';
import type {BrowserSafeApis} from './client';
import {Log} from './logger';
import type {ChromeMode} from './options/chrome-mode';
diff --git a/packages/renderer/src/get-compositions.ts b/packages/renderer/src/get-compositions.ts
index 687905c9ec6..e916cea7bf3 100644
--- a/packages/renderer/src/get-compositions.ts
+++ b/packages/renderer/src/get-compositions.ts
@@ -3,9 +3,9 @@ import {NoReactInternals} from 'remotion/no-react';
import type {BrowserExecutable} from './browser-executable';
import type {BrowserLog} from './browser-log';
import type {HeadlessBrowser} from './browser/Browser';
+import {defaultBrowserDownloadProgress} from './browser/browser-download-progress-bar';
import type {OnLog, Page} from './browser/BrowserPage';
import {DEFAULT_TIMEOUT} from './browser/TimeoutSettings';
-import {defaultBrowserDownloadProgress} from './browser/browser-download-progress-bar';
import {defaultOnLog} from './default-on-log';
import {handleJavascriptException} from './error-handling/handle-javascript-exception';
import {findRemotionRoot} from './find-closest-package-json';
diff --git a/packages/renderer/src/index.ts b/packages/renderer/src/index.ts
index 9548e6b06e4..391811a66ae 100644
--- a/packages/renderer/src/index.ts
+++ b/packages/renderer/src/index.ts
@@ -21,7 +21,6 @@ import {validateFrameRange} from './frame-range';
import {internalGetCompositions} from './get-compositions';
import {resolveConcurrency} from './get-concurrency';
import {getFramesToRender} from './get-duration-from-frame-range';
-
import {
defaultCodecsForFileExtension,
getFileExtensionFromCodec,
@@ -47,7 +46,6 @@ import {
validOpenGlRenderers,
validateOpenGlRenderer,
} from './options/gl';
-
import {parseStack} from './parse-browser-error-stack';
import * as perf from './perf';
import {DEFAULT_PIXEL_FORMAT, validPixelFormats} from './pixel-format';
diff --git a/packages/renderer/src/render-frames.ts b/packages/renderer/src/render-frames.ts
index ff84670a0c4..0206cf1ae84 100644
--- a/packages/renderer/src/render-frames.ts
+++ b/packages/renderer/src/render-frames.ts
@@ -1,6 +1,5 @@
import fs from 'node:fs';
import path from 'node:path';
-
import type {
AudioOrVideoAsset,
InlineAudioAsset,
@@ -13,11 +12,11 @@ import {DEFAULT_BROWSER} from './browser';
import type {BrowserExecutable} from './browser-executable';
import type {BrowserLog} from './browser-log';
import type {HeadlessBrowser} from './browser/Browser';
-import type {OnLog, Page} from './browser/BrowserPage';
-import {DEFAULT_TIMEOUT} from './browser/TimeoutSettings';
import {defaultBrowserDownloadProgress} from './browser/browser-download-progress-bar';
+import type {OnLog, Page} from './browser/BrowserPage';
import {isTargetClosedErr} from './browser/flaky-errors';
import type {SourceMapGetter} from './browser/source-map-getter';
+import {DEFAULT_TIMEOUT} from './browser/TimeoutSettings';
import {getShouldUsePartitionedRendering} from './can-use-parallel-encoding';
import {cycleBrowserTabs} from './cycle-browser-tabs';
import {defaultOnLog} from './default-on-log';
diff --git a/packages/renderer/src/render-media.ts b/packages/renderer/src/render-media.ts
index 38d6f4756c0..2d49e600154 100644
--- a/packages/renderer/src/render-media.ts
+++ b/packages/renderer/src/render-media.ts
@@ -1,8 +1,8 @@
-import {LicensingInternals} from '@remotion/licensing';
-import type {ExecaChildProcess} from 'execa';
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
+import {LicensingInternals} from '@remotion/licensing';
+import type {ExecaChildProcess} from 'execa';
import type {_InternalTypes} from 'remotion';
import type {VideoConfig} from 'remotion/no-react';
import {NoReactInternals} from 'remotion/no-react';
@@ -11,9 +11,9 @@ import type {Bitrate} from './bitrate';
import type {BrowserExecutable} from './browser-executable';
import type {BrowserLog} from './browser-log';
import type {HeadlessBrowser} from './browser/Browser';
+import {defaultBrowserDownloadProgress} from './browser/browser-download-progress-bar';
import type {OnLog} from './browser/BrowserPage';
import {DEFAULT_TIMEOUT} from './browser/TimeoutSettings';
-import {defaultBrowserDownloadProgress} from './browser/browser-download-progress-bar';
import {canUseParallelEncoding} from './can-use-parallel-encoding';
import type {Codec} from './codec';
import {codecSupportsMedia} from './codec-supports-media';
diff --git a/packages/renderer/src/render-still.ts b/packages/renderer/src/render-still.ts
index a757113541c..52b548da584 100644
--- a/packages/renderer/src/render-still.ts
+++ b/packages/renderer/src/render-still.ts
@@ -1,6 +1,6 @@
-import {LicensingInternals} from '@remotion/licensing';
import fs, {statSync} from 'node:fs';
import path from 'node:path';
+import {LicensingInternals} from '@remotion/licensing';
import type {_InternalTypes} from 'remotion';
import type {VideoConfig} from 'remotion/no-react';
import {NoReactInternals} from 'remotion/no-react';
@@ -9,10 +9,10 @@ import {DEFAULT_BROWSER} from './browser';
import type {BrowserExecutable} from './browser-executable';
import type {BrowserLog} from './browser-log';
import type {HeadlessBrowser} from './browser/Browser';
-import type {OnLog} from './browser/BrowserPage';
-import {DEFAULT_TIMEOUT} from './browser/TimeoutSettings';
import {defaultBrowserDownloadProgress} from './browser/browser-download-progress-bar';
+import type {OnLog} from './browser/BrowserPage';
import type {SourceMapGetter} from './browser/source-map-getter';
+import {DEFAULT_TIMEOUT} from './browser/TimeoutSettings';
import type {Codec} from './codec';
import {collectAssets} from './collect-assets';
import {convertToPositiveFrameIndex} from './convert-to-positive-frame-index';
diff --git a/packages/renderer/src/select-composition.ts b/packages/renderer/src/select-composition.ts
index d6906fcad4f..35a00444ef9 100644
--- a/packages/renderer/src/select-composition.ts
+++ b/packages/renderer/src/select-composition.ts
@@ -4,9 +4,9 @@ import {RenderInternals} from '.';
import type {BrowserExecutable} from './browser-executable';
import type {BrowserLog} from './browser-log';
import type {HeadlessBrowser} from './browser/Browser';
+import {defaultBrowserDownloadProgress} from './browser/browser-download-progress-bar';
import type {Page} from './browser/BrowserPage';
import {DEFAULT_TIMEOUT} from './browser/TimeoutSettings';
-import {defaultBrowserDownloadProgress} from './browser/browser-download-progress-bar';
import {handleJavascriptException} from './error-handling/handle-javascript-exception';
import {findRemotionRoot} from './find-closest-package-json';
import {getPageAndCleanupFn} from './get-browser-instance';
diff --git a/packages/renderer/src/test/extract-audio.test.ts b/packages/renderer/src/test/extract-audio.test.ts
index de0de95e819..3b7886402e4 100644
--- a/packages/renderer/src/test/extract-audio.test.ts
+++ b/packages/renderer/src/test/extract-audio.test.ts
@@ -1,6 +1,6 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
import {unlinkSync} from 'node:fs';
+import {exampleVideos} from '@remotion/example-videos';
import {extractAudio} from '../extract-audio';
test('Should be able to extract the audio from a mp4 format video', async () => {
diff --git a/packages/renderer/src/test/extract-frame-rust.test.ts b/packages/renderer/src/test/extract-frame-rust.test.ts
index 3ec8de880ae..709471a324e 100644
--- a/packages/renderer/src/test/extract-frame-rust.test.ts
+++ b/packages/renderer/src/test/extract-frame-rust.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {interpolate} from 'remotion';
import {startLongRunningCompositor} from '../compositor/compositor';
diff --git a/packages/renderer/src/test/get-silent-parts.test.ts b/packages/renderer/src/test/get-silent-parts.test.ts
index e4a7e21b1f4..5455b1099cf 100644
--- a/packages/renderer/src/test/get-silent-parts.test.ts
+++ b/packages/renderer/src/test/get-silent-parts.test.ts
@@ -1,6 +1,6 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
import path from 'path';
+import {exampleVideos} from '@remotion/example-videos';
import {getSilentParts} from '../get-silent-parts';
test('Should be able to get the silences from a video', async () => {
diff --git a/packages/renderer/src/test/rust-memory-usage.test.ts b/packages/renderer/src/test/rust-memory-usage.test.ts
index 01800de659b..5d5130cd01e 100644
--- a/packages/renderer/src/test/rust-memory-usage.test.ts
+++ b/packages/renderer/src/test/rust-memory-usage.test.ts
@@ -1,5 +1,5 @@
-import {exampleVideos} from '@remotion/example-videos';
import {expect, test} from 'bun:test';
+import {exampleVideos} from '@remotion/example-videos';
import {startLongRunningCompositor} from '../compositor/compositor';
test('Should respect the maximum frame cache limit', async () => {
diff --git a/packages/renderer/types/ws/index.d.ts b/packages/renderer/types/ws/index.d.ts
index e9d9b5dd0f7..0278b55fe32 100644
--- a/packages/renderer/types/ws/index.d.ts
+++ b/packages/renderer/types/ws/index.d.ts
@@ -57,12 +57,12 @@ declare class WebSocket extends EventEmitter {
constructor(address: null);
constructor(
address: string | URL,
- options?: WebSocket.ClientOptions | ClientRequestArgs
+ options?: WebSocket.ClientOptions | ClientRequestArgs,
);
constructor(
address: string | URL,
protocols?: string | string[],
- options?: WebSocket.ClientOptions | ClientRequestArgs
+ options?: WebSocket.ClientOptions | ClientRequestArgs,
);
close(code?: number, data?: string | Buffer): void;
ping(data?: any, mask?: boolean, cb?: (err: Error) => void): void;
@@ -76,7 +76,7 @@ declare class WebSocket extends EventEmitter {
compress?: boolean | undefined;
fin?: boolean | undefined;
},
- cb?: (err?: Error) => void
+ cb?: (err?: Error) => void,
): void;
terminate(): void;
/**
@@ -93,186 +93,186 @@ declare class WebSocket extends EventEmitter {
addEventListener(
method: 'message',
cb: (event: WebSocket.MessageEvent) => void,
- options?: WebSocket.EventListenerOptions
+ options?: WebSocket.EventListenerOptions,
): void;
addEventListener(
method: 'close',
cb: (event: WebSocket.CloseEvent) => void,
- options?: WebSocket.EventListenerOptions
+ options?: WebSocket.EventListenerOptions,
): void;
addEventListener(
method: 'error',
cb: (event: WebSocket.ErrorEvent) => void,
- options?: WebSocket.EventListenerOptions
+ options?: WebSocket.EventListenerOptions,
): void;
addEventListener(
method: 'open',
cb: (event: WebSocket.Event) => void,
- options?: WebSocket.EventListenerOptions
+ options?: WebSocket.EventListenerOptions,
): void;
removeEventListener(
method: 'message',
- cb: (event: WebSocket.MessageEvent) => void
+ cb: (event: WebSocket.MessageEvent) => void,
): void;
removeEventListener(
method: 'close',
- cb: (event: WebSocket.CloseEvent) => void
+ cb: (event: WebSocket.CloseEvent) => void,
): void;
removeEventListener(
method: 'error',
- cb: (event: WebSocket.ErrorEvent) => void
+ cb: (event: WebSocket.ErrorEvent) => void,
): void;
removeEventListener(
method: 'open',
- cb: (event: WebSocket.Event) => void
+ cb: (event: WebSocket.Event) => void,
): void;
on(
event: 'close',
- listener: (this: WebSocket, code: number, reason: Buffer) => void
+ listener: (this: WebSocket, code: number, reason: Buffer) => void,
): this;
on(event: 'error', listener: (this: WebSocket, err: Error) => void): this;
on(
event: 'upgrade',
- listener: (this: WebSocket, request: IncomingMessage) => void
+ listener: (this: WebSocket, request: IncomingMessage) => void,
): this;
on(
event: 'message',
listener: (
this: WebSocket,
data: WebSocket.RawData,
- isBinary: boolean
- ) => void
+ isBinary: boolean,
+ ) => void,
): this;
on(event: 'open', listener: (this: WebSocket) => void): this;
on(
event: 'ping' | 'pong',
- listener: (this: WebSocket, data: Buffer) => void
+ listener: (this: WebSocket, data: Buffer) => void,
): this;
on(
event: 'unexpected-response',
listener: (
this: WebSocket,
request: ClientRequest,
- response: IncomingMessage
- ) => void
+ response: IncomingMessage,
+ ) => void,
): this;
on(
event: string | symbol,
- listener: (this: WebSocket, ...args: any[]) => void
+ listener: (this: WebSocket, ...args: any[]) => void,
): this;
once(
event: 'close',
- listener: (this: WebSocket, code: number, reason: Buffer) => void
+ listener: (this: WebSocket, code: number, reason: Buffer) => void,
): this;
once(event: 'error', listener: (this: WebSocket, err: Error) => void): this;
once(
event: 'upgrade',
- listener: (this: WebSocket, request: IncomingMessage) => void
+ listener: (this: WebSocket, request: IncomingMessage) => void,
): this;
once(
event: 'message',
listener: (
this: WebSocket,
data: WebSocket.RawData,
- isBinary: boolean
- ) => void
+ isBinary: boolean,
+ ) => void,
): this;
once(event: 'open', listener: (this: WebSocket) => void): this;
once(
event: 'ping' | 'pong',
- listener: (this: WebSocket, data: Buffer) => void
+ listener: (this: WebSocket, data: Buffer) => void,
): this;
once(
event: 'unexpected-response',
listener: (
this: WebSocket,
request: ClientRequest,
- response: IncomingMessage
- ) => void
+ response: IncomingMessage,
+ ) => void,
): this;
once(
event: string | symbol,
- listener: (this: WebSocket, ...args: any[]) => void
+ listener: (this: WebSocket, ...args: any[]) => void,
): this;
off(
event: 'close',
- listener: (this: WebSocket, code: number, reason: Buffer) => void
+ listener: (this: WebSocket, code: number, reason: Buffer) => void,
): this;
off(event: 'error', listener: (this: WebSocket, err: Error) => void): this;
off(
event: 'upgrade',
- listener: (this: WebSocket, request: IncomingMessage) => void
+ listener: (this: WebSocket, request: IncomingMessage) => void,
): this;
off(
event: 'message',
listener: (
this: WebSocket,
data: WebSocket.RawData,
- isBinary: boolean
- ) => void
+ isBinary: boolean,
+ ) => void,
): this;
off(event: 'open', listener: (this: WebSocket) => void): this;
off(
event: 'ping' | 'pong',
- listener: (this: WebSocket, data: Buffer) => void
+ listener: (this: WebSocket, data: Buffer) => void,
): this;
off(
event: 'unexpected-response',
listener: (
this: WebSocket,
request: ClientRequest,
- response: IncomingMessage
- ) => void
+ response: IncomingMessage,
+ ) => void,
): this;
off(
event: string | symbol,
- listener: (this: WebSocket, ...args: any[]) => void
+ listener: (this: WebSocket, ...args: any[]) => void,
): this;
addListener(
event: 'close',
- listener: (code: number, reason: Buffer) => void
+ listener: (code: number, reason: Buffer) => void,
): this;
addListener(event: 'error', listener: (err: Error) => void): this;
addListener(
event: 'upgrade',
- listener: (request: IncomingMessage) => void
+ listener: (request: IncomingMessage) => void,
): this;
addListener(
event: 'message',
- listener: (data: WebSocket.RawData, isBinary: boolean) => void
+ listener: (data: WebSocket.RawData, isBinary: boolean) => void,
): this;
addListener(event: 'open', listener: () => void): this;
addListener(event: 'ping' | 'pong', listener: (data: Buffer) => void): this;
addListener(
event: 'unexpected-response',
- listener: (request: ClientRequest, response: IncomingMessage) => void
+ listener: (request: ClientRequest, response: IncomingMessage) => void,
): this;
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
removeListener(
event: 'close',
- listener: (code: number, reason: Buffer) => void
+ listener: (code: number, reason: Buffer) => void,
): this;
removeListener(event: 'error', listener: (err: Error) => void): this;
removeListener(
event: 'upgrade',
- listener: (request: IncomingMessage) => void
+ listener: (request: IncomingMessage) => void,
): this;
removeListener(
event: 'message',
- listener: (data: WebSocket.RawData, isBinary: boolean) => void
+ listener: (data: WebSocket.RawData, isBinary: boolean) => void,
): this;
removeListener(event: 'open', listener: () => void): this;
removeListener(
event: 'ping' | 'pong',
- listener: (data: Buffer) => void
+ listener: (data: Buffer) => void,
): this;
removeListener(
event: 'unexpected-response',
- listener: (request: ClientRequest, response: IncomingMessage) => void
+ listener: (request: ClientRequest, response: IncomingMessage) => void,
): this;
removeListener(
event: string | symbol,
- listener: (...args: any[]) => void
+ listener: (...args: any[]) => void,
): this;
}
declare const WebSocketAlias: typeof WebSocket;
@@ -315,8 +315,8 @@ declare namespace WebSocket {
res: boolean,
code?: number,
message?: string,
- headers?: OutgoingHttpHeaders
- ) => void
+ headers?: OutgoingHttpHeaders,
+ ) => void,
) => void;
interface ClientOptions extends SecureContextOptions {
protocol?: string | undefined;
@@ -399,7 +399,7 @@ declare namespace WebSocket {
| undefined;
handleProtocols?: (
protocols: Set,
- request: IncomingMessage
+ request: IncomingMessage,
) => string | false;
path?: string | undefined;
noServer?: boolean | undefined;
@@ -425,75 +425,87 @@ declare namespace WebSocket {
request: IncomingMessage,
socket: Duplex,
upgradeHead: Buffer,
- callback: (client: T, request: IncomingMessage) => void
+ callback: (client: T, request: IncomingMessage) => void,
): void;
shouldHandle(request: IncomingMessage): boolean | Promise;
on(
event: 'connection',
- cb: (this: Server, socket: T, request: IncomingMessage) => void
+ cb: (this: Server, socket: T, request: IncomingMessage) => void,
): this;
on(event: 'error', cb: (this: Server, error: Error) => void): this;
on(
event: 'headers',
- cb: (this: Server, headers: string[], request: IncomingMessage) => void
+ cb: (
+ this: Server,
+ headers: string[],
+ request: IncomingMessage,
+ ) => void,
): this;
on(event: 'close' | 'listening', cb: (this: Server) => void): this;
on(
event: string | symbol,
- listener: (this: Server, ...args: any[]) => void
+ listener: (this: Server, ...args: any[]) => void,
): this;
once(
event: 'connection',
- cb: (this: Server, socket: T, request: IncomingMessage) => void
+ cb: (this: Server, socket: T, request: IncomingMessage) => void,
): this;
once(event: 'error', cb: (this: Server, error: Error) => void): this;
once(
event: 'headers',
- cb: (this: Server, headers: string[], request: IncomingMessage) => void
+ cb: (
+ this: Server,
+ headers: string[],
+ request: IncomingMessage,
+ ) => void,
): this;
once(event: 'close' | 'listening', cb: (this: Server) => void): this;
once(
event: string | symbol,
- listener: (this: Server, ...args: any[]) => void
+ listener: (this: Server, ...args: any[]) => void,
): this;
off(
event: 'connection',
- cb: (this: Server, socket: T, request: IncomingMessage) => void
+ cb: (this: Server, socket: T, request: IncomingMessage) => void,
): this;
off(event: 'error', cb: (this: Server, error: Error) => void): this;
off(
event: 'headers',
- cb: (this: Server, headers: string[], request: IncomingMessage) => void
+ cb: (
+ this: Server,
+ headers: string[],
+ request: IncomingMessage,
+ ) => void,
): this;
off(event: 'close' | 'listening', cb: (this: Server) => void): this;
off(
event: string | symbol,
- listener: (this: Server, ...args: any[]) => void
+ listener: (this: Server, ...args: any[]) => void,
): this;
addListener(
event: 'connection',
- cb: (client: T, request: IncomingMessage) => void
+ cb: (client: T, request: IncomingMessage) => void,
): this;
addListener(event: 'error', cb: (err: Error) => void): this;
addListener(
event: 'headers',
- cb: (headers: string[], request: IncomingMessage) => void
+ cb: (headers: string[], request: IncomingMessage) => void,
): this;
addListener(event: 'close' | 'listening', cb: () => void): this;
addListener(
event: string | symbol,
- listener: (...args: any[]) => void
+ listener: (...args: any[]) => void,
): this;
removeListener(event: 'connection', cb: (client: T) => void): this;
removeListener(event: 'error', cb: (err: Error) => void): this;
removeListener(
event: 'headers',
- cb: (headers: string[], request: IncomingMessage) => void
+ cb: (headers: string[], request: IncomingMessage) => void,
): this;
removeListener(event: 'close' | 'listening', cb: () => void): this;
removeListener(
event: string | symbol,
- listener: (...args: any[]) => void
+ listener: (...args: any[]) => void,
): this;
}
const WebSocketServer: typeof Server;
@@ -502,7 +514,7 @@ declare namespace WebSocket {
interface WebSocket extends WebSocketAlias {}
function createWebSocketStream(
websocket: WebSocket,
- options?: DuplexOptions
+ options?: DuplexOptions,
): Duplex;
}
diff --git a/packages/rive/README.md b/packages/rive/README.md
index 045f64f9085..e94022e1745 100644
--- a/packages/rive/README.md
+++ b/packages/rive/README.md
@@ -1,18 +1,18 @@
# @remotion/rive
-
+
Embed Rive animations in a Remotion video
-
+
[](https://npmcharts.com/compare/@remotion/rive?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/rive --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/rive) for more information.
diff --git a/packages/rive/package.json b/packages/rive/package.json
index 3a02610b732..3fa8e7f3388 100644
--- a/packages/rive/package.json
+++ b/packages/rive/package.json
@@ -9,7 +9,7 @@
"types": "dist/cjs/index.d.ts",
"module": "dist/esm/index.mjs",
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
},
diff --git a/packages/rive/tsconfig.json b/packages/rive/tsconfig.json
index 536f5b67681..df9fc4d3fd8 100644
--- a/packages/rive/tsconfig.json
+++ b/packages/rive/tsconfig.json
@@ -1,11 +1,11 @@
{
- "extends": "../tsconfig.settings.json",
- "compilerOptions": {
- "rootDir": "./src",
- "outDir": "./dist/cjs",
- "skipLibCheck": true,
- "jsx": "react-jsx"
- },
- "include": ["./src"],
- "references": [{ "path": "../core" }]
+ "extends": "../tsconfig.settings.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "./dist/cjs",
+ "skipLibCheck": true,
+ "jsx": "react-jsx"
+ },
+ "include": ["./src"],
+ "references": [{"path": "../core"}]
}
diff --git a/packages/rounded-text-box/README.md b/packages/rounded-text-box/README.md
index 7aec878fc8f..6c81b68b177 100644
--- a/packages/rounded-text-box/README.md
+++ b/packages/rounded-text-box/README.md
@@ -1,18 +1,18 @@
# @remotion/rounded-text-box
-
+
Create a TikTok-like multiline text box SVG path with rounded corners
-
+
[](https://npmcharts.com/compare/@remotion/rounded-text-box?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/rounded-text-box --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/rounded-text-box) for more information.
diff --git a/packages/rounded-text-box/package.json b/packages/rounded-text-box/package.json
index 13727f1c7cf..53a876d9b07 100644
--- a/packages/rounded-text-box/package.json
+++ b/packages/rounded-text-box/package.json
@@ -10,7 +10,7 @@
"module": "dist/esm/index.mjs",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
},
diff --git a/packages/serverless-client/README.md b/packages/serverless-client/README.md
index cf1c2d93af1..180cf07d708 100644
--- a/packages/serverless-client/README.md
+++ b/packages/serverless-client/README.md
@@ -1,5 +1,5 @@
# @remotion/serverless-client
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/serverless-client/package.json b/packages/serverless-client/package.json
index c20d71e5d0b..35cb9a29f57 100644
--- a/packages/serverless-client/package.json
+++ b/packages/serverless-client/package.json
@@ -8,7 +8,7 @@
"sideEffects": false,
"scripts": {
"lint": "eslint src",
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"test": "bun test src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
},
diff --git a/packages/serverless-client/src/progress.ts b/packages/serverless-client/src/progress.ts
index 928e5cf43eb..bcde824f81e 100644
--- a/packages/serverless-client/src/progress.ts
+++ b/packages/serverless-client/src/progress.ts
@@ -1,5 +1,4 @@
import {NoReactAPIs} from '@remotion/renderer/pure';
-
import {calculateChunkTimes} from './calculate-chunk-times';
import type {CustomCredentials} from './constants';
import {estimatePriceFromMetadata} from './estimate-price-from-bucket';
diff --git a/packages/serverless-client/src/provider-implementation.ts b/packages/serverless-client/src/provider-implementation.ts
index 44bdb747aa0..58a69b1a6f7 100644
--- a/packages/serverless-client/src/provider-implementation.ts
+++ b/packages/serverless-client/src/provider-implementation.ts
@@ -1,5 +1,5 @@
-import type {LogLevel} from '@remotion/renderer';
import type {Readable} from 'node:stream';
+import type {LogLevel} from '@remotion/renderer';
import type {DownloadBehavior} from 'remotion';
import type {CustomCredentials, Privacy, ServerlessRoutines} from './constants';
import type {RenderMetadata} from './render-metadata';
diff --git a/packages/serverless/README.md b/packages/serverless/README.md
index adea1668b50..1a5dda3449d 100644
--- a/packages/serverless/README.md
+++ b/packages/serverless/README.md
@@ -1,7 +1,7 @@
# @remotion/serverless
-
+
A runtime for distributed rendering
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/serverless/package.json b/packages/serverless/package.json
index aa2712c9e6d..5f8afe439f0 100644
--- a/packages/serverless/package.json
+++ b/packages/serverless/package.json
@@ -9,7 +9,7 @@
"sideEffects": false,
"scripts": {
"lint": "eslint src",
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"test": "bun test src",
"make": "tsgo -d"
},
diff --git a/packages/serverless/src/concat-videos.ts b/packages/serverless/src/concat-videos.ts
index fad27058154..f9487c86013 100644
--- a/packages/serverless/src/concat-videos.ts
+++ b/packages/serverless/src/concat-videos.ts
@@ -1,3 +1,5 @@
+import fs from 'node:fs';
+import {join} from 'node:path';
import type {
AudioCodec,
CancelSignal,
@@ -6,9 +8,6 @@ import type {
LogLevel,
} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
-import fs from 'node:fs';
-import {join} from 'node:path';
-
import type {CloudProvider, ServerlessCodec} from '@remotion/serverless-client';
import {REMOTION_CONCATENATED_TOKEN} from '@remotion/serverless-client';
import type {InsideFunctionSpecifics} from './provider-implementation';
diff --git a/packages/serverless/src/handlers/launch.ts b/packages/serverless/src/handlers/launch.ts
index 0c5829c11b7..8c3545c5700 100644
--- a/packages/serverless/src/handlers/launch.ts
+++ b/packages/serverless/src/handlers/launch.ts
@@ -1,13 +1,10 @@
+import {existsSync, mkdirSync, rmSync} from 'fs';
+import {type EventEmitter} from 'node:events';
+import {join} from 'path';
/* eslint-disable @typescript-eslint/no-use-before-define */
import type {EmittedArtifact, LogOptions} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
-
import {validateCodec, VERSION} from '@remotion/serverless-client';
-import {existsSync, mkdirSync, rmSync} from 'fs';
-import {type EventEmitter} from 'node:events';
-import {join} from 'path';
-import type {InsideFunctionSpecifics} from '../provider-implementation';
-
import type {
CloudProvider,
PostRenderData,
@@ -38,6 +35,7 @@ import {mergeChunksAndFinishRender} from '../merge-chunks';
import type {OverallProgressHelper} from '../overall-render-progress';
import {makeOverallRenderProgress} from '../overall-render-progress';
import {planFrameRanges} from '../plan-frame-ranges';
+import type {InsideFunctionSpecifics} from '../provider-implementation';
import {removeOutnameCredentials} from '../remove-outname-credentials';
import {streamRendererFunctionWithRetry} from '../stream-renderer';
import {validateComposition} from '../validate-composition';
diff --git a/packages/serverless/src/handlers/renderer.ts b/packages/serverless/src/handlers/renderer.ts
index 1db2630c593..7321815cd1f 100644
--- a/packages/serverless/src/handlers/renderer.ts
+++ b/packages/serverless/src/handlers/renderer.ts
@@ -1,3 +1,5 @@
+import fs from 'node:fs';
+import path from 'node:path';
import type {
AudioCodec,
BrowserLog,
@@ -6,7 +8,6 @@ import type {
} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
import {NoReactAPIs} from '@remotion/renderer/pure';
-
import type {
CloudProvider,
ObjectChunkTimingData,
@@ -22,8 +23,6 @@ import {
truthy,
VERSION,
} from '@remotion/serverless-client';
-import fs from 'node:fs';
-import path from 'node:path';
import type {LaunchedBrowser} from '../get-browser-instance';
import {getTmpDirStateIfENoSp} from '../get-tmp-dir';
import {startLeakDetection} from '../leak-detection';
diff --git a/packages/serverless/src/handlers/still.ts b/packages/serverless/src/handlers/still.ts
index f32e7594755..5abbb0b87ac 100644
--- a/packages/serverless/src/handlers/still.ts
+++ b/packages/serverless/src/handlers/still.ts
@@ -1,6 +1,7 @@
+import fs from 'node:fs';
+import path from 'node:path';
import type {EmittedArtifact, StillImageFormat} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
-
import type {
CloudProvider,
OnStream,
@@ -25,8 +26,6 @@ import {
validatePrivacy,
VERSION,
} from '@remotion/serverless-client';
-import fs from 'node:fs';
-import path from 'node:path';
import {cleanupSerializedInputProps} from '../cleanup-serialized-input-props';
import {getTmpDirStateIfENoSp} from '../get-tmp-dir';
import {onDownloadsHelper} from '../on-downloads-helpers';
diff --git a/packages/serverless/src/invoke-webhook.ts b/packages/serverless/src/invoke-webhook.ts
index c85898f740b..a0b6e4ff5dc 100644
--- a/packages/serverless/src/invoke-webhook.ts
+++ b/packages/serverless/src/invoke-webhook.ts
@@ -1,5 +1,5 @@
-import {RenderInternals} from '@remotion/renderer';
import * as Crypto from 'node:crypto';
+import {RenderInternals} from '@remotion/renderer';
import type {
InvokeWebhook,
InvokeWebhookOptions,
diff --git a/packages/serverless/src/merge-chunks.ts b/packages/serverless/src/merge-chunks.ts
index 2d33774404b..b515507d774 100644
--- a/packages/serverless/src/merge-chunks.ts
+++ b/packages/serverless/src/merge-chunks.ts
@@ -1,10 +1,10 @@
+import fs from 'fs';
import type {
AudioCodec,
CombineChunksOnProgress,
FrameRange,
LogLevel,
} from '@remotion/renderer';
-
import type {DownloadBehavior} from '@remotion/serverless-client';
import {
inspectErrors,
@@ -17,7 +17,6 @@ import {
type SerializedInputProps,
type ServerlessCodec,
} from '@remotion/serverless-client';
-import fs from 'fs';
import {cleanupProps} from './cleanup-props';
import {concatVideos} from './concat-videos';
import {createPostRenderData} from './create-post-render-data';
diff --git a/packages/serverless/src/stream-renderer.ts b/packages/serverless/src/stream-renderer.ts
index f37071b3ffc..6fb907aa254 100644
--- a/packages/serverless/src/stream-renderer.ts
+++ b/packages/serverless/src/stream-renderer.ts
@@ -1,3 +1,5 @@
+import {writeFileSync} from 'fs';
+import {join} from 'path';
import type {EmittedArtifact, LogLevel} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
import type {
@@ -10,8 +12,6 @@ import {
deserializeArtifact,
ServerlessRoutines,
} from '@remotion/serverless-client';
-import {writeFileSync} from 'fs';
-import {join} from 'path';
import type {OverallProgressHelper} from './overall-render-progress';
import type {InsideFunctionSpecifics} from './provider-implementation';
diff --git a/packages/shapes/README.md b/packages/shapes/README.md
index d59d5c69631..c4b89e2e13a 100644
--- a/packages/shapes/README.md
+++ b/packages/shapes/README.md
@@ -1,18 +1,18 @@
# @remotion/shapes
-
+
Generate SVG shapes
-
+
[](https://npmcharts.com/compare/@remotion/shapes?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/shapes --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/shapes) for more information.
diff --git a/packages/shapes/package.json b/packages/shapes/package.json
index 4956d19f240..357ad26b985 100644
--- a/packages/shapes/package.json
+++ b/packages/shapes/package.json
@@ -8,7 +8,7 @@
"main": "dist/index.js",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"test": "bun test src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
diff --git a/packages/skia/README.md b/packages/skia/README.md
index 717ae635870..29b9fd1ed70 100644
--- a/packages/skia/README.md
+++ b/packages/skia/README.md
@@ -1,18 +1,18 @@
# @remotion/skia
-
+
Include React Native Skia components in a Remotion video
-
+
[](https://npmcharts.com/compare/@remotion/skia?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/skia --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/skia) for more information.
diff --git a/packages/skia/package.json b/packages/skia/package.json
index 35f8f4fd562..65e628ee4bc 100644
--- a/packages/skia/package.json
+++ b/packages/skia/package.json
@@ -10,7 +10,7 @@
"module": "dist/esm/index.mjs",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
},
diff --git a/packages/skia/src/enable.ts b/packages/skia/src/enable.ts
index 9b3e7b209c3..835b5979621 100644
--- a/packages/skia/src/enable.ts
+++ b/packages/skia/src/enable.ts
@@ -1,6 +1,6 @@
+import fs from 'fs';
import type {WebpackOverrideFn} from '@remotion/bundler';
import {webpack} from '@remotion/bundler';
-import fs from 'fs';
/**
* @description A function that modifies the default Webpack configuration to make the necessary changes to support Skia.
diff --git a/packages/skills/.prettierrc b/packages/skills/.prettierrc
deleted file mode 100644
index 37d50717489..00000000000
--- a/packages/skills/.prettierrc
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "useTabs": false,
- "bracketSpacing": true,
- "tabWidth": 2
-}
diff --git a/packages/skills/README.md b/packages/skills/README.md
index ece295b61ba..60f7cfc36d7 100644
--- a/packages/skills/README.md
+++ b/packages/skills/README.md
@@ -1,5 +1,5 @@
# @remotion/skills
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/skills/skills/remotion/rules/assets/charts-bar-chart.tsx b/packages/skills/skills/remotion/rules/assets/charts-bar-chart.tsx
index 6c565072fa5..1313ebf5980 100644
--- a/packages/skills/skills/remotion/rules/assets/charts-bar-chart.tsx
+++ b/packages/skills/skills/remotion/rules/assets/charts-bar-chart.tsx
@@ -1,178 +1,173 @@
-import { loadFont } from "@remotion/google-fonts/Inter";
-import {
- AbsoluteFill,
- spring,
- useCurrentFrame,
- useVideoConfig,
-} from "remotion";
+import {loadFont} from '@remotion/google-fonts/Inter';
+import {AbsoluteFill, spring, useCurrentFrame, useVideoConfig} from 'remotion';
-const { fontFamily } = loadFont();
+const {fontFamily} = loadFont();
-const COLOR_BAR = "#D4AF37";
-const COLOR_TEXT = "#ffffff";
-const COLOR_MUTED = "#888888";
-const COLOR_BG = "#0a0a0a";
-const COLOR_AXIS = "#333333";
+const COLOR_BAR = '#D4AF37';
+const COLOR_TEXT = '#ffffff';
+const COLOR_MUTED = '#888888';
+const COLOR_BG = '#0a0a0a';
+const COLOR_AXIS = '#333333';
// Ideal composition size: 1280x720
-const Title: React.FC<{ children: React.ReactNode }> = ({ children }) => (
-
+const Title: React.FC<{children: React.ReactNode}> = ({children}) => (
+
);
-const YAxis: React.FC<{ steps: number[]; height: number }> = ({
- steps,
- height,
+const YAxis: React.FC<{steps: number[]; height: number}> = ({
+ steps,
+ height,
}) => (
-
- {steps
- .slice()
- .reverse()
- .map((step) => (
-
- {step.toLocaleString()}
-
- ))}
-
+
+ {steps
+ .slice()
+ .reverse()
+ .map((step) => (
+
+ {step.toLocaleString()}
+
+ ))}
+
);
const Bar: React.FC<{
- height: number;
- progress: number;
-}> = ({ height, progress }) => (
-
+ height: number;
+ progress: number;
+}> = ({height, progress}) => (
+
);
const XAxis: React.FC<{
- children: React.ReactNode;
- labels: string[];
- height: number;
-}> = ({ children, labels, height }) => (
-
-
- {children}
-
-
- {labels.map((label) => (
-
- {label}
-
- ))}
-
-
+ children: React.ReactNode;
+ labels: string[];
+ height: number;
+}> = ({children, labels, height}) => (
+
+
+ {children}
+
+
+ {labels.map((label) => (
+
+ {label}
+
+ ))}
+
+
);
export const MyAnimation = () => {
- const frame = useCurrentFrame();
- const { fps, height } = useVideoConfig();
+ const frame = useCurrentFrame();
+ const {fps, height} = useVideoConfig();
- const data = [
- { month: "Jan", price: 2039 },
- { month: "Mar", price: 2160 },
- { month: "May", price: 2327 },
- { month: "Jul", price: 2426 },
- { month: "Sep", price: 2634 },
- { month: "Nov", price: 2672 },
- ];
+ const data = [
+ {month: 'Jan', price: 2039},
+ {month: 'Mar', price: 2160},
+ {month: 'May', price: 2327},
+ {month: 'Jul', price: 2426},
+ {month: 'Sep', price: 2634},
+ {month: 'Nov', price: 2672},
+ ];
- const minPrice = 2000;
- const maxPrice = 2800;
- const priceRange = maxPrice - minPrice;
- const chartHeight = height - 280;
- const yAxisSteps = [2000, 2400, 2800];
+ const minPrice = 2000;
+ const maxPrice = 2800;
+ const priceRange = maxPrice - minPrice;
+ const chartHeight = height - 280;
+ const yAxisSteps = [2000, 2400, 2800];
- return (
-
- Gold Price 2024
+ return (
+
+ Gold Price 2024
-
-
-
d.month)}>
- {data.map((item, i) => {
- const progress = spring({
- frame: frame - i * 5 - 10,
- fps,
- config: { damping: 18, stiffness: 80 },
- });
+
+
+ d.month)}>
+ {data.map((item, i) => {
+ const progress = spring({
+ frame: frame - i * 5 - 10,
+ fps,
+ config: {damping: 18, stiffness: 80},
+ });
- const barHeight =
- ((item.price - minPrice) / priceRange) * chartHeight * progress;
+ const barHeight =
+ ((item.price - minPrice) / priceRange) * chartHeight * progress;
- return (
-
- );
- })}
-
-
-
- );
+ return (
+
+ );
+ })}
+
+
+
+ );
};
diff --git a/packages/skills/skills/remotion/rules/assets/text-animations-typewriter.tsx b/packages/skills/skills/remotion/rules/assets/text-animations-typewriter.tsx
index 8ee284a9678..89f62ea0e5e 100644
--- a/packages/skills/skills/remotion/rules/assets/text-animations-typewriter.tsx
+++ b/packages/skills/skills/remotion/rules/assets/text-animations-typewriter.tsx
@@ -1,14 +1,14 @@
import {
- AbsoluteFill,
- interpolate,
- useCurrentFrame,
- useVideoConfig,
-} from "remotion";
+ AbsoluteFill,
+ interpolate,
+ useCurrentFrame,
+ useVideoConfig,
+} from 'remotion';
-const COLOR_BG = "#ffffff";
-const COLOR_TEXT = "#000000";
-const FULL_TEXT = "From prompt to motion graphics. This is Remotion.";
-const PAUSE_AFTER = "From prompt to motion graphics.";
+const COLOR_BG = '#ffffff';
+const COLOR_TEXT = '#000000';
+const FULL_TEXT = 'From prompt to motion graphics. This is Remotion.';
+const PAUSE_AFTER = 'From prompt to motion graphics.';
const FONT_SIZE = 72;
const FONT_WEIGHT = 700;
const CHAR_FRAMES = 2;
@@ -18,83 +18,83 @@ const PAUSE_SECONDS = 1;
// Ideal composition size: 1280x720
const getTypedText = ({
- frame,
- fullText,
- pauseAfter,
- charFrames,
- pauseFrames,
+ frame,
+ fullText,
+ pauseAfter,
+ charFrames,
+ pauseFrames,
}: {
- frame: number;
- fullText: string;
- pauseAfter: string;
- charFrames: number;
- pauseFrames: number;
+ frame: number;
+ fullText: string;
+ pauseAfter: string;
+ charFrames: number;
+ pauseFrames: number;
}): string => {
- const pauseIndex = fullText.indexOf(pauseAfter);
- const preLen =
- pauseIndex >= 0 ? pauseIndex + pauseAfter.length : fullText.length;
+ const pauseIndex = fullText.indexOf(pauseAfter);
+ const preLen =
+ pauseIndex >= 0 ? pauseIndex + pauseAfter.length : fullText.length;
- let typedChars = 0;
- if (frame < preLen * charFrames) {
- typedChars = Math.floor(frame / charFrames);
- } else if (frame < preLen * charFrames + pauseFrames) {
- typedChars = preLen;
- } else {
- const postPhase = frame - preLen * charFrames - pauseFrames;
- typedChars = Math.min(
- fullText.length,
- preLen + Math.floor(postPhase / charFrames),
- );
- }
- return fullText.slice(0, typedChars);
+ let typedChars = 0;
+ if (frame < preLen * charFrames) {
+ typedChars = Math.floor(frame / charFrames);
+ } else if (frame < preLen * charFrames + pauseFrames) {
+ typedChars = preLen;
+ } else {
+ const postPhase = frame - preLen * charFrames - pauseFrames;
+ typedChars = Math.min(
+ fullText.length,
+ preLen + Math.floor(postPhase / charFrames),
+ );
+ }
+ return fullText.slice(0, typedChars);
};
const Cursor: React.FC<{
- frame: number;
- blinkFrames: number;
- symbol?: string;
-}> = ({ frame, blinkFrames, symbol = "\u258C" }) => {
- const opacity = interpolate(
- frame % blinkFrames,
- [0, blinkFrames / 2, blinkFrames],
- [1, 0, 1],
- { extrapolateLeft: "clamp", extrapolateRight: "clamp" },
- );
+ frame: number;
+ blinkFrames: number;
+ symbol?: string;
+}> = ({frame, blinkFrames, symbol = '\u258C'}) => {
+ const opacity = interpolate(
+ frame % blinkFrames,
+ [0, blinkFrames / 2, blinkFrames],
+ [1, 0, 1],
+ {extrapolateLeft: 'clamp', extrapolateRight: 'clamp'},
+ );
- return {symbol} ;
+ return {symbol} ;
};
export const MyAnimation = () => {
- const frame = useCurrentFrame();
- const { fps } = useVideoConfig();
+ const frame = useCurrentFrame();
+ const {fps} = useVideoConfig();
- const pauseFrames = Math.round(fps * PAUSE_SECONDS);
+ const pauseFrames = Math.round(fps * PAUSE_SECONDS);
- const typedText = getTypedText({
- frame,
- fullText: FULL_TEXT,
- pauseAfter: PAUSE_AFTER,
- charFrames: CHAR_FRAMES,
- pauseFrames,
- });
+ const typedText = getTypedText({
+ frame,
+ fullText: FULL_TEXT,
+ pauseAfter: PAUSE_AFTER,
+ charFrames: CHAR_FRAMES,
+ pauseFrames,
+ });
- return (
-
-
- {typedText}
-
-
-
- );
+ return (
+
+
+ {typedText}
+
+
+
+ );
};
diff --git a/packages/skills/skills/remotion/rules/assets/text-animations-word-highlight.tsx b/packages/skills/skills/remotion/rules/assets/text-animations-word-highlight.tsx
index 4da09ceed7c..0aae3e294b4 100644
--- a/packages/skills/skills/remotion/rules/assets/text-animations-word-highlight.tsx
+++ b/packages/skills/skills/remotion/rules/assets/text-animations-word-highlight.tsx
@@ -1,11 +1,6 @@
-import { loadFont } from "@remotion/google-fonts/Inter";
-import React from "react";
-import {
- AbsoluteFill,
- spring,
- useCurrentFrame,
- useVideoConfig,
-} from "remotion";
+import {loadFont} from '@remotion/google-fonts/Inter';
+import React from 'react';
+import {AbsoluteFill, spring, useCurrentFrame, useVideoConfig} from 'remotion';
/*
* Highlight a word in a sentence with a spring-animated wipe effect.
@@ -13,96 +8,96 @@ import {
// Ideal composition size: 1280x720
-const COLOR_BG = "#ffffff";
-const COLOR_TEXT = "#000000";
-const COLOR_HIGHLIGHT = "#A7C7E7";
-const FULL_TEXT = "This is Remotion.";
-const HIGHLIGHT_WORD = "Remotion";
+const COLOR_BG = '#ffffff';
+const COLOR_TEXT = '#000000';
+const COLOR_HIGHLIGHT = '#A7C7E7';
+const FULL_TEXT = 'This is Remotion.';
+const HIGHLIGHT_WORD = 'Remotion';
const FONT_SIZE = 72;
const FONT_WEIGHT = 700;
const HIGHLIGHT_START_FRAME = 30;
const HIGHLIGHT_WIPE_DURATION = 18;
-const { fontFamily } = loadFont();
+const {fontFamily} = loadFont();
const Highlight: React.FC<{
- word: string;
- color: string;
- delay: number;
- durationInFrames: number;
-}> = ({ word, color, delay, durationInFrames }) => {
- const frame = useCurrentFrame();
- const { fps } = useVideoConfig();
+ word: string;
+ color: string;
+ delay: number;
+ durationInFrames: number;
+}> = ({word, color, delay, durationInFrames}) => {
+ const frame = useCurrentFrame();
+ const {fps} = useVideoConfig();
- const highlightProgress = spring({
- fps,
- frame,
- config: { damping: 200 },
- delay,
- durationInFrames,
- });
- const scaleX = Math.max(0, Math.min(1, highlightProgress));
+ const highlightProgress = spring({
+ fps,
+ frame,
+ config: {damping: 200},
+ delay,
+ durationInFrames,
+ });
+ const scaleX = Math.max(0, Math.min(1, highlightProgress));
- return (
-
-
- {word}
-
- );
+ return (
+
+
+ {word}
+
+ );
};
export const MyAnimation = () => {
- const highlightIndex = FULL_TEXT.indexOf(HIGHLIGHT_WORD);
- const hasHighlight = highlightIndex >= 0;
- const preText = hasHighlight ? FULL_TEXT.slice(0, highlightIndex) : FULL_TEXT;
- const postText = hasHighlight
- ? FULL_TEXT.slice(highlightIndex + HIGHLIGHT_WORD.length)
- : "";
+ const highlightIndex = FULL_TEXT.indexOf(HIGHLIGHT_WORD);
+ const hasHighlight = highlightIndex >= 0;
+ const preText = hasHighlight ? FULL_TEXT.slice(0, highlightIndex) : FULL_TEXT;
+ const postText = hasHighlight
+ ? FULL_TEXT.slice(highlightIndex + HIGHLIGHT_WORD.length)
+ : '';
- return (
-
-
- {hasHighlight ? (
- <>
- {preText}
-
- {postText}
- >
- ) : (
- {FULL_TEXT}
- )}
-
-
- );
+ return (
+
+
+ {hasHighlight ? (
+ <>
+ {preText}
+
+ {postText}
+ >
+ ) : (
+ {FULL_TEXT}
+ )}
+
+
+ );
};
diff --git a/packages/skills/src/Root.tsx b/packages/skills/src/Root.tsx
index df2ae5c7590..da094aa3cdd 100644
--- a/packages/skills/src/Root.tsx
+++ b/packages/skills/src/Root.tsx
@@ -1,39 +1,39 @@
-import { Composition } from "remotion";
-import { MyAnimation as BarChartAnimation } from "../skills/remotion/rules/assets/charts-bar-chart";
-import { MyAnimation as TypewriterAnimation } from "../skills/remotion/rules/assets/text-animations-typewriter";
-import { MyAnimation as WordHighlightAnimation } from "../skills/remotion/rules/assets/text-animations-word-highlight";
+import {Composition} from 'remotion';
+import {MyAnimation as BarChartAnimation} from '../skills/remotion/rules/assets/charts-bar-chart';
+import {MyAnimation as TypewriterAnimation} from '../skills/remotion/rules/assets/text-animations-typewriter';
+import {MyAnimation as WordHighlightAnimation} from '../skills/remotion/rules/assets/text-animations-word-highlight';
export const RemotionRoot = () => {
- return (
- <>
-
-
-
- >
- );
+ return (
+ <>
+
+
+
+ >
+ );
};
diff --git a/packages/skills/src/index.ts b/packages/skills/src/index.ts
index f31c790edb3..d831f7b0f12 100644
--- a/packages/skills/src/index.ts
+++ b/packages/skills/src/index.ts
@@ -1,4 +1,4 @@
-import { registerRoot } from "remotion";
-import { RemotionRoot } from "./Root";
+import {registerRoot} from 'remotion';
+import {RemotionRoot} from './Root';
registerRoot(RemotionRoot);
diff --git a/packages/skills/tsconfig.json b/packages/skills/tsconfig.json
index 84156def9c1..6aaab1c303a 100644
--- a/packages/skills/tsconfig.json
+++ b/packages/skills/tsconfig.json
@@ -6,7 +6,7 @@
"resolveJsonModule": false,
"skipLibCheck": true,
"jsx": "react-jsx",
- "noEmit": true,
+ "noEmit": true
},
"include": ["./src", "./skills"],
"references": []
diff --git a/packages/streaming/README.md b/packages/streaming/README.md
index ba84727cc36..c4c181bfab9 100644
--- a/packages/streaming/README.md
+++ b/packages/streaming/README.md
@@ -1,7 +1,7 @@
# @remotion/streaming
-
+
Utilities for streaming data between programs
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/streaming/package.json b/packages/streaming/package.json
index c1d8d423ee3..96749ece25f 100644
--- a/packages/streaming/package.json
+++ b/packages/streaming/package.json
@@ -9,7 +9,7 @@
"sideEffects": false,
"scripts": {
"lint": "eslint src",
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
},
"author": "Jonny Burger ",
diff --git a/packages/studio-server/README.md b/packages/studio-server/README.md
index 58a32d7b38a..2a62baea8b5 100644
--- a/packages/studio-server/README.md
+++ b/packages/studio-server/README.md
@@ -1,7 +1,7 @@
# @remotion/studio-server
-
+
Run a Remotion Studio with a server backend
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/studio-server/package.json b/packages/studio-server/package.json
index 4706d2b3d3e..9d19f65e72f 100644
--- a/packages/studio-server/package.json
+++ b/packages/studio-server/package.json
@@ -10,7 +10,7 @@
"scripts": {
"lint": "eslint src",
"test": "bun test src",
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"make": "tsgo -d"
},
"author": "Jonny Burger ",
@@ -25,6 +25,7 @@
"dependencies": {
"@babel/parser": "7.24.1",
"semver": "7.5.3",
+ "prettier": "catalog:",
"remotion": "workspace:*",
"recast": "0.23.11",
"@remotion/bundler": "workspace:*",
diff --git a/packages/studio-server/src/codemods/update-sequence-props.ts b/packages/studio-server/src/codemods/update-sequence-props.ts
new file mode 100644
index 00000000000..47f9de0610a
--- /dev/null
+++ b/packages/studio-server/src/codemods/update-sequence-props.ts
@@ -0,0 +1,102 @@
+import type {AssignmentExpression, ExpressionStatement} from '@babel/types';
+import {stringifyDefaultProps, type EnumPath} from '@remotion/studio-shared';
+import type {ExpressionKind} from 'ast-types/lib/gen/kinds';
+import * as recast from 'recast';
+import {parseAst, serializeAst} from './parse-ast';
+
+export const updateSequenceProps = async ({
+ input,
+ targetLine,
+ key,
+ value,
+ enumPaths,
+}: {
+ input: string;
+ targetLine: number;
+ key: string;
+ value: unknown;
+ enumPaths: EnumPath[];
+}): Promise => {
+ const ast = parseAst(input);
+ let found = false;
+
+ recast.types.visit(ast, {
+ visitJSXOpeningElement(path) {
+ const {node} = path;
+
+ if (!node.loc || node.loc.start.line !== targetLine) {
+ return this.traverse(path);
+ }
+
+ const attr = node.attributes?.find((a) => {
+ if (a.type === 'JSXSpreadAttribute') {
+ return false;
+ }
+
+ if (a.name.type === 'JSXNamespacedName') {
+ return false;
+ }
+
+ return a.name.name === key;
+ });
+
+ if (!attr || attr.type === 'JSXSpreadAttribute') {
+ throw new Error(
+ `Could not find attribute "${key}" on the JSX element at line ${targetLine}`,
+ );
+ }
+
+ const parsed = (
+ (
+ parseAst(`a = ${stringifyDefaultProps({props: value, enumPaths})}`)
+ .program.body[0] as unknown as ExpressionStatement
+ ).expression as AssignmentExpression
+ ).right as ExpressionKind;
+
+ attr.value = recast.types.builders.jsxExpressionContainer(parsed);
+ found = true;
+
+ return this.traverse(path);
+ },
+ });
+
+ if (!found) {
+ throw new Error(
+ 'Could not find a JSX element at the specified line to update',
+ );
+ }
+
+ // eslint-disable-next-line @typescript-eslint/consistent-type-imports
+ type PrettierType = typeof import('prettier');
+ let prettier: PrettierType | null = null;
+
+ try {
+ prettier = await import('prettier');
+ } catch {
+ throw new Error('Prettier cannot be found in the current project.');
+ }
+
+ const {format, resolveConfig, resolveConfigFile} = prettier as PrettierType;
+
+ const configFilePath = await resolveConfigFile();
+ if (!configFilePath) {
+ throw new Error('The Prettier config file was not found');
+ }
+
+ const prettierConfig = await resolveConfig(configFilePath);
+ if (!prettierConfig) {
+ throw new Error(
+ 'The Prettier config file was not found. For this feature, the "prettier" package must be installed and a .prettierrc file must exist.',
+ );
+ }
+
+ const finalFile = serializeAst(ast);
+
+ const prettified = await format(finalFile, {
+ ...prettierConfig,
+ filepath: 'test.tsx',
+ plugins: [],
+ endOfLine: 'auto',
+ });
+ return prettified;
+};
diff --git a/packages/studio-server/src/helpers/open-in-editor.ts b/packages/studio-server/src/helpers/open-in-editor.ts
index 500f77b31dd..6434414eea5 100644
--- a/packages/studio-server/src/helpers/open-in-editor.ts
+++ b/packages/studio-server/src/helpers/open-in-editor.ts
@@ -4,6 +4,12 @@
Source code adapted from https://github.com/facebook/create-react-app/tree/main/packages/react-error-overlay and refactored in Typescript. This file is MIT-licensed.
*/
+import type {ChildProcess} from 'node:child_process';
+import child_process, {exec} from 'node:child_process';
+import fs from 'node:fs';
+import os from 'node:os';
+import path from 'node:path';
+import util from 'node:util';
/**
* Copyright (c) 2015-present, Facebook, Inc.
*
@@ -12,12 +18,6 @@
*/
import type {LogLevel} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
-import type {ChildProcess} from 'node:child_process';
-import child_process, {exec} from 'node:child_process';
-import fs from 'node:fs';
-import os from 'node:os';
-import path from 'node:path';
-import util from 'node:util';
import {openInEditorViaUrlScheme} from './open-in-editor-url-scheme';
const {Log} = RenderInternals;
diff --git a/packages/studio-server/src/preview-server/api-routes.ts b/packages/studio-server/src/preview-server/api-routes.ts
index 200415d03c9..f39b0486788 100644
--- a/packages/studio-server/src/preview-server/api-routes.ts
+++ b/packages/studio-server/src/preview-server/api-routes.ts
@@ -4,6 +4,7 @@ import {handleAddRender} from './routes/add-render';
import {applyCodemodHandler} from './routes/apply-codemod';
import {applyVisualControlHandler} from './routes/apply-visual-control-change';
import {canUpdateDefaultPropsHandler} from './routes/can-update-default-props';
+import {canUpdateSequencePropsHandler} from './routes/can-update-sequence-props';
import {handleCancelRender} from './routes/cancel-render';
import {deleteStaticFileHandler} from './routes/delete-static-file';
import {handleInstallPackage} from './routes/install-dependency';
@@ -11,6 +12,7 @@ import {handleOpenInFileExplorer} from './routes/open-in-file-explorer';
import {projectInfoHandler} from './routes/project-info';
import {handleRemoveRender} from './routes/remove-render';
import {handleRestartStudio} from './routes/restart-studio';
+import {saveSequencePropsHandler} from './routes/save-sequence-props';
import {subscribeToFileExistence} from './routes/subscribe-to-file-existence';
import {unsubscribeFromFileExistence} from './routes/unsubscribe-from-file-existence';
import {handleUpdate} from './routes/update-available';
@@ -32,6 +34,8 @@ export const allApiRoutes: {
'/api/apply-visual-control-change': applyVisualControlHandler,
'/api/apply-codemod': applyCodemodHandler,
'/api/can-update-default-props': canUpdateDefaultPropsHandler,
+ '/api/can-update-sequence-props': canUpdateSequencePropsHandler,
+ '/api/save-sequence-props': saveSequencePropsHandler,
'/api/update-available': handleUpdate,
'/api/project-info': projectInfoHandler,
'/api/delete-static-file': deleteStaticFileHandler,
diff --git a/packages/studio-server/src/preview-server/api-types.ts b/packages/studio-server/src/preview-server/api-types.ts
index 0600c5abcbf..ad8dc35c626 100644
--- a/packages/studio-server/src/preview-server/api-types.ts
+++ b/packages/studio-server/src/preview-server/api-types.ts
@@ -1,6 +1,6 @@
+import type {IncomingMessage, ServerResponse} from 'node:http';
import type {LogLevel} from '@remotion/renderer';
import type {RenderJobWithCleanup} from '@remotion/studio-shared';
-import type {IncomingMessage, ServerResponse} from 'node:http';
export type QueueMethods = {
removeJob: (jobId: string) => void;
diff --git a/packages/studio-server/src/preview-server/dev-middleware/middleware.ts b/packages/studio-server/src/preview-server/dev-middleware/middleware.ts
index a9236992090..139e2c9008d 100644
--- a/packages/studio-server/src/preview-server/dev-middleware/middleware.ts
+++ b/packages/studio-server/src/preview-server/dev-middleware/middleware.ts
@@ -1,9 +1,9 @@
-import {RenderInternals} from '@remotion/renderer';
import type {ReadStream} from 'node:fs';
import type {IncomingMessage, ServerResponse} from 'node:http';
import path from 'node:path';
import querystring from 'node:querystring';
import {parse} from 'node:url';
+import {RenderInternals} from '@remotion/renderer';
import {send, setHeaderForResponse} from './compatible-api';
import {getPaths} from './get-paths';
import {parseRange} from './range-parser';
diff --git a/packages/studio-server/src/preview-server/get-package-manager.ts b/packages/studio-server/src/preview-server/get-package-manager.ts
index cd7c60e0ef4..7aef10e28fb 100644
--- a/packages/studio-server/src/preview-server/get-package-manager.ts
+++ b/packages/studio-server/src/preview-server/get-package-manager.ts
@@ -1,8 +1,8 @@
+import fs from 'node:fs';
+import path from 'node:path';
import type {LogLevel} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
import type {PackageManager} from '@remotion/studio-shared';
-import fs from 'node:fs';
-import path from 'node:path';
type LockfilePath = {
manager: PackageManager;
diff --git a/packages/studio-server/src/preview-server/handler.ts b/packages/studio-server/src/preview-server/handler.ts
index 5e8590959f7..77ae48225ae 100644
--- a/packages/studio-server/src/preview-server/handler.ts
+++ b/packages/studio-server/src/preview-server/handler.ts
@@ -1,5 +1,5 @@
-import type {LogLevel} from '@remotion/renderer';
import type {IncomingMessage, ServerResponse} from 'node:http';
+import type {LogLevel} from '@remotion/renderer';
import type {ApiHandler, QueueMethods} from './api-types';
import {parseRequestBody} from './parse-body';
diff --git a/packages/studio-server/src/preview-server/hot-middleware/index.tsx b/packages/studio-server/src/preview-server/hot-middleware/index.tsx
index 9be50ba1341..269ecabe3fb 100644
--- a/packages/studio-server/src/preview-server/hot-middleware/index.tsx
+++ b/packages/studio-server/src/preview-server/hot-middleware/index.tsx
@@ -4,13 +4,13 @@
* and rewritten in TypeScript. This file is MIT licensed
*/
+import type {IncomingMessage, ServerResponse} from 'node:http';
+import {parse} from 'node:url';
import type {webpack} from '@remotion/bundler';
import type {LogLevel} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
import type {HotMiddlewareMessage, ModuleMap} from '@remotion/studio-shared';
import {hotMiddlewareOptions} from '@remotion/studio-shared';
-import type {IncomingMessage, ServerResponse} from 'node:http';
-import {parse} from 'node:url';
import type {WebpackStats} from './types';
declare global {
diff --git a/packages/studio-server/src/preview-server/live-events.ts b/packages/studio-server/src/preview-server/live-events.ts
index 2a3a2c0f9de..6f2254d2b32 100644
--- a/packages/studio-server/src/preview-server/live-events.ts
+++ b/packages/studio-server/src/preview-server/live-events.ts
@@ -1,10 +1,10 @@
-import type {LogLevel} from '@remotion/renderer';
-import type {EventSourceEvent} from '@remotion/studio-shared';
import type {
IncomingMessage,
OutgoingHttpHeaders,
ServerResponse,
} from 'node:http';
+import type {LogLevel} from '@remotion/renderer';
+import type {EventSourceEvent} from '@remotion/studio-shared';
import {printServerReadyComment} from '../server-ready';
import {unsubscribeClientFileExistenceWatchers} from './file-existence-watchers';
diff --git a/packages/studio-server/src/preview-server/project-info.ts b/packages/studio-server/src/preview-server/project-info.ts
index 3071b874bcf..351f159ca9c 100644
--- a/packages/studio-server/src/preview-server/project-info.ts
+++ b/packages/studio-server/src/preview-server/project-info.ts
@@ -1,6 +1,6 @@
-import type {ProjectInfo} from '@remotion/studio-shared';
import {existsSync} from 'node:fs';
import path from 'node:path';
+import type {ProjectInfo} from '@remotion/studio-shared';
export const getProjectInfo = (
remotionRoot: string,
diff --git a/packages/studio-server/src/preview-server/public-folder.ts b/packages/studio-server/src/preview-server/public-folder.ts
index ec99186f32f..dac8c3a62b1 100644
--- a/packages/studio-server/src/preview-server/public-folder.ts
+++ b/packages/studio-server/src/preview-server/public-folder.ts
@@ -1,6 +1,6 @@
-import {BundlerInternals} from '@remotion/bundler';
import {existsSync, watch} from 'node:fs';
import path from 'node:path';
+import {BundlerInternals} from '@remotion/bundler';
import type {StaticFile} from 'remotion';
import {envSupportsFsRecursive} from './env-supports-fs-recursive';
diff --git a/packages/studio-server/src/preview-server/routes/apply-codemod.ts b/packages/studio-server/src/preview-server/routes/apply-codemod.ts
index a0aeeb2c277..0d69761aa10 100644
--- a/packages/studio-server/src/preview-server/routes/apply-codemod.ts
+++ b/packages/studio-server/src/preview-server/routes/apply-codemod.ts
@@ -1,9 +1,9 @@
+import {readFileSync, writeFileSync} from 'node:fs';
import {RenderInternals} from '@remotion/renderer';
import type {
ApplyCodemodRequest,
ApplyCodemodResponse,
} from '@remotion/studio-shared';
-import {readFileSync, writeFileSync} from 'node:fs';
import {
formatOutput,
parseAndApplyCodemod,
diff --git a/packages/studio-server/src/preview-server/routes/apply-visual-control-change.ts b/packages/studio-server/src/preview-server/routes/apply-visual-control-change.ts
index 670118b1ab3..302d1039a4e 100644
--- a/packages/studio-server/src/preview-server/routes/apply-visual-control-change.ts
+++ b/packages/studio-server/src/preview-server/routes/apply-visual-control-change.ts
@@ -1,9 +1,9 @@
+import {readFileSync, writeFileSync} from 'node:fs';
+import path from 'node:path';
import type {
ApplyVisualControlRequest,
ApplyVisualControlResponse,
} from '@remotion/studio-shared';
-import {readFileSync, writeFileSync} from 'node:fs';
-import path from 'node:path';
import {parseAst, serializeAst} from '../../codemods/parse-ast';
import {applyCodemod} from '../../codemods/recast-mods';
import type {ApiHandler} from '../api-types';
diff --git a/packages/studio-server/src/preview-server/routes/can-update-default-props.ts b/packages/studio-server/src/preview-server/routes/can-update-default-props.ts
index b90180fec64..c1702c908ce 100644
--- a/packages/studio-server/src/preview-server/routes/can-update-default-props.ts
+++ b/packages/studio-server/src/preview-server/routes/can-update-default-props.ts
@@ -1,8 +1,8 @@
+import {readFileSync} from 'node:fs';
import type {
CanUpdateDefaultPropsRequest,
CanUpdateDefaultPropsResponse,
} from '@remotion/studio-shared';
-import {readFileSync} from 'node:fs';
import {updateDefaultProps} from '../../codemods/update-default-props';
import type {ApiHandler} from '../api-types';
import {getProjectInfo} from '../project-info';
diff --git a/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts b/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts
new file mode 100644
index 00000000000..8a3dae6591c
--- /dev/null
+++ b/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts
@@ -0,0 +1,59 @@
+import {readFileSync} from 'node:fs';
+import path from 'node:path';
+import type {File} from '@babel/types';
+import type {
+ CanUpdateSequencePropsRequest,
+ CanUpdateSequencePropsResponse,
+} from '@remotion/studio-shared';
+import * as recast from 'recast';
+import {parseAst} from '../../codemods/parse-ast';
+import type {ApiHandler} from '../api-types';
+
+const findJsxElementAtLine = (ast: File, targetLine: number): boolean => {
+ let found = false;
+
+ recast.types.visit(ast, {
+ visitJSXOpeningElement(nodePath) {
+ const {node} = nodePath;
+ if (node.loc && node.loc.start.line === targetLine) {
+ found = true;
+ return false;
+ }
+
+ return this.traverse(nodePath);
+ },
+ });
+
+ return found;
+};
+
+export const canUpdateSequencePropsHandler: ApiHandler<
+ CanUpdateSequencePropsRequest,
+ CanUpdateSequencePropsResponse
+> = ({input: {fileName, line, column: _column}, remotionRoot}) => {
+ try {
+ const absolutePath = path.resolve(remotionRoot, fileName);
+ const fileRelativeToRoot = path.relative(remotionRoot, absolutePath);
+ if (fileRelativeToRoot.startsWith('..')) {
+ throw new Error('Cannot read a file outside the project');
+ }
+
+ const fileContents = readFileSync(absolutePath, 'utf-8');
+ const ast = parseAst(fileContents);
+
+ const found = findJsxElementAtLine(ast, line);
+
+ if (!found) {
+ throw new Error('Could not find a JSX element at the specified location');
+ }
+
+ return Promise.resolve({
+ canUpdate: true as const,
+ });
+ } catch (err) {
+ return Promise.resolve({
+ canUpdate: false as const,
+ reason: (err as Error).message,
+ });
+ }
+};
diff --git a/packages/studio-server/src/preview-server/routes/delete-static-file.ts b/packages/studio-server/src/preview-server/routes/delete-static-file.ts
index 9f649ae21a3..920df220c3d 100644
--- a/packages/studio-server/src/preview-server/routes/delete-static-file.ts
+++ b/packages/studio-server/src/preview-server/routes/delete-static-file.ts
@@ -1,9 +1,9 @@
+import {existsSync, unlinkSync} from 'fs';
+import path from 'path';
import type {
DeleteStaticFileRequest,
DeleteStaticFileResponse,
} from '@remotion/studio-shared';
-import {existsSync, unlinkSync} from 'fs';
-import path from 'path';
import type {ApiHandler} from '../api-types';
export const deleteStaticFileHandler: ApiHandler<
diff --git a/packages/studio-server/src/preview-server/routes/install-dependency.ts b/packages/studio-server/src/preview-server/routes/install-dependency.ts
index 58421436579..83f46c5e855 100644
--- a/packages/studio-server/src/preview-server/routes/install-dependency.ts
+++ b/packages/studio-server/src/preview-server/routes/install-dependency.ts
@@ -1,10 +1,10 @@
+import {spawn} from 'node:child_process';
import {RenderInternals} from '@remotion/renderer';
import {
extraPackages,
type InstallPackageRequest,
type InstallPackageResponse,
} from '@remotion/studio-shared';
-import {spawn} from 'node:child_process';
import {VERSION} from 'remotion/version';
import {getInstallCommand} from '../../helpers/install-command';
import type {ApiHandler} from '../api-types';
diff --git a/packages/studio-server/src/preview-server/routes/save-sequence-props.ts b/packages/studio-server/src/preview-server/routes/save-sequence-props.ts
new file mode 100644
index 00000000000..c381e5b1637
--- /dev/null
+++ b/packages/studio-server/src/preview-server/routes/save-sequence-props.ts
@@ -0,0 +1,45 @@
+import {readFileSync, writeFileSync} from 'node:fs';
+import path from 'node:path';
+import type {
+ SaveSequencePropsRequest,
+ SaveSequencePropsResponse,
+} from '@remotion/studio-shared';
+import {updateSequenceProps} from '../../codemods/update-sequence-props';
+import type {ApiHandler} from '../api-types';
+
+export const saveSequencePropsHandler: ApiHandler<
+ SaveSequencePropsRequest,
+ SaveSequencePropsResponse
+> = async ({
+ input: {fileName, line, column: _column, key, value, enumPaths},
+ remotionRoot,
+}) => {
+ try {
+ const absolutePath = path.resolve(remotionRoot, fileName);
+ const fileRelativeToRoot = path.relative(remotionRoot, absolutePath);
+ if (fileRelativeToRoot.startsWith('..')) {
+ throw new Error('Cannot modify a file outside the project');
+ }
+
+ const fileContents = readFileSync(absolutePath, 'utf-8');
+
+ const updated = await updateSequenceProps({
+ input: fileContents,
+ targetLine: line,
+ key,
+ value: JSON.parse(value),
+ enumPaths,
+ });
+
+ writeFileSync(absolutePath, updated);
+
+ return {
+ success: true,
+ };
+ } catch (err) {
+ return {
+ success: false,
+ reason: (err as Error).message,
+ };
+ }
+};
diff --git a/packages/studio-server/src/preview-server/routes/update-default-props.ts b/packages/studio-server/src/preview-server/routes/update-default-props.ts
index d7fca95c43b..8f76ce74f3f 100644
--- a/packages/studio-server/src/preview-server/routes/update-default-props.ts
+++ b/packages/studio-server/src/preview-server/routes/update-default-props.ts
@@ -1,8 +1,8 @@
+import {readFileSync, writeFileSync} from 'node:fs';
import type {
UpdateDefaultPropsRequest,
UpdateDefaultPropsResponse,
} from '@remotion/studio-shared';
-import {readFileSync, writeFileSync} from 'node:fs';
import {updateDefaultProps} from '../../codemods/update-default-props';
import type {ApiHandler} from '../api-types';
import {getProjectInfo} from '../project-info';
diff --git a/packages/studio-server/src/preview-server/serve-static.ts b/packages/studio-server/src/preview-server/serve-static.ts
index eec2907fac6..c81f7ecf61f 100644
--- a/packages/studio-server/src/preview-server/serve-static.ts
+++ b/packages/studio-server/src/preview-server/serve-static.ts
@@ -6,9 +6,9 @@
* MIT Licensed
*/
-import {RenderInternals} from '@remotion/renderer';
import {createReadStream, existsSync, promises} from 'node:fs';
import type {IncomingMessage, ServerResponse} from 'node:http';
+import {RenderInternals} from '@remotion/renderer';
import {getValueContentRangeHeader} from './dev-middleware/middleware';
import {parseRange} from './dev-middleware/range-parser';
diff --git a/packages/studio-server/src/preview-server/start-server.ts b/packages/studio-server/src/preview-server/start-server.ts
index 6d642abb2b0..df97f41b90f 100644
--- a/packages/studio-server/src/preview-server/start-server.ts
+++ b/packages/studio-server/src/preview-server/start-server.ts
@@ -1,3 +1,5 @@
+import type {IncomingMessage} from 'node:http';
+import http from 'node:http';
import type {WebpackOverrideFn} from '@remotion/bundler';
import {BundlerInternals, webpack} from '@remotion/bundler';
import type {LogLevel} from '@remotion/renderer';
@@ -7,8 +9,6 @@ import type {
RenderDefaults,
RenderJob,
} from '@remotion/studio-shared';
-import type {IncomingMessage} from 'node:http';
-import http from 'node:http';
import {detectRemotionServer} from '../detect-remotion-server';
import {handleRoutes} from '../routes';
import type {QueueMethods} from './api-types';
diff --git a/packages/studio-server/src/routes.ts b/packages/studio-server/src/routes.ts
index 2e813fcacb3..1a2f2a03a4e 100644
--- a/packages/studio-server/src/routes.ts
+++ b/packages/studio-server/src/routes.ts
@@ -1,3 +1,8 @@
+import fs, {createWriteStream} from 'fs';
+import {createReadStream, existsSync, statSync} from 'node:fs';
+import type {IncomingMessage, ServerResponse} from 'node:http';
+import path, {join} from 'node:path';
+import {URLSearchParams} from 'node:url';
import {BundlerInternals} from '@remotion/bundler';
import type {LogLevel} from '@remotion/renderer';
import type {
@@ -9,11 +14,6 @@ import type {
SymbolicatedStackFrame,
} from '@remotion/studio-shared';
import {SOURCE_MAP_ENDPOINT, getProjectName} from '@remotion/studio-shared';
-import fs, {createWriteStream} from 'fs';
-import {createReadStream, existsSync, statSync} from 'node:fs';
-import type {IncomingMessage, ServerResponse} from 'node:http';
-import path, {join} from 'node:path';
-import {URLSearchParams} from 'node:url';
import {
addCompletedClientRender,
getCompletedClientRenders,
diff --git a/packages/studio-server/src/start-studio.ts b/packages/studio-server/src/start-studio.ts
index 3ed9ce80b4b..3cd7b16a2c4 100644
--- a/packages/studio-server/src/start-studio.ts
+++ b/packages/studio-server/src/start-studio.ts
@@ -1,3 +1,6 @@
+import crypto from 'node:crypto';
+import {existsSync} from 'node:fs';
+import path from 'node:path';
import type {WebpackOverrideFn} from '@remotion/bundler';
import type {LogLevel} from '@remotion/renderer';
import {RenderInternals} from '@remotion/renderer';
@@ -6,9 +9,6 @@ import type {
RenderDefaults,
RenderJob,
} from '@remotion/studio-shared';
-import crypto from 'node:crypto';
-import {existsSync} from 'node:fs';
-import path from 'node:path';
import {getNetworkAddress} from './get-network-address';
import {maybeOpenBrowser} from './maybe-open-browser';
import type {QueueMethods} from './preview-server/api-types';
diff --git a/packages/studio-server/src/test/parse-error-stack.test.ts b/packages/studio-server/src/test/parse-error-stack.test.ts
index 7ba8be60ff2..28c6908f8f7 100644
--- a/packages/studio-server/src/test/parse-error-stack.test.ts
+++ b/packages/studio-server/src/test/parse-error-stack.test.ts
@@ -1,5 +1,5 @@
-import {getLocationFromBuildError} from '@remotion/studio-shared';
import {expect, test} from 'bun:test';
+import {getLocationFromBuildError} from '@remotion/studio-shared';
const message =
'Module build failed (from ../../node_modules/.pnpm/esbuild-loader@2.15.1_webpack@5.60.0/node_modules/esbuild-loader/dist/index.js):\nError: Transform failed with 1 error:\n/Users/jonathanburger/remotion/packages/example/src/Video.tsx:31:83: error: Expected ">" but found "\\": 100}\'`\\n\\t\\t\\t\\tdurationInFrames={inputProps?.duration ?? 20}\\n\\t\\t\\t/>\\n\\t\\t\\t",
diff --git a/packages/studio-shared/src/api-requests.ts b/packages/studio-shared/src/api-requests.ts
index 9f390874e77..1404464091a 100644
--- a/packages/studio-shared/src/api-requests.ts
+++ b/packages/studio-shared/src/api-requests.ts
@@ -191,6 +191,39 @@ export type CanUpdateDefaultPropsResponse =
reason: string;
};
+export type CanUpdateSequencePropsRequest = {
+ fileName: string;
+ line: number;
+ column: number;
+};
+
+export type CanUpdateSequencePropsResponse =
+ | {
+ canUpdate: true;
+ }
+ | {
+ canUpdate: false;
+ reason: string;
+ };
+
+export type SaveSequencePropsRequest = {
+ fileName: string;
+ line: number;
+ column: number;
+ key: string;
+ value: string;
+ enumPaths: EnumPath[];
+};
+
+export type SaveSequencePropsResponse =
+ | {
+ success: true;
+ }
+ | {
+ success: false;
+ reason: string;
+ };
+
export type UpdateAvailableRequest = {};
export type UpdateAvailableResponse = {
currentVersion: string;
@@ -238,6 +271,14 @@ export type ApiRoutes = {
CanUpdateDefaultPropsRequest,
CanUpdateDefaultPropsResponse
>;
+ '/api/can-update-sequence-props': ReqAndRes<
+ CanUpdateSequencePropsRequest,
+ CanUpdateSequencePropsResponse
+ >;
+ '/api/save-sequence-props': ReqAndRes<
+ SaveSequencePropsRequest,
+ SaveSequencePropsResponse
+ >;
'/api/update-available': ReqAndRes<
UpdateAvailableRequest,
UpdateAvailableResponse
diff --git a/packages/studio-shared/src/index.ts b/packages/studio-shared/src/index.ts
index 4827356a2a4..0461818e2ed 100644
--- a/packages/studio-shared/src/index.ts
+++ b/packages/studio-shared/src/index.ts
@@ -8,6 +8,8 @@ export {
ApplyVisualControlResponse,
CanUpdateDefaultPropsRequest,
CanUpdateDefaultPropsResponse,
+ CanUpdateSequencePropsRequest,
+ CanUpdateSequencePropsResponse,
CancelRenderRequest,
CancelRenderResponse,
CopyStillToClipboardRequest,
@@ -21,6 +23,8 @@ export {
RemoveRenderRequest,
RestartStudioRequest,
RestartStudioResponse,
+ SaveSequencePropsRequest,
+ SaveSequencePropsResponse,
SimpleDiff,
SubscribeToFileExistenceRequest,
SubscribeToFileExistenceResponse,
diff --git a/packages/studio/README.md b/packages/studio/README.md
index f422a9066d2..ca005599cac 100644
--- a/packages/studio/README.md
+++ b/packages/studio/README.md
@@ -1,18 +1,18 @@
# @remotion/studio
-
+
APIs for interacting with the Remotion Studio
-
+
[](https://npmcharts.com/compare/@remotion/studio?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/studio --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/studio/api) for more information.
diff --git a/packages/studio/package.json b/packages/studio/package.json
index d5834be9210..9850e2e9b4e 100644
--- a/packages/studio/package.json
+++ b/packages/studio/package.json
@@ -11,7 +11,7 @@
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts",
"test": "bun test src",
- "formatting": "prettier src --check"
+ "formatting": "oxfmt src --check"
},
"author": "Jonny Burger ",
"contributors": [],
diff --git a/packages/studio/src/components/AssetSelectorItem.tsx b/packages/studio/src/components/AssetSelectorItem.tsx
index 94b941269d7..38c2b52a81d 100644
--- a/packages/studio/src/components/AssetSelectorItem.tsx
+++ b/packages/studio/src/components/AssetSelectorItem.tsx
@@ -18,9 +18,9 @@ import {CollapsedFolderIcon, ExpandedFolderIcon} from '../icons/folder';
import {SidebarContext} from '../state/sidebar';
import type {RenderInlineAction} from './InlineAction';
import {InlineAction} from './InlineAction';
+import {Row, Spacing} from './layout';
import {showNotification} from './Notifications/NotificationCenter';
import {openInFileExplorer} from './RenderQueue/actions';
-import {Row, Spacing} from './layout';
const ASSET_ITEM_HEIGHT = 32;
diff --git a/packages/studio/src/components/Canvas.tsx b/packages/studio/src/components/Canvas.tsx
index f2da94ff7c7..aae56195071 100644
--- a/packages/studio/src/components/Canvas.tsx
+++ b/packages/studio/src/components/Canvas.tsx
@@ -28,9 +28,9 @@ import {EditorZoomGesturesContext} from '../state/editor-zoom-gestures';
import EditorGuides from './EditorGuides';
import {EditorRulers} from './EditorRuler';
import {useIsRulerVisible} from './EditorRuler/use-is-ruler-visible';
+import {SPACING_UNIT} from './layout';
import {VideoPreview} from './Preview';
import {ResetZoomButton} from './ResetZoomButton';
-import {SPACING_UNIT} from './layout';
const container: React.CSSProperties = {
flex: 1,
diff --git a/packages/studio/src/components/CopyButton.tsx b/packages/studio/src/components/CopyButton.tsx
index 09cd03fa09e..fe3b36e3359 100644
--- a/packages/studio/src/components/CopyButton.tsx
+++ b/packages/studio/src/components/CopyButton.tsx
@@ -1,8 +1,8 @@
import React, {useCallback, useEffect, useState} from 'react';
import {copyText} from '../helpers/copy-text';
import {Button} from './Button';
-import {showNotification} from './Notifications/NotificationCenter';
import {Spacing} from './layout';
+import {showNotification} from './Notifications/NotificationCenter';
const iconStyle: React.CSSProperties = {
width: 16,
diff --git a/packages/studio/src/components/EditorContexts.tsx b/packages/studio/src/components/EditorContexts.tsx
index 0fd11848ec8..8d35a325b67 100644
--- a/packages/studio/src/components/EditorContexts.tsx
+++ b/packages/studio/src/components/EditorContexts.tsx
@@ -5,7 +5,6 @@ import {FolderContextProvider} from '../state/folders';
import {HighestZIndexProvider} from '../state/highest-z-index';
import {KeybindingContextProvider} from '../state/keybindings';
import {PreviewSizeProvider} from '../state/preview-size';
-
import {SidebarContextProvider} from '../state/sidebar';
import {VisualControlsProvider} from '../visual-controls/VisualControls';
import {CheckerboardProvider} from './CheckerboardProvider';
diff --git a/packages/studio/src/components/FilePreview.tsx b/packages/studio/src/components/FilePreview.tsx
index e9618676936..52dd9d73f0a 100644
--- a/packages/studio/src/components/FilePreview.tsx
+++ b/packages/studio/src/components/FilePreview.tsx
@@ -2,9 +2,9 @@ import {formatBytes} from '@remotion/studio-shared';
import React from 'react';
import type {AssetMetadata} from '../helpers/get-asset-metadata';
import {JSONViewer} from './JSONViewer';
+import {Spacing} from './layout';
import type {AssetFileType} from './Preview';
import {TextViewer} from './TextViewer';
-import {Spacing} from './layout';
const msgStyle: React.CSSProperties = {
fontSize: 13,
diff --git a/packages/studio/src/components/InstallPackage.tsx b/packages/studio/src/components/InstallPackage.tsx
index 4a84e73975b..382fc874dca 100644
--- a/packages/studio/src/components/InstallPackage.tsx
+++ b/packages/studio/src/components/InstallPackage.tsx
@@ -15,12 +15,12 @@ import {LIGHT_TEXT} from '../helpers/colors';
import {useKeybinding} from '../helpers/use-keybinding';
import {Checkbox} from './Checkbox';
import {InstallablePackageComp} from './InstallablePackage';
+import {Flex, Row, Spacing} from './layout';
import {VERTICAL_SCROLLBAR_CLASSNAME} from './Menu/is-menu-item';
import {ModalButton} from './ModalButton';
import {ModalFooterContainer} from './ModalFooter';
import {ModalHeader} from './ModalHeader';
import {DismissableModal} from './NewComposition/DismissableModal';
-import {Flex, Row, Spacing} from './layout';
const container: React.CSSProperties = {
padding: 20,
diff --git a/packages/studio/src/components/Menu/MenuSubItem.tsx b/packages/studio/src/components/Menu/MenuSubItem.tsx
index 517f21349bc..ba1d60c35e2 100644
--- a/packages/studio/src/components/Menu/MenuSubItem.tsx
+++ b/packages/studio/src/components/Menu/MenuSubItem.tsx
@@ -7,9 +7,8 @@ import {useMobileLayout} from '../../helpers/mobile-layout';
import {areKeyboardShortcutsDisabled} from '../../helpers/use-keybinding';
import {CaretRight} from '../../icons/caret';
import {useZIndex} from '../../state/z-index';
-import type {SubMenu} from '../NewComposition/ComboBox';
import {Row, Spacing} from '../layout';
-import {SubMenuComponent} from './SubMenu';
+import type {SubMenu} from '../NewComposition/ComboBox';
import {MENU_ITEM_CLASSNAME} from './is-menu-item';
import {getPortal} from './portals';
import {
@@ -17,6 +16,7 @@ import {
SUBMENU_LEFT_INSET,
menuContainerTowardsBottom,
} from './styles';
+import {SubMenuComponent} from './SubMenu';
const container: React.CSSProperties = {
paddingTop: 8,
diff --git a/packages/studio/src/components/MenuBuildIndicator.tsx b/packages/studio/src/components/MenuBuildIndicator.tsx
index 965ff1b2015..e3344cff096 100644
--- a/packages/studio/src/components/MenuBuildIndicator.tsx
+++ b/packages/studio/src/components/MenuBuildIndicator.tsx
@@ -1,8 +1,8 @@
import React, {useContext, useEffect, useState} from 'react';
import {StudioServerConnectionCtx} from '../helpers/client-id';
+import {Spacing} from './layout';
import {OpenEditorButton} from './OpenEditorButton';
import {Spinner} from './Spinner';
-import {Spacing} from './layout';
const cwd: React.CSSProperties = {
fontSize: 13,
diff --git a/packages/studio/src/components/MenuToolbar.tsx b/packages/studio/src/components/MenuToolbar.tsx
index 439ea4b4dc8..bd5da5fcf42 100644
--- a/packages/studio/src/components/MenuToolbar.tsx
+++ b/packages/studio/src/components/MenuToolbar.tsx
@@ -3,12 +3,12 @@ import React, {useCallback, useMemo, useState} from 'react';
import {BACKGROUND} from '../helpers/colors';
import {useMobileLayout} from '../helpers/mobile-layout';
import {useMenuStructure} from '../helpers/use-menu-structure';
+import {Row, Spacing} from './layout';
import type {MenuId} from './Menu/MenuItem';
import {MenuItem} from './Menu/MenuItem';
import {MenuBuildIndicator} from './MenuBuildIndicator';
import {SidebarCollapserControls} from './SidebarCollapserControls';
import {UpdateCheck} from './UpdateCheck';
-import {Row, Spacing} from './layout';
const row: React.CSSProperties = {
alignItems: 'center',
diff --git a/packages/studio/src/components/ModalHeader.tsx b/packages/studio/src/components/ModalHeader.tsx
index a8c7353e91d..c3cdd830fe1 100644
--- a/packages/studio/src/components/ModalHeader.tsx
+++ b/packages/studio/src/components/ModalHeader.tsx
@@ -1,7 +1,7 @@
import React, {useCallback, useContext} from 'react';
import {ModalsContext} from '../state/modals';
-import {CancelButton} from './NewComposition/CancelButton';
import {Flex} from './layout';
+import {CancelButton} from './NewComposition/CancelButton';
const container: React.CSSProperties = {
display: 'flex',
diff --git a/packages/studio/src/components/NewComposition/CodemodFooter.tsx b/packages/studio/src/components/NewComposition/CodemodFooter.tsx
index 5f9e6bdb74a..710427ca66f 100644
--- a/packages/studio/src/components/NewComposition/CodemodFooter.tsx
+++ b/packages/studio/src/components/NewComposition/CodemodFooter.tsx
@@ -3,10 +3,10 @@ import React, {useCallback, useContext, useEffect, useState} from 'react';
import {ShortcutHint} from '../../error-overlay/remotion-overlay/ShortcutHint';
import {useKeybinding} from '../../helpers/use-keybinding';
import {ModalsContext} from '../../state/modals';
+import {Flex, Row, Spacing} from '../layout';
import {ModalButton} from '../ModalButton';
import {showNotification} from '../Notifications/NotificationCenter';
import {applyCodemod, getProjectInfo} from '../RenderQueue/actions';
-import {Flex, Row, Spacing} from '../layout';
import type {CodemodStatus} from './DiffPreview';
import {CodemodDiffPreview} from './DiffPreview';
diff --git a/packages/studio/src/components/NewComposition/ComboBox.tsx b/packages/studio/src/components/NewComposition/ComboBox.tsx
index 14f1f3fd275..16706c5d31f 100644
--- a/packages/studio/src/components/NewComposition/ComboBox.tsx
+++ b/packages/studio/src/components/NewComposition/ComboBox.tsx
@@ -11,6 +11,7 @@ import {useMobileLayout} from '../../helpers/mobile-layout';
import {noop} from '../../helpers/noop';
import {CaretDown} from '../../icons/caret';
import {HigherZIndex, useZIndex} from '../../state/z-index';
+import {Spacing} from '../layout';
import {MENU_INITIATOR_CLASSNAME, isMenuItem} from '../Menu/is-menu-item';
import {getPortal} from '../Menu/portals';
import {
@@ -21,7 +22,6 @@ import {
menuContainerTowardsTop,
outerPortal,
} from '../Menu/styles';
-import {Spacing} from '../layout';
import {MenuContent} from './MenuContent';
const container: React.CSSProperties = {
diff --git a/packages/studio/src/components/NewComposition/DuplicateComposition.tsx b/packages/studio/src/components/NewComposition/DuplicateComposition.tsx
index c319931e443..a59a4e51891 100644
--- a/packages/studio/src/components/NewComposition/DuplicateComposition.tsx
+++ b/packages/studio/src/components/NewComposition/DuplicateComposition.tsx
@@ -7,14 +7,14 @@ import {
validateCompositionDimension,
validateCompositionName,
} from '../../helpers/validate-new-comp-data';
+import {Spacing} from '../layout';
import {ModalFooterContainer} from '../ModalFooter';
import {ModalHeader} from '../ModalHeader';
+import {label, optionRow, rightRow} from '../RenderModal/layout';
import {
ResolveCompositionBeforeModal,
ResolvedCompositionContext,
} from '../RenderModal/ResolveCompositionBeforeModal';
-import {label, optionRow, rightRow} from '../RenderModal/layout';
-import {Spacing} from '../layout';
import {CodemodFooter} from './CodemodFooter';
import type {ComboboxValue} from './ComboBox';
import {Combobox} from './ComboBox';
diff --git a/packages/studio/src/components/NewComposition/InputDragger.tsx b/packages/studio/src/components/NewComposition/InputDragger.tsx
index 16b894cbdfe..d5801ff4646 100644
--- a/packages/studio/src/components/NewComposition/InputDragger.tsx
+++ b/packages/studio/src/components/NewComposition/InputDragger.tsx
@@ -14,6 +14,7 @@ import {RemotionInput, inputBaseStyle} from './RemInput';
type Props = InputHTMLAttributes & {
readonly onValueChange: (newVal: number) => void;
+ readonly onValueChangeEnd?: (newVal: number) => void;
readonly onTextChange: (newVal: string) => void;
readonly status: RemInputStatus;
readonly formatter?: (str: number | string) => string;
@@ -30,6 +31,7 @@ const InputDraggerForwardRefFn: React.ForwardRefRenderFunction<
> = (
{
onValueChange,
+ onValueChangeEnd,
min: _min,
max: _max,
step: _step,
@@ -122,6 +124,8 @@ const InputDraggerForwardRefFn: React.ForwardRefRenderFunction<
return;
}
+ let lastDragValue: number | null = null;
+
const moveListener = (ev: MouseEvent) => {
const xDistance = ev.pageX - pageX;
const distanceFromStart = Math.sqrt(
@@ -142,6 +146,7 @@ const InputDraggerForwardRefFn: React.ForwardRefRenderFunction<
);
const newValue = Math.min(max, Math.max(min, Number(value) + diff));
const roundedToStep = roundToStep(newValue, step);
+ lastDragValue = roundedToStep;
onValueChange(roundedToStep);
};
@@ -150,6 +155,10 @@ const InputDraggerForwardRefFn: React.ForwardRefRenderFunction<
'pointerup',
() => {
window.removeEventListener('mousemove', moveListener);
+ if (lastDragValue !== null && onValueChangeEnd) {
+ onValueChangeEnd(lastDragValue);
+ }
+
setTimeout(() => {
setClickLock(false);
}, 2);
@@ -159,7 +168,7 @@ const InputDraggerForwardRefFn: React.ForwardRefRenderFunction<
},
);
},
- [_step, _min, _max, value, onValueChange],
+ [_step, _min, _max, value, onValueChange, onValueChangeEnd],
);
useEffect(() => {
diff --git a/packages/studio/src/components/NewComposition/MenuContent.tsx b/packages/studio/src/components/NewComposition/MenuContent.tsx
index 5521d7e31d0..380caf8de8c 100644
--- a/packages/studio/src/components/NewComposition/MenuContent.tsx
+++ b/packages/studio/src/components/NewComposition/MenuContent.tsx
@@ -3,11 +3,11 @@ import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';
import {INPUT_BORDER_COLOR_UNHOVERED} from '../../helpers/colors';
import {useMobileLayout} from '../../helpers/mobile-layout';
import {useKeybinding} from '../../helpers/use-keybinding';
+import {VERTICAL_SCROLLBAR_CLASSNAME} from '../Menu/is-menu-item';
import {MenuDivider} from '../Menu/MenuDivider';
import type {MenuId} from '../Menu/MenuItem';
import type {SubMenuActivated} from '../Menu/MenuSubItem';
import {MenuSubItem} from '../Menu/MenuSubItem';
-import {VERTICAL_SCROLLBAR_CLASSNAME} from '../Menu/is-menu-item';
import {
MAX_MENU_WIDTH,
MAX_MOBILE_MENU_WIDTH,
diff --git a/packages/studio/src/components/NewComposition/NewCompDuration.tsx b/packages/studio/src/components/NewComposition/NewCompDuration.tsx
index 4c8934f01cc..0c6d13f1e74 100644
--- a/packages/studio/src/components/NewComposition/NewCompDuration.tsx
+++ b/packages/studio/src/components/NewComposition/NewCompDuration.tsx
@@ -1,7 +1,7 @@
import React, {useCallback} from 'react';
import {validateCompositionDuration} from '../../helpers/validate-new-comp-data';
-import {label, optionRow, rightRow} from '../RenderModal/layout';
import {Spacing} from '../layout';
+import {label, optionRow, rightRow} from '../RenderModal/layout';
import {InputDragger} from './InputDragger';
import {ValidationMessage} from './ValidationMessage';
diff --git a/packages/studio/src/components/NewComposition/RenameComposition.tsx b/packages/studio/src/components/NewComposition/RenameComposition.tsx
index 018aaab351f..1aab7dcc000 100644
--- a/packages/studio/src/components/NewComposition/RenameComposition.tsx
+++ b/packages/studio/src/components/NewComposition/RenameComposition.tsx
@@ -3,14 +3,14 @@ import type {ChangeEventHandler} from 'react';
import React, {useCallback, useContext, useMemo, useState} from 'react';
import {Internals} from 'remotion';
import {validateCompositionName} from '../../helpers/validate-new-comp-data';
+import {Spacing} from '../layout';
import {ModalFooterContainer} from '../ModalFooter';
import {ModalHeader} from '../ModalHeader';
+import {label, optionRow, rightRow} from '../RenderModal/layout';
import {
ResolveCompositionBeforeModal,
ResolvedCompositionContext,
} from '../RenderModal/ResolveCompositionBeforeModal';
-import {label, optionRow, rightRow} from '../RenderModal/layout';
-import {Spacing} from '../layout';
import {CodemodFooter} from './CodemodFooter';
import {DismissableModal} from './DismissableModal';
import {RemotionInput} from './RemInput';
diff --git a/packages/studio/src/components/OverrideInputProps.tsx b/packages/studio/src/components/OverrideInputProps.tsx
index 92dbf5ac779..810c9073105 100644
--- a/packages/studio/src/components/OverrideInputProps.tsx
+++ b/packages/studio/src/components/OverrideInputProps.tsx
@@ -3,9 +3,9 @@ import {Internals} from 'remotion';
import {BLUE, LIGHT_TEXT} from '../helpers/colors';
import {ModalsContext} from '../state/modals';
import {Button} from './Button';
+import {Flex, Spacing} from './layout';
import {DismissableModal} from './NewComposition/DismissableModal';
import {RemTextarea} from './NewComposition/RemTextarea';
-import {Flex, Spacing} from './layout';
const style: React.CSSProperties = {
padding: 12,
diff --git a/packages/studio/src/components/PreviewToolbar.tsx b/packages/studio/src/components/PreviewToolbar.tsx
index 8b13c1e18ce..0534b53d24b 100644
--- a/packages/studio/src/components/PreviewToolbar.tsx
+++ b/packages/studio/src/components/PreviewToolbar.tsx
@@ -13,17 +13,17 @@ import {loadLoopOption} from '../state/loop';
import {CheckboardToggle} from './CheckboardToggle';
import {FpsCounter} from './FpsCounter';
import {FullScreenToggle} from './FullscreenToggle';
+import {Flex, Spacing} from './layout';
import {LoopToggle} from './LoopToggle';
import {MuteToggle} from './MuteToggle';
-import {PlayPause} from './PlayPause';
import {PlaybackKeyboardShortcutsManager} from './PlaybackKeyboardShortcutsManager';
import {PlaybackRatePersistor} from './PlaybackRatePersistor';
import {PlaybackRateSelector} from './PlaybackRateSelector';
+import {PlayPause} from './PlayPause';
import {RenderButton} from './RenderButton';
import {SizeSelector} from './SizeSelector';
import {TimelineZoomControls} from './Timeline/TimelineZoomControls';
import {TimelineInOutPointToggle} from './TimelineInOutToggle';
-import {Flex, Spacing} from './layout';
const container: React.CSSProperties = {
display: 'flex',
diff --git a/packages/studio/src/components/QuickSwitcher/QuickSwitcherContent.tsx b/packages/studio/src/components/QuickSwitcher/QuickSwitcherContent.tsx
index 452da3ed4ec..9e44ff53577 100644
--- a/packages/studio/src/components/QuickSwitcher/QuickSwitcherContent.tsx
+++ b/packages/studio/src/components/QuickSwitcher/QuickSwitcherContent.tsx
@@ -17,16 +17,16 @@ import {
import {ModalsContext} from '../../state/modals';
import {useSelectComposition} from '../InitialCompositionLoader';
import {KeyboardShortcutsExplainer} from '../KeyboardShortcutsExplainer';
+import {Spacing} from '../layout';
import {VERTICAL_SCROLLBAR_CLASSNAME} from '../Menu/is-menu-item';
import {RemotionInput} from '../NewComposition/RemInput';
-import {Spacing} from '../layout';
+import {algoliaSearch} from './algolia-search';
import {AlgoliaCredit} from './AlgoliaCredit';
+import {fuzzySearch} from './fuzzy-search';
import type {QuickSwitcherMode} from './NoResults';
import {QuickSwitcherNoResults} from './NoResults';
import type {TQuickSwitcherResult} from './QuickSwitcherResult';
import {QuickSwitcherResult} from './QuickSwitcherResult';
-import {algoliaSearch} from './algolia-search';
-import {fuzzySearch} from './fuzzy-search';
const input: React.CSSProperties = {
width: '100%',
diff --git a/packages/studio/src/components/RenderButton.tsx b/packages/studio/src/components/RenderButton.tsx
index b4675dd0609..bc1adfcfa76 100644
--- a/packages/studio/src/components/RenderButton.tsx
+++ b/packages/studio/src/components/RenderButton.tsx
@@ -25,6 +25,7 @@ import {ThinRenderIcon} from '../icons/render';
import {useTimelineInOutFramePosition} from '../state/in-out';
import {ModalsContext} from '../state/modals';
import {HigherZIndex, useZIndex} from '../state/z-index';
+import {Row, Spacing} from './layout';
import {MENU_INITIATOR_CLASSNAME, isMenuItem} from './Menu/is-menu-item';
import {getPortal} from './Menu/portals';
import {
@@ -35,7 +36,6 @@ import {
} from './Menu/styles';
import type {ComboboxValue} from './NewComposition/ComboBox';
import {MenuContent} from './NewComposition/MenuContent';
-import {Row, Spacing} from './layout';
const splitButtonContainer: React.CSSProperties = {
display: 'inline-flex',
diff --git a/packages/studio/src/components/RenderModal/DataEditor.tsx b/packages/studio/src/components/RenderModal/DataEditor.tsx
index 57ccdad01e1..b902631a0d8 100644
--- a/packages/studio/src/components/RenderModal/DataEditor.tsx
+++ b/packages/studio/src/components/RenderModal/DataEditor.tsx
@@ -11,6 +11,8 @@ import {NoReactInternals} from 'remotion/no-react';
import {FastRefreshContext} from '../../fast-refresh-context';
import {StudioServerConnectionCtx} from '../../helpers/client-id';
import {BACKGROUND, BORDER_COLOR, LIGHT_TEXT} from '../../helpers/colors';
+import {useZodIfPossible, useZodTypesIfPossible} from '../get-zod-if-possible';
+import {Flex, Spacing} from '../layout';
import {ValidationMessage} from '../NewComposition/ValidationMessage';
import {showNotification} from '../Notifications/NotificationCenter';
import {
@@ -19,27 +21,25 @@ import {
} from '../RenderQueue/actions';
import type {SegmentedControlItem} from '../SegmentedControl';
import {SegmentedControl} from '../SegmentedControl';
-import {useZodIfPossible, useZodTypesIfPossible} from '../get-zod-if-possible';
-import {Flex, Spacing} from '../layout';
+import type {TypeCanSaveState} from './get-render-modal-warnings';
+import {
+ defaultTypeCanSaveState,
+ getRenderModalWarnings,
+} from './get-render-modal-warnings';
import {RenderModalJSONPropsEditor} from './RenderModalJSONPropsEditor';
+import {extractEnumJsonPaths} from './SchemaEditor/extract-enum-json-paths';
import {SchemaEditor} from './SchemaEditor/SchemaEditor';
import {
NoDefaultProps,
NoSchemaDefined,
ZodNotInstalled,
} from './SchemaEditor/SchemaErrorMessages';
-import {extractEnumJsonPaths} from './SchemaEditor/extract-enum-json-paths';
import type {
AnyZodSchema,
ZodSafeParseResult,
} from './SchemaEditor/zod-schema-type';
import {getZodSchemaType, zodSafeParse} from './SchemaEditor/zod-schema-type';
import {WarningIndicatorButton} from './WarningIndicatorButton';
-import type {TypeCanSaveState} from './get-render-modal-warnings';
-import {
- defaultTypeCanSaveState,
- getRenderModalWarnings,
-} from './get-render-modal-warnings';
type Mode = 'json' | 'schema';
diff --git a/packages/studio/src/components/RenderModal/EnforceAudioTrackSetting.tsx b/packages/studio/src/components/RenderModal/EnforceAudioTrackSetting.tsx
index bc23a8d61c2..f9cc26abfe6 100644
--- a/packages/studio/src/components/RenderModal/EnforceAudioTrackSetting.tsx
+++ b/packages/studio/src/components/RenderModal/EnforceAudioTrackSetting.tsx
@@ -2,8 +2,8 @@ import type {ChangeEvent} from 'react';
import React, {useCallback} from 'react';
import {Checkbox} from '../Checkbox';
import {Spacing} from '../layout';
-import {OptionExplainerBubble} from './OptionExplainerBubble';
import {label, optionRow, rightRow} from './layout';
+import {OptionExplainerBubble} from './OptionExplainerBubble';
export const EnforceAudioTrackSetting: React.FC<{
readonly enforceAudioTrack: boolean;
diff --git a/packages/studio/src/components/RenderModal/EnvInput.tsx b/packages/studio/src/components/RenderModal/EnvInput.tsx
index 9b24cf98381..c1a9d8b39db 100644
--- a/packages/studio/src/components/RenderModal/EnvInput.tsx
+++ b/packages/studio/src/components/RenderModal/EnvInput.tsx
@@ -1,7 +1,7 @@
import React, {useCallback} from 'react';
+import {Row, Spacing} from '../layout';
import {RemotionInput} from '../NewComposition/RemInput';
import {ValidationMessage} from '../NewComposition/ValidationMessage';
-import {Row, Spacing} from '../layout';
import {InlineEyeButton} from './InlineEyeIcon';
import {InlineRemoveButton} from './InlineRemoveButton';
import {optionRow} from './layout';
diff --git a/packages/studio/src/components/RenderModal/MutedSetting.tsx b/packages/studio/src/components/RenderModal/MutedSetting.tsx
index 3c666c2fc62..7dfbc0b6316 100644
--- a/packages/studio/src/components/RenderModal/MutedSetting.tsx
+++ b/packages/studio/src/components/RenderModal/MutedSetting.tsx
@@ -2,8 +2,8 @@ import type {ChangeEvent} from 'react';
import React, {useCallback} from 'react';
import {Checkbox} from '../Checkbox';
import {Spacing} from '../layout';
-import {OptionExplainerBubble} from './OptionExplainerBubble';
import {label, optionRow, rightRow} from './layout';
+import {OptionExplainerBubble} from './OptionExplainerBubble';
export const MutedSetting: React.FC<{
readonly muted: boolean;
diff --git a/packages/studio/src/components/RenderModal/NumberSetting.tsx b/packages/studio/src/components/RenderModal/NumberSetting.tsx
index dedcea94a5d..12b1d1258a5 100644
--- a/packages/studio/src/components/RenderModal/NumberSetting.tsx
+++ b/packages/studio/src/components/RenderModal/NumberSetting.tsx
@@ -1,10 +1,10 @@
import type {AvailableOptions} from '@remotion/renderer/client';
import React, {useCallback} from 'react';
+import {Spacing} from '../layout';
import {InputDragger} from '../NewComposition/InputDragger';
import {RightAlignInput} from '../NewComposition/RemInput';
-import {Spacing} from '../layout';
-import {OptionExplainerBubble} from './OptionExplainerBubble';
import {label, optionRow, rightRow} from './layout';
+import {OptionExplainerBubble} from './OptionExplainerBubble';
export const NumberSetting: React.FC<{
readonly name: string;
diff --git a/packages/studio/src/components/RenderModal/OptionExplainer.tsx b/packages/studio/src/components/RenderModal/OptionExplainer.tsx
index 4fbf3dec6b1..2e18736e9ba 100644
--- a/packages/studio/src/components/RenderModal/OptionExplainer.tsx
+++ b/packages/studio/src/components/RenderModal/OptionExplainer.tsx
@@ -1,8 +1,8 @@
import type {AnyRemotionOption} from '@remotion/renderer';
import React from 'react';
import {INPUT_BACKGROUND} from '../../helpers/colors';
-import {MenuDivider} from '../Menu/MenuDivider';
import {Spacing} from '../layout';
+import {MenuDivider} from '../Menu/MenuDivider';
import {CliCopyButton} from './CliCopyButton';
const container: React.CSSProperties = {
diff --git a/packages/studio/src/components/RenderModal/RenderModalAdvanced.tsx b/packages/studio/src/components/RenderModal/RenderModalAdvanced.tsx
index a90f6964439..97a1f5fa8cf 100644
--- a/packages/studio/src/components/RenderModal/RenderModalAdvanced.tsx
+++ b/packages/studio/src/components/RenderModal/RenderModalAdvanced.tsx
@@ -7,16 +7,16 @@ import React, {useCallback, useMemo} from 'react';
import {labelx264Preset} from '../../helpers/presets-labels';
import {Checkmark} from '../../icons/Checkmark';
import {Checkbox} from '../Checkbox';
+import {Spacing} from '../layout';
import {VERTICAL_SCROLLBAR_CLASSNAME} from '../Menu/is-menu-item';
import type {ComboboxValue, SelectionItem} from '../NewComposition/ComboBox';
import {Combobox} from '../NewComposition/ComboBox';
import {RemotionInput} from '../NewComposition/RemInput';
-import {Spacing} from '../layout';
+import {input, label, optionRow, rightRow} from './layout';
import {NumberSetting} from './NumberSetting';
import {OptionExplainerBubble} from './OptionExplainerBubble';
import {RenderModalEnvironmentVariables} from './RenderModalEnvironmentVariables';
import {RenderModalHr} from './RenderModalHr';
-import {input, label, optionRow, rightRow} from './layout';
export type RenderType = 'still' | 'video' | 'audio' | 'sequence';
diff --git a/packages/studio/src/components/RenderModal/RenderModalAudio.tsx b/packages/studio/src/components/RenderModal/RenderModalAudio.tsx
index 26bb214c686..1a6567b8954 100644
--- a/packages/studio/src/components/RenderModal/RenderModalAudio.tsx
+++ b/packages/studio/src/components/RenderModal/RenderModalAudio.tsx
@@ -4,19 +4,19 @@ import type {ChangeEvent} from 'react';
import React, {useCallback} from 'react';
import {Checkmark} from '../../icons/Checkmark';
import {Checkbox} from '../Checkbox';
+import {Spacing} from '../layout';
import {VERTICAL_SCROLLBAR_CLASSNAME} from '../Menu/is-menu-item';
import type {ComboboxValue} from '../NewComposition/ComboBox';
import {Combobox} from '../NewComposition/ComboBox';
import {RemotionInput} from '../NewComposition/RemInput';
-import {Spacing} from '../layout';
import {EnforceAudioTrackSetting} from './EnforceAudioTrackSetting';
+import {humanReadableAudioCodec} from './human-readable-audio-codecs';
+import {input, label, optionRow, rightRow} from './layout';
import {MutedSetting} from './MutedSetting';
import {OptionExplainerBubble} from './OptionExplainerBubble';
import type {RenderType} from './RenderModalAdvanced';
import {RenderModalHr} from './RenderModalHr';
import {SeparateAudioOption} from './SeparateAudioOption';
-import {humanReadableAudioCodec} from './human-readable-audio-codecs';
-import {input, label, optionRow, rightRow} from './layout';
const container: React.CSSProperties = {
flex: 1,
diff --git a/packages/studio/src/components/RenderModal/RenderModalBasic.tsx b/packages/studio/src/components/RenderModal/RenderModalBasic.tsx
index c2b4aaba2e0..e78d2c22272 100644
--- a/packages/studio/src/components/RenderModal/RenderModalBasic.tsx
+++ b/packages/studio/src/components/RenderModal/RenderModalBasic.tsx
@@ -6,20 +6,20 @@ import type {_InternalTypes, VideoConfig} from 'remotion';
import {labelProResProfile} from '../../helpers/prores-labels';
import {useFileExistence} from '../../helpers/use-file-existence';
import {Checkmark} from '../../icons/Checkmark';
+import {Spacing} from '../layout';
import type {ComboboxValue} from '../NewComposition/ComboBox';
import {Combobox} from '../NewComposition/ComboBox';
import {InputDragger} from '../NewComposition/InputDragger';
import {RightAlignInput} from '../NewComposition/RemInput';
import type {SegmentedControlItem} from '../SegmentedControl';
import {SegmentedControl} from '../SegmentedControl';
-import {Spacing} from '../layout';
import {FrameRangeSetting} from './FrameRangeSetting';
-import {OptionExplainerBubble} from './OptionExplainerBubble';
-import type {RenderType} from './RenderModalAdvanced';
-import {RenderModalOutputName} from './RenderModalOutputName';
import {humanReadableCodec} from './human-readable-codec';
import {humanReadableLogLevel} from './human-readable-loglevel';
import {input, label, optionRow, rightRow} from './layout';
+import {OptionExplainerBubble} from './OptionExplainerBubble';
+import type {RenderType} from './RenderModalAdvanced';
+import {RenderModalOutputName} from './RenderModalOutputName';
const container: React.CSSProperties = {
flex: 1,
diff --git a/packages/studio/src/components/RenderModal/RenderModalGif.tsx b/packages/studio/src/components/RenderModal/RenderModalGif.tsx
index dff0d048b8d..dba79b7653e 100644
--- a/packages/studio/src/components/RenderModal/RenderModalGif.tsx
+++ b/packages/studio/src/components/RenderModal/RenderModalGif.tsx
@@ -2,10 +2,10 @@ import type {ChangeEvent} from 'react';
import React, {useCallback} from 'react';
import {Checkbox} from '../Checkbox';
import {Spacing} from '../layout';
+import {label, optionRow, rightRow} from './layout';
import {NumberOfLoopsSetting} from './NumberOfLoopsSetting';
import {NumberSetting} from './NumberSetting';
import {OptionExplainerBubble} from './OptionExplainerBubble';
-import {label, optionRow, rightRow} from './layout';
const container: React.CSSProperties = {
flex: 1,
diff --git a/packages/studio/src/components/RenderModal/RenderModalJSONPropsEditor.tsx b/packages/studio/src/components/RenderModal/RenderModalJSONPropsEditor.tsx
index 90ed3e1e49b..0f33b65efbf 100644
--- a/packages/studio/src/components/RenderModal/RenderModalJSONPropsEditor.tsx
+++ b/packages/studio/src/components/RenderModal/RenderModalJSONPropsEditor.tsx
@@ -5,14 +5,14 @@ import {FAIL_COLOR} from '../../helpers/colors';
import {setUnsavedProps} from '../../helpers/document-title';
import {useKeybinding} from '../../helpers/use-keybinding';
import {Button} from '../Button';
+import {Flex, Row, Spacing} from '../layout';
import {RemTextarea} from '../NewComposition/RemTextarea';
import {ValidationMessage} from '../NewComposition/ValidationMessage';
-import {Flex, Row, Spacing} from '../layout';
import type {State} from './DataEditor';
-import {ZodErrorMessages} from './SchemaEditor/ZodErrorMessages';
import {deepEqual} from './SchemaEditor/deep-equal';
import type {AnyZodSchema} from './SchemaEditor/zod-schema-type';
import {zodSafeParse} from './SchemaEditor/zod-schema-type';
+import {ZodErrorMessages} from './SchemaEditor/ZodErrorMessages';
const style: React.CSSProperties = {
fontFamily: 'monospace',
diff --git a/packages/studio/src/components/RenderModal/RenderModalOutputName.tsx b/packages/studio/src/components/RenderModal/RenderModalOutputName.tsx
index 651366e42ab..b8aada1f985 100644
--- a/packages/studio/src/components/RenderModal/RenderModalOutputName.tsx
+++ b/packages/studio/src/components/RenderModal/RenderModalOutputName.tsx
@@ -1,7 +1,7 @@
import React from 'react';
+import {Column, Spacing} from '../layout';
import {RemotionInput} from '../NewComposition/RemInput';
import {ValidationMessage} from '../NewComposition/ValidationMessage';
-import {Column, Spacing} from '../layout';
import {label, optionRow, rightRow} from './layout';
type Props = {
diff --git a/packages/studio/src/components/RenderModal/RenderModalPicture.tsx b/packages/studio/src/components/RenderModal/RenderModalPicture.tsx
index 96fbfbbb4d5..e5df978b451 100644
--- a/packages/studio/src/components/RenderModal/RenderModalPicture.tsx
+++ b/packages/studio/src/components/RenderModal/RenderModalPicture.tsx
@@ -9,20 +9,20 @@ import type {ChangeEvent} from 'react';
import React, {useCallback, useMemo} from 'react';
import {Checkmark} from '../../icons/Checkmark';
import {Checkbox} from '../Checkbox';
+import {Spacing} from '../layout';
import {VERTICAL_SCROLLBAR_CLASSNAME} from '../Menu/is-menu-item';
import type {ComboboxValue} from '../NewComposition/ComboBox';
import {Combobox} from '../NewComposition/ComboBox';
import {RemotionInput} from '../NewComposition/RemInput';
import type {SegmentedControlItem} from '../SegmentedControl';
import {SegmentedControl} from '../SegmentedControl';
-import {Spacing} from '../layout';
import {CrfSetting} from './CrfSetting';
import {JpegQualitySetting} from './JpegQualitySetting';
+import {input, label, optionRow, rightRow} from './layout';
import {OptionExplainerBubble} from './OptionExplainerBubble';
import type {RenderType} from './RenderModalAdvanced';
import {RenderModalHr} from './RenderModalHr';
import {ScaleSetting} from './ScaleSetting';
-import {input, label, optionRow, rightRow} from './layout';
const qualityControlModes = ['crf', 'bitrate'] as const;
export type QualityControl = (typeof qualityControlModes)[number];
diff --git a/packages/studio/src/components/RenderModal/RenderStatusModal.tsx b/packages/studio/src/components/RenderModal/RenderStatusModal.tsx
index 7d55edc9c5d..34b23ffbbf0 100644
--- a/packages/studio/src/components/RenderModal/RenderStatusModal.tsx
+++ b/packages/studio/src/components/RenderModal/RenderStatusModal.tsx
@@ -6,6 +6,7 @@ import {
} from '../../helpers/retry-payload';
import {ModalsContext} from '../../state/modals';
import {Button} from '../Button';
+import {Flex, SPACING_UNIT} from '../layout';
import {HORIZONTAL_SCROLLBAR_CLASSNAME} from '../Menu/is-menu-item';
import {ModalContainer} from '../ModalContainer';
import {ModalHeader} from '../ModalHeader';
@@ -17,7 +18,6 @@ import type {
} from '../RenderQueue/client-side-render-types';
import {isRestoredClientJob} from '../RenderQueue/client-side-render-types';
import {isClientRenderJob, RenderQueueContext} from '../RenderQueue/context';
-import {Flex, SPACING_UNIT} from '../layout';
import {ClientRenderProgress} from './ClientRenderProgress';
import {GuiRenderStatus} from './GuiRenderStatus';
diff --git a/packages/studio/src/components/RenderModal/ResolveCompositionBeforeModal.tsx b/packages/studio/src/components/RenderModal/ResolveCompositionBeforeModal.tsx
index dd93806f9e8..d687d344acc 100644
--- a/packages/studio/src/components/RenderModal/ResolveCompositionBeforeModal.tsx
+++ b/packages/studio/src/components/RenderModal/ResolveCompositionBeforeModal.tsx
@@ -2,9 +2,9 @@ import React, {useContext, useEffect, useMemo} from 'react';
import type {_InternalTypes, VideoConfig} from 'remotion';
import {Internals} from 'remotion';
import {LIGHT_TEXT} from '../../helpers/colors';
+import {Spacing} from '../layout';
import {inlineCodeSnippet} from '../Menu/styles';
import {RunningCalculateMetadata} from '../RunningCalculateMetadata';
-import {Spacing} from '../layout';
const loaderContainer: React.CSSProperties = {
paddingTop: 40,
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/SchemaEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/SchemaEditor.tsx
index f079c4613ad..6003e1a249f 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/SchemaEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/SchemaEditor.tsx
@@ -2,20 +2,20 @@ import React, {useCallback, useEffect, useMemo, useState} from 'react';
import {Internals} from 'remotion';
import {setUnsavedProps} from '../../../helpers/document-title';
import {useKeybinding} from '../../../helpers/use-keybinding';
-import {VERTICAL_SCROLLBAR_CLASSNAME} from '../../Menu/is-menu-item';
import {useZodIfPossible} from '../../get-zod-if-possible';
+import {VERTICAL_SCROLLBAR_CLASSNAME} from '../../Menu/is-menu-item';
+import {deepEqual} from './deep-equal';
+import type {RevisionContextType} from './local-state';
+import {RevisionContext} from './local-state';
import {
InvalidDefaultProps,
InvalidSchema,
TopLevelZodValue,
} from './SchemaErrorMessages';
-import {ZodObjectEditor} from './ZodObjectEditor';
-import {deepEqual} from './deep-equal';
-import type {RevisionContextType} from './local-state';
-import {RevisionContext} from './local-state';
import {defaultPropsEditorScrollableAreaRef} from './scroll-to-default-props-path';
import type {AnyZodSchema, ZodSafeParseResult} from './zod-schema-type';
import {getZodSchemaType, zodSafeParse} from './zod-schema-type';
+import {ZodObjectEditor} from './ZodObjectEditor';
const scrollable: React.CSSProperties = {
display: 'flex',
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/SchemaErrorMessages.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/SchemaErrorMessages.tsx
index e4073fc70cf..ae837edb260 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/SchemaErrorMessages.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/SchemaErrorMessages.tsx
@@ -1,10 +1,10 @@
// Schema error messages for studio editor
import {BACKGROUND, BLUE, LIGHT_TEXT} from '../../../helpers/colors';
import {Button} from '../../Button';
-import {inlineCodeSnippet} from '../../Menu/styles';
import {Spacing} from '../../layout';
-import {ZodErrorMessages} from './ZodErrorMessages';
+import {inlineCodeSnippet} from '../../Menu/styles';
import type {ZodSafeParseResult} from './zod-schema-type';
+import {ZodErrorMessages} from './ZodErrorMessages';
const explainer: React.CSSProperties = {
display: 'flex',
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/SchemaLabel.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/SchemaLabel.tsx
index 1bc1f97f166..ef1b8071643 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/SchemaLabel.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/SchemaLabel.tsx
@@ -2,9 +2,9 @@ import React, {useCallback, useMemo, useState} from 'react';
import {FAIL_COLOR, LIGHT_TEXT} from '../../../helpers/colors';
import {Flex} from '../../layout';
import {InlineRemoveButton} from '../InlineRemoveButton';
+import {getSchemaLabel} from './get-schema-label';
import {SchemaResetButton} from './SchemaResetButton';
import {SchemaSaveButton} from './SchemaSaveButton';
-import {getSchemaLabel} from './get-schema-label';
import {DEFAULT_PROPS_PATH_CLASSNAME} from './scroll-to-default-props-path';
import type {JSONPath} from './zod-types';
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodArrayEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodArrayEditor.tsx
index e8a72ed50e6..acdc08160af 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodArrayEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodArrayEditor.tsx
@@ -3,19 +3,19 @@ import {
useZodIfPossible,
useZodTypesIfPossible,
} from '../../get-zod-if-possible';
+import {createZodValues} from './create-zod-values';
+import {deepEqual} from './deep-equal';
import {Fieldset} from './Fieldset';
+import {useLocalState} from './local-state';
import {SchemaLabel} from './SchemaLabel';
import {SchemaArrayItemSeparationLine} from './SchemaSeparationLine';
import {SchemaVerticalGuide} from './SchemaVerticalGuide';
-import {ZodArrayItemEditor} from './ZodArrayItemEditor';
-import {ZodFieldValidation} from './ZodFieldValidation';
-import type {UpdaterFunction} from './ZodSwitch';
-import {createZodValues} from './create-zod-values';
-import {deepEqual} from './deep-equal';
-import {useLocalState} from './local-state';
import type {AnyZodSchema} from './zod-schema-type';
import {getArrayElement} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import {ZodArrayItemEditor} from './ZodArrayItemEditor';
+import {ZodFieldValidation} from './ZodFieldValidation';
+import type {UpdaterFunction} from './ZodSwitch';
export const ZodArrayEditor: React.FC<{
readonly schema: AnyZodSchema;
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodArrayItemEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodArrayItemEditor.tsx
index 5a1dd5029ab..772c54ab5ca 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodArrayItemEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodArrayItemEditor.tsx
@@ -1,9 +1,9 @@
import {useCallback, useMemo} from 'react';
import {useZodIfPossible} from '../../get-zod-if-possible';
-import type {UpdaterFunction} from './ZodSwitch';
-import {ZodSwitch} from './ZodSwitch';
import type {AnyZodSchema} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import type {UpdaterFunction} from './ZodSwitch';
+import {ZodSwitch} from './ZodSwitch';
export const ZodArrayItemEditor: React.FC<{
jsonPath: JSONPath;
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodBooleanEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodBooleanEditor.tsx
index 6e34555c8f5..adc97a79961 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodBooleanEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodBooleanEditor.tsx
@@ -1,11 +1,11 @@
import React, {useCallback} from 'react';
import {Checkbox} from '../../Checkbox';
import {Fieldset} from './Fieldset';
-import {SchemaLabel} from './SchemaLabel';
-import type {UpdaterFunction} from './ZodSwitch';
import {useLocalState} from './local-state';
+import {SchemaLabel} from './SchemaLabel';
import type {AnyZodSchema} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import type {UpdaterFunction} from './ZodSwitch';
const fullWidth: React.CSSProperties = {
width: '100%',
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodColorEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodColorEditor.tsx
index ec1c38af18c..99637380fc5 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodColorEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodColorEditor.tsx
@@ -1,20 +1,20 @@
import React, {useCallback, useMemo} from 'react';
import {colorWithNewOpacity} from '../../../helpers/color-math';
-import {InputDragger} from '../../NewComposition/InputDragger';
-import {RemotionInput} from '../../NewComposition/RemInput';
-import {RemInputTypeColor} from '../../NewComposition/RemInputTypeColor';
import {
useZodIfPossible,
useZodTypesIfPossible,
} from '../../get-zod-if-possible';
import {Row, Spacing} from '../../layout';
+import {InputDragger} from '../../NewComposition/InputDragger';
+import {RemotionInput} from '../../NewComposition/RemInput';
+import {RemInputTypeColor} from '../../NewComposition/RemInputTypeColor';
import {Fieldset} from './Fieldset';
-import {SchemaLabel} from './SchemaLabel';
-import {ZodFieldValidation} from './ZodFieldValidation';
-import type {UpdaterFunction} from './ZodSwitch';
import {useLocalState} from './local-state';
+import {SchemaLabel} from './SchemaLabel';
import type {AnyZodSchema} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import {ZodFieldValidation} from './ZodFieldValidation';
+import type {UpdaterFunction} from './ZodSwitch';
const fullWidth: React.CSSProperties = {
width: '100%',
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodDateEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodDateEditor.tsx
index d287f683a6a..310efdc18f1 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodDateEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodDateEditor.tsx
@@ -1,14 +1,14 @@
import React, {useCallback} from 'react';
import {VERY_LIGHT_TEXT} from '../../../helpers/colors';
-import {RemotionInput} from '../../NewComposition/RemInput';
import {Spacing} from '../../layout';
+import {RemotionInput} from '../../NewComposition/RemInput';
import {Fieldset} from './Fieldset';
-import {SchemaLabel} from './SchemaLabel';
-import {ZodFieldValidation} from './ZodFieldValidation';
-import type {UpdaterFunction} from './ZodSwitch';
import {useLocalState} from './local-state';
+import {SchemaLabel} from './SchemaLabel';
import type {AnyZodSchema} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import {ZodFieldValidation} from './ZodFieldValidation';
+import type {UpdaterFunction} from './ZodSwitch';
const fullWidth: React.CSSProperties = {
width: '100%',
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.tsx
index f6610fa8040..82d59f8d192 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.tsx
@@ -1,18 +1,15 @@
import {useCallback, useMemo} from 'react';
import {Checkmark} from '../../../icons/Checkmark';
-import type {ComboboxValue} from '../../NewComposition/ComboBox';
-import {Combobox} from '../../NewComposition/ComboBox';
import {
useZodIfPossible,
useZodTypesIfPossible,
} from '../../get-zod-if-possible';
-import {Fieldset} from './Fieldset';
-import {SchemaLabel} from './SchemaLabel';
-import type {ObjectDiscrimatedUnionReplacement} from './ZodObjectEditor';
-import {ZodObjectEditor} from './ZodObjectEditor';
-import type {UpdaterFunction} from './ZodSwitch';
+import type {ComboboxValue} from '../../NewComposition/ComboBox';
+import {Combobox} from '../../NewComposition/ComboBox';
import {createZodValues} from './create-zod-values';
+import {Fieldset} from './Fieldset';
import {useLocalState} from './local-state';
+import {SchemaLabel} from './SchemaLabel';
import type {AnyZodSchema} from './zod-schema-type';
import {
getDiscriminatedOption,
@@ -20,6 +17,9 @@ import {
getDiscriminator,
} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import type {ObjectDiscrimatedUnionReplacement} from './ZodObjectEditor';
+import {ZodObjectEditor} from './ZodObjectEditor';
+import type {UpdaterFunction} from './ZodSwitch';
export const ZodDiscriminatedUnionEditor: React.FC<{
schema: AnyZodSchema;
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodEffectEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodEffectEditor.tsx
index 24ad5bfc84f..72ebe3daccd 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodEffectEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodEffectEditor.tsx
@@ -1,12 +1,12 @@
import React from 'react';
import {Fieldset} from './Fieldset';
-import {ZodFieldValidation} from './ZodFieldValidation';
-import type {UpdaterFunction} from './ZodSwitch';
-import {ZodSwitch} from './ZodSwitch';
import {useLocalState} from './local-state';
import type {AnyZodSchema} from './zod-schema-type';
import {getEffectsInner, getZodSchemaType} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import {ZodFieldValidation} from './ZodFieldValidation';
+import type {UpdaterFunction} from './ZodSwitch';
+import {ZodSwitch} from './ZodSwitch';
const fullWidth: React.CSSProperties = {
width: '100%',
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodEnumEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodEnumEditor.tsx
index e830f53bbfb..dc97d468123 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodEnumEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodEnumEditor.tsx
@@ -3,13 +3,13 @@ import {Checkmark} from '../../../icons/Checkmark';
import type {ComboboxValue} from '../../NewComposition/ComboBox';
import {Combobox} from '../../NewComposition/ComboBox';
import {Fieldset} from './Fieldset';
-import {SchemaLabel} from './SchemaLabel';
-import {ZodFieldValidation} from './ZodFieldValidation';
-import type {UpdaterFunction} from './ZodSwitch';
import {useLocalState} from './local-state';
+import {SchemaLabel} from './SchemaLabel';
import type {AnyZodSchema} from './zod-schema-type';
import {getEnumValues} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import {ZodFieldValidation} from './ZodFieldValidation';
+import type {UpdaterFunction} from './ZodSwitch';
const container: React.CSSProperties = {
width: '100%',
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodErrorMessages.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodErrorMessages.tsx
index 016d5a7e341..e47fae62eb1 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodErrorMessages.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodErrorMessages.tsx
@@ -1,7 +1,7 @@
import React, {useMemo} from 'react';
import {FAIL_COLOR, LIGHT_TEXT} from '../../../helpers/colors';
-import {WarningTriangle} from '../../NewComposition/ValidationMessage';
import {Spacing} from '../../layout';
+import {WarningTriangle} from '../../NewComposition/ValidationMessage';
import type {ZodSafeParseResult} from './zod-schema-type';
const schemaLabel: React.CSSProperties = {
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodMatrixEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodMatrixEditor.tsx
index e69275c8d8d..780ced0add0 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodMatrixEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodMatrixEditor.tsx
@@ -3,19 +3,19 @@ import {
useZodIfPossible,
useZodTypesIfPossible,
} from '../../get-zod-if-possible';
+import {createZodValues} from './create-zod-values';
+import {deepEqual} from './deep-equal';
import {Fieldset} from './Fieldset';
+import {useLocalState} from './local-state';
import {SchemaLabel} from './SchemaLabel';
import {SchemaArrayItemSeparationLine} from './SchemaSeparationLine';
import {SchemaVerticalGuide} from './SchemaVerticalGuide';
-import {ZodArrayItemEditor} from './ZodArrayItemEditor';
-import {ZodFieldValidation} from './ZodFieldValidation';
-import type {UpdaterFunction} from './ZodSwitch';
-import {createZodValues} from './create-zod-values';
-import {deepEqual} from './deep-equal';
-import {useLocalState} from './local-state';
import type {AnyZodSchema} from './zod-schema-type';
import {getArrayElement} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import {ZodArrayItemEditor} from './ZodArrayItemEditor';
+import {ZodFieldValidation} from './ZodFieldValidation';
+import type {UpdaterFunction} from './ZodSwitch';
const rowStyle: React.CSSProperties = {
display: 'flex',
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodNullableEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodNullableEditor.tsx
index f35d456aac9..5c69cb0153e 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodNullableEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodNullableEditor.tsx
@@ -1,8 +1,8 @@
-import {ZodOrNullishEditor} from './ZodOrNullishEditor';
-import type {UpdaterFunction} from './ZodSwitch';
import type {AnyZodSchema} from './zod-schema-type';
import {getInnerType} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import {ZodOrNullishEditor} from './ZodOrNullishEditor';
+import type {UpdaterFunction} from './ZodSwitch';
export const ZodNullableEditor: React.FC<{
showSaveButton: boolean;
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodNumberEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodNumberEditor.tsx
index 147730d1b95..0c722182cf9 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodNumberEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodNumberEditor.tsx
@@ -1,10 +1,8 @@
import React, {useCallback} from 'react';
import {InputDragger} from '../../NewComposition/InputDragger';
import {Fieldset} from './Fieldset';
-import {SchemaLabel} from './SchemaLabel';
-import {ZodFieldValidation} from './ZodFieldValidation';
-import type {UpdaterFunction} from './ZodSwitch';
import {useLocalState} from './local-state';
+import {SchemaLabel} from './SchemaLabel';
import {
getZodNumberMaximum,
getZodNumberMinimum,
@@ -12,6 +10,8 @@ import {
} from './zod-number-constraints';
import type {AnyZodSchema} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import {ZodFieldValidation} from './ZodFieldValidation';
+import type {UpdaterFunction} from './ZodSwitch';
const fullWidth: React.CSSProperties = {
width: '100%',
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodObjectEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodObjectEditor.tsx
index eddcdd4257c..5cee5808d72 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodObjectEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodObjectEditor.tsx
@@ -1,16 +1,16 @@
import React, {useMemo, useState} from 'react';
import {fieldsetLabel} from '../layout';
+import {deepEqual} from './deep-equal';
import {Fieldset} from './Fieldset';
+import {useLocalState} from './local-state';
import {SchemaLabel} from './SchemaLabel';
import {SchemaSeparationLine} from './SchemaSeparationLine';
import {SchemaVerticalGuide} from './SchemaVerticalGuide';
-import type {UpdaterFunction} from './ZodSwitch';
-import {ZodSwitch} from './ZodSwitch';
-import {deepEqual} from './deep-equal';
-import {useLocalState} from './local-state';
import type {AnyZodSchema} from './zod-schema-type';
import {getObjectShape, getZodSchemaType} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import type {UpdaterFunction} from './ZodSwitch';
+import {ZodSwitch} from './ZodSwitch';
export type ObjectDiscrimatedUnionReplacement = {
discriminator: string;
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodOptionalEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodOptionalEditor.tsx
index 92bbb1a78ae..1f93ac7a109 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodOptionalEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodOptionalEditor.tsx
@@ -1,8 +1,8 @@
-import {ZodOrNullishEditor} from './ZodOrNullishEditor';
-import type {UpdaterFunction} from './ZodSwitch';
import type {AnyZodSchema} from './zod-schema-type';
import {getInnerType} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import {ZodOrNullishEditor} from './ZodOrNullishEditor';
+import type {UpdaterFunction} from './ZodSwitch';
export const ZodOptionalEditor: React.FC<{
showSaveButton: boolean;
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodOrNullishEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodOrNullishEditor.tsx
index df14fe275e1..8d4b34d34ca 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodOrNullishEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodOrNullishEditor.tsx
@@ -6,14 +6,14 @@ import {
useZodTypesIfPossible,
} from '../../get-zod-if-possible';
import {Spacing} from '../../layout';
-import {Fieldset} from './Fieldset';
-import {SchemaLabel} from './SchemaLabel';
-import type {UpdaterFunction} from './ZodSwitch';
-import {ZodSwitch} from './ZodSwitch';
import {createZodValues} from './create-zod-values';
+import {Fieldset} from './Fieldset';
import {useLocalState} from './local-state';
+import {SchemaLabel} from './SchemaLabel';
import type {AnyZodSchema} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import type {UpdaterFunction} from './ZodSwitch';
+import {ZodSwitch} from './ZodSwitch';
const labelStyle: React.CSSProperties = {
fontFamily: 'sans-serif',
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodStaticFileEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodStaticFileEditor.tsx
index cbc2d15bc8b..be5d14f7b06 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodStaticFileEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodStaticFileEditor.tsx
@@ -4,12 +4,12 @@ import type {ComboboxValue} from '../../NewComposition/ComboBox';
import {Combobox} from '../../NewComposition/ComboBox';
import {useStaticFiles} from '../../use-static-files';
import {Fieldset} from './Fieldset';
-import {SchemaLabel} from './SchemaLabel';
-import {ZodFieldValidation} from './ZodFieldValidation';
-import type {UpdaterFunction} from './ZodSwitch';
import {useLocalState} from './local-state';
+import {SchemaLabel} from './SchemaLabel';
import type {AnyZodSchema} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import {ZodFieldValidation} from './ZodFieldValidation';
+import type {UpdaterFunction} from './ZodSwitch';
const container: React.CSSProperties = {
width: '100%',
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodStringEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodStringEditor.tsx
index 0eff61d301d..74b5f6a9948 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodStringEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodStringEditor.tsx
@@ -1,13 +1,13 @@
import React, {useCallback} from 'react';
-import {RemotionInput} from '../../NewComposition/RemInput';
import {useZodIfPossible} from '../../get-zod-if-possible';
+import {RemotionInput} from '../../NewComposition/RemInput';
import {Fieldset} from './Fieldset';
-import {SchemaLabel} from './SchemaLabel';
-import {ZodFieldValidation} from './ZodFieldValidation';
-import type {UpdaterFunction} from './ZodSwitch';
import {useLocalState} from './local-state';
+import {SchemaLabel} from './SchemaLabel';
import type {AnyZodSchema} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import {ZodFieldValidation} from './ZodFieldValidation';
+import type {UpdaterFunction} from './ZodSwitch';
const fullWidth: React.CSSProperties = {
width: '100%',
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodTextareaEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodTextareaEditor.tsx
index b84487ba7c0..bd8a20d2abc 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodTextareaEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodTextareaEditor.tsx
@@ -1,16 +1,16 @@
import React, {useCallback} from 'react';
-import {RemTextarea} from '../../NewComposition/RemTextarea';
import {
useZodIfPossible,
useZodTypesIfPossible,
} from '../../get-zod-if-possible';
+import {RemTextarea} from '../../NewComposition/RemTextarea';
import {Fieldset} from './Fieldset';
-import {SchemaLabel} from './SchemaLabel';
-import {ZodFieldValidation} from './ZodFieldValidation';
-import type {UpdaterFunction} from './ZodSwitch';
import {useLocalState} from './local-state';
+import {SchemaLabel} from './SchemaLabel';
import type {AnyZodSchema} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import {ZodFieldValidation} from './ZodFieldValidation';
+import type {UpdaterFunction} from './ZodSwitch';
const fullWidth: React.CSSProperties = {
width: '100%',
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodTupleItemEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodTupleItemEditor.tsx
index 33c7d4fa589..d17add27dcf 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodTupleItemEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodTupleItemEditor.tsx
@@ -1,9 +1,9 @@
import {useCallback, useMemo} from 'react';
import {useZodIfPossible} from '../../get-zod-if-possible';
-import type {UpdaterFunction} from './ZodSwitch';
-import {ZodSwitch} from './ZodSwitch';
import type {AnyZodSchema} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import type {UpdaterFunction} from './ZodSwitch';
+import {ZodSwitch} from './ZodSwitch';
export const ZodTupleItemEditor: React.FC<{
jsonPath: JSONPath;
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/ZodUnionEditor.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/ZodUnionEditor.tsx
index 5f1f09d4301..51b1da0216b 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/ZodUnionEditor.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/ZodUnionEditor.tsx
@@ -1,9 +1,9 @@
-import {ZonNonEditableValue} from './ZodNonEditableValue';
-import {ZodOrNullishEditor} from './ZodOrNullishEditor';
-import type {UpdaterFunction} from './ZodSwitch';
import type {AnyZodSchema} from './zod-schema-type';
import {getUnionOptions, getZodSchemaType} from './zod-schema-type';
import type {JSONPath} from './zod-types';
+import {ZonNonEditableValue} from './ZodNonEditableValue';
+import {ZodOrNullishEditor} from './ZodOrNullishEditor';
+import type {UpdaterFunction} from './ZodSwitch';
const findNull = (value: readonly AnyZodSchema[]) => {
const nullIndex = value.findIndex((v) => {
diff --git a/packages/studio/src/components/RenderModal/SchemaEditor/local-state.tsx b/packages/studio/src/components/RenderModal/SchemaEditor/local-state.tsx
index 9cf27d67ad8..1accd50b0a6 100644
--- a/packages/studio/src/components/RenderModal/SchemaEditor/local-state.tsx
+++ b/packages/studio/src/components/RenderModal/SchemaEditor/local-state.tsx
@@ -8,10 +8,10 @@ import React, {
useState,
} from 'react';
import {Internals} from 'remotion';
-import type {UpdaterFunction} from './ZodSwitch';
import {deepEqual} from './deep-equal';
import type {AnyZodSchema, ZodSafeParseResult} from './zod-schema-type';
import {zodSafeParse} from './zod-schema-type';
+import type {UpdaterFunction} from './ZodSwitch';
export type LocalState = {
value: T;
diff --git a/packages/studio/src/components/RenderModal/SeparateAudioOption.tsx b/packages/studio/src/components/RenderModal/SeparateAudioOption.tsx
index ee97673db81..689519a8ffd 100644
--- a/packages/studio/src/components/RenderModal/SeparateAudioOption.tsx
+++ b/packages/studio/src/components/RenderModal/SeparateAudioOption.tsx
@@ -5,10 +5,10 @@ import React, {useCallback, useMemo} from 'react';
import {useFileExistence} from '../../helpers/use-file-existence';
import {Checkbox} from '../Checkbox';
import {Spacing} from '../layout';
-import {OptionExplainerBubble} from './OptionExplainerBubble';
-import {RenderModalOutputName} from './RenderModalOutputName';
import {getStringBeforeSuffix} from './get-string-before-suffix';
import {input, label, optionRow, rightRow} from './layout';
+import {OptionExplainerBubble} from './OptionExplainerBubble';
+import {RenderModalOutputName} from './RenderModalOutputName';
export const SeparateAudioOptionInput: React.FC<{
readonly setSeparateAudioTo: React.Dispatch<
diff --git a/packages/studio/src/components/RenderModal/ServerRenderModal.tsx b/packages/studio/src/components/RenderModal/ServerRenderModal.tsx
index 75d42f79ca6..3853f1e1b71 100644
--- a/packages/studio/src/components/RenderModal/ServerRenderModal.tsx
+++ b/packages/studio/src/components/RenderModal/ServerRenderModal.tsx
@@ -36,8 +36,8 @@ import {
} from '../../helpers/convert-env-variables';
import {useRenderModalSections} from '../../helpers/render-modal-sections';
import {useKeybinding} from '../../helpers/use-keybinding';
-import {Checkmark} from '../../icons/Checkmark';
import {AudioIcon} from '../../icons/audio';
+import {Checkmark} from '../../icons/Checkmark';
import {DataIcon} from '../../icons/data';
import {FileIcon} from '../../icons/file';
import {PicIcon} from '../../icons/frame';
@@ -64,17 +64,6 @@ import {SegmentedControl} from '../SegmentedControl';
import {VerticalTab} from '../Tabs/vertical';
import {useCrfState} from './CrfSetting';
import {DataEditor} from './DataEditor';
-import type {RenderType} from './RenderModalAdvanced';
-import {RenderModalAdvanced} from './RenderModalAdvanced';
-import {RenderModalAudio} from './RenderModalAudio';
-import {RenderModalBasic} from './RenderModalBasic';
-import {RenderModalGif} from './RenderModalGif';
-import type {QualityControl} from './RenderModalPicture';
-import {RenderModalPicture} from './RenderModalPicture';
-import {
- ResolveCompositionBeforeModal,
- ResolvedCompositionContext,
-} from './ResolveCompositionBeforeModal';
import {getDefaultCodecs} from './get-default-codecs';
import {getStringBeforeSuffix} from './get-string-before-suffix';
import {validateOutnameGui} from './out-name-checker';
@@ -90,6 +79,17 @@ import {
optionsPanel,
outerModalStyle,
} from './render-modals';
+import type {RenderType} from './RenderModalAdvanced';
+import {RenderModalAdvanced} from './RenderModalAdvanced';
+import {RenderModalAudio} from './RenderModalAudio';
+import {RenderModalBasic} from './RenderModalBasic';
+import {RenderModalGif} from './RenderModalGif';
+import type {QualityControl} from './RenderModalPicture';
+import {RenderModalPicture} from './RenderModalPicture';
+import {
+ ResolveCompositionBeforeModal,
+ ResolvedCompositionContext,
+} from './ResolveCompositionBeforeModal';
type State =
| {
diff --git a/packages/studio/src/components/RenderModal/WebRenderModalAudio.tsx b/packages/studio/src/components/RenderModal/WebRenderModalAudio.tsx
index ed1e345c1ac..094b559c8b9 100644
--- a/packages/studio/src/components/RenderModal/WebRenderModalAudio.tsx
+++ b/packages/studio/src/components/RenderModal/WebRenderModalAudio.tsx
@@ -6,14 +6,14 @@ import type {
import {getSupportedAudioCodecsForContainer} from '@remotion/web-renderer';
import React, {useMemo} from 'react';
import {Checkmark} from '../../icons/Checkmark';
+import {Spacing} from '../layout';
import {VERTICAL_SCROLLBAR_CLASSNAME} from '../Menu/is-menu-item';
import type {ComboboxValue} from '../NewComposition/ComboBox';
import {Combobox} from '../NewComposition/ComboBox';
-import {Spacing} from '../layout';
-import {MutedSetting} from './MutedSetting';
-import {RenderModalHr} from './RenderModalHr';
import {label, optionRow, rightRow} from './layout';
+import {MutedSetting} from './MutedSetting';
import {getQualityOptions} from './quality-options';
+import {RenderModalHr} from './RenderModalHr';
const container: React.CSSProperties = {
flex: 1,
diff --git a/packages/studio/src/components/RenderModal/WebRenderModalLicense.tsx b/packages/studio/src/components/RenderModal/WebRenderModalLicense.tsx
index 2820aff2b26..7187165a915 100644
--- a/packages/studio/src/components/RenderModal/WebRenderModalLicense.tsx
+++ b/packages/studio/src/components/RenderModal/WebRenderModalLicense.tsx
@@ -6,9 +6,9 @@ import {
LIGHT_TEXT,
} from '../../helpers/colors';
import {Checkbox} from '../Checkbox';
+import {Spacing} from '../layout';
import {RemotionInput} from '../NewComposition/RemInput';
import {ValidationMessage} from '../NewComposition/ValidationMessage';
-import {Spacing} from '../layout';
import type {LicenseKeyDetails} from './WebRenderModalLicenseKeyDetails';
import {
WebRenderModalLicenseKeyDetails,
diff --git a/packages/studio/src/components/RenderQueue/RenderQueueDownloadItem.tsx b/packages/studio/src/components/RenderQueue/RenderQueueDownloadItem.tsx
index acfa0619beb..5c304cc312e 100644
--- a/packages/studio/src/components/RenderQueue/RenderQueueDownloadItem.tsx
+++ b/packages/studio/src/components/RenderQueue/RenderQueueDownloadItem.tsx
@@ -2,8 +2,8 @@ import React, {useCallback, useMemo} from 'react';
import type {RenderInlineAction} from '../InlineAction';
import {InlineAction} from '../InlineAction';
import {showNotification} from '../Notifications/NotificationCenter';
-import {downloadBlob} from './ClientRenderQueueProcessor';
import type {ClientRenderJob} from './client-side-render-types';
+import {downloadBlob} from './ClientRenderQueueProcessor';
export const RenderQueueDownloadItem: React.FC<{
readonly job: ClientRenderJob;
diff --git a/packages/studio/src/components/RenderQueue/index.tsx b/packages/studio/src/components/RenderQueue/index.tsx
index ef0f927e836..9909e083f96 100644
--- a/packages/studio/src/components/RenderQueue/index.tsx
+++ b/packages/studio/src/components/RenderQueue/index.tsx
@@ -3,10 +3,10 @@ import {Internals} from 'remotion';
import {StudioServerConnectionCtx} from '../../helpers/client-id';
import {BACKGROUND, BORDER_COLOR, LIGHT_TEXT} from '../../helpers/colors';
import {SHOW_BROWSER_RENDERING} from '../../helpers/show-browser-rendering';
-import {VERTICAL_SCROLLBAR_CLASSNAME} from '../Menu/is-menu-item';
import {Spacing} from '../layout';
-import {RenderQueueItem} from './RenderQueueItem';
+import {VERTICAL_SCROLLBAR_CLASSNAME} from '../Menu/is-menu-item';
import {RenderQueueContext} from './context';
+import {RenderQueueItem} from './RenderQueueItem';
const separatorStyle: React.CSSProperties = {
borderBottom: `1px solid ${BORDER_COLOR}`,
diff --git a/packages/studio/src/components/RendersTab.tsx b/packages/studio/src/components/RendersTab.tsx
index 06bd93007a2..47affa16bac 100644
--- a/packages/studio/src/components/RendersTab.tsx
+++ b/packages/studio/src/components/RendersTab.tsx
@@ -2,9 +2,9 @@ import type {MouseEventHandler} from 'react';
import React, {useContext, useMemo} from 'react';
import {Internals} from 'remotion';
import {FAIL_COLOR, LIGHT_TEXT} from '../helpers/colors';
+import {Flex} from './layout';
import {RenderQueueContext} from './RenderQueue/context';
import {Tab} from './Tabs';
-import {Flex} from './layout';
const row: React.CSSProperties = {
display: 'flex',
diff --git a/packages/studio/src/components/RunningCalculateMetadata.tsx b/packages/studio/src/components/RunningCalculateMetadata.tsx
index bb49ac0d7ae..0e74f11047d 100644
--- a/packages/studio/src/components/RunningCalculateMetadata.tsx
+++ b/packages/studio/src/components/RunningCalculateMetadata.tsx
@@ -1,7 +1,7 @@
import {BACKGROUND, LIGHT_TEXT} from '../helpers/colors';
+import {Spacing} from './layout';
import {inlineCodeSnippet} from './Menu/styles';
import {Spinner} from './Spinner';
-import {Spacing} from './layout';
export const loaderLabel: React.CSSProperties = {
fontSize: 14,
diff --git a/packages/studio/src/components/Tabs/index.tsx b/packages/studio/src/components/Tabs/index.tsx
index f8beec0003a..2ffe512a7c4 100644
--- a/packages/studio/src/components/Tabs/index.tsx
+++ b/packages/studio/src/components/Tabs/index.tsx
@@ -6,7 +6,6 @@ import {
INPUT_BACKGROUND,
LIGHT_TEXT,
} from '../../helpers/colors';
-
import {useZIndex} from '../../state/z-index';
const tabsContainer: React.CSSProperties = {
diff --git a/packages/studio/src/components/TimeValue.tsx b/packages/studio/src/components/TimeValue.tsx
index 2e09cb7cb9b..837624c412e 100644
--- a/packages/studio/src/components/TimeValue.tsx
+++ b/packages/studio/src/components/TimeValue.tsx
@@ -10,8 +10,8 @@ import {LIGHT_TEXT} from '../helpers/colors';
import {useIsStill} from '../helpers/is-current-selected-still';
import {useKeybinding} from '../helpers/use-keybinding';
import {renderFrame} from '../state/render-frame';
-import {InputDragger} from './NewComposition/InputDragger';
import {Flex, Spacing} from './layout';
+import {InputDragger} from './NewComposition/InputDragger';
const text: React.CSSProperties = {
color: 'white',
diff --git a/packages/studio/src/components/Timeline/Timeline.tsx b/packages/studio/src/components/Timeline/Timeline.tsx
index f8c44970783..0ce708b180e 100644
--- a/packages/studio/src/components/Timeline/Timeline.tsx
+++ b/packages/studio/src/components/Timeline/Timeline.tsx
@@ -11,10 +11,12 @@ import {VERTICAL_SCROLLBAR_CLASSNAME} from '../Menu/is-menu-item';
import {SplitterContainer} from '../Splitter/SplitterContainer';
import {SplitterElement} from '../Splitter/SplitterElement';
import {SplitterHandle} from '../Splitter/SplitterHandle';
+import {isTrackHidden} from './is-collapsed';
import {
MAX_TIMELINE_TRACKS,
MAX_TIMELINE_TRACKS_NOTICE_HEIGHT,
} from './MaxTimelineTracks';
+import {timelineVerticalScroll} from './timeline-refs';
import {TimelineDragHandler} from './TimelineDragHandler';
import {TimelineInOutPointer} from './TimelineInOutPointer';
import {TimelineList} from './TimelineList';
@@ -28,8 +30,6 @@ import {
} from './TimelineTimeIndicators';
import {TimelineTracks} from './TimelineTracks';
import {TimelineWidthProvider} from './TimelineWidthProvider';
-import {isTrackHidden} from './is-collapsed';
-import {timelineVerticalScroll} from './timeline-refs';
const container: React.CSSProperties = {
minHeight: '100%',
diff --git a/packages/studio/src/components/Timeline/TimelineDragHandler.tsx b/packages/studio/src/components/Timeline/TimelineDragHandler.tsx
index 82ea7dcb2f4..000b46cb121 100644
--- a/packages/studio/src/components/Timeline/TimelineDragHandler.tsx
+++ b/packages/studio/src/components/Timeline/TimelineDragHandler.tsx
@@ -20,14 +20,6 @@ import {ContextMenu} from '../ContextMenu';
import {VERTICAL_SCROLLBAR_CLASSNAME} from '../Menu/is-menu-item';
import type {ComboboxValue} from '../NewComposition/ComboBox';
import {defaultInOutValue} from '../TimelineInOutToggle';
-import {inMarkerAreaRef, outMarkerAreaRef} from './TimelineInOutPointer';
-import {
- TimelineInOutPointerHandle,
- inPointerHandle,
- outPointerHandle,
-} from './TimelineInOutPointerHandle';
-import {redrawTimelineSliderFast} from './TimelineSlider';
-import {TimelineWidthContext} from './TimelineWidthProvider';
import {scrollableRef, sliderAreaRef} from './timeline-refs';
import {
canScrollTimelineIntoDirection,
@@ -38,6 +30,14 @@ import {
getScrollPositionForCursorOnRightEdge,
scrollToTimelineXOffset,
} from './timeline-scroll-logic';
+import {inMarkerAreaRef, outMarkerAreaRef} from './TimelineInOutPointer';
+import {
+ TimelineInOutPointerHandle,
+ inPointerHandle,
+ outPointerHandle,
+} from './TimelineInOutPointerHandle';
+import {redrawTimelineSliderFast} from './TimelineSlider';
+import {TimelineWidthContext} from './TimelineWidthProvider';
const inner: React.CSSProperties = {
overflowY: 'auto',
diff --git a/packages/studio/src/components/Timeline/TimelineExpandedSection.tsx b/packages/studio/src/components/Timeline/TimelineExpandedSection.tsx
new file mode 100644
index 00000000000..7f829a1d292
--- /dev/null
+++ b/packages/studio/src/components/Timeline/TimelineExpandedSection.tsx
@@ -0,0 +1,122 @@
+import React, {useCallback, useEffect, useMemo, useState} from 'react';
+import type {TSequence} from 'remotion';
+import type {OriginalPosition} from '../../error-overlay/react-overlay/utils/get-source-map';
+import {TIMELINE_TRACK_SEPARATOR} from '../../helpers/colors';
+import {
+ getExpandedTrackHeight,
+ getSchemaFields,
+} from '../../helpers/timeline-layout';
+import {callApi} from '../call-api';
+import {TimelineFieldValue} from './TimelineSchemaField';
+
+const expandedSectionBase: React.CSSProperties = {
+ color: 'white',
+ fontFamily: 'Arial, Helvetica, sans-serif',
+ fontSize: 12,
+ display: 'flex',
+ flexDirection: 'column',
+ paddingLeft: 28,
+ paddingRight: 10,
+ borderBottom: `1px solid ${TIMELINE_TRACK_SEPARATOR}`,
+};
+
+const fieldRow: React.CSSProperties = {
+ display: 'flex',
+ alignItems: 'center',
+ gap: 8,
+};
+
+const fieldName: React.CSSProperties = {
+ flex: 1,
+ fontSize: 12,
+};
+
+export const TimelineExpandedSection: React.FC<{
+ readonly sequence: TSequence;
+ readonly originalLocation: OriginalPosition | null;
+}> = ({sequence, originalLocation}) => {
+ const [canUpdate, setCanUpdate] = useState(null);
+
+ const validatedLocation = useMemo(() => {
+ if (
+ !originalLocation ||
+ !originalLocation.source ||
+ !originalLocation.line
+ ) {
+ return null;
+ }
+
+ return {
+ source: originalLocation.source,
+ line: originalLocation.line,
+ column: originalLocation.column ?? 0,
+ };
+ }, [originalLocation]);
+
+ useEffect(() => {
+ if (!sequence.controls || !validatedLocation) {
+ setCanUpdate(false);
+ return;
+ }
+
+ callApi('/api/can-update-sequence-props', {
+ fileName: validatedLocation.source,
+ line: validatedLocation.line,
+ column: validatedLocation.column,
+ })
+ .then((result) => {
+ setCanUpdate(result.canUpdate);
+ })
+ .catch(() => {
+ setCanUpdate(false);
+ });
+ }, [sequence.controls, validatedLocation]);
+
+ const schemaFields = useMemo(
+ () => getSchemaFields(sequence.controls),
+ [sequence.controls],
+ );
+
+ const expandedHeight = useMemo(
+ () => getExpandedTrackHeight(sequence.controls),
+ [sequence.controls],
+ );
+
+ const onSave = useCallback(
+ (key: string, value: unknown) => {
+ if (!canUpdate || !validatedLocation) {
+ return;
+ }
+
+ callApi('/api/save-sequence-props', {
+ fileName: validatedLocation.source,
+ line: validatedLocation.line,
+ column: validatedLocation.column,
+ key,
+ value: JSON.stringify(value),
+ enumPaths: [],
+ }).catch((err) => {
+ // eslint-disable-next-line no-console
+ console.error('Failed to save sequence prop:', err);
+ });
+ },
+ [canUpdate, validatedLocation],
+ );
+
+ return (
+
+ {schemaFields
+ ? schemaFields.map((field) => (
+
+ {field.key}
+
+
+ ))
+ : 'No schema'}
+
+ );
+};
diff --git a/packages/studio/src/components/Timeline/TimelineListItem.tsx b/packages/studio/src/components/Timeline/TimelineListItem.tsx
index 05ccd2dc093..042dbbd0a34 100644
--- a/packages/studio/src/components/Timeline/TimelineListItem.tsx
+++ b/packages/studio/src/components/Timeline/TimelineListItem.tsx
@@ -1,23 +1,23 @@
-import React, {useCallback, useContext, useMemo} from 'react';
+import React, {
+ useCallback,
+ useContext,
+ useEffect,
+ useMemo,
+ useState,
+} from 'react';
import type {TSequence} from 'remotion';
import {Internals} from 'remotion';
+import type {OriginalPosition} from '../../error-overlay/react-overlay/utils/get-source-map';
import {TIMELINE_TRACK_SEPARATOR} from '../../helpers/colors';
-import type {SchemaFieldInfo} from '../../helpers/timeline-layout';
import {
- getExpandedTrackHeight,
- getSchemaFields,
getTimelineLayerHeight,
TIMELINE_ITEM_BORDER_BOTTOM,
} from '../../helpers/timeline-layout';
import {ExpandedTracksContext} from '../ExpandedTracksProvider';
-import {InputDragger} from '../NewComposition/InputDragger';
-import {
- getZodNumberMaximum,
- getZodNumberMinimum,
- getZodNumberStep,
-} from '../RenderModal/SchemaEditor/zod-number-constraints';
+import {TimelineExpandedSection} from './TimelineExpandedSection';
import {TimelineLayerEye} from './TimelineLayerEye';
import {TimelineStack} from './TimelineStack';
+import {getOriginalLocationFromStack} from './TimelineStack/get-stack';
const SPACING = 5;
@@ -45,85 +45,6 @@ const arrowButton: React.CSSProperties = {
lineHeight: 1,
};
-const expandedSectionBase: React.CSSProperties = {
- color: 'white',
- fontFamily: 'Arial, Helvetica, sans-serif',
- fontSize: 12,
- display: 'flex',
- flexDirection: 'column',
- paddingLeft: 28,
- paddingRight: 10,
- borderBottom: `1px solid ${TIMELINE_TRACK_SEPARATOR}`,
-};
-
-const fieldRow: React.CSSProperties = {
- display: 'flex',
- alignItems: 'center',
- gap: 8,
-};
-
-const fieldName: React.CSSProperties = {
- flex: 1,
- fontSize: 12,
-};
-
-const unsupportedLabel: React.CSSProperties = {
- color: 'rgba(255, 255, 255, 0.4)',
- fontSize: 12,
- marginLeft: 'auto',
- fontStyle: 'italic',
-};
-
-const draggerStyle: React.CSSProperties = {
- width: 80,
- marginLeft: 'auto',
-};
-
-const TimelineNumberField: React.FC<{
- readonly field: SchemaFieldInfo;
-}> = ({field}) => {
- const onValueChange = useCallback((_newVal: number) => {
- // TODO: wire up value change
- }, []);
-
- const onTextChange = useCallback((_newVal: string) => {
- // TODO: wire up text change
- }, []);
-
- return (
-
- );
-};
-
-const TimelineFieldValue: React.FC<{
- readonly field: SchemaFieldInfo;
-}> = ({field}) => {
- if (!field.supported) {
- return unsupported ;
- }
-
- if (field.typeName === 'number') {
- return ;
- }
-
- return (
-
- {String(field.currentValue)}
-
- );
-};
-
export const TimelineListItem: React.FC<{
readonly sequence: TSequence;
readonly nestedDepth: number;
@@ -137,17 +58,25 @@ export const TimelineListItem: React.FC<{
);
const {expandedTracks, toggleTrack} = useContext(ExpandedTracksContext);
- const isExpanded = expandedTracks[sequence.id] ?? false;
-
- const schemaFields = useMemo(
- () => getSchemaFields(sequence.controls),
- [sequence.controls],
- );
+ const [originalLocation, setOriginalLocation] =
+ useState(null);
+
+ useEffect(() => {
+ if (!sequence.stack) {
+ return;
+ }
+
+ getOriginalLocationFromStack(sequence.stack, 'sequence')
+ .then((frame) => {
+ setOriginalLocation(frame);
+ })
+ .catch((err) => {
+ // eslint-disable-next-line no-console
+ console.error('Could not get original location of Sequence', err);
+ });
+ }, [sequence.stack]);
- const expandedHeight = useMemo(
- () => getExpandedTrackHeight(sequence.controls),
- [sequence.controls],
- );
+ const isExpanded = expandedTracks[sequence.id] ?? false;
const onToggleExpand = useCallback(() => {
toggleTrack(sequence.id);
@@ -228,22 +157,17 @@ export const TimelineListItem: React.FC<{
) : null}
-
+
{visualModeEnabled && isExpanded ? (
-
- {schemaFields
- ? schemaFields.map((field) => (
-
- {field.key}
-
-
- ))
- : 'No schema'}
-
+
) : null}
>
);
diff --git a/packages/studio/src/components/Timeline/TimelineSchemaField.tsx b/packages/studio/src/components/Timeline/TimelineSchemaField.tsx
new file mode 100644
index 00000000000..24af4dee52c
--- /dev/null
+++ b/packages/studio/src/components/Timeline/TimelineSchemaField.tsx
@@ -0,0 +1,108 @@
+import React, {useCallback} from 'react';
+import type {SchemaFieldInfo} from '../../helpers/timeline-layout';
+import {InputDragger} from '../NewComposition/InputDragger';
+import {
+ getZodNumberMaximum,
+ getZodNumberMinimum,
+ getZodNumberStep,
+} from '../RenderModal/SchemaEditor/zod-number-constraints';
+
+const unsupportedLabel: React.CSSProperties = {
+ color: 'rgba(255, 255, 255, 0.4)',
+ fontSize: 12,
+ marginLeft: 'auto',
+ fontStyle: 'italic',
+};
+
+const draggerStyle: React.CSSProperties = {
+ width: 80,
+ marginLeft: 'auto',
+};
+
+const notEditableBackground: React.CSSProperties = {
+ backgroundColor: 'rgba(255, 0, 0, 0.2)',
+ borderRadius: 3,
+ padding: '0 4px',
+};
+
+const TimelineNumberField: React.FC<{
+ readonly field: SchemaFieldInfo;
+ readonly canUpdate: boolean | null;
+ readonly onSave: (key: string, value: unknown) => void;
+}> = ({field, canUpdate, onSave}) => {
+ const onValueChange = useCallback((_newVal: number) => {
+ // No-op during drag; save happens on drag end
+ }, []);
+
+ const onValueChangeEnd = useCallback(
+ (newVal: number) => {
+ if (canUpdate) {
+ onSave(field.key, newVal);
+ }
+ },
+ [canUpdate, onSave, field.key],
+ );
+
+ const onTextChange = useCallback(
+ (newVal: string) => {
+ if (canUpdate) {
+ const parsed = Number(newVal);
+ if (!Number.isNaN(parsed)) {
+ onSave(field.key, parsed);
+ }
+ }
+ },
+ [canUpdate, onSave, field.key],
+ );
+
+ return (
+
+ );
+};
+
+export const TimelineFieldValue: React.FC<{
+ readonly field: SchemaFieldInfo;
+ readonly canUpdate: boolean | null;
+ readonly onSave: (key: string, value: unknown) => void;
+}> = ({field, canUpdate, onSave}) => {
+ const wrapperStyle: React.CSSProperties | undefined =
+ canUpdate === null || canUpdate === false
+ ? notEditableBackground
+ : undefined;
+
+ if (!field.supported) {
+ return (
+ unsupported
+ );
+ }
+
+ if (field.typeName === 'number') {
+ return (
+
+
+
+ );
+ }
+
+ return (
+
+ {String(field.currentValue)}
+
+ );
+};
diff --git a/packages/studio/src/components/Timeline/TimelineSlider.tsx b/packages/studio/src/components/Timeline/TimelineSlider.tsx
index 439749cba88..f86517c8aa6 100644
--- a/packages/studio/src/components/Timeline/TimelineSlider.tsx
+++ b/packages/studio/src/components/Timeline/TimelineSlider.tsx
@@ -8,10 +8,10 @@ import React, {
} from 'react';
import {Internals, useVideoConfig} from 'remotion';
import {getXPositionOfItemInTimelineImperatively} from '../../helpers/get-left-of-timeline-slider';
-import {TimelineSliderHandle} from './TimelineSliderHandle';
-import {TimelineWidthContext} from './TimelineWidthProvider';
import {getCurrentDuration} from './imperative-state';
import {sliderAreaRef, timelineVerticalScroll} from './timeline-refs';
+import {TimelineSliderHandle} from './TimelineSliderHandle';
+import {TimelineWidthContext} from './TimelineWidthProvider';
const container: React.CSSProperties = {
position: 'absolute',
diff --git a/packages/studio/src/components/Timeline/TimelineStack/index.tsx b/packages/studio/src/components/Timeline/TimelineStack/index.tsx
index 0a9966855f9..8f334fc7fea 100644
--- a/packages/studio/src/components/Timeline/TimelineStack/index.tsx
+++ b/packages/studio/src/components/Timeline/TimelineStack/index.tsx
@@ -1,12 +1,6 @@
import type {GitSource} from '@remotion/studio-shared';
import {SOURCE_MAP_ENDPOINT} from '@remotion/studio-shared';
-import React, {
- useCallback,
- useContext,
- useEffect,
- useMemo,
- useState,
-} from 'react';
+import React, {useCallback, useContext, useMemo, useState} from 'react';
import type {TSequence} from 'remotion';
import {SourceMapConsumer} from 'source-map';
import type {OriginalPosition} from '../../../error-overlay/react-overlay/utils/get-source-map';
@@ -20,10 +14,9 @@ import {getGitRefUrl} from '../../../helpers/get-git-menu-item';
import {openOriginalPositionInEditor} from '../../../helpers/open-in-editor';
import {pushUrl} from '../../../helpers/url-state';
import {useSelectAsset} from '../../InitialCompositionLoader';
+import {Spacing} from '../../layout';
import {showNotification} from '../../Notifications/NotificationCenter';
import {Spinner} from '../../Spinner';
-import {Spacing} from '../../layout';
-import {getOriginalLocationFromStack} from './get-stack';
import {getOriginalSourceAttribution} from './source-attribution';
const publicPath =
@@ -41,10 +34,8 @@ SourceMapConsumer.initialize({
export const TimelineStack: React.FC<{
readonly isCompact: boolean;
readonly sequence: TSequence;
-}> = ({isCompact, sequence}) => {
- const [originalLocation, setOriginalLocation] =
- useState(null);
-
+ readonly originalLocation: OriginalPosition | null;
+}> = ({isCompact, sequence, originalLocation}) => {
const [stackHovered, setStackHovered] = useState(false);
const [titleHovered, setTitleHovered] = useState(false);
const [opening, setOpening] = useState(false);
@@ -157,21 +148,6 @@ export const TimelineStack: React.FC<{
}
}, [canOpenInEditor, canOpenInGitHub, openEditor, originalLocation]);
- useEffect(() => {
- if (!sequence.stack) {
- return;
- }
-
- getOriginalLocationFromStack(sequence.stack, 'sequence')
- .then((frame) => {
- setOriginalLocation(frame);
- })
- .catch((err) => {
- // eslint-disable-next-line no-console
- console.error('Could not get original location of Sequence', err);
- });
- }, [sequence.stack]);
-
const onStackPointerEnter = useCallback(() => {
setStackHovered(true);
}, []);
diff --git a/packages/studio/src/components/Timeline/TimelineTimeIndicators.tsx b/packages/studio/src/components/Timeline/TimelineTimeIndicators.tsx
index d061b5b206d..164ee38b71c 100644
--- a/packages/studio/src/components/Timeline/TimelineTimeIndicators.tsx
+++ b/packages/studio/src/components/Timeline/TimelineTimeIndicators.tsx
@@ -13,9 +13,9 @@ import {
import {renderFrame} from '../../state/render-frame';
import {SPLITTER_HANDLE_SIZE} from '../Splitter/SplitterHandle';
import {TimeValue} from '../TimeValue';
-import {TimelineWidthContext} from './TimelineWidthProvider';
import {timelineVerticalScroll} from './timeline-refs';
import {getFrameIncrementFromWidth} from './timeline-scroll-logic';
+import {TimelineWidthContext} from './TimelineWidthProvider';
export const TIMELINE_TIME_INDICATOR_HEIGHT = 39;
diff --git a/packages/studio/src/components/Timeline/TimelineTracks.tsx b/packages/studio/src/components/Timeline/TimelineTracks.tsx
index 2bc78f4dbee..e1258e68a7b 100644
--- a/packages/studio/src/components/Timeline/TimelineTracks.tsx
+++ b/packages/studio/src/components/Timeline/TimelineTracks.tsx
@@ -8,10 +8,10 @@ import {
TIMELINE_PADDING,
} from '../../helpers/timeline-layout';
import {ExpandedTracksContext} from '../ExpandedTracksProvider';
+import {isTrackHidden} from './is-collapsed';
import {MaxTimelineTracksReached} from './MaxTimelineTracks';
import {TimelineSequence} from './TimelineSequence';
import {TimelineTimePadding} from './TimelineTimeIndicators';
-import {isTrackHidden} from './is-collapsed';
const content: React.CSSProperties = {
paddingLeft: TIMELINE_PADDING,
diff --git a/packages/studio/src/components/Timeline/timeline-scroll-logic.ts b/packages/studio/src/components/Timeline/timeline-scroll-logic.ts
index d4a4e8c29b8..9e3be8ea79d 100644
--- a/packages/studio/src/components/Timeline/timeline-scroll-logic.ts
+++ b/packages/studio/src/components/Timeline/timeline-scroll-logic.ts
@@ -1,7 +1,7 @@
import {interpolate} from 'remotion';
import {TIMELINE_PADDING} from '../../helpers/timeline-layout';
-import {redrawTimelineSliderFast} from './TimelineSlider';
import {scrollableRef} from './timeline-refs';
+import {redrawTimelineSliderFast} from './TimelineSlider';
export const canScrollTimelineIntoDirection = () => {
const current = scrollableRef.current as HTMLDivElement;
diff --git a/packages/studio/src/components/UpdateModal/UpdateModal.tsx b/packages/studio/src/components/UpdateModal/UpdateModal.tsx
index 9794063232b..e47c1eeaaa5 100644
--- a/packages/studio/src/components/UpdateModal/UpdateModal.tsx
+++ b/packages/studio/src/components/UpdateModal/UpdateModal.tsx
@@ -3,11 +3,11 @@ import {BLUE, SELECTED_BACKGROUND} from '../../helpers/colors';
import {copyText} from '../../helpers/copy-text';
import {CopyButton} from '../CopyButton';
import {KnownBugs} from '../KnownBugs';
+import {Flex, Row, Spacing} from '../layout';
import {ModalHeader} from '../ModalHeader';
import {DismissableModal} from '../NewComposition/DismissableModal';
import {showNotification} from '../Notifications/NotificationCenter';
import type {Bug, UpdateInfo} from '../UpdateCheck';
-import {Flex, Row, Spacing} from '../layout';
const container: React.CSSProperties = {
padding: 20,
diff --git a/packages/studio/src/components/VisualControls/VisualControlHandle.tsx b/packages/studio/src/components/VisualControls/VisualControlHandle.tsx
index 8002cbf6506..2015686d080 100644
--- a/packages/studio/src/components/VisualControls/VisualControlHandle.tsx
+++ b/packages/studio/src/components/VisualControls/VisualControlHandle.tsx
@@ -1,22 +1,22 @@
import React, {useCallback, useContext, useEffect, useState} from 'react';
import {NoReactInternals} from 'remotion/no-react';
import {FastRefreshContext} from '../../fast-refresh-context';
+import {getVisualControlEditedValue} from '../../visual-controls/get-current-edited-value';
import {
SetVisualControlsContext,
VisualControlsContext,
type VisualControlValue,
} from '../../visual-controls/VisualControls';
-import {getVisualControlEditedValue} from '../../visual-controls/get-current-edited-value';
+import {useZodIfPossible, useZodTypesIfPossible} from '../get-zod-if-possible';
+import {Spacing} from '../layout';
import {showNotification} from '../Notifications/NotificationCenter';
-import type {UpdaterFunction} from '../RenderModal/SchemaEditor/ZodSwitch';
-import {ZodSwitch} from '../RenderModal/SchemaEditor/ZodSwitch';
import {extractEnumJsonPaths} from '../RenderModal/SchemaEditor/extract-enum-json-paths';
import {useLocalState} from '../RenderModal/SchemaEditor/local-state';
+import type {UpdaterFunction} from '../RenderModal/SchemaEditor/ZodSwitch';
+import {ZodSwitch} from '../RenderModal/SchemaEditor/ZodSwitch';
import {applyVisualControlChange} from '../RenderQueue/actions';
-import {useZodIfPossible, useZodTypesIfPossible} from '../get-zod-if-possible';
-import {Spacing} from '../layout';
-import {VisualControlHandleHeader} from './VisualControlHandleHeader';
import {useOriginalFileName} from './get-original-stack-trace';
+import {VisualControlHandleHeader} from './VisualControlHandleHeader';
export const VisualControlHandle: React.FC<{
readonly value: VisualControlValue;
diff --git a/packages/studio/src/error-overlay/react-overlay/listen-to-runtime-errors.ts b/packages/studio/src/error-overlay/react-overlay/listen-to-runtime-errors.ts
index b6f1df2d8f0..de88f076961 100644
--- a/packages/studio/src/error-overlay/react-overlay/listen-to-runtime-errors.ts
+++ b/packages/studio/src/error-overlay/react-overlay/listen-to-runtime-errors.ts
@@ -1,3 +1,11 @@
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type {SymbolicatedStackFrame} from '@remotion/studio-shared';
+import {reloadUrl} from '../../helpers/url-state';
import {setErrorsRef} from '../remotion-overlay/Overlay';
import {massageWarning} from './effects/format-warning';
import {
@@ -9,14 +17,6 @@ import {
register as registerStackTraceLimit,
unregister as unregisterStackTraceLimit,
} from './effects/stack-trace-limit';
-/**
- * Copyright (c) 2015-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-import type {SymbolicatedStackFrame} from '@remotion/studio-shared';
-import {reloadUrl} from '../../helpers/url-state';
import {
register as registerError,
unregister as unregisterError,
diff --git a/packages/studio/src/error-overlay/remotion-overlay/CompositionIdsDropdown.tsx b/packages/studio/src/error-overlay/remotion-overlay/CompositionIdsDropdown.tsx
index 08af0903aeb..d78fa30b5f4 100644
--- a/packages/studio/src/error-overlay/remotion-overlay/CompositionIdsDropdown.tsx
+++ b/packages/studio/src/error-overlay/remotion-overlay/CompositionIdsDropdown.tsx
@@ -5,8 +5,8 @@ import {
INPUT_BORDER_COLOR_UNHOVERED,
TEXT_COLOR,
} from '../../helpers/colors';
-import {CompositionIdListItem} from './CompositionIdListItem';
import {CaretDown} from './carets';
+import {CompositionIdListItem} from './CompositionIdListItem';
const containerStyle: React.CSSProperties = {
display: 'inline-block',
diff --git a/packages/studio/src/error-overlay/remotion-overlay/ErrorDisplay.tsx b/packages/studio/src/error-overlay/remotion-overlay/ErrorDisplay.tsx
index d6ae66c7d97..9bb5f379593 100644
--- a/packages/studio/src/error-overlay/remotion-overlay/ErrorDisplay.tsx
+++ b/packages/studio/src/error-overlay/remotion-overlay/ErrorDisplay.tsx
@@ -1,19 +1,19 @@
import {getLocationFromBuildError} from '@remotion/studio-shared';
import React, {useMemo} from 'react';
-import {HORIZONTAL_SCROLLBAR_CLASSNAME} from '../../components/Menu/is-menu-item';
import {Spacing} from '../../components/layout';
+import {HORIZONTAL_SCROLLBAR_CLASSNAME} from '../../components/Menu/is-menu-item';
import {getRoute} from '../../helpers/url-state';
import type {ErrorRecord} from '../react-overlay/listen-to-runtime-errors';
import {AskOnDiscord} from './AskOnDiscord';
import {CalculateMetadataErrorExplainer} from './CalculateMetadataErrorExplainer';
import {CompositionIdsDropdown} from './CompositionIdsDropdown';
import {ErrorTitle} from './ErrorTitle';
+import {getHelpLink} from './get-help-link';
import {HelpLink} from './HelpLink';
import {OpenInEditor} from './OpenInEditor';
import {RetryButton} from './Retry';
import {SearchGithubIssues} from './SearchGitHubIssues';
import {StackElement} from './StackFrame';
-import {getHelpLink} from './get-help-link';
const stack: React.CSSProperties = {
marginTop: 17,
diff --git a/packages/studio/src/error-overlay/remotion-overlay/HelpLink.tsx b/packages/studio/src/error-overlay/remotion-overlay/HelpLink.tsx
index 0b835196fc0..7f40d045a45 100644
--- a/packages/studio/src/error-overlay/remotion-overlay/HelpLink.tsx
+++ b/packages/studio/src/error-overlay/remotion-overlay/HelpLink.tsx
@@ -2,8 +2,8 @@ import React, {useCallback, useEffect} from 'react';
import {Button} from '../../components/Button';
import {BLUE} from '../../helpers/colors';
import {useKeybinding} from '../../helpers/use-keybinding';
-import {ShortcutHint} from './ShortcutHint';
import type {THelpLink} from './get-help-link';
+import {ShortcutHint} from './ShortcutHint';
const buttonStyle: React.CSSProperties = {
backgroundColor: BLUE,
diff --git a/packages/studio/src/error-overlay/remotion-overlay/StackFrame.tsx b/packages/studio/src/error-overlay/remotion-overlay/StackFrame.tsx
index f004061f92e..293673e26eb 100644
--- a/packages/studio/src/error-overlay/remotion-overlay/StackFrame.tsx
+++ b/packages/studio/src/error-overlay/remotion-overlay/StackFrame.tsx
@@ -1,8 +1,8 @@
import type {SymbolicatedStackFrame} from '@remotion/studio-shared';
import React, {useCallback, useState} from 'react';
import {Button} from '../../components/Button';
-import {CodeFrame} from './CodeFrame';
import {CaretDown, CaretRight} from './carets';
+import {CodeFrame} from './CodeFrame';
import {formatLocation} from './format-location';
const location: React.CSSProperties = {
diff --git a/packages/studio/src/helpers/use-menu-structure.tsx b/packages/studio/src/helpers/use-menu-structure.tsx
index 69f39a30e50..540f879be8b 100644
--- a/packages/studio/src/helpers/use-menu-structure.tsx
+++ b/packages/studio/src/helpers/use-menu-structure.tsx
@@ -3,6 +3,7 @@ import {Internals} from 'remotion';
import {NoReactInternals} from 'remotion/no-react';
import {restartStudio} from '../api/restart-studio';
import {askAiModalRef} from '../components/AskAiModal';
+import {Row} from '../components/layout';
import type {Menu} from '../components/Menu/MenuItem';
import type {
ComboboxValue,
@@ -12,7 +13,6 @@ import {showNotification} from '../components/Notifications/NotificationCenter';
import type {TQuickSwitcherResult} from '../components/QuickSwitcher/QuickSwitcherResult';
import {getPreviewSizeLabel, getUniqueSizes} from '../components/SizeSelector';
import {inOutHandles} from '../components/TimelineInOutToggle';
-import {Row} from '../components/layout';
import {cmdOrCtrlCharacter} from '../error-overlay/remotion-overlay/ShortcutHint';
import {Checkmark} from '../icons/Checkmark';
import {drawRef} from '../state/canvas-ref';
diff --git a/packages/studio/src/previewEntry.tsx b/packages/studio/src/previewEntry.tsx
index 6f07f01eed5..db7c5f8cc8f 100644
--- a/packages/studio/src/previewEntry.tsx
+++ b/packages/studio/src/previewEntry.tsx
@@ -1,12 +1,11 @@
import React from 'react';
-
import ReactDOM from 'react-dom/client';
import {Internals} from 'remotion';
import {NoReactInternals} from 'remotion/no-react';
-import {Studio} from './Studio';
import {NoRegisterRoot} from './components/NoRegisterRoot';
import {startErrorOverlay} from './error-overlay/entry-basic';
import {enableHotMiddleware} from './hot-middleware-client/client';
+import {Studio} from './Studio';
Internals.CSSUtils.injectCSS(
Internals.CSSUtils.makeDefaultPreviewCSS(null, '#1f2428'),
diff --git a/packages/studio/src/test/create-zod-values.test.ts b/packages/studio/src/test/create-zod-values.test.ts
index 461c9a7f129..cd2c44a2aed 100644
--- a/packages/studio/src/test/create-zod-values.test.ts
+++ b/packages/studio/src/test/create-zod-values.test.ts
@@ -1,9 +1,9 @@
import {expect, test} from 'bun:test';
-import {createZodValues} from '../components/RenderModal/SchemaEditor/create-zod-values';
import {
getZTypesIfPossible,
getZodIfPossible,
} from '../components/get-zod-if-possible';
+import {createZodValues} from '../components/RenderModal/SchemaEditor/create-zod-values';
const getZ = async () => {
const z = await getZodIfPossible();
diff --git a/packages/studio/src/test/extract-zod-enums.test.ts b/packages/studio/src/test/extract-zod-enums.test.ts
index 78439ff1152..2a3a061f283 100644
--- a/packages/studio/src/test/extract-zod-enums.test.ts
+++ b/packages/studio/src/test/extract-zod-enums.test.ts
@@ -1,6 +1,6 @@
+import {expect, test} from 'bun:test';
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
import * as zodTypes from '@remotion/zod-types';
-import {expect, test} from 'bun:test';
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
import {zMatrix} from '@remotion/zod-types';
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
diff --git a/packages/studio/src/test/stringify-default-props.test.ts b/packages/studio/src/test/stringify-default-props.test.ts
index 1068488c175..37eb5f8e3ed 100644
--- a/packages/studio/src/test/stringify-default-props.test.ts
+++ b/packages/studio/src/test/stringify-default-props.test.ts
@@ -1,5 +1,5 @@
-import {stringifyDefaultProps} from '@remotion/studio-shared';
import {expect, test} from 'bun:test';
+import {stringifyDefaultProps} from '@remotion/studio-shared';
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
import * as zodTypes from '@remotion/zod-types';
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
diff --git a/packages/svg-3d-engine/README.md b/packages/svg-3d-engine/README.md
index 12854e8c1dd..2e4f3cf6884 100644
--- a/packages/svg-3d-engine/README.md
+++ b/packages/svg-3d-engine/README.md
@@ -1,7 +1,7 @@
# @remotion/svg-3d-engine
-
+
3D SVG extrusion effects
-
+
## Usage
-
+
This is an internal package and has no documentation.
diff --git a/packages/tailwind-v4/README.md b/packages/tailwind-v4/README.md
index 19a2d0c336f..880c5ff6fe0 100644
--- a/packages/tailwind-v4/README.md
+++ b/packages/tailwind-v4/README.md
@@ -1,18 +1,18 @@
# @remotion/tailwind-v4
-
+
Enable TailwindCSS support in Remotion (TailwindCSS v4)
-
+
[](https://npmcharts.com/compare/@remotion/tailwind-v4?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/tailwind-v4 --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/tailwind/tailwind) for more information.
diff --git a/packages/tailwind/README.md b/packages/tailwind/README.md
index 818ac03c607..c75d70ee802 100644
--- a/packages/tailwind/README.md
+++ b/packages/tailwind/README.md
@@ -1,18 +1,18 @@
# @remotion/tailwind
-
+
Enable TailwindCSS support in Remotion (TailwindCSS v3)
-
+
[](https://npmcharts.com/compare/@remotion/tailwind?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/tailwind --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/tailwind/tailwind) for more information.
diff --git a/packages/template-next-app-tailwind/src/components/Input.tsx b/packages/template-next-app-tailwind/src/components/Input.tsx
index d6dcc0434d6..af468fc2d09 100644
--- a/packages/template-next-app-tailwind/src/components/Input.tsx
+++ b/packages/template-next-app-tailwind/src/components/Input.tsx
@@ -14,6 +14,8 @@ export const Input: React.FC<{
return (
= T extends false | '' | 0 | null | undefined ? never : T;
diff --git a/packages/webcodecs/README.md b/packages/webcodecs/README.md
index e4183d19fa2..89aa781d502 100644
--- a/packages/webcodecs/README.md
+++ b/packages/webcodecs/README.md
@@ -1,23 +1,24 @@
# @remotion/webcodecs
-
+
Media conversion in the browser
-
+
[](https://npmcharts.com/compare/@remotion/webcodecs?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/webcodecs --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://remotion.dev/webcodecs) for more information.
## License
+
This package is licensed under the [Remotion License](/docs/license).
We consider a team of 4 or more people a "company".
diff --git a/packages/webcodecs/bundle.ts b/packages/webcodecs/bundle.ts
index 6284436a816..3ea199a8eb1 100644
--- a/packages/webcodecs/bundle.ts
+++ b/packages/webcodecs/bundle.ts
@@ -1,5 +1,5 @@
-import {build} from 'bun';
import path from 'path';
+import {build} from 'bun';
if (process.env.NODE_ENV !== 'production') {
throw new Error('This script must be run using NODE_ENV=production');
diff --git a/packages/webcodecs/package.json b/packages/webcodecs/package.json
index edf37f837ea..c80d4ec206d 100644
--- a/packages/webcodecs/package.json
+++ b/packages/webcodecs/package.json
@@ -12,7 +12,7 @@
"url": "https://github.com/remotion-dev/remotion/issues"
},
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"test": "bun test src/test",
"testwebcodecs": "playwright test src/it-tests",
diff --git a/packages/webcodecs/src/auto-select-writer.ts b/packages/webcodecs/src/auto-select-writer.ts
index 689163b882d..a626756b4da 100644
--- a/packages/webcodecs/src/auto-select-writer.ts
+++ b/packages/webcodecs/src/auto-select-writer.ts
@@ -1,5 +1,3 @@
-import {canUseWebFsWriter, webFsWriter} from './writers/web-fs';
-
import type {
MediaParserLogLevel,
WriterInterface,
@@ -7,6 +5,7 @@ import type {
import {withResolvers} from './create/with-resolvers';
import {Log} from './log';
import {bufferWriter} from './writers/buffer';
+import {canUseWebFsWriter, webFsWriter} from './writers/web-fs';
export const autoSelectWriter = async (
writer: WriterInterface | undefined,
diff --git a/packages/webcodecs/src/convert-media.ts b/packages/webcodecs/src/convert-media.ts
index ad8245d1c70..5557cc935e9 100644
--- a/packages/webcodecs/src/convert-media.ts
+++ b/packages/webcodecs/src/convert-media.ts
@@ -21,7 +21,6 @@ import {
MediaParserInternals,
type MediaParserOnVideoTrack,
} from '@remotion/media-parser';
-
import {webReader} from '@remotion/media-parser/web';
import {autoSelectWriter} from './auto-select-writer';
import {calculateProgress} from './calculate-progress';
diff --git a/packages/webcodecs/src/it-tests/extract-frames-accuracy.test.mts b/packages/webcodecs/src/it-tests/extract-frames-accuracy.test.mts
index 4f6ef9c20f6..205a9b1b23b 100644
--- a/packages/webcodecs/src/it-tests/extract-frames-accuracy.test.mts
+++ b/packages/webcodecs/src/it-tests/extract-frames-accuracy.test.mts
@@ -1,6 +1,6 @@
+import path from 'path';
import {expect, test} from '@playwright/test';
import {WEBCODECS_TIMESCALE} from '@remotion/media-parser';
-import path from 'path';
import type {ViteDevServer} from 'vite';
import {createServer} from 'vite';
diff --git a/packages/webcodecs/src/it-tests/extract-frames.test.mts b/packages/webcodecs/src/it-tests/extract-frames.test.mts
index 05b847ad43f..a049f27427a 100644
--- a/packages/webcodecs/src/it-tests/extract-frames.test.mts
+++ b/packages/webcodecs/src/it-tests/extract-frames.test.mts
@@ -1,5 +1,5 @@
-import {expect, test} from '@playwright/test';
import path from 'path';
+import {expect, test} from '@playwright/test';
import type {ViteDevServer} from 'vite';
import {createServer} from 'vite';
diff --git a/packages/webcodecs/src/it-tests/resample-audiodata.test.ts b/packages/webcodecs/src/it-tests/resample-audiodata.test.ts
index bdf6dcf2dec..c5a11fc5e83 100644
--- a/packages/webcodecs/src/it-tests/resample-audiodata.test.ts
+++ b/packages/webcodecs/src/it-tests/resample-audiodata.test.ts
@@ -1,6 +1,6 @@
+import {execSync} from 'node:child_process';
import type {Page} from '@playwright/test';
import {test} from '@playwright/test';
-import {execSync} from 'node:child_process';
const runTest = async (entrypoint: string, page: Page) => {
const bundled = execSync(`bun build ${entrypoint}`);
diff --git a/packages/webcodecs/src/test/avi-to-mp4.test.ts b/packages/webcodecs/src/test/avi-to-mp4.test.ts
index 4feda25c909..b47caabade8 100644
--- a/packages/webcodecs/src/test/avi-to-mp4.test.ts
+++ b/packages/webcodecs/src/test/avi-to-mp4.test.ts
@@ -1,6 +1,6 @@
+import {expect, test} from 'bun:test';
import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '@remotion/media-parser/node';
-import {expect, test} from 'bun:test';
import {convertMedia} from '../convert-media';
test('Convert AVI to MP4', async () => {
diff --git a/packages/webcodecs/src/test/create-ftyp.test.ts b/packages/webcodecs/src/test/create-ftyp.test.ts
index e2baf2c924c..3e89229bee8 100644
--- a/packages/webcodecs/src/test/create-ftyp.test.ts
+++ b/packages/webcodecs/src/test/create-ftyp.test.ts
@@ -1,5 +1,5 @@
-import {MediaParserInternals} from '@remotion/media-parser';
import {expect, test} from 'bun:test';
+import {MediaParserInternals} from '@remotion/media-parser';
import {createIsoBaseMediaFtyp} from '../create/iso-base-media/create-ftyp';
const input = new Uint8Array([
diff --git a/packages/webcodecs/src/test/create-mvhd.test.ts b/packages/webcodecs/src/test/create-mvhd.test.ts
index 3c59e0cccaa..6780472a2c8 100644
--- a/packages/webcodecs/src/test/create-mvhd.test.ts
+++ b/packages/webcodecs/src/test/create-mvhd.test.ts
@@ -1,5 +1,5 @@
-import {MediaParserInternals} from '@remotion/media-parser';
import {expect, test} from 'bun:test';
+import {MediaParserInternals} from '@remotion/media-parser';
import {createMvhd} from '../create/iso-base-media/create-mvhd';
import {IDENTITY_MATRIX} from '../create/iso-base-media/primitives';
diff --git a/packages/webcodecs/src/test/remux-serverside.test.ts b/packages/webcodecs/src/test/remux-serverside.test.ts
index 56489ca3a32..8eb9aeec9e7 100644
--- a/packages/webcodecs/src/test/remux-serverside.test.ts
+++ b/packages/webcodecs/src/test/remux-serverside.test.ts
@@ -1,8 +1,8 @@
+import {expect, test} from 'bun:test';
+import {unlinkSync} from 'node:fs';
import {exampleVideos} from '@remotion/example-videos';
import {nodeReader} from '@remotion/media-parser/node';
import {nodeWriter} from '@remotion/media-parser/node-writer';
-import {expect, test} from 'bun:test';
-import {unlinkSync} from 'node:fs';
import {convertMedia} from '../convert-media';
test.skip('should be able to remux server side', async () => {
diff --git a/packages/webcodecs/src/test/tkhd.test.ts b/packages/webcodecs/src/test/tkhd.test.ts
index cef554cc2df..6222fd6df20 100644
--- a/packages/webcodecs/src/test/tkhd.test.ts
+++ b/packages/webcodecs/src/test/tkhd.test.ts
@@ -1,5 +1,5 @@
-import {MediaParserInternals} from '@remotion/media-parser';
import {expect, test} from 'bun:test';
+import {MediaParserInternals} from '@remotion/media-parser';
import {
createTkhdForAudio,
createTkhdForVideo,
diff --git a/packages/whisper-web/README.md b/packages/whisper-web/README.md
index a9dfe0df6ca..f8a4676a860 100644
--- a/packages/whisper-web/README.md
+++ b/packages/whisper-web/README.md
@@ -1,18 +1,18 @@
# @remotion/whisper-web
-
+
Helpers for using Whisper.cpp in browser using WASM
-
+
[](https://npmcharts.com/compare/@remotion/whisper-web?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/whisper-web --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/whisper-web) for more information.
diff --git a/packages/whisper-web/build-wasm.ts b/packages/whisper-web/build-wasm.ts
index 6c124686a7a..0f50b0639da 100644
--- a/packages/whisper-web/build-wasm.ts
+++ b/packages/whisper-web/build-wasm.ts
@@ -1,9 +1,9 @@
// TODO: there's no indication of error in case worker.js is fails to dynamically import
-import {$} from 'bun';
import fs from 'fs';
import os from 'os';
import path from 'path';
+import {$} from 'bun';
const randomDir = os.tmpdir();
diff --git a/packages/whisper-web/main.d.ts b/packages/whisper-web/main.d.ts
index fda78ae1b51..e256972122c 100644
--- a/packages/whisper-web/main.d.ts
+++ b/packages/whisper-web/main.d.ts
@@ -1,37 +1,72 @@
// TypeScript bindings for emscripten-generated code. Automatically generated at compile time.
declare namespace RuntimeExports {
- let print: any;
- let printErr: any;
- /**
- * @param {string|null=} returnType
- * @param {Array=} argTypes
- * @param {Arguments|Array=} args
- * @param {Object=} opts
- */
- function ccall(ident: any, returnType?: (string | null) | undefined, argTypes?: any[] | undefined, args?: (Arguments | any[]) | undefined, opts?: any | undefined): any;
- /**
- * @param {string=} returnType
- * @param {Array=} argTypes
- * @param {Object=} opts
- */
- function cwrap(ident: any, returnType?: string | undefined, argTypes?: any[] | undefined, opts?: any | undefined): any;
- let HEAPU8: any;
- function FS_createPath(...args: any[]): any;
- function FS_createDataFile(...args: any[]): any;
- function FS_createPreloadedFile(parent: any, name: any, url: any, canRead: any, canWrite: any, onload: any, onerror: any, dontCreateFile: any, canOwn: any, preFinish: any): void;
- function FS_unlink(...args: any[]): any;
- function FS_createLazyFile(...args: any[]): any;
- function FS_createDevice(...args: any[]): any;
- let addRunDependency: any;
- let removeRunDependency: any;
-}
-interface WasmModule {
+ let print: any;
+ let printErr: any;
+ /**
+ * @param {string|null=} returnType
+ * @param {Array=} argTypes
+ * @param {Arguments|Array=} args
+ * @param {Object=} opts
+ */
+ function ccall(
+ ident: any,
+ returnType?: (string | null) | undefined,
+ argTypes?: any[] | undefined,
+ args?: (Arguments | any[]) | undefined,
+ opts?: any | undefined,
+ ): any;
+ /**
+ * @param {string=} returnType
+ * @param {Array=} argTypes
+ * @param {Object=} opts
+ */
+ function cwrap(
+ ident: any,
+ returnType?: string | undefined,
+ argTypes?: any[] | undefined,
+ opts?: any | undefined,
+ ): any;
+ let HEAPU8: any;
+ function FS_createPath(...args: any[]): any;
+ function FS_createDataFile(...args: any[]): any;
+ function FS_createPreloadedFile(
+ parent: any,
+ name: any,
+ url: any,
+ canRead: any,
+ canWrite: any,
+ onload: any,
+ onerror: any,
+ dontCreateFile: any,
+ canOwn: any,
+ preFinish: any,
+ ): void;
+ function FS_unlink(...args: any[]): any;
+ function FS_createLazyFile(...args: any[]): any;
+ function FS_createDevice(...args: any[]): any;
+ let addRunDependency: any;
+ let removeRunDependency: any;
}
+interface WasmModule {}
-type EmbindString = ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|string;
+type EmbindString =
+ | ArrayBuffer
+ | Uint8Array
+ | Uint8ClampedArray
+ | Int8Array
+ | string;
interface EmbindModule {
- full_default(_0: EmbindString, _1: any, _2: EmbindString, _3: EmbindString, _4: number, _5: boolean): number;
+ full_default(
+ _0: EmbindString,
+ _1: any,
+ _2: EmbindString,
+ _3: EmbindString,
+ _4: number,
+ _5: boolean,
+ ): number;
}
export type MainModule = WasmModule & typeof RuntimeExports & EmbindModule;
-export default function MainModuleFactory (options?: unknown): Promise;
+export default function MainModuleFactory(
+ options?: unknown,
+): Promise;
diff --git a/packages/whisper-web/package.json b/packages/whisper-web/package.json
index b5fb53998b6..d54473467dc 100644
--- a/packages/whisper-web/package.json
+++ b/packages/whisper-web/package.json
@@ -7,7 +7,7 @@
"main": "dist/index.js",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
},
diff --git a/packages/zod-types-v3/README.md b/packages/zod-types-v3/README.md
index 7e6f5fdd650..c73cc4c28cd 100644
--- a/packages/zod-types-v3/README.md
+++ b/packages/zod-types-v3/README.md
@@ -1,18 +1,18 @@
# @remotion/zod-types-v3
-
+
Zod 3.22.3 types for Remotion
-
+
[](https://npmcharts.com/compare/@remotion/zod-types-v3?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/zod-types-v3 --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/zod-types/v3) for more information.
diff --git a/packages/zod-types-v3/bundle.ts b/packages/zod-types-v3/bundle.ts
index 1a9324d4af6..73109238b45 100644
--- a/packages/zod-types-v3/bundle.ts
+++ b/packages/zod-types-v3/bundle.ts
@@ -1,5 +1,5 @@
-import {build} from 'bun';
import path from 'path';
+import {build} from 'bun';
if (process.env.NODE_ENV !== 'production') {
throw new Error('This script must be run using NODE_ENV=production');
@@ -9,12 +9,7 @@ console.time('Generated.');
const output = await build({
entrypoints: ['src/index.ts'],
naming: '[name].mjs',
- external: [
- 'remotion',
- 'remotion/no-react',
- '@remotion/zod-types',
- 'zod',
- ],
+ external: ['remotion', 'remotion/no-react', '@remotion/zod-types', 'zod'],
});
if (!output.success) {
diff --git a/packages/zod-types-v3/package.json b/packages/zod-types-v3/package.json
index 3dddc5c13af..1f5d41ab63c 100644
--- a/packages/zod-types-v3/package.json
+++ b/packages/zod-types-v3/package.json
@@ -11,7 +11,7 @@
"sideEffects": false,
"type": "module",
"scripts": {
- "formatting": "prettier --experimental-cli src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"watch": "tsgo -w",
"make": "tsgo && bun --env-file=../.env.bundle bundle.ts"
diff --git a/packages/zod-types/README.md b/packages/zod-types/README.md
index 3d76724c407..252f3e55579 100644
--- a/packages/zod-types/README.md
+++ b/packages/zod-types/README.md
@@ -1,18 +1,18 @@
# @remotion/zod-types
-
+
Zod types for Remotion
-
+
[](https://npmcharts.com/compare/@remotion/zod-types?minimal=true)
-
+
## Installation
-
+
```bash
npm install @remotion/zod-types --save-exact
```
-
+
When installing a Remotion package, make sure to align the version of all `remotion` and `@remotion/*` packages to the same version.
Remove the `^` character from the version number to use the exact version.
-
+
## Usage
-
+
See the [documentation](https://www.remotion.dev/docs/zod-types) for more information.
diff --git a/packages/zod-types/package.json b/packages/zod-types/package.json
index 6a00784a1bf..ffaf28c53d4 100644
--- a/packages/zod-types/package.json
+++ b/packages/zod-types/package.json
@@ -10,7 +10,7 @@
"module": "dist/esm/index.mjs",
"sideEffects": false,
"scripts": {
- "formatting": "prettier src --check",
+ "formatting": "oxfmt src --check",
"lint": "eslint src",
"make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
},
diff --git a/publish.ts b/publish.ts
index 5f66afeae2c..b1b26166edd 100644
--- a/publish.ts
+++ b/publish.ts
@@ -1,6 +1,6 @@
-import {$} from 'bun';
import {existsSync, lstatSync, readdirSync, readFileSync} from 'node:fs';
import path from 'node:path';
+import {$} from 'bun';
import limit from 'p-limit';
import {FEATURED_TEMPLATES} from './packages/create-video/src/templates';