TL;DR

Videofy Minimal là một tool local để biến bài báo thành video ngắn cho digital signage screens. Nó lấy nội dung từ Reuters, AP hoặc một URL test trên web, dựng manuscript ngắn, ghép media, tạo voiceover, rồi render thành video cuối cùng qua một workflow review trong CMS UI.

Điểm đáng chú ý là toàn bộ stack được thiết kế để chạy trên laptop với chỉ OpenAIElevenLabs credentials. Nói cách khác: đây không phải một demo chơi cho vui, mà là một bản tối giản của pipeline sản xuất video có người kiểm duyệt ở giữa.

Illustration of Videofy Minimal workflow
Illustration of the review flow: article, manuscript, visual selection, narration, and final render.

Videofy Minimal làm gì?

Repo này giữ lại lõi của Videofy: fetch content - tạo manuscript - match visual - sinh narration - render video. Sau khi ingest bài viết, hệ thống không nhảy thẳng sang render ngay lập tức. Thay vào đó, nó đi qua một vòng review để editor có thể sửa nội dung, đổi media, rồi chạy lại.

Đó là lý do dự án này thú vị hơn một pipeline AI tự động hóa hoàn toàn. Với news production, tốc độ quan trọng, nhưng độ tin cậy và quyền kiểm soát của editor còn quan trọng hơn. Videofy Minimal chọn cách balance cả hai.

Kiến trúc chính

Ở mức cao, CMS là lớp điều phối, FastAPI xử lý data và generation, còn Remotion chịu trách nhiệm preview và rendering. State của từng project được lưu local dưới thư mục projects/<projectId>/.

CMS UI (Next.js)
  - điều khiển workflow
  - review và chỉnh sửa

FastAPI API
  - fetch / generate / process
  - gọi OpenAI và ElevenLabs

Preview player (Remotion)
  - xem trước video trước khi render

Local renderer
  - xuất MP4, audio và project artifacts

Repo còn có một kiến trúc plugin cho fetcher. Mỗi fetcher nằm dưới fetchers/<id>/ và có thể xử lý một nguồn content riêng. Bản hiện tại đi kèm reuters, apweb.

Cấu trúc project

Mỗi lần chạy được lưu thành một project riêng. Cách này giúp hệ thống dễ debug, dễ replay và dễ audit vì mọi input, intermediate state và output đều nằm trong một chỗ.

projects/
  <projectId>/
    generation.json
    input/
      article.json
      images/
      videos/
    working/
      manuscript.json
      cms-generation.json
      config.override.json
      analysis/
      audio/
      uploads/
    output/
      processed_manuscript.json
      render-vertical.mp4
      render-horizontal.mp4

Đây là điểm thực dụng nhất của repo: không giấu state trong memory mơ hồ, không phụ thuộc quá nhiều vào dịch vụ ngoài. Khi một video lỗi, bạn mở project folder lên là thấy ngay nó hỏng ở bước nào.

Vai trò của CMS

CMS không chỉ là một dashboard đẹp. Nó là operator surface của cả hệ thống. Editor dùng nó để chọn nguồn, review manuscript, tinh chỉnh media, kiểm tra preview và bấm render lại khi cần.

Trong workflow này, AI không thay editor. AI chuẩn bị bản nháp có cấu trúc tốt hơn, còn editor giữ quyền duyệt cuối cùng. Với các newsroom hoặc team làm content cho màn hình nội bộ, đây là phần thiết kế quan trọng nhất của hệ thống.

AI và TTS

Phần backend chỉ cần hai loại credential: OpenAI để xử lý các bước generation và ElevenLabs để tạo giọng đọc. Đây là một lựa chọn thực tế: giảm số lượng tích hợp cần vận hành, nhưng vẫn đủ để chạy end-to-end trên máy local.

Nếu đọc README kỹ, bạn sẽ thấy repo deliberately bỏ bớt các integration nội bộ và hạ tầng phức tạp của bản Videofy đầy đủ. Tức là mục tiêu không phải clone nguyên hệ thống production, mà là giữ lại core workflow để team nhỏ có thể thử nghiệm và mở rộng.

Quickstart rất thẳng

README yêu cầu một môi trường macOS với Homebrew, Python 3.12, Node và ffmpeg. Sau đó:

  1. Copy .env.example thành .env.
  2. Thêm OPENAI_API_KEYELEVENLABS_API_KEY.
  3. Chạy uv syncnpm install.
  4. Khởi động bằng make dev.

Repo cũng hỗ trợ Docker Compose nếu muốn chạy trong container thay vì chạy trực tiếp trên laptop. Với người muốn thử nhanh, phần quan trọng là CMS và API đều có endpoint local rõ ràng để debug.

Fetcher plugins

Thiết kế fetcher của Videofy Minimal khá sạch: mỗi source news có thể được cài như một plugin riêng. Điều này hữu ích vì Reuters, AP và web fetcher không cùng một kiểu data contract, nhưng pipeline phía sau lại muốn nhận cùng một shape để xử lý tiếp.

Về mặt kiến trúc, đây là một lựa chọn tốt hơn việc nhồi mọi nguồn vào một khối code lớn. Source nào thay đổi thì chạm vào fetcher của source đó, không kéo theo cả hệ thống.

Hotspot model là phần thêm có ý nghĩa

Repo còn có phần hotspot model để chọn vùng focus tốt trên ảnh báo chí, giúp crop và motion center hợp lý hơn. Nếu model này không sẵn sàng, pipeline vẫn chạy với fallback strategy. Tức là hệ thống được thiết kế để degrade gracefully, không phụ thuộc tuyệt đối vào một thành phần ML duy nhất.

Đây là một chi tiết nhỏ nhưng rất đúng tinh thần production: không để một model phụ làm sập toàn bộ pipeline.

Ai nên quan tâm?

  • Newsroom team: cần một workflow video hóa tin tức có review trước khi publish.
  • Content ops: muốn chuyển bài viết thành video ngắn cho màn hình nội bộ hoặc digital signage.
  • AI engineer: muốn xem một ví dụ thực tế của pipeline manuscript - media - narration - render.
  • Product team: cần một template để thiết kế human-in-the-loop generation thay vì tự động hóa mù.

Trade-offs rõ ràng

Videofy Minimal cố tình tối giản, nên nó có vài giới hạn hiển nhiên. Nó không phải một CMS đa tenant hoàn chỉnh, không che hết complexity của production newsroom, và không tối ưu để thay thế toàn bộ stack nội bộ của Schibsted.

Nhưng chính sự tối giản đó làm nó hữu ích: bạn thấy rõ ràng ranh giới giữa fetch, generation, review và render. Với team nhỏ, đây là điểm khởi đầu tốt hơn rất nhiều so với một hệ thống đóng và quá nhiều abstraction.

Kết luận

Nếu bạn muốn học cách dựng một pipeline biến bài báo thành video ngắn mà vẫn giữ được chỗ cho con người duyệt, Videofy Minimal là một repo đáng xem. Nó không cố phô diễn AI theo kiểu demo bóng bẩy. Nó chỉ làm một việc khá rõ ràng: lấy content, biến nó thành video, và cho editor quyền kiểm soát trước khi xuất bản.

via: schibsted/videofy_minimal, README.md, example_video_e24.mp4.