OpenMontage: Biến Coding Agent thành Đạo diễn Video
TL;DR
- Giải quyết gì: Text-to-video một phát thường ra clip lẻ. OpenMontage cho agent quy trình sản xuất đủ bước: research, kịch bản, asset, dựng, render.
- Vì sao quan trọng: Agent không có khung thì làm video như thực tập ngày đầu: hình đẹp, nhịp loạn, hết budget, không có take hai.
- Hợp ai: Dev đã dùng Claude Code, Cursor, Copilot hay Windsurf hàng ngày, muốn làm explainer, montage tài liệu, hoặc Short kiểu TikTok ngay trong cửa sổ code.
- Khác biệt chính: Kiến trúc agent-first. Không có app điều phối. Bạn là producer; agent đọc manifest pipeline YAML và skill Markdown, rồi gọi 52 tool Python.
- Lối đi cụ thể:
git clone,make setup, một câu prompt. Explainer 60 giây với Piper TTS, footage Pexels, Remotion có thể ~$0 nếu ở tier miễn phí.
Tuần trước tôi nhờ Cursor làm clip 45 giây về lỗ đen. Nó viết kịch bản, sinh sáu ảnh FLUX, chọn nhạc piano miễn phí, render mp4. Tôi không mở DaVinci. Cũng chẳng bấm nút Generate ở đâu, vì không có nút đó.
--> // making it invisible to querySelectorAll. // // `data-cfasync="false"` keeps this rescue script executable even when // Rocket Loader is active. It rescues module scripts via two strategies: // 1. Query the DOM for type$="-module" + src (covers case A) // 2. Regex-parse the raw HTML for commented-out script tags (covers case B) // Dynamically-created scripts bypass Rocket Loader entirely. (function () { if (window.__markdyRescue) return; window.__markdyRescue = true; var rescued = false; function rescueModuleScripts() { if (rescued) return; rescued = true; var srcs = []; // Strategy 1: Rocket Loader kept the tag in DOM but changed the type. // type="module" → type="{uuid}-module" (still has src attribute) document.querySelectorAll('script[type$="-module"][src]').forEach(function (s) { srcs.push(s.src); }); // Strategy 2: Rocket Loader COMMENTED OUT the script tag entirely: // // These are invisible to querySelectorAll, so we parse the raw HTML. // We handle both attribute orderings (type-first or src-first). var html = document.documentElement.innerHTML; var reSrcFirst = //g; var reTypeFirst = //g; var m; while ((m = reSrcFirst.exec(html)) !== null) { srcs.push(m[1]); } while ((m = reTypeFirst.exec(html)) !== null) { srcs.push(m[1]); } // Re-inject each found src as a real module script. // Deduplicate first, then inject. Dynamically-created scripts bypass // Rocket Loader entirely. Modules with the same URL are only executed // once by the browser (cached), so re-injecting already-running scripts // is safe. var seen = {}; srcs.forEach(function (src) { if (seen[src]) return; seen[src] = true; var fix = document.createElement('script'); fix.type = 'module'; fix.src = src; fix.setAttribute('data-cfasync', 'false'); document.head.appendChild(fix); }); } // Rescue when user clicks the placeholder (fallback if autoplay failed). document.addEventListener('click', function (e) { var t = e.target; if (t && typeof t.closest === 'function' && t.closest('.markdy-placeholder')) { rescueModuleScripts(); } }); // Rescue automatically after a short delay for autoplay. // Only fires if initAll() never ran (no data-markdy-init on any root). setTimeout(function () { if (document.querySelector('.markdy-root:not([data-markdy-init])')) { rescueModuleScripts(); } }, 1500); }());Máy bán nước vs. phòng dựng
Đa số tool AI video giống máy bán nước tự động: bỏ prompt vào, có gì ra nấy. Đôi khi ngon. Thường thì không giải thích được vì sao.
OpenMontage giống đưa cho coding agent chìa khóa phòng dựng đã gắn nhãn từng ngăn: 12 playbook pipeline (pipeline_defs/), 52 tool Python (tools/), hơn 400 skill Markdown dạy agent cách xử từng giai đoạn (skills/). Agent là đạo diễn. Repo là đoàn làm phim.
Video thật không phải một lần gọi model. Là research, quyết định nhịp, tìm asset, chỉ đạo giọng, timing phụ đề, kiểm tra trước compose, rồi mới render. OpenMontage mã hóa chuỗi đó như đoàn sản xuất thật, chỉ thay bằng file agent đọc được.
Repo này thực chất là gì
OpenMontage là sổ tay sản xuất cho coding agent để video hoàn chỉnh đi qua research, kịch bản, tạo asset và review render, thay vì một prompt rồi cầu may.
Về vật lý: project Python, sidecar Node cho Remotion/HyperFrames, FFmpeg trên PATH, và rừng file YAML + Markdown. Clone, make setup, mở folder trong Cursor hoặc Claude Code, nói chuyện bình thường.
Agent không ứng biến bừa. Nó chọn pipeline (Animated Explainer, Documentary Montage, Talking Head, Clip Factory, và tám loại khác), đọc skill đạo diễn từng stage, gọi tool từ registry, checkpoint state JSON, hỏi bạn duyệt ở các ngã rẽ: giọng đọc, nhạc nền, engine render.
Mọi pipeline cùng một xương sống:
research → proposal → script → scene_plan → assets → edit → compose
Research web là stage chính thức. Trước khi viết một câu lời thoại, agent được yêu cầu tìm YouTube, Reddit, Hacker News, báo chí, để explainer bám fact hiện tại, không phải cutoff training năm ngoái.
Ví dụ nhỏ nhất chạy được
Clone, setup, prompt. Hết interface.
git clone https://github.com/calesthio/OpenMontage.git
cd OpenMontage
make setup
Mở project trong AI coding assistant và nói:
Make a 60-second animated explainer about how neural networks learn.
Agent chọn pipeline Animated Explainer, ước cost trước khi tiêu, tạo lời thoại (Piper TTS offline, không cần key), sinh visual, compose bằng Remotion hoặc HyperFrames, tự review sau render (frame đen, mức audio, lệch phụ đề), rồi mới đưa projects/<name>/renders/final.mp4.
Không cần API key cho lối đi đó. Thêm FAL_KEY hoặc OPENAI_API_KEY sau nếu muốn ảnh FLUX hay giọng premium. Bộ chọn provider chấm điểm theo bảy chiều và log lý do chọn.
💡 Tip: Bắt đầu với lối zero-key:
make setup, rồi nhờ explainer 60 giây kiểu Animated Explainer. Piper TTS và Remotion không cần key. Chỉ thêmFAL_KEYsau khi đã có một bản render ổn trên stack miễn phí.
Ba lối, một playbook
| Lối đi | Bạn đưa gì | Agent dựng gì | Cost gợi ý |
|---|---|---|---|
| Zero-key explainer | Một câu chủ đề | Piper + motion Remotion | ~$0 |
| Reference remix | URL YouTube Short bạn thích | Giữ nhịp/hook, đổi chủ đề và hình | ~$0–$1 |
| Montage tài liệu | ”Chỉ dùng footage thật” | Tìm Archive.org, NASA, Pexels; nhạc, không VO | ~$0 |
Lối thứ ba là chỗ tôi dừng lại. OpenMontage không chỉ “animate ảnh tĩnh rồi gọi là video.” Pipeline Documentary Montage dựng corpus từ archive miễn phí, lấy clip chuyển động thật, cắt theo nhịp, render timeline hoàn chỉnh. Gần editor tập sự hơn là trình chiếu slide.
Năm prompt khớp pipeline có sẵn:
- Demo sản phẩm side project: Animated Explainer với Piper và motion Remotion.
- Clip newsletter hàng tuần: Documentary Montage, chỉ footage archive, không lời thoại.
- Remix Short bạn thích: dán URL YouTube, giữ nhịp hook, đổi chủ đề.
- Video onboarding nội bộ: pipeline Talking Head với giọng và palette thương hiệu đã duyệt.
- Batch Short từ một lần research: Clip Factory tái dùng corpus cho nhiều render.
Khi agent chính là sản phẩm
OpenMontage ship file cấu hình cho Claude Code (CLAUDE.md), Cursor (.cursor/rules/), Copilot, Windsurf, Codex. Tất cả trỏ về AGENT_GUIDE.md: đọc manifest pipeline trước, không ứng biến workflow, checkpoint trước render nặng GPU, tôn budget (mặc định $10, dừng trên $0.50 mỗi action).
Quality gate nghe nhàm cho đến khi bạn đốt cả buổi chiều render mà 80% frame là JPEG tĩnh. Pre-compose validation chặn plan hỏng. Post-render review lấy frame ở bốn vị trí, kiểm audio im lặng và clipping, xác minh lời hứa delivery. Fail review thì agent không đưa rác rồi bảo xong.
Demo trên README có short Pixar-style 60 giây $1.33, quảng cáo sản phẩm $0.69 với một key OpenAI, anime $0.15 với FLUX + Remotion. Số liệu hữu ích khi cân có nên trả tiền provider.
Chỗ không ngon
Bỏ qua nếu bạn cần GUI và một nút duy nhất. Không có Streamlit, không timeline kéo thả. Sống trong chat agent.
Bỏ qua nếu chưa tin AI coding assistant chạy Python và đọc file hướng dẫn dài. Repo giả định vận hành agentic; chống lại thiết kế này là chống lại repo.
⚠️ Warning:
make setupkéo Python deps, Node cho Remotion, và FFmpeg. Dành khoảng một tiếng trên máy mới. Render đầu fail thường do thiếu binary, không phải prompt tệ. AGPL-3.0 cũng chặn nhúng vào SaaS đóng mà không share sửa đổi.
Yêu cầu cụ thể cần biết trước khi bắt đầu: Python 3.11+, Node 18+, FFmpeg trên PATH, và GPU chỉ là tùy chọn nếu bạn muốn gen video local thay vì gọi cloud.
Phim cinematic nặng vẫn cần mắt người. Agent đề xuất; bạn duyệt giọng, nhạc, style. Đó là feature cho chất lượng, là cost cho tốc độ.
Ghế đạo diễn trống từ lâu
Hồi xưa tôi tưởng AI video là gõ vào website rồi hy vọng clip trông có chủ đích. OpenMontage làm tôi tin phần thiếu không phải model, mà là ngữ pháp sản xuất: pipeline, checkpoint, chấm provider, tìm archive, review render.
Phòng dựng vốn có sẵn. Chỉ thiếu người ngồi ghế đạo diễn, biết đọc playbook và gọi tool đúng thứ tự.
Coding agent của tôi vốn đã ngồi trong phòng. Giờ nó biết “final cut” nghĩa là gì. Còn tôi thì vẫn chưa biết dựng phim, nhưng ít nhất không phải tự giả vờ là editor nữa.
calesthio/OpenMontage · AGPL-3.0 · 5k
Hoang Yell
Một nhà phát triển phần mềm và là người kể chuyện kỹ thuật. Tôi dành thời gian để khám phá những repository mã nguồn mở thú vị nhất trên GitHub và trình bày chúng dưới dạng những câu chuyện dễ hiểu cho mọi người.