← Projects

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
dubidu.net
The dubidu.net home page: any film or cartoon, dubbed into Romanian
  • 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.

The dubidu extension bar over a film, with the Stop button, voice and film volume, the time and the hours left
The extension bar, over the film Sintel. The start and stop button, the Romanian voice volume, the music and effects volume, the session time and the hours left in the subscription.
The dubidu bar, enlarged
The bar, enlarged. The buttons are flat, with SVG icons, and the styles are isolated in a closed shadow DOM, so the site's CSS cannot break them.
Interactive demo on dubidu.net: the Sintel scene with the dubidu RO button
The demo on the home page: visitors start the scene and switch between English and Romanian themselves.
The Why dubidu section: on any platform, in real time, one click, 4 screens, the music stays, voices for every character
The product promise, on a single screen.

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

The Chrome extension asks dubidu.net for a ticket, then receives the voices directly from the Dubnow server Chrome extension dubidu.net · Laravel Dubnow · voice server Reads the Romanian subtitles Captures the tab audio Removes the centre dialogue Requests lines 45 s ahead Plays them on the video clock Mixes the voice with the film Accounts, subscriptions, minutes Catalog, characters, voices Ed25519-signed tickets CPU synthesis, 31 languages Stateless, started on demand Several viewers per server HTTPS · account, ticket, lines with characters WSS · lines sent, voices received the sound path

05 · Components

What I built, piece by piece.

01

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
02

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
03

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 Dubnow case study
04

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).

The dubidu catalog: films and cartoons dubbed into Romanian, with filters by platform, age and genre
The catalog: 693 titles, with filters by platform, age, genre and language.
The Ice Age film page: 536 lines, 19 characters with their own voice
A film page: 536 lines and 19 characters, each with its own voice.

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.

The Which film should your child watch guide, with age, platforms, genres and lists by age and theme
dubidu.net/filme-copii: the parents' filter and the lists generated from the catalog.

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.

Live demo: the same scene in 18 languages, generated by Dubnow on a CPU server
The live demo: 18 languages, with the time to the first line measured on every click.
The technology: 31 languages, 0.35x real time on CPU, also runs in the browser, casting by character, actor voices, servers on demand
The engine's numbers, each labelled "measured" or "estimate".

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.

The dubidu plans: Start €5.99, Familie €9.99, Maxi €14.99 per month
The plans: the calculator at the top recommends a plan based on how many films the family watches per month.

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.