Skill Claude Code làm video tiếng Việt: kịch bản viet-pro → giọng/SFX/nhạc ElevenLabs v4 → HyperFrames 16:9 + 9:16 → QA tự xem video bằng Gemini. By ABM.
Overview
Bạn nói chủ đề; agent dựng 3 hướng hình ảnh để bạn chọn, viết kịch bản, tạo giọng, dựng, kiểm tra rồi xuất bản giao 16:9, 9:16 hoặc cả hai. Mỗi bước có cổng kiểm tra chặn lại khi chưa đạt. Chạy trên (dạng plugin opus-video gồm 11 skill), và mọi agent đọc được thư mục skill có SKILL.md. Các video dưới đây do opus-video dựng. Bấm vào ảnh để mở file MP4 trong bản release demo-videos. Gemini 4 Argon 9:16 · 15 giây Theo quy trình mới: chọn 1 trong 3 styleframe (hướng A2, câu lệnh thành sản phẩm chạy thật), duyệt animatic hai vòng. Giới thiệu ABM 9:16 · 30 giây Bản dọc của video giới thiệu doanh nghiệp, dựng song song với bản 16:9. Tin đăng lô đất 72 m² 9:16 · 60 giây · bản Zalo 720p Clip người dùng quay chạy trong khung PiP trên nền bản đồ, phụ đề bám từng chữ. Giới thiệu Viết Pro 16:9 · 60 giây Video giới thiệu skill viet-pro cho người mới. Giới thiệu ABM 16:9 · 30 giây - Repo là plugin Claude Code opus-video (.claude-plugin/plugin.json).
README
opus-video
Agent skill dựng video tiếng Việt từ một brief tới file MP4 giao khách. Bạn nói chủ đề; agent dựng 3 hướng hình ảnh để bạn chọn, viết kịch bản, tạo giọng, dựng, kiểm tra rồi xuất bản giao 16:9, 9:16 hoặc cả hai. Mỗi bước có cổng kiểm tra chặn lại khi chưa đạt.
Chạy trên Claude Code (dạng plugin opus-video gồm 11 skill), OpenAI Codex, Google Antigravity (app và CLI) và mọi agent đọc được thư mục skill có SKILL.md.
Video demo · Có gì mới · Cách hoạt động · Cài đặt · Dùng · Script · Xử lý sự cố
Video demo
Các video dưới đây do opus-video dựng. Bấm vào ảnh để mở file MP4 trong bản release demo-videos.
Có gì mới
v2.0.0 (2026-10-16): plugin 11 skill, bốn hướng vận hành, project.json
- Plugin thay cho một file
SKILL.md45 KB. Repo là plugin Claude Codeopus-video(.claude-plugin/plugin.json). Quy trình tách thành 11 skill nhỏ trongskills/:opus-video(điểm vào, chọn hướng),ov-setup,ov-brief,ov-direction,ov-cases,ov-script,ov-audio,ov-build,ov-footage,ov-deliver,ov-studio. Không bỏ luật nào: mỗi luật của bản cũ nằm trong đúng một skill. - Bốn hướng vận hành:
dao-dien(đầy đủ, mặc định),nhanh(theo một case mẫu thay cho 3 styleframe),tu-nhac(bắt đầu từ bài nhạc hoặc footage),timeline(sửa dự án đã có). Bảng ở mục 6. project.jsonvà cổng lệnh. Mỗi dự án có thể có một manifest (shot, câu thoại, nhạc, phiên bản).gateway.mjslà đường ghi duy nhất: mỗi thay đổi là một phiên bản mới có undo, và gateway tự ghi lại khối TIMING,data-startcủa giọng và cột Thời điểm của PLAN.md.manifest-import.mjstạo manifest cho dự án cũ mà không đổi file gốc nào. Đây là nền cho Motion Studio.- Motion Studio.
node scripts/studio.mjs start --backgroundmở giao diện web tạihttp://127.0.0.1:4317: player, timeline Shot / Lồng tiếng / Nhạc, inspector và bảy tab. Kéo mép shot, kéo câu thoại, sửa tên, lời hay âm lượng nhạc đều thành một phiên bản mới qua gateway, có Hoàn tác. Dự án nhập từ bản cũ chỉ xem. Nút “Nhờ đạo diễn” chạy chính Claude Code của bạn (claude -p, có nhớ phiên) trên dự án đó và trả về một phiên bản mới kèm biên nhận; “Xuất video” chạyrender-final.mjsrồi nén.statusvàstopđể kiểm tra và dừng. - MCP server
opus-video. Plugin khai báo một MCP server (mcp/server.mjs, chỉ dùng Node có sẵn). Phiên Claude Code nào cũng đọc được dự án (project_get,project_log), sửa timeline với actordirector(project_patch,project_undo) và nhận yêu cầu từ hàng đợi Studio (studio_request_next,studio_request_done).
v1.2.0 (2026-10-15): template, style và đồng bộ
Bản này đưa các quy trình của skill motion-video (AgentKit, MIT) vào opus-video, viết lại bằng Node và ffmpeg. Chi tiết ở chương 14 của hướng dẫn chuyên sâu.
- Dựng từ khung sẵn.
composition.mjs inittạoindex.htmlcó bộ hàm hoạt hình và hai hàm mốc:W(cảnh, "cụm từ")theo lời đọc,B(n)theo phách nhạc.timing.mjssinh toàn bộ mốc thời gian từwords.json; sửa giọng xong chỉ cần chạy lại lệnh, không sửa tay số giây. - Nhạc giảm khi có giọng, đo được bằng số.
audio-mix.mjsđổidata-fx-carvethành sidechain ffmpeg và chuẩn hoá về −14 LUFS.mix-balance.mjsin nhạc thấp hơn giọng bao nhiêu dB; đích là 4–7 dB. - Nhịp nhạc đo thật.
beat-grid.mjsđo BPM, phách đầu và phách kick của file nhạc. Nhạc trôi tempo thì báoUNSTABLEvà không cho dùngB(). - Chữ chốt khớp lời. Hàng
chữ: "…"trong## Sự kiệnđượcword-sync.mjsso với lúc giọng nói tới, lệch quá 150 ms thì cảnh báo, quá 250 ms thì chặn. - Chuyển động từng cảnh.
references/motion-craft.mdlà tiêu chuẩn chuyển động bằng tiếng Việt;make-demo --animaticcắt thêm một sheet cho mỗi cảnh. - 9:16 và 1:1 từ một
index.html.reframe.mjssinh bản dọc và bản vuông từ khối CSShtml[data-ratio=…], không crop. - 61 style.
data/styles/có 61 style kèm tên và mô tả tiếng Việt, là trục thứ hai bên cạnh 8 hướng đạo diễn.styles.mjstìm, xem, gợi ý theo hướng và phối style theo từng cảnh.
Dự án cũ không bị chặn thêm: các cổng mới chỉ in WARN với chúng.
v1.1.0 (2026-10-14): ba cổng cho chuyển động
Ba lỗi trước đây lọt qua mọi cổng kiểm tra: tiếng SFX vang lệch khỏi khoảnh khắc trên hình, chữ biến mất trước khi người xem đọc kịp, và mỗi lần sửa phải render lại cả video mà không ghi lại đã sửa gì. Bản này thêm một cổng cho mỗi lỗi. Ý tưởng lấy từ tài liệu Motion Engineering with Opus 5.5 của beamnxw (MIT); ngưỡng nào cũng có nguồn.
1. Tiếng khớp hình (sfx-sync.mjs)
PLAN.mdcủa dự án sáng tạo có thêm bảng## Sự kiện: lúc nào trên hình xảy ra gì và tiếng nào đi kèm (ví dụ6.5 | nhấn nút Gửi | click.mp3). Cổng plan chặn khi thiếu bảng; dự án không có SFX gắn sự kiện ghi một dòngkhông có SFX gắn sự kiện.- Nhiều file SFX mở đầu bằng một đoạn im lặng, nên
data-startchỉ là lúc file bắt đầu chứ chưa phải lúc nghe thấy tiếng. Script đo đoạn im lặng đó bằng ffmpeg, lấy ngưỡng theo đỉnh của chính file (đỉnh − 20 dB) để file nhỏ tiếng không bị coi là im lặng cả bài. - Độ lệch được so với cửa sổ của ITU-R BT.1359-1: từ −45 đến +125 ms là PASS, tới −90 / +185 ms là WARN, ngoài nữa là FAIL. Mỗi sự kiện ra một dòng, ví dụ
PASS SYNC 6.5s nhấn nút Gửi ← click.mp3 lệch +30 ms (đầu file im 30 ms). --fixin giá trịdata-startđúng để dán vào HTML, không tự sửa file. Cổng final tự chạy bước này và chặn tiếng lệch quá ngưỡng.
2. Chữ đủ lâu để đọc
check-preflightđếm số từ của chữ trên hình (phần trong ngoặc kép ở cột Hình của## Cảnh) và in WARN khi chữ rời đi trướcsố từ / 2,5 + 0,5 giây, tối thiểu 1 giây. Tốc độ 2,5 từ/giây lấy từ viet-pro; 0,5 giây để mắt tìm tới chữ là giả định, sẽ chỉnh khi đo thêm dự án.- Chữ ở lại sang beat sau thì ghi
(giữ đến 9.5s)hoặc(giữ đến hết)trong ô Hình, cổng sẽ đo tới mốc đó. - Cổng này chỉ cảnh báo, không chặn.
3. Sửa theo vòng (REVISIONS.md)
- Khi bạn góp ý, agent ghi mỗi chỗ sửa thành một mục 4 trường: Vị trí (giây trên timeline gốc), Lỗi thấy, Đổi, Giữ nguyên (các mốc không được động tới). Tối đa 5 mục một vòng; nhiều hơn thì agent hỏi mục nào để vòng sau. Mẫu ở
references/revisions.md. - Mỗi mục được kiểm bằng
hyperframes snapshot --atđúng những giây đó, không render lại cả video. Hết vòng mới render lại animatic một lần để bạn duyệt. - Cổng final cảnh báo khi một vòng quá 5 mục hoặc một mục thiếu trường.
Dự án cũ (BRIEF không có direction: và brief_version: 2) không bị chặn thêm: với chúng, cả ba cổng chỉ in WARN.
v1.0.0 (2026-10-14): chọn hình trước, dữ liệu thật
Bản trước dựng ra video kiểu trình chiếu: vài thẻ tiêu đề trượt lên rồi mờ đi. Bản này đổi thứ tự làm việc: chọn hình trước, viết lời sau, và mọi bước đều được đo bằng máy.
- Chọn hướng bằng mắt.
make-pitch.mjsdựng 3 styleframe khoảng 3 giây từ chính chủ đề của bạn, theo 3 trong 8 hướng đạo diễn có trong HyperFrames. Bạn chọn một, đổi từ khoá nếu muốn. Styleframe được chọn thành cảnh mở đầu. - Lời đi theo hình. Kịch bản viết sau khi đã chọn hướng và không được vượt
word_budgetcủa hướng đó. Vượt thì cổng viet-pro chặn (VOICE_OVER_BUDGET). - Dựng theo công thức thật.
recipe-pack.mjsgom đúng các blueprint, rule và kiểu nối cảnh màPLAN.mdnêu vàobuild/RECIPES.md. Cổng plan chặn cách nối cảnh bằng mờ dần. - Duyệt chuyển động, không duyệt ảnh tĩnh.
make-demo.mjs --animaticrender clip nháp 540p để bạn xem trước khi render bản cuối. Sửa file dựng sau khi đã duyệt thì cổng final chặn. Dự ánaspect: bothcần thêm animatic dọc. - Đo độ chuyển động.
qc-mp4.mjscó mục MOTION: video có từ 60% khung gần như đứng yên và đỉnh chuyển động thấp thì FAIL. Một video trình chiếu thật đo được 70% và bị chặn. - Dữ liệu thật thay số gõ tay.
poi-fetch.mjslấy trường, chợ, bệnh viện, trạm xe… quanh một địa chỉ từ OpenStreetMap, kèm phút đi bộ.source-ingest.mjslưu nguyên văn bài báo, PDF, trang arXiv vàoSOURCES.mdđể đối chiếu từng con số trên hình. - Brand kit dùng chung.
shared-assets/brand.json(mẫu ởreferences/brand.example.json) giữ màu, font, logo, giọng đọc và các hướng không dùng;make-pitchtự đọc. - Giọng theo dự án.
voice_idtrongBRIEF.mdđứng trên giọng mặc định của máy; script in ra giọng lấy từ đâu.
Danh sách đầy đủ ở CHANGELOG.md; các bản đóng gói ở Releases.
Cách hoạt động
Skill này là phần điều phối và không tự render. Nó nối các bước sau:
- Chọn hướng bằng mắt:
make-pitch.mjsdựng 3 styleframe khoảng 3 giây bằng chính chủ đề của người dùng theo 3 hướng đạo diễn khác nhau; người dùng chọn một, kèm đổi từ khoá nếu muốn. Styleframe được chọn thành cảnh mở đầu, kịch bản viết sau và không vượt ngân sách lời của hướng. - Kịch bản: viết bằng viet-pro ở mức đầy đủ (đọc hết review/editorial, lượt Humanizer có ghi chép, lint), có kiểm chứng dữ kiện.
check-viet-pro.mjschặn khi chưa đạt;eleven.mjstự chạy lại cổng và không tạo giọng (exit 4) khi chưa đạt. - Plan:
PLAN.md(mục tiêu, ý đồ sáng tạo, bảng cảnh, âm thanh, engine, mốc khung hình demo, QA) phải quacheck-preflight.mjs --stage plantrước khi tạo giọng và dựng. Mỗi beat nêu blueprint hoặc rule có thật và cách nối sang beat sau; nối bằng mờ dần bị chặn. Bảng## Sự kiệnghi lúc nào trên hình có tiếng; chữ trên hình được kiểm có giữ đủ lâu để đọc. - Âm thanh: ElevenLabs. Giọng
eleven_v4có timestamp từng từ, SFXeleven_text_to_sound_v2, nhạc nềnmusic_v2_5. - Dựng: HyperFrames là mặc định, theo công thức gom bằng
recipe-pack.mjs. Remotion hoặc Canvas khi dự án cần. - Clip nháp và khung hình demo:
make-demo.mjs --animaticrender clip nháp và cắt đúng các mốc trong plan; người dùng duyệt chuyển động (DEMO.md) rồi mới được render bản cuối.render-final.mjslà đường duy nhất ra bản giao (--quality delivery) và chặn (exit 5) khi thiếu plan, demo, duyệt, hoặc khi clip nháp đứng yên kiểu slideshow. - QA:
sfx-sync.mjs(tiếng khớp hình),qc-mp4.mjs(kỹ thuật và độ chuyển động), lint, check, vùng an toàn 9:16, Gemini (quaagy) xem video và chấm, tối đa 3 vòng. Kèm caption Facebook + TikTok qua viet-pro. - Footage thật (beta):
cut.mjstìm khoảng lặng và ghép clip theo danh sách cắt. - Dữ liệu thật và brand kit:
poi-fetch.mjslấy tiện ích quanh một địa chỉ từ OpenStreetMap kèm khoảng cách và phút đi bộ;source-ingest.mjslưu văn bản gốc của bài báo, PDF, trang abstract arXiv vàoSOURCES.mdđể kiểm số liệu;brand.mjskiểm brand kit dùng chung (màu, font, logo, giọng đọc). - Clip người dùng làm trục + nền dựng mới: clip có sẵn lời nói chạy trong khung PiP trên nền bản đồ hay phối cảnh, hiệu ứng bám từng chữ. BRIEF ghi
voice_source: clip: cổng viet-pro lint phụ đề và chữ trên hình thay cho kịch bản TTS. Phụ đề sinh từ bản chép lời Whisper cùng bảng sửa lỗi nghe máy người dùng duyệt. Nội dung là của người dùng nên không gắn nhãn rào đón (“minh họa”, “theo lời người nói”…) lên hình;video-lintbáo lỗi khi gặp. Xemreferences/clip-master-canvas.md.
Mẫu dựng được chắt lọc từ 813 video làm bằng Opus 5.5 (xem data/SOURCES.md).
Đọc thêm: giới thiệu opus-video · hướng dẫn cài đặt chuyên sâu cho từng agent. Dùng sâu: hướng dẫn chuyên sâu về các tính năng · thư viện prompt mẫu.
1. Cài đặt nhanh (khuyên dùng)
Installer cài toàn bộ những gì skill cần, cho mọi agent tìm thấy trên máy:
- opus-video vào thư mục skill của từng agent (bản cũ được chuyển vào
~/.opus-video-backups/, không xoá; thư mục là git checkout thì để nguyên). Claude Code nạp thư mục~/.claude/skills/opus-videotại chỗ thành pluginopus-video@skills-dir, nên không chạy thêmclaude plugin installtrên máy đó; skill điểm vào gọi bằng/opus-video:opus-video(các skill khác:/opus-video:ov-brief…). Codex và Antigravity chưa có plugin: installer chépSKILL.mdđiểm vào ra gốc thư mụcopus-videovà tạo linkov-*cạnh nó (Windows: bản sao); viet-prov5.3.0 (bằng installer của chính nó, cùng các agent);- CLI
hyperframesvà mọi skill HyperFrames (hyperframes,hyperframes-core/-animation/-keyframes/-creative/-audio/-cli/-registry/-studio,media-usevà mọi workflow:general-video,faceless-explainer,product-launch-video,pr-to-video,motion-graphics,music-to-video,slideshow,embedded-captions,talking-head-recut,remotion-to-hyperframes) quanpx hyperframes skills; - file key mẫu
~/.config/opus-video/.env(quyền chỉ chủ sở hữu đọc được); - cuối cùng chạy
scripts/setup-check.mjsvà báoREADYhoặc liệt kê mục còn thiếu kèm lệnh sửa.
macOS, Linux, WSL, Git Bash
curl -fsSL https://raw.githubusercontent.com/abm-dungtq/opus-video/main/install.sh | bash
Chỉ cài cho một số agent (ghép được nhiều cờ):
curl -fsSL https://raw.githubusercontent.com/abm-dungtq/opus-video/main/install.sh | bash -s -- --codex --agy
| Cờ | Agent | Thư mục cài |
|---|---|---|
--claude |
Claude Code | ~/.claude/skills/opus-video |
--codex |
OpenAI Codex | ~/.agents/skills/opus-video |
--agy |
Google Antigravity app/IDE | ~/.gemini/config/skills/opus-video |
--agy-cli |
Google Antigravity CLI | ~/.gemini/antigravity-cli/skills/opus-video |
--workspace / -w |
chỉ dự án hiện tại (mọi agent) | ./.claude/skills/ và ./.agents/skills/ |
| (không cờ) | mọi agent có thư mục cấu hình trên máy; không thấy agent nào thì Claude Code |
Cờ khác: --ref (mặc định main), --with-remotion (thêm skill Remotion, chỉ cần khi engine: remotion), --skip-deps (chỉ cài opus-video).
Windows (PowerShell)
irm https://raw.githubusercontent.com/abm-dungtq/opus-video/main/install.ps1 | iex
Chọn agent:
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/abm-dungtq/opus-video/main/install.ps1))) -Hosts claude,codex
-Hosts nhận claude, codex, agy, agy-cli. Cờ khác: -Ref, -WithRemotion, -SkipDeps. Trên Windows, viet-pro được cài bằng git clone (viet-pro chưa có installer PowerShell). Nếu dùng WSL thì chạy lệnh bash ở trên bên trong WSL; khi đó agent cũng phải chạy trong WSL.
2. Công cụ hệ thống cần có trước
| Công cụ | macOS | Linux (Debian/Ubuntu) | Windows |
|---|---|---|---|
| Node.js ≥ 22 | brew install node@22 |
nvm install 22 |
winget install OpenJS.NodeJS.LTS |
| git | xcode-select --install |
sudo apt install git |
winget install Git.Git |
| ffmpeg + ffprobe | brew install ffmpeg |
sudo apt install ffmpeg |
winget install Gyan.FFmpeg |
| agy (tuỳ chọn, giám khảo video) | antigravity.google | như macOS | như macOS |
Distro khác dùng dnf/pacman tương ứng. Cài xong mở terminal mới để PATH cập nhật.
3. Key
Installer đã tạo ~/.config/opus-video/.env (Windows: %USERPROFILE%\.config\opus-video\.env). Mở bằng trình soạn thảo và điền:
ELEVENLABS_API_KEY=...
OPUS_VIDEO_VOICE_ID=...
# tuỳ chọn: TypeSafe Jev xếp hạng case + rà kịch bản
TYPESAFE_API_KEY=...
- Giữ quyền chỉ mình bạn đọc được (macOS/Linux:
chmod 600). Không commit, không dán key vào khung chat với agent. - Các script tự đọc file này và không bao giờ in giá trị key.
4. Kiểm tra cài đặt (bắt buộc)
node ~/.claude/skills/opus-video/scripts/setup-check.mjs
Đổi đường dẫn theo agent (ví dụ ~/.agents/skills/opus-video/... cho Codex; Windows: node $HOME\.claude\skills\opus-video\scripts\setup-check.mjs). Kết quả phải là READY (exit 0). Mỗi mục MISSING có dòng fix: đúng hệ điều hành; sửa xong chạy lại. Thêm --json để lấy kết quả dạng máy đọc.
setup-check tìm skill trong mọi thư mục agent: ~/.claude/skills, ~/.agents/skills, ~/.codex/skills, ~/.gemini/config/skills, ~/.gemini/antigravity-cli/skills, ./.claude/skills, ./.agents/skills, và thư mục cùng cấp với opus-video. Nó kiểm:
- Bắt buộc: Node ≥ 22, git, ffmpeg, ffprobe, CLI
hyperframes≥ 0.8.144,viet-pro(chạy cả self-test), đủ 20 skill HyperFrames kể trên,ELEVENLABS_API_KEY,OPUS_VIDEO_VOICE_ID(chỉ kiểm có/không). - Tuỳ chọn (WARN):
agy,TYPESAFE_API_KEY, skill Remotion.
Sau đó kiểm kết nối ElevenLabs:
node ~/.claude/skills/opus-video/scripts/eleven.mjs doctor
Mở phiên agent mới sau khi cài để agent nạp skill.
5. Cài thủ công (khi không chạy được installer)
# 1. opus-video: clone vào thư mục skill của agent (đổi đích theo bảng ở mục 1)
git clone https://github.com/abm-dungtq/opus-video ~/.claude/skills/opus-video
# 2. viet-pro (macOS/Linux/WSL; cờ agent giống bảng ở mục 1)
curl -fsSL https://raw.githubusercontent.com/abm-dungtq/viet-pro-codex/v5.3.0/install.sh | bash -s -- --claude
# 3. HyperFrames CLI + toàn bộ skill, cho mọi agent được hỗ trợ
npx --yes hyperframes skills
# nếu lệnh trên lỗi:
npx --yes skills add heygen-com/hyperframes --all
# 4. (tuỳ chọn) Remotion
npx --yes skills add remotion-dev/skills
# 5. kiểm tra
node ~/.claude/skills/opus-video/scripts/setup-check.mjs
Windows không có curl | bash cho viet-pro: git clone --depth 1 --branch v5.3.0 https://github.com/abm-dungtq/viet-pro-codex.git, rồi copy thư mục skills\viet-pro vào thư mục skill của agent (ví dụ %USERPROFILE%\.claude\skills\viet-pro).
Cài opus-video bằng git clone thì cập nhật bằng git -C pull; installer không ghi đè git checkout. Với Codex/Antigravity, clone xong phải tự đưa skill ra: chép skills/opus-video/SKILL.md thành opus-video/SKILL.md và link từng skills/ov-* vào thư mục skill của agent (installer làm việc này khi cài từ bản sao).
Máy dùng Claude Code mà opus-video không nằm trong ~/.claude/skills: claude plugin marketplace add rồi claude plugin install opus-video@opus-video-private (marketplace riêng ở .claude-plugin/marketplace.json).
6. Dùng
| Agent | Gọi skill |
|---|---|
| Claude Code | /opus-video làm video 30 giây giới thiệu , cả 16:9 và 9:16 (skill của plugin có tiền tố opus-video:, ví dụ opus-video:ov-audio) |
| OpenAI Codex | $opus-video làm video 30 giây giới thiệu , cả 16:9 và 9:16 |
| Google Antigravity (app/CLI) | /opus-video … hoặc nói “dùng skill opus-video để …” |
| Agent khác | “Đọc /skills/opus-video/SKILL.md và làm đúng quy trình trong đó để …” |
Agent nào cũng có thể chọn skill tự động khi bạn nói muốn làm video.
Bốn hướng vận hành
| Hướng | Bạn nói | Chuỗi skill |
|---|---|---|
dao-dien (mặc định) |
“làm video”, “explainer”, “quảng cáo” | ov-setup → ov-brief → ov-direction → ov-script → ov-audio → ov-build → ov-deliver |
nhanh |
“làm nhanh”, “theo mẫu”, “giống video này” | ov-setup → ov-brief → ov-cases → ov-script → ov-audio → ov-build → ov-deliver |
tu-nhac |
“từ bài nhạc”, “theo beat”, “clip quay sẵn” | ov-setup → ov-brief → ov-audio hoặc ov-footage → ov-direction → ov-script → ov-build → ov-deliver |
timeline |
“sửa video”, “mở studio”, “đổi shot” | ov-studio → gateway → ov-audio (câu đã đổi) → ov-deliver |
Hướng nào cũng giữ cổng viet-pro, PLAN.md, clip nháp đã duyệt và render-final.mjs.
11 skill
| Skill | Việc |
|---|---|
opus-video |
Điểm vào: chọn hướng, bốn cổng, thư mục dự án, ranh giới |
ov-setup |
Bước 0: setup-check, eleven.mjs doctor, key |
ov-brief |
Bước 1: BRIEF.md, brand kit |
ov-direction |
Bước 1b: 3 styleframe, chọn hướng và style |
ov-cases |
Tra case (Jev hoặc find-cases), hướng nhanh theo mẫu |
ov-script |
Bước 2: cổng viet-pro đầy đủ, kiểm chứng nguồn |
ov-audio |
Bước 5: giọng, SFX, nhạc, TIMING, mix |
ov-build |
Bước 3, 4, 4b, 6, 6b, 7: storyboard, PLAN.md, dựng, animatic, render nháp |
ov-footage |
Footage thật, clip làm trục |
ov-deliver |
Bước 7–9: render bản giao, QA, caption, xuất |
ov-studio |
project.json, gateway, nhập dự án cũ, MCP server cho đạo diễn AI, Motion Studio |
Quy trình (chi tiết trong skills/)
| Bước | Việc | Cổng |
|---|---|---|
| 0 | Kiểm tra cài đặt | setup-check.mjs → READY |
| 1 | BRIEF.md tối thiểu |
|
| 1b | Pitch 3 styleframe (make-pitch.mjs) → người dùng chọn → BRIEF.md direction: |
Cổng plan chặn dự án mới chưa có direction: |
| 2 | Kịch bản viet-pro đầy đủ | check-viet-pro.mjs → PASS (bắt buộc với tiếng Việt) |
| 3 | Storyboard, tra case mẫu | |
| 4 | Chọn engine | |
| 4b | PLAN.md (mẫu ở references/plan-demo.md), có bảng ## Sự kiện |
check-preflight.mjs --stage plan → PASS; WARN khi chữ giữ không đủ lâu |
| 5 | Giọng, SFX, nhạc nền | eleven.mjs exit 4 nếu cổng viet-pro chặn |
| 6 | Dựng | |
| 6b | Clip nháp animatic (make-demo.mjs --animatic) → người dùng duyệt → DEMO.md approval:; góp ý ghi vào REVISIONS.md |
check-preflight.mjs --stage final → PASS (gồm sfx-sync) |
| 7 | Render nháp (hyperframes render --quality looks); bản cuối chỉ bằng render-final.mjs |
exit 5 nếu thiếu plan/demo/duyệt |
| 8 | QA (tối đa 3 vòng), bắt đầu bằng qc-mp4.mjs |
QA.md, không có dòng FAIL |
| 9 | Caption Facebook + TikTok | check-viet-pro.mjs --stage delivery → PASS |
Kết quả nằm trong thư mục dự án: pitch/PITCH.md + pitch/sheet.jpg, BRIEF.md, script-table.md, STORYBOARD.md, PLAN.md, demo/*.png, DEMO.md, renders/*.mp4, QA.md, CAPTIONS.md.
Agent không tự đăng video hay caption lên mạng xã hội.
7. Script
Mọi script đều có --help / -h (in phần mô tả đầu file, thoát mã 0, không làm gì khác) và chỉ dùng Node built-in.
| Script | Việc |
|---|---|
scripts/setup-check.mjs |
Kiểm đủ công cụ, skill, key; in lệnh sửa theo hệ điều hành |
scripts/skill-paths.mjs |
Tìm skill trong thư mục của mọi agent (dùng chung cho các script khác) |
scripts/directions.mjs |
8 hướng đạo diễn và từ khoá (data/directions.json): check token có thật trong HyperFrames, pick 3 hướng tương phản, compat cảnh báo phối sai, doc --write sinh references/creative-directions.md |
scripts/make-pitch.mjs |
Bước 1b: init 3 project styleframe theo chủ đề, render 3 clip + sheet.jpg + PITCH.md (menu số; exit 4 khi styleframe FAIL MOTION), choose ghi hướng người dùng chọn vào BRIEF.md |
scripts/recipe-pack.mjs |
Gom blueprint/rule/seam (PLAN.md hoặc một hướng) thành build/RECIPES.md để dựng theo công thức thật |
scripts/check-preflight.mjs |
Cổng plan (--stage plan) và demo + duyệt (--stage final); cổng sáng tạo khi BRIEF có direction: |
scripts/sfx-sync.mjs |
Đo lúc SFX thật sự vang so với bảng ## Sự kiện của PLAN.md (ngưỡng ITU-R BT.1359-1); --fix in đề xuất data-start, --write-qa ghi vào QA.md |
scripts/make-demo.mjs |
Chụp khung hình demo theo PLAN.md (hyperframes snapshot, hoặc render nháp + ffmpeg cho composition 9:16), ghi DEMO.md; --animatic render clip nháp toàn bộ + contact sheet; --from-video cắt khung từ bản nháp người dùng đã xem |
scripts/render-final.mjs |
Render bản giao --quality delivery sau khi cổng final PASS (exit 5 nếu chặn) |
scripts/replace-in-file.mjs |
Thay chuỗi bằng regex, thay cho sed -i (khác nhau giữa macOS và Linux) |
scripts/eleven.mjs |
doctor, tts, sfx, music, audio-meta (cầu nối sang workflow HyperFrames) |
scripts/check-viet-pro.mjs |
Cổng viet-pro: biên bản ## viet_pro, script-table.v1.md + compare, lint từng file lời đọc và SCRIPT.md, CAPTIONS.md khi giao; dự án voice_source: clip lint script/captions.txt và script/on-screen.txt thay cho bảng kịch bản; --jev-audit (tuỳ chọn) chỉ in WARN |
scripts/voice-gate.mjs |
Cổng mà eleven.mjs tts/audio-meta gọi trước khi tạo giọng (exit 4) |
scripts/find-cases.mjs |
Tra 1003 case mẫu theo nhóm và từ khoá |
scripts/case-template.mjs |
Hướng nhanh: tạo build/TEMPLATE.md từ một case đã chọn |
scripts/rerank-cases.mjs |
(Tuỳ chọn, cần TYPESAFE_API_KEY) Jev xếp hạng khoảng 930 case theo brief; thiếu key hoặc lỗi API thì trả kết quả như find-cases |
scripts/case-features.mjs |
Gắn nhãn một lần cho mọi case vào data/case-features.jsonl; chạy lại khi data/cases.jsonl đổi |
scripts/jev-audit.mjs, scripts/jev-audit-eval.mjs |
(Tuỳ chọn) Jev rà lời đọc; đo precision theo pattern |
scripts/video-lint.mjs |
Bắt chữ bị ép thường, chữ quá nhỏ, nội dung lấn vùng UI ở khổ 9:16, nhãn rào đón trên hình (HEDGE_LABEL: ERROR khi voice_source: clip, còn lại WARN) |
scripts/captions-from-transcript.mjs |
Phụ đề từ transcript.json (Whisper) + captions.fixes.json (fix, unclear, ranges): ghi assets/fx/captions.js, script/captions.txt và captions.review.md để người dùng duyệt |
scripts/judge.mjs |
Gemini chấm một video (check) hoặc so hai phiên bản (pair) |
scripts/cut.mjs |
probe tìm khoảng lặng an toàn; apply-edl ghép footage theo danh sách cắt JSON |
scripts/brand.mjs |
check brand kit dùng chung (shared-assets/brand.json, mẫu ở references/brand.example.json); make-pitch tự đọc |
scripts/poi-fetch.mjs |
Tiện ích thật quanh một địa chỉ hoặc toạ độ từ OpenStreetMap, khoảng cách và phút đi bộ, ghi vào SOURCES.md |
scripts/composition.mjs |
init: tạo index.html từ skeleton (hàm hoạt hình, W(), B(), khối TIMING trống), khung theo aspect |
scripts/timing.mjs |
Ghi khối TIMING (cảnh, từng từ của giọng đọc, lưới phách) từ PLAN.md, words.json và *.beats.json |
scripts/beat-grid.mjs |
Đo BPM, phách đầu, phách kick, drop của file nhạc; --write ghi .beats.json; UNSTABLE khi tempo trôi |
scripts/word-sync.mjs |
So hàng chữ: trong ## Sự kiện với lúc giọng nói tới (PASS ≤ 150 ms, WARN ≤ 250 ms) |
scripts/audio-mix.mjs |
Dựng lại tiếng của composition bằng ffmpeg; giảm nhạc theo giọng từ data-fx-carve; --loudnorm, --stems |
scripts/mix-balance.mjs |
Đo nhạc thấp hơn giọng bao nhiêu dB lúc có lời (PASS 4–7 dB) |
scripts/reframe.mjs |
Sinh bản 9:16 hoặc 1:1 từ một index.html có khối html[data-ratio=…]; asset clone APFS |
scripts/styles.mjs |
61 style: find, show, css, suggest --direction, resolve --project (style theo cảnh), validate |
scripts/source-ingest.mjs |
Lưu văn bản gốc của URL, PDF, trang abstract arXiv (toàn văn thì truyền https://arxiv.org/pdf/) vào sources/ và ghi mục nguồn vào SOURCES.md; PDF cần pdftotext (poppler) |
8. Cập nhật và gỡ
- Cập nhật: chạy lại lệnh cài ở mục 1 (bản cũ được chuyển vào
~/.opus-video-backups//). Cài bằng git thìgit -C pull. Skill HyperFrames:npx hyperframes skills. - Gỡ: xoá thư mục
opus-videotrong thư mục skill của từng agent (và~/.config/opus-video/nếu không cần key nữa). viet-pro và HyperFrames là skill riêng, gỡ theo hướng dẫn của chúng.
9. Test
node --test "$HOME/.claude/skills/opus-video/scripts/tests/*.test.mjs"
Giữ dấu ngoặc kép để Node tự mở glob. Trên Node 24, dạng thư mục (node --test …/scripts/tests/) thoát 1 dù không có test nào hỏng.
Test cần project thật sẽ tự bỏ qua khi không tìm thấy project đó. Có thể trỏ tới project của bạn bằng OPUS_VIDEO_SMOKE_DIR và OPUS_VIDEO_ABM_DIR.
10. Xử lý sự cố
| Triệu chứng | Cách xử lý |
|---|---|
setup-check báo skill … not installed |
npx hyperframes skills rồi mở phiên agent mới |
skill viet-pro … self-test failed |
Cài lại viet-pro (mục 5) |
eleven.mjs exit 4 |
Cổng viet-pro chặn: chạy check-viet-pro.mjs --project . và sửa các dòng FAIL |
render-final.mjs exit 5 |
Thiếu PLAN.md, demo hoặc approval: trong DEMO.md: chạy check-preflight.mjs --project . --stage final |
npx chậm hoặc lỗi mạng lần đầu |
Chạy lại; npx cần tải hyperframes một lần |
Windows: ffmpeg không tìm thấy sau khi cài |
Mở terminal mới |
Giấy phép
Mã nguồn và tài liệu dùng giấy phép MIT (xem LICENSE). Corpus trong data/ lấy từ hai repo có giấy phép MIT. Prompt trong corpus thuộc về tác giả gốc, và mỗi dòng đều ghi tác giả cùng link. Repo không phân phối lại video gốc. scripts/cut.mjs phỏng theo ý tưởng của open-edit (Apache-2.0, © VEED LIMITED); xem NOTICE. 61 style trong data/styles/, ba tài liệu chi tiết style, skeleton composition, nguyên tắc chuyển động và các thuật toán beat-grid, reframe, resolve style phỏng theo skill motion-video của AgentKit (MIT, © 2026 BestAgentKits); xem NOTICE và third_party/agentkit-motion-video/LICENSE.
Recommended Tools
Try a different keyword or remove a filter.
Install
npx skillfish add abm-dungtq/opus-video