How it grew
It started as me prompting models by hand, swapping characters into ads that had already worked, and stitching clips into variations. Once a format proved itself, I rebuilt it in n8n, with creative files in Google Drive and metadata in Google Sheets, so the team could test ideas fast.
n8n stopped being enough when we needed Python post-processing. Generated clips labelled 1080p didn’t always come out at exactly 1920×1080, and our setup wouldn’t run the scripts that fixed them. After talking it through with the team, we agreed to move to a proper internal app: first Python and Streamlit, then a Next.js frontend and FastAPI backend built for the long run.
I moved pipelines over one at a time. The old app kept running the whole way, with links pointing to each pipeline’s new home, so marketing never lost a working day.
What it does now
- 21 ad formats: cloning ads that already work, static images, ideation from Reddit and Google Trends, UGC, cinematic, interview and podcast styles, AI avatars, character swaps and dubbing.
- Costs before clicks: each pipeline estimates the spend for the requested number of ads from the models’ published pricing, before anything runs.
- Throughput: 20 parallel workers generate across pipelines. Normal days run 10 to 250 ads; peak days have reached about 1,000.
Keeping quality honest
Generative video loves extra hands and props held at impossible angles. After each generation, a Gemini check looks for those glitches and returns a simple valid or flagged result, and a person decides whether to regenerate, skip or flag. Feedback is tracked per ad format and folded back into the prompts, so the same mistake is less likely to come back.
The numbers, honestly
Roughly 10,000 ads generated, and an estimated 7,000 to 8,000 of them published on Meta. These are working estimates rather than an audited report, and ad performance itself was measured by the marketing team in their own analytics tool.


