01Pipeline & model/tooling choices
Năm khâu, mỗi khâu ghi rõ input/output và model — kèm nhãn phân biệt có bằng chứng từ PAM và giả định có lý do, vì PAM không có video-avatar để đối chiếu trực tiếp.
Reasoning / copywriting
Out: script có
segment_id, câu thoại, thời lượng dự kiến, toneTTS
segment_id, ngôn ngữ, giọng, tốc độ, cảm xúcOut: audio nháp rẻ + audio full sau duyệt
Video-GPU
Out: clip avatar khớp miệng theo segment
Code-based compositing
Out: project multi-scene + animatic low-res để duyệt
Render & publish
Out: MP4, kèm preview + metadata
Vì sao Remotion cho khâu Scenes/edit
Code-based composition phù hợp hơn generate-video một lần vì có thể kiểm soát từng scene, timing, text và dependency; sửa một scene không nhất thiết phải sinh lại toàn bộ clip.
Export: recompose rẻ, trừ khi crop mất avatar
Remotion cho phép recompose aspect ratio trên cùng avatar clip và audio, nên nhiều trường hợp chỉ cần thay đổi layout thay vì regenerate từ đầu. Tuy nhiên, nếu framing mới làm crop mất mặt hoặc vùng quan trọng của avatar, segment đó phải được sinh lại — đây là giới hạn khác với resize ảnh thông thường, vì ảnh không có nhân vật cần giữ nguyên vị trí, avatar thì có.
02Review loop
Video đắt và chậm hơn ảnh nhiều bậc, nên mỗi khâu đắt phải có một đại diện rẻ đứng trước nó để duyệt — giống nguyên tắc Directions của PAM (greyscale trước khi tốn công render màu).
| Khâu | Đại diện rẻ để duyệt | Mục tiêu kiểm tra |
|---|---|---|
| Voice | TTS bản nháp chi phí thấp — vài câu đại diện hoặc toàn bộ chất lượng thấp | Giọng, tốc độ, phát âm, cảm xúc — chưa phải audio cuối |
| Scenes | Storyboard/animatic low-res: thumbnail tĩnh hoặc clip chuyển cảnh đơn giản | Bố cục, thứ tự cảnh, thời lượng tương đối, tính liên tục — chưa lip-sync, chưa hiệu ứng |
Khi user sửa ngược dòng (vd: sửa script sau khi đã duyệt scene)
Hệ thống không âm thầm giữ kết quả cũ. Nó hiển thị impact preview: thay đổi này sẽ làm mất hiệu lực voice, timing và các scene phụ thuộc; render hiện tại vẫn được giữ để khôi phục nhưng cần sinh lại các bước sau.
Các bước đã duyệt không bị xóa mà được lưu theo version. Hệ thống chỉ invalidate những phần thực sự phụ thuộc vào đoạn bị sửa, thay vì chạy lại toàn bộ video.
Giới hạn của segment_id — không hứa mọi sửa đổi chỉ render một đoạn nhỏ
- Trường hợp đơn giản: mỗi đoạn script có
segment_id, mỗi scene tham chiếu segment đó — hệ thống invalidate chính xác ở mức scene. - Trường hợp phức tạp (một scene nhiều câu, hoặc voice-over trải dài nhiều scene): mapping và timing phức tạp hơn — hệ thống đánh dấu toàn bộ vùng liên quan cần regenerate, không giả vờ xác định chính xác từng phần.
- Avatar không nên coi mỗi segment hoàn toàn độc lập — cần dùng chung avatar reference, voice profile, camera/framing, style để giữ nhận diện nhất quán. Nếu model giữ identity/reference tốt: sửa một câu chỉ render lại segment đó (+ vài giây hai đầu tránh lỗi chuyển cảnh). Nếu thay đổi làm lệch timing dài / biểu cảm liên tục / tương tác giữa hai scene: phải invalidate cả một segment block liên quan.
Remotion giúp việc này có cơ sở kỹ thuật vì scene được biểu diễn bằng code và có thể gắn metadata/dependency rõ ràng, nhưng mapping script → scene vẫn là giới hạn thiết kế, không phải tự nhiên Remotion giải quyết hết.
03Cost & latency
Đây là phần đề bài nêu tên riêng — không phải một câu "video tốn kém hơn ảnh" cho có.
Vì vậy avatar/lip-sync full chỉ chạy sau khi script, voice và storyboard đã được duyệt — nếu user sửa script trước đó thì tránh trả lại đúng chi phí GPU lớn nhất.
Ước tính trước khi tốn tiền
Trước khi render full, UI hiển thị thời gian và chi phí ước tính dựa trên thời lượng video, số segment, độ phân giải và số lần render; user phải xác nhận nếu vượt budget.
Latency — không bắt user ngồi chờ trơ
Dùng async job như PAM: user bấm render rồi có thể rời đi, hệ thống enqueue job, xử lý nền và gửi thông báo khi hoàn tất hoặc lỗi.
04Storyboard — hành trình từ prompt đến video publish
Brief ví dụ: "Giới thiệu VinSmart Future trong 45 giây, có avatar AI và 3 scene: giới thiệu VSF, các lĩnh vực AI đang phát triển, lời mời tìm hiểu/chào mừng ứng viên." Giữa chừng user sửa câu mở đầu — hành trình này cố tình đi qua nhánh invalidation, không chỉ đường thẳng thuận lợi.
User mở màn hình Create video, nhập: "Giới thiệu VinSmart Future trong 45 giây, có avatar AI và 3 cảnh." Chọn ngôn ngữ, đối tượng xem, phong cách rồi bấm Generate plan.
Script hiển thị trong editor dưới dạng các block thoại theo từng cảnh, kèm thời lượng dự kiến. segment_id chỉ dùng ở backend, user không cần nhìn thấy.
User nghe bản TTS nháp và xem 3 scene dạng storyboard/animatic low-res gồm avatar, background, text và thời lượng. Có thể sửa lời thoại, đổi giọng hoặc chỉnh cảnh trước khi duyệt.
User click vào block thoại đầu tiên, sửa trực tiếp rồi bấm Review changes. Impact preview báo voice, timing và avatar của Scene 1 sẽ bị làm lại; Scene 2–3 không bị ảnh hưởng, kèm ba nút: Regenerate affected parts · Keep existing · Create branch.
User chọn Regenerate affected parts. Màn hình hiển thị tiến trình xử lý voice/avatar của Scene 1; Scene 2–3 vẫn xem được nhưng được đánh dấu là phiên bản cũ.
Sau khi proxy được duyệt, user bấm Render full video. Hệ thống hiển thị thời gian và chi phí ước tính theo thời lượng, số segment và độ phân giải; user xác nhận trước khi job chạy bất đồng bộ.
User nhận thông báo và mở bản preview full-quality để kiểm tra hình, tiếng, caption và chuyển cảnh. Video chưa được publish ngay; user phải bấm Approve for export hoặc quay lại chỉnh sửa.
User chọn định dạng MP4 và tỷ lệ 16:9, 9:16 hoặc 1:1 trong màn hình Export. Hệ thống recompose layout nếu có thể, sau đó tạo file/link chia sẻ và lưu project, artifact, phiên bản đã duyệt cùng audit trail.
05Giới hạn & điều tôi không hứa
- TTS và avatar/lip-sync là giả định về capability, không gắn tên model cụ thể — PAM không có bằng chứng cho hai khâu này, chỉ có cho reasoning (Claude) và ảnh (Nano Banana/GPT Image) và multi-scene (Remotion).
segment_idkhông hứa mọi chỉnh sửa chỉ render lại một đoạn nhỏ — phụ thuộc khả năng giữ continuity của avatar model; trường hợp phức tạp phải invalidate cả segment block.- Recompose aspect ratio rẻ chỉ đúng khi framing mới không crop mất avatar; nếu crop, segment đó phải sinh lại — giới hạn khác với resize ảnh của PAM.
- Giữ nguyên giới hạn PAM: video không resize/version đơn giản như ảnh khi thay đổi nội dung, audio hoặc timing lớn.