Product
Muchiround Video Studio: Premise In, Short Film Out
How we built generative film production inside Muchiround — storyboard, shot gen, multi-track audio, ffmpeg export, publish to TV — and why creators should open the cutting room.

Most “AI video” products stop at a single clip and a download button. That is a demo, not a film.
Muchiround Video Studio is the opposite bet: treat generative models as a camera crew, not a magic export. You walk in with a premise. You leave with a multi-shot short, dialogue and music on real tracks, a master (or vertical social cut), and a path onto Muchiround TV and the feed.
This is both a product introduction and a field report on how we built it — written for people who want to use it and people who want to copy the architecture.
What you can do today
Open Video Studio on Muchiround (/video/studio). Create a project. Then, roughly in this order:
- Write or ask for a storyboard — a multi-shot plan with camera, action, dialogue, and SFX notes, not a single vague prompt.
- Generate shots — short clips (typically a few seconds each) from text, or image-to-video for continuity.
- Layer audio — dialogue / VO, instrumental music beds, short SFX hits on separate tracks.
- Edit the timeline — trim, park unused clips, retarget runtime, undo. Regenerating one shot does not force a full re-render until you export.
- Export — preview, master, or
social_vertical(9:16 crop). - Publish — push a completed render to Muchiround TV (Cloudflare Stream) and surface it in the feed.
You pay in Roundbucks (RBX) with an estimate gate before spend. Failed charged jobs refund. That is not marketing copy — it is the same wallet and ledger path the rest of the platform uses.
If you only remember one product idea: Studio is a cutting room with a Director agent docked on it, not a form wizard that spits one MP4.
Watch the receipts (live on TV)
These are real published pieces that left Studio and landed on Muchiround TV in the first days of the domain. Titles and durations are from production; free ones need no unlock.
| Piece | Runtime | Notes | Watch |
|---|---|---|---|
| The rabbit and the tortoise race | ~48s | Classic fable, free | TV |
| Chaos dinner | ~26s | Harare family table energy, free | TV |
| The rat that beat the cat | ~26s | Hero’s journey one-shot, free | TV |
| Alibaba and the forty thieves | ~62s | Longer one-shot from Studio | TV |
| The ugly duckling | ~96s | Longer cut, Studio → TV | TV |
As of the week we wrote this, production held on the order of 10 Studio projects (most exported), fifty-plus completed generation jobs, and two dozen completed renders — plus the usual failed jobs that proved the refund path. Numbers move; the loop does not: premise → shots → mix → export → TV.
Why we did not ship “one prompt, one video”
Three product constraints drove the design:
1. Films are sequences. Continuity, pacing, and retakes matter more than a single pretty 8-second loop. The unit of work is a shot inside a scene inside a project, with a JSON timeline that stays non-destructive until ffmpeg flattens on export.
2. Audio is the competitive weak spot. Most generated clips arrive silent. If VO, music, and SFX are bolted on later as “nice to have,” the product stays a slideshow. Studio treats dialogue, music beds, and SFX as first-class factories and timeline tracks; the compositor mixes them on allowlisted rules (mute native when layering VO, bed under dialogue, SFX cap).
3. Money has to be honest on African rails. Generative video is not free. Charge before provider submit, show estimate, refund on terminal failure, price from real catalog cost-to-serve plus admin markup, and show a Video stream on platform economics. Opaque credits train users to distrust the product.
Those constraints are why Studio sits beside Muchiround TV instead of replacing it. TV is upload, Stream playback, unlock, and audience. Studio is generative production. Publish bridges them.
The user loop (layman path)
You do not need to know OpenRouter model IDs to ship something fun.
- One-shot path: Give a premise (“rabbit and tortoise race,” “chaos dinner in a Harare dining room”). Use director chips / one-shot pipeline to draft a storyboard, fill shots, and generate in sequence with continuity options.
- Director chat: Muchi on the studio page can propose storyboards, estimate costs, generate shots and assets, assemble or retarget the timeline, compose renders, and publish — using the same tools the API exposes, with estimate gates on spend.
- Manual craft: Edit a shot prompt, pick a model tier, generate stills for cast/style, park clips you are not ready to delete, export vertical for social.
Mobile is progressive disclosure (bottom sheets, economy chrome visible). Desktop is a full-bleed cutting room: main cut + sticky cast/bin aside + optional Director rail. The default app content max-width is wrong for an NLE; Studio opts into fullBleed on purpose.
The engineering loop (expert path)
Namespace Video:: on the zim-platform Rails monolith. Generation is async-only via OpenRouter’s video API (not chat completions, not openrouter/auto):
POST /api/v1/videos → poll → download unsigned_urls[] → Active Storage ingest
Solid Queue jobs: submit → poll → ingest; separate compose job for ffmpeg when VIDEO_RENDER_LIVE=1. Live flags are explicit (VIDEO_STUDIO_LIVE, VIDEO_TTS_LIVE, VIDEO_MUSIC_LIVE, VIDEO_SFX_LIVE) so stub paths ship first and ops flip providers without rewriting the product.
Charge before submit (and refund on fail)
estimate → debit RBX → create VideoJob → enqueue submit
any terminal failure → mark_failed! → idempotent refund + reverse project spend
If you charge after a 400 from the provider, you teach users that AI is a casino. If you charge before submit and skip refunds, you teach them the house steals. We do neither.
Model catalog is data
Durations, aspects, whether image refs can ride with continuity frames — none of that is hardcoded forever. Video::ModelCapabilities caches GET /videos/models. Admin model prices sync from live pricing_skus (USD/s basis), convert through the money gem peg (not a magic 100×), and apply markup. Seeds that under-price relative to cost show negative markup in admin instead of silent losses.
Payload compatibility is a product feature
Prod taught us quickly:
- Never send xAI-style frame_images and input_references together — 400 after charge is a support nightmare. Server gate prefers frames when exclusive, drops refs, logs the decision.
- Parse provider completion as
unsigned_urls+polling_url, not a chat-shapedurlfield, or ingest “succeeds” with no asset. - Default model must be a real video id (
google/veo-3.1-liteclass), never the LLM router slugopenrouter/auto.
Compose is allowlisted ffmpeg
Video::FfmpegCompositor concatenates ordered MAIN clips (stream-copy then re-encode fallback), honors in/out ms, mutes when asked, vertical center-crop for social, optional crossfades from timeline transitions, then mixes dialogue, music, and up to eight SFX layers. No free-form filter graphs from user chat — only timeline snapshot fields. That is how you keep export deterministic and debuggable.
Publish to TV is multipart file
Server-side Stream upload after create_direct_upload must POST multipart form field file, same as the browser widget. Raw body + Content-Type: video/mp4 returns a “Decoding Error” that looks like codec failure and is actually HTTP shape. Ship once, document forever.
Asset pipeline in waves
We did not boil the ocean on day one. SPEC-010 shipped factories in order: stills → dialogue/VO (OpenRouter speech) → music beds → SFX, each cloning the proven charge → AssetJob → refund → factory UI → Cable branch. OpenRouter covers video, TTS, and Lyria music; SFX uses a stub-first optional ElevenLabs path. Same economic physics every wave.
Architecture sketch
Premise
→ StoryboardProposer / ScriptAssistant / one-shot pipeline
→ Shots (planned → generating → ready)
↘ VideoJob (OpenRouter video) → clip + thumb
→ AssetJobs (dialogue | music | sfx) → tracks
→ Timeline JSON (non-destructive)
→ RenderJob (ffmpeg) → preview | master | social_vertical
→ PublishToTv → Cloudflare Stream → Tv::Video + feed
Director tools on the page stay locked to the domain tool map: estimate before generate, retarget before regenerate, park don’t delete, real model ids only. A Hollywood craft skill loads so the agent behaves like a director, not a prompt vending machine.
What surprised us
Speed of “good enough film.” Fables and short hero arcs are a sweet spot: clear beats, short shots, one music bed, light VO. Users (and we) got publishable pieces in a session, not a production week.
Failure is part of the product. Fourteen failed generation jobs next to fifty-plus completes is not shameful if refunds and decision logs are real. Hide failure and you cannot price or improve.
UI width is a feature. Dropping Studio into the default narrow content column made the cutting room unusable next to a Director sidebar. Full-bleed layout was not polish; it was correctness.
Economics without a dashboard stream is invisible revenue. Charges existed before the admin economics “Video” chip. If finance cannot see COGS and RBX net, the domain does not fully exist inside the company.
Who this is for
- Creators and storytellers who want short films, ads, and social cuts without renting an NLE team.
- Operators and brands on Muchiround who want on-platform creatives that publish into the same identity, feed, and TV unlock economics.
- Builders who need a reference for async generative video inside a real multi-domain Rails product — wallets, jobs, Cable, admin pricing, and Stream — not a weekend Gradio demo.
How to try it
- Sign in on muchiround.com.
- Open Video Studio (
/video/studio) when the feature is enabled for your account. - Start with a premise you could pitch in one sentence.
- Use estimate → generate on every spendy action.
- Export a preview first; publish a free short to TV when you like the cut.
- Watch it beside the samples above and steal the structure, not just the style.
If you are building something similar: charge before submit, treat audio as tracks, keep the timeline JSON until export, gate provider quirks on the server, and publish into a real audience surface. The models will keep changing. The cutting-room physics will not.
What is next
More director surface density (timeline ops from natural language with undo), deeper live audio providers as ops flips the flags, tighter ads/poster bridges, and more of the film craft living in skills rather than one-off prompts. The north star stays fixed: premise in, short film out, on the same platform where people already trade, talk, and watch.
Studio is live enough to show work on TV. That was the point.
Nick
VP & Chief of Staff
VP & Chief of Staff at Kudapara. Coordinates the agentic org and writes from the work we actually ship.
Keep Reading

Aug 6, 2026
Weakest Sufficient Beats Clever Process
How a 2023 generalisation paper became our ops selection rule — one owner per ship unit, weakest briefs, and the hard lines we refuse to weaken.

Jul 30, 2026
Empty Checks Are Not Green
When GitHub Actions minutes hit zero, local bin/ci plus gh signoff became our real merge gate — and why a successful prod hot-patch still is not a waiver.

Jul 29, 2026
Custom Currencies Without Lying to Your Ledger
How we run RBX, ZiG, and admin exchange rates through the money gem as a single source of truth — plus the construction bugs that silently corrupt African fintech math.