From 080283fb9d89a5ab05a33b9ace5123c83314e116 Mon Sep 17 00:00:00 2001 From: jsongo Date: Sat, 7 Feb 2026 17:46:36 +0800 Subject: [PATCH 1/3] feat: add --chromium-path option and bump version to 0.1.1 (#16) - Add --chromium-path option to CLI for custom browser path - Set PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH environment variable from CLI option - Update renderer to use process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH - Bump all package versions to 0.1.1 Co-authored-by: Claude Sonnet 4.5 --- packages/cli/src/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index ee28939..759471d 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -32,7 +32,9 @@ export const runInit = async (projectName: string) => { dev: 'vite', build: 'vite build', preview: 'vite preview', - render: 'open-motion render -u http://localhost:5173 -o out.mp4' + render: 'open-motion render -u http://localhost:5173 --composition main -o ./out.mp4', + 'render:fast': 'npm run build && (npx http-server dist -p 5173 > /dev/null 2>&1 & sleep 2 && npm run render -- \$@ && pkill -f http-server)', + 'render:path': 'PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH="/root/.cache/ms-playwright/chromium-1187/chrome-linux/chrome" npm run render -- \$@' }, dependencies: { 'react': '^18.2.0', From c17ad551c9a54f63aa222e3bd098e14f8a6187be Mon Sep 17 00:00:00 2001 From: jsongo Date: Sat, 7 Feb 2026 19:18:38 +0800 Subject: [PATCH 2/3] feat: simplify render command and bump version to 0.1.2 - Merge render:fast logic into the default render command - Default render now performs: build -> start static server -> render -> cleanup - Default concurrency set to 4 for faster rendering - Bump all package versions to 0.1.2 Co-Authored-By: Claude Sonnet 4.5 --- packages/cli/package.json | 2 +- packages/cli/src/index.ts | 3 +-- packages/core/package.json | 2 +- packages/encoder/package.json | 2 +- packages/renderer/package.json | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 080ac28..5822284 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@open-motion/cli", - "version": "0.1.1", + "version": "0.1.2", "bin": { "open-motion": "dist/bin.js" }, diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 759471d..c540d1c 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -32,8 +32,7 @@ export const runInit = async (projectName: string) => { dev: 'vite', build: 'vite build', preview: 'vite preview', - render: 'open-motion render -u http://localhost:5173 --composition main -o ./out.mp4', - 'render:fast': 'npm run build && (npx http-server dist -p 5173 > /dev/null 2>&1 & sleep 2 && npm run render -- \$@ && pkill -f http-server)', + render: 'npm run build && (npx http-server dist -p 5173 > /dev/null 2>&1 & sleep 2 && open-motion render -u http://localhost:5173 --composition main -o ./out.mp4 --concurrency 4 && pkill -f http-server)', 'render:path': 'PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH="/root/.cache/ms-playwright/chromium-1187/chrome-linux/chrome" npm run render -- \$@' }, dependencies: { diff --git a/packages/core/package.json b/packages/core/package.json index fca3efe..7ca1c8f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@open-motion/core", - "version": "0.1.1", + "version": "0.1.2", "main": "dist/index.js", "types": "dist/index.d.ts", "license": "MIT", diff --git a/packages/encoder/package.json b/packages/encoder/package.json index 8ece2cd..8b15989 100644 --- a/packages/encoder/package.json +++ b/packages/encoder/package.json @@ -1,6 +1,6 @@ { "name": "@open-motion/encoder", - "version": "0.1.1", + "version": "0.1.2", "main": "dist/index.js", "types": "dist/index.d.ts", "license": "MIT", diff --git a/packages/renderer/package.json b/packages/renderer/package.json index c6cbf02..b80ae55 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -1,6 +1,6 @@ { "name": "@open-motion/renderer", - "version": "0.1.1", + "version": "0.1.2", "main": "dist/index.js", "types": "dist/index.d.ts", "license": "MIT", From acba4c6f4b5e208e6745aad181000880a560f779 Mon Sep 17 00:00:00 2001 From: jsongo Date: Sat, 7 Feb 2026 19:21:41 +0800 Subject: [PATCH 3/3] feat: sync render:path logic and bump version to 0.1.3 - Explicitly define the full build-render-cleanup chain in render:path - Ensure render:path behavior is consistent with the new default render - Bump all package versions to 0.1.3 Co-Authored-By: Claude Sonnet 4.5 --- README.md | 39 +++++++++++++++++++++++++++++++--- packages/cli/package.json | 2 +- packages/cli/src/index.ts | 2 +- packages/core/package.json | 2 +- packages/encoder/package.json | 2 +- packages/renderer/package.json | 2 +- 6 files changed, 41 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 32288cf..820e275 100644 --- a/README.md +++ b/README.md @@ -39,10 +39,43 @@ OpenMotion is a high-performance, open-source alternative to Remotion. It allows - 📹 **Offthread Video**: High-performance video decoding moved to background processes. - 📊 **Dynamic Metadata**: Calculate video dimensions, duration, and other properties dynamically based on input props. - 🎬 **GIF & Video Output**: Render to both MP4 video and GIF formats with automatic format detection. -- 🛡️ **Pre-Flight Checks**: Built-in validation and helpful error messages for missing dependencies. -- 🌍 **Custom Chromium Path**: Override the Chromium executable path using the `PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH` environment variable. +### 4. 渲染视频 (正式出片) -### Dynamic Metadata +推荐使用项目自带的 `render` 脚本进行渲染,它会自动完成 **构建 -> 启动静态服务 -> 渲染 -> 自动清理** 的全套流程,确保渲染过程极其稳健,不会因开发服务器缓冲区问题而卡死。 + +```bash +# 执行一键渲染 (默认输出 ./out.mp4,开启 4 线程并行) +npm run render + +# 修改输出文件名或指定合成 ID (通过 -- 透传参数) +npm run render -- -o my-video.mp4 -c main +``` + +## 💡 最佳实践 + +### 稳健渲染方案 +生产环境建议始终优先使用 `npm run render`。该命令内部使用了静态服务模式,彻底告别渲染卡死。 + +### 参数透传技巧 +你可以通过 `npm run render -- [更多参数]` 覆盖脚本中的默认值: +- **修改并发数**: `npm run render -- -j 8` +- **指定 Chromium 路径**: `npm run render -- --chromium-path "/path/to/chrome"` + +### 资源存放 +所有本地图片/视频资源请放在 `public/` 目录下,在代码中通过 `/filename` 路径引用。 + +## 🎬 输出格式支持 +- **.mp4**: 标准视频,包含音频。 +- **.webm**: 支持透明背景的高质量视频。 +- **.gif**: 动态图片,不含音频。 +- **.webp**: 现代动图格式,体积更小,质量更好。 + +## 🛡️ 特色功能 +- 🛡️ **Pre-Flight Checks**: 内置浏览器安装检查与环境验证。 +- 🌍 **Custom Chromium Path**: 支持通过 `--chromium-path` 参数自定义浏览器路径。 +- 🚀 **Turbo Render**: 一键自动化构建与全自动渲染链条。 + +## 📚 API Reference Calculate video properties dynamically: diff --git a/packages/cli/package.json b/packages/cli/package.json index 5822284..8c2a879 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@open-motion/cli", - "version": "0.1.2", + "version": "0.1.3", "bin": { "open-motion": "dist/bin.js" }, diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index c540d1c..d2bf99a 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -33,7 +33,7 @@ export const runInit = async (projectName: string) => { build: 'vite build', preview: 'vite preview', render: 'npm run build && (npx http-server dist -p 5173 > /dev/null 2>&1 & sleep 2 && open-motion render -u http://localhost:5173 --composition main -o ./out.mp4 --concurrency 4 && pkill -f http-server)', - 'render:path': 'PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH="/root/.cache/ms-playwright/chromium-1187/chrome-linux/chrome" npm run render -- \$@' + 'render:path': 'npm run build && (npx http-server dist -p 5173 > /dev/null 2>&1 & sleep 2 && PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH="/root/.cache/ms-playwright/chromium-1187/chrome-linux/chrome" open-motion render -u http://localhost:5173 --composition main -o ./out.mp4 --concurrency 4 && pkill -f http-server)' }, dependencies: { 'react': '^18.2.0', diff --git a/packages/core/package.json b/packages/core/package.json index 7ca1c8f..6cd7375 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@open-motion/core", - "version": "0.1.2", + "version": "0.1.3", "main": "dist/index.js", "types": "dist/index.d.ts", "license": "MIT", diff --git a/packages/encoder/package.json b/packages/encoder/package.json index 8b15989..3c6ce4e 100644 --- a/packages/encoder/package.json +++ b/packages/encoder/package.json @@ -1,6 +1,6 @@ { "name": "@open-motion/encoder", - "version": "0.1.2", + "version": "0.1.3", "main": "dist/index.js", "types": "dist/index.d.ts", "license": "MIT", diff --git a/packages/renderer/package.json b/packages/renderer/package.json index b80ae55..1ab2da2 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -1,6 +1,6 @@ { "name": "@open-motion/renderer", - "version": "0.1.2", + "version": "0.1.3", "main": "dist/index.js", "types": "dist/index.d.ts", "license": "MIT",