extrovid
extrovid is an AI-native director and editor. You give it a one-line idea; it writes the brief and script, casts a consistent cast, develops a look, boards the shots, generates and reviews the video, adds voiceover, and hands you a rough cut. One prompt to a finished short, with a director you can talk to at every step.
Inspiration
Generative models can make a shot. They can't make a film. The gap is everything a director and editor do between the idea and the cut: holding a character's face steady across scenes, keeping the light consistent, picking the take that works, trimming to a rhythm. We wanted a tool that owned that creative and quality-control work, not just the raw generation. The human supplies the idea and presses a few start buttons. The machine directs.
What it does
You write a prompt. The director can ask up to four clarifying questions first. Then it runs a per-stage pipeline — brief, script, cast, look development, storyboard — where each stage stops until you trigger the next. Cast becomes portraits, look-dev becomes concept images, the storyboard becomes keyframes. Shots are generated best-of-N, and an AI dailies pass reviews the takes and prints the winner. Voiceover is synthesized, and ffmpeg assembles the rough cut: burned-in captions, ducked music, voiceover on top. Publish to a public gallery when it's a take. Revise, retry, reorder, trim, and recast are always there as optional levers, through the panels or the Director chat.
How we built it
The backend is FastAPI with PydanticAI agents over an async SQLModel/PostgreSQL stack, Alembic migrations, media in S3-compatible storage served by presigned URLs, and a bundled ffmpeg for the cut. The frontend is Next.js and React: a three-pane workstation fed by one SSE stream.
Every model call runs on Qwen Cloud / Alibaba DashScope, through a single provider seam:
- Script — qwen3.7-max
- Every other agent (brief, cast, look-dev, storyboard, clarify, revise, director, import, review) — qwen3.7-plus
- Images (concept frames, keyframes, portraits) — wan2.7-image-pro
- Image edits — qwen-image-edit-plus
- Voiceover — qwen3-tts
- Video (t2v / i2v / r2v / edit) — HappyHorse or Wan 2.7, both on the same DashScope async submit-then-poll transport
Because every provider sits behind that seam, a USE_MOCK_* flag swaps each one for a
deterministic offline mock. The entire pipeline runs locally, with no keys and no cost — which is
how ~236 backend tests run fully offline.
The differentiators live in the machinery: best-of-N generation with the dailies review auto-selecting the winning take; keyframe-first continuity chaining, where each shot inherits the previous frame to hold character and look; the Director chat for natural-language revision at any step. Long video jobs are async — submit, then poll — reconciled by a background in-process loop, with live progress streamed to the UI over an SSE pub/sub bus. Hidden work surfaces as agent-trace chips: "checking continuity... picked best of 3."
Challenges we ran into
- Long-running video jobs. The reconciler runs in-process with no leader election, so it's pinned to a single instance — and DashScope result URLs expire in 24 hours, so we persist media before they go stale.
- SSE through proxies. Buffering swallowed our live progress until we tuned headers and flushing so events actually reach the browser.
- Qwen3 thinking mode. It rejects
tool_choice=required, which we leaned on for structured output, so we reworked how we coax agents into schema-clean responses. - Continuity across independently generated shots. Each shot is its own generation; holding a face and a look steady took keyframe chaining, not hoping the models agreed.
- Cost control. Per-user daily caps plus the mock seam keep spend bounded and development free.
Accomplishments we're proud of
A full idea-to-cut pipeline that runs unattended, end to end, on Qwen Cloud. A best-of-N and dailies loop that makes an editorial decision, not just pixels. And a codebase that runs entirely offline: deterministic, testable, demoable without a key.
What we learned
Async video is the hard part, not the prompts. Continuity is an architecture problem, not a prompt problem. And a clean provider seam is worth building first — it gave us offline tests, cost safety, and a real cloud path from the same code.
What's next
Migration to Alibaba Cloud (ECS, RDS PostgreSQL, OSS). A reconciler that survives multiple instances. More director controls — pacing, transitions, music. Longer edits. And more ways to say "print it."
Built With
- alibaba
- next.js
- python
- qwen
Log in or sign up for Devpost to join the conversation.