Inspiration
A small business in Turkey that wants a video ad has two options: pay an agency roughly the price of a month's rent, or shoot it on a phone and look like it. Most choose the second and lose to competitors who can afford the first. The bottleneck isn't the camera — it's the production judgement between having a product and having a finished ad: what to say, how to break it into shots, which technique each shot needs, whether the result is good enough to ship. We set out to automate that judgement, not just the pixel generation.
What it does
A user types one sentence — "an ad for a small coffee shop in Istanbul that roasts
its own beans" — and a Gemini planner decides whether it's an image or video job,
the aspect ratio, the duration, and the scene count. It writes the script, splits it
into scenes, derives an asset list of recurring characters/props/locations, generates
only what's missing, and renders every scene with the reference images of the assets
it declares, under a shared seed. Given a product URL, it reads the page itself via
Gemini's url_context tool and writes the brief from it — no scraping on our side.
Every job reserves credits before work starts and settles or refunds after,
atomically; pricing lives in a database table, never in a prompt. The user never
picks a model, a resolution, or a duration — across 771 production jobs the planner
has chosen five different aspect ratios and five different durations, deciding per
request rather than defaulting.
How we built it
Next.js 16 + Supabase as the control plane (auth, credit ledger, job orchestration, realtime status), Python/FastAPI as the render plane. Gemini API (via Google Cloud) handles planning, script writing, translation, TTS and music generation. Actual image/video rendering runs across multiple providers behind kie.ai, normalized into one job-status model. FFmpeg assembles and concatenates the final cut, burns subtitles, and adds watermarks. The credit engine is the one piece of the codebase we treat as untouchable: its core functions are byte-frozen and every change to them requires a mandatory review gate, because a bug there means either double-charging a user or giving away renders for free.
Challenges we ran into
Keeping visual style consistent across assets that are each generated in an independent model call was harder than it sounds — a project's reference images would drift in lighting and time-of-day even with an identical style brief, because the model would follow a scene's literal wording over the project's overall style. We ended up locking style deterministically in code rather than trusting the prompt alone. Video generation also fails far more often than image generation (our capability-level success rates make that visible rather than hiding it), which meant the credit engine's reserve/refund correctness mattered more than we first assumed — we now measure it directly against the ledger, not against a job's status field alone. Smaller but real: our first Japanese subtitle burn came out as boxes, because the default FFmpeg font had no CJK glyphs.
Accomplishments that we're proud of
771 production jobs since 30 June 2026, 100% inside the competition window: 694 succeeded, 77 failed, zero stuck in queue. Of the 77 failures, 72 had reserved credit and every one of the 72 was refunded automatically — zero unrefunded failures, zero orphaned reservations, no human ever had to intervene. The remaining five failed validation before any credit was touched. 11 distinct capabilities have run in production across 13 models and 51 projects. We're proud that every number in this submission comes from a live log line, not from a demo we staged for the occasion.
What we learned
That "AI-native" only means something if the model is making decisions with consequences — format, cost, capability, retries — not just producing pixels while a human still makes every call around it. That money has to be deterministic: the moment we let anything resembling a price or a balance be model-generated, we'd have no way to prove that number was ever right. And that honesty about failure rates is itself evidence — a classifier that turns raw upstream errors into honest user-facing messages, and a ledger that can prove zero unrefunded failures, earned more trust internally than a fake 100% success number ever would have.
What's next for Azamol Video Studio
Enabling the self-inspection layer we've already built (FFmpeg silence detection + a Gemini vision pass on the final frame, including reference-identity consistency) in production, once we've measured its cost per render. Letting users bring a reference video directly from a URL (YouTube/Instagram), which today only accepts direct video files — a real request from an early user this week. And growing past our first handful of external customers into a repeatable acquisition motion, now that the production side has proven it can run unattended.
Built With
- fastapi
- ffmpeg
- gemini
- google-cloud
- nextjs
- postgresql
- python
- railway
- react
- supabase
- typescript

Log in or sign up for Devpost to join the conversation.