← Selected work

Backend · media processing

VideoGen Pro

A Flask application that combines browser-managed assets, Whisper transcription, background rendering, and live progress reporting.

StatusSingle-process prototype with explicit deployment limitations.
RenderingBackground thread
ProgressServer-Sent Events
TranscriptionWhisper
StateIn-memory

01 / Problem

Why this system exists

Media rendering is too slow for a request path and requires careful handling of uploads, session ownership, progress, and temporary assets.

02 / Architecture

How state moves

  1. 01Browser upload
  2. 02Flask session
  3. 03Whisper
  4. 04Background render
  5. 05FFmpeg encoding
  6. 06In-memory progress
  7. 07SSE update

03 / Decisions

Engineering choices

  • Move rendering out of the request path into background work.
  • Use Server-Sent Events for one-way progress updates.
  • Associate temporary assets with the initiating session.
  • Use unique temporary paths to reduce cross-job collisions.

04 / Boundaries

What this does not claim

  • In-memory job state limits the app to one process.
  • A durable queue and shared state store are required for horizontal scaling.
  • This is a prototype, not a production media service.

See the code and documentation.

View repository ↗