
Demo video
Watch the product walkthrough
Soundstage
A studio for Indian D2C brands and agencies: speak a brief as a voice note in Hindi, Hinglish or English, and get an on-brand 9:16 reel, written, voiced, rendered and scored by an AI reviewer before you see it
Timeline
November 2026
Role
Creator
Team
Solo
Status
In-progressTechnology Stack
Key Challenges
- Voice Brief to Finished Reel
- An Honest AI Reviewer
- Claims Only From the Catalogue
- One Look per Reel
- Many Reels on One Small Server
- Agency Data Kept Apart
Key Learnings
- Agent Loops With a Separate Judge
- Video as Code (HTML Frames to MP4)
- Code-mixed Speech in Indian Languages
- Postgres as a Job Queue
- Row-level Security in Practice
- Product Film Production
Soundstage: your film crew, in a voice note
Overview
Soundstage turns a spoken brief into a finished brand reel. A marketer records a voice note the way they would on WhatsApp, in Hindi, Hinglish or English, rambling included. Soundstage writes a script from the brand's own catalogue, voices it, renders a 9:16 reel for Instagram Reels and YouTube Shorts, and has a separate AI reviewer score it before anyone sees it.
I built it solo for Gnani AI's Great Indian AI Internship Challenge. Gnani's models do the speech: Prisma v3.0 hears the brief, and Timbre v2.5 voices every line.
The video above is one real run, filmed unedited and sped up only while the AI works. The brands in it, Brewhouse and PulseFit, are demo brands, and the voice notes use synthetic voices.
The 52-second launch film.
Why I built this
A brand ad usually takes an agency about three weeks: a brief, a script, casting, a shoot and an edit. Small D2C brands make many reels a month and cannot afford that loop for each one. What they do have is a founder or a marketer who can describe the reel in thirty seconds.
The hard part is not generating a video. It is making one a brand can post: the right product, the right price, nothing invented, and a cut that holds attention. So Soundstage is built around a reviewer that is strict by default.
What it does
| Step | What happens |
|---|---|
| Brief | Speak or type the brief. Gnani Prisma transcribes it code-mixed: English stays Latin, Hindi stays Devanagari. |
| Script | A Director agent writes a short script from the brand's catalogue and photos. It may only claim what the catalogue says. |
| Approve | In story mode you approve a still for every shot, or change the plan in plain words. One typed note, "cafe mein karo" ("do it in a café"), moved the whole plan in 12 seconds. |
| Render | The reel is built as HTML and animation timelines, then rendered frame by frame to MP4, with word-timed captions and Gnani Timbre voices. |
| Review | A separate reviewer watches the render: 10 weighted criteria and 9 hard gates (no invented claims, no blank frames, no overlapping text, the right language), 85/100 to pass. |
| Fix | Below 85, the reviewer writes fixes with timestamps, and the Director renders again. |
| Look | Pick a look from the style library: Kinetic, Diary, Risograph, Chalkboard, Keynote or Swiss. The same story changes paper, type, photo treatment, labels and cuts. |
Results
- A 14-second Hinglish voice note became a reel scored 91.8/100 in 3 minutes 36 seconds of real run time.
- A rambling 35-second Hindi note scored 67.5 on its first round, was sent back with timestamped fixes, and scored 93.8 on the second.
- A gym-brand reel went from 83.8 to 96 after the reviewer's fixes.
- Across 59 measured runs, the median run took 6.1 minutes, and the Director's model cost was a median of $0.46 per reel.
How it works
Core components, runtime flow, and durability boundaries.
The Studio runs on Vercel. Supabase holds the data and the files: agencies, brands, assets, reels, run steps and a job queue, with row-level security so each agency sees only its own work. The engine runs as a worker on a small VPS. It takes jobs from the queue, rebuilds the brand from Supabase, runs the Director, and uploads the finished reel and every step of the run, which the Studio shows live.
Engineering decisions
The judge is not the author
The Director and the reviewer are different models with different instructions. The reviewer starts from what the reel actually does, must name a time and a flaw for every point it takes away, and fails the reel outright on a hard gate, whatever the score. Its fixes go back to the Director as data, not as a suggestion.
Claims come from the catalogue, checked in code
Prices, offers and specs may only come from the brief, the brand's catalogue or its profile. The tools that write the script and build the reel refuse a number they cannot trace, so an invented price never reaches the render.
Video as code
Each reel is a web page with animation timelines keyed to the spoken words, rendered frame by frame to MP4. That makes every frame repeatable, testable and cheap to change, and it lets a look from the style library restyle every scene through one CSS layer.
Most of a run is waiting
A run spends about 84% of its time waiting on models: the Director, the reviewer and the voices. Only the build and the render use the CPU. So one 4-core worker runs several reels at once, and a lock lets only one of them render at a time.
Postgres is the queue
Jobs are rows. A worker claims one with FOR UPDATE SKIP LOCKED, renews a lease every 15 seconds, and a worker that dies loses its lease, so the job goes back to the queue. Leases belong to one attempt, so a worker that lost its job can never finish someone else's.
Agencies stay apart
Every table and file path is guarded by row-level security. Users write through database functions that check membership, limits and inputs. The worker holds the only service key, and it refuses any file path outside the brand it is working on.
Testing
The engine has 551 automated tests, including the reviewer's rubric, the reel builder's refusal rules, the worker's path checks and the CPU lock. The database has SQL checks for the queue, access between agencies and file keys, each run in a transaction that is rolled back.
Access
The landing page is public, and the Studio is invite-only while it is in testing. The source code is private.