Case study · 2026
dubidu: films dubbed into Romanian, in real time, for children who cannot read subtitles yet.
A Chrome extension turns the subtitles on Netflix or YouTube into Romanian voices, one for each character. The film's music and effects stay.
- Role
- Founder. Product, design, code, data
- Period
- October 2026 - present
- Status
- Beta. Launch on 1 December 2026
- Platforms
- Chrome extension, web, voice server
- 8 days of intensive work, from v0.7 to v0.19
- 429 commits across 3 repos
- 237 automated tests on the backend
- 31 languages in the voice engine
The numbers come from the git history of the three repos and from the code, on 4 November 2026. The 8 days are 28 October - 4 November; I had built the first versions before that.
01 · The problem
"Mum, what is he saying?"
In Romania, foreign films on streaming platforms come with subtitles. A child under 8 or 9 cannot read fast enough to keep up. The parent has two options: translate the whole film out loud, or turn it off after ten minutes.
I counted. Of 244 Netflix family titles available in Romania, 39% have no Romanian audio track. Platforms dub the big titles into the big languages. The rest only get subtitles.
I am the father of two boys, so I also looked at the problem as a parent.
02 · What it does
One button on the video. The characters speak Romanian.
The parent opens the film on the platform they already pay for and presses the dubidu button. The lines come in Romanian, each character with its own voice, while the music and effects stay the original ones.
03 · The path
Four versions, three changes of direction.
I started with ChatGPT up to v0.7, then continued with Claude Code. Every experiment has a document with the date, the result and its limits. That way you can see why I dropped an idea, not just that I dropped it.
- v0.1 - v0.7
Live translation, audio to audio
The first version sent the tab audio to Gemini Live and played back the translation. I heard Romanian on YouTube and Netflix, but with about 3 seconds of delay. The English could still be heard underneath, and when I turned the whole mix down, the music disappeared too.
It works, but it sounds like an interpreter, not a film.
- v0.8
Remove only the dialogue from the mix
An audio filter in the browser (2048-sample STFT, 150-7,000 Hz band) removes what sits in the stereo centre, where the voice usually is. Music and ambience, which are wide, stay. On test signals the voice drops by 20 dB, while the ambience changes by 0.13 dB.
The music stays. On real films, the test is done by ear.
- v0.14
Dubbing from subtitles
I changed the approach. The Romanian subtitles already exist on the platform, so we know the lines in advance. A language model works out who says each line, and each character gets a voice. The pilot on Sintel showed 1.4-4.2 seconds of synthesis per line, so the voices are prepared 45 seconds ahead.
The delay goes away. Each character gets a voice.
- v0.15 - v0.19
Our own voice engine: Dubnow
I tested several voice engines and chose by ear. The winner, an open model, became Dubnow. It runs on ordinary processors, so I moved the servers from rented graphics cards to CPUs.
The cost per dubbed hour drops to a fraction of a cent (estimate).
04 · Architecture
Three pieces. The sound never goes through the website.
The web platform issues tickets and counts minutes. The sound travels directly between the extension and the voice server, over a secure WebSocket connection. If the web platform has a problem, a film that is already playing does not stop.
05 · Components
What I built, piece by piece.
The Chrome extension
A discreet bar on the video that appears when you move the mouse, like in Meet. It starts the dubbing, sets the Romanian voice and the film sound separately, and shows the time left.
- Reads the subtitles on screen and finds the Romanian track on its own
- Captures the tab audio and removes 85% of the original dialogue
- Plays the lines on the video clock: pause, seek, speed
- In-page settings with tabs; Alt+Shift+D shortcut
- Consent screen and a separate package for the Chrome Web Store
The dubidu.net platform
Laravel 13 and PostgreSQL. Everything that is not sound: accounts, payments, catalog, content. It never sits in the audio path.
- Family accounts, devices, history, recommendations
- Stripe subscriptions by hours, automatic invoices
- Minute counter with a ledger, like in accounting
- Ed25519-signed session tickets for the voice servers
- Film catalog, parents' guide, articles, help
Dubnow, the voice engine
Our voice engine, built on an open-weight model. It synthesises one second of speech in 0.35 seconds on four processor threads.
- 31 languages from a single model
- 72 voices in the palette, cast across characters
- Also runs in the browser, through WebGPU (0.20× real time, measured on one PC)
- Dubnow Studio: actors record lines for new voices
- Servers start on demand and stop when nobody is left
The admin panel
Filament 5, with 87 resource and page files. This is where films are prepared and costs are tracked.
- Catalog with the status of every title
- Lines assigned to characters with AI, then checked by a person
- Voice casting: children never get adult voices
- Dubbing requests from customers, with a 24-hour deadline
- The cost of every model call, at the day's ECB exchange rate
06 · The catalog
Every prepared film has a cast.
For each film, a language model reads the lines and decides who is speaking, and the character's age and gender. Each character gets a voice from the palette, and a child's voice never goes to an adult. The annotations stay a draft until a person checks them.
Each film page says whether the film already has a dub on the platform, and how many lines and characters it has. The pages are built for the searches parents make in Romanian, such as "Epoca de gheață dublat în română" (Ice Age dubbed in Romanian).
07 · For parents
A guide: which film should your child watch tonight.
The parent enters the child's age, what the child likes and which platforms they have accounts on. They get matching films, with the IMDb rating and whether the film is already available in Romanian. The answers are not saved to the account. The same data produces lists by age and by theme, for search.
08 · The voice engine
The same scene, in any language, generated on the spot.
Dubnow has its own case study, with a demo where you type any text. On the investor page, the visitor chooses a language. The server synthesises every line of the Sintel scene, and the page shows the time measured in the visitor's own browser. Nothing is pre-recorded. The demo shows that the same product can enter another country without changing the extension, the payments or the servers.
09 · Metrics
What I measured and what I estimated.
Every number has its label. The product has not launched yet, so there are no subscriber or revenue numbers yet.
- 39% of 244 Netflix family titles checked in Romania have no Romanian audio measured
- 693 titles in the public catalog, 376 of them ready for dubbing with dubidu measured
- 536 / 19 lines and characters with their own voice for Ice Age measured
- 0.35× real time for synthesis on CPU: 1 second of speech in 0.35 seconds measured
- 20 simultaneous viewers on a 10-thread server, none falling behind simulated test
- −20 dB the centre voice, on test signals; the ambience stays almost untouched measured
- 45 s lines prepared ahead of the moment they are spoken in the code
- ~3 s → 0 voice delay behind the picture: live translation versus lines prepared in advance by design
- 93% contribution margin on the Start plan, after payments and servers estimate
- 41.2M children aged 3-9 in the 25 countries whose language Dubnow speaks Eurostat
How much code
- 34
- data models
- 47
- migrations
- 35
- backend services
- 87
- files in the admin panel
- 28
- test files
- 77
- analysis documents
10 · Business model
You pay for what you watch.
Three plans based on hours of dubbing per month, from €5.99, with no minimum term. The first hour is free. Prices are read from the admin panel, so the website, the account and the investor page always show the same numbers.
Synthesis runs on ordinary processors, not graphics cards. That makes a dubbed hour cost very little. For me, this is the number that matters most in the whole project.
11 · What I learned
Four things I take with me to the next project.
Change the problem, not just the solution
At first I tried to make live translation faster. The Romanian subtitles already existed. Once I started from them, the delay disappeared completely.
The ear decides, not the benchmark
I dropped voice engines that looked good on paper. Every voice passed a listening test before it reached the product.
Write down what is measured and what is estimated
Every number in the analyses has a label: measured, estimated, untested. The investor page keeps the same rule.
Plan for thousands of customers from day one
The voice servers hold no state and can be replaced at any time. The web platform stays outside the audio path, and minutes are kept in a ledger, like money.
12 · What comes next
Launch on 1 December 2026.
- Actor voices. Romanian actors record lines in Dubnow Studio, under contract, so the voices are ours.
- Dubnow in the browser. Synthesis on the user's graphics card, with almost no server cost.
- Other browsers. Edge and Opera use the same engine as Chrome, so they can be added cheaply. Firefox and Safari do not yet allow capturing tab audio.
- Other countries. Bulgaria, Greece, Hungary, Poland and other countries where children's films also come with subtitles.
Limits I state openly: dubidu depends on the subtitles the platform shows in the browser, and in beta I have tested it only on Netflix and YouTube, in Chrome.
Do you have a product idea you want to take all the way?
I work as a developer or as a technical cofounder. Write to me and we will see if it is a fit.