Soe Zayar.
Menu
Book a call
CASE FILE D

EzeeRecap: video to Myanmar subtitles and voice-over

Turns a video into Myanmar subtitles and voice-over inside the browser. Transcribe, translate, edit and export without uploading the video.

Engagement
Client product
Role
Technical lead, built and runs the platform, sits on the product's decision-making board.
Status
LiveVisit ↗

In plain words

Before

Making a foreign-language video watchable for Myanmar viewers meant transcribing it, translating it line by line, timing every subtitle by hand and recording a voice-over. Doing it all by hand was slow, and sending large video files to a server before any work could start made it slower still.

What I built

I built and run EzeeRecap with the product team as their technical lead. A creator opens a video in the browser. The app pulls out the audio, transcribes it with word-level timing, and translates it into Myanmar subtitles in batches, keeping every timestamp. The video itself never leaves their computer.

The editor lets them fix lines, repair anything unfinished, preview subtitles over the video and export an MP4 with styled subtitles burned in, again inside the browser. They can add a timed Myanmar voice-over with ready-made voices or a voice cloned on their own Google Colab runtime.

People sign up on the website or through a Telegram bot, buy credits through that bot with an administrator reviewing each payment, and get a free text-to-speech playground. Administrators manage users, credits and model settings from their own panel.

Under the hood

Architecture

  1. Browser + FFmpeg.wasm
  2. Gemini transcribe
  3. Batch translate
  4. SRT editor
  5. Voice-over + export

Stack

  • Next.js App Router (installable web app)
  • PostgreSQL
  • FFmpeg.wasm in the browser
  • Gemini for transcription, translation and speech
  • Text-to-speech through a small relay service
  • Google Colab runtimes for voice cloning
  • Telegram bot for sign-up and payments
  • Docker Compose, GitHub Actions

Decisions

  • The video never leaves the browser. FFmpeg.wasm copies or converts the audio into overlapping chunks, one at a time, and only audio goes to Gemini, with deletion requested after every attempt.
  • Users bring their own Gemini keys, which stay in the browser and rotate per batch. The admin key is encrypted in PostgreSQL and read only by the server, and keys are never logged.
  • Translation sends batches of up to 50 cues and preserves cue boundaries and timestamps, so a failed batch is retried on its own and finished lines are kept.
  • Speech generation goes through a small relay service, so production calls stay reliable.
  • Voice cloning runs on each user's own Colab runtime, started on demand and stopped when idle, with no shared-compute fallback.

Related services

Need something like this built?