Skip to content
All projects
Built on open sourceAIIn development

Face-Swap Studio

A web app around the open-source roop face-swap engine, with queued jobs and live progress.

Role
Developer of the web application
Illustration of two faces swapping above a film strip, with a consent reminder

What it is

Upload a video and a single reference photo, review the faces detected in it, and the swap runs as a background job while progress streams to the browser. The engine is roop; this project turns it into a full web application with accounts, a job queue and live updates.

The problem

Face swapping a video takes minutes of GPU or CPU time, which a web request cannot wait for, and users need to see progress as it runs.

Architecture

Requests flow left to right. Hover a component for its role.

Face-Swap Studio architecturejobprogressReact 19 web app: TypeScript, Vite, TailwindReact 19 web appDjango 5 and DRFDjango 5 and DRFPostgreSQL 16PostgreSQL 16RedisRedisCelery workersCelery workersroop engine: InsightFace, inswapper, GFPGANroop engineChannels and Daphne: live progressChannels and Daphne
Solid line: synchronous callDashed line: through a queueDashed box: external or infrastructure
  • React 19 web app client, TypeScript, Vite, Tailwind
  • Django 5 and DRF service
  • PostgreSQL 16 data
  • Redis queue
  • Celery workers worker
  • roop engine ai, InsightFace, inswapper, GFPGAN
  • Channels and Daphne edge, live progress

Key decisions

  • Turn a script into a service

    The engine was written as a command-line script. It now runs inside Celery workers and Django Channels pushes progress over WebSockets, so a swap that takes minutes never holds a web request open.

Highlights

  • Five-service Docker Compose stack: PostgreSQL, Redis, the Django API, a Celery worker and the front end.
  • Live job progress over Django Channels.
  • Email sign-up with JWT, plus Google sign-in.

Stack

React 19TypeScriptDjango 5CeleryDjango REST FrameworkRedisDjango ChannelsPostgreSQL 16ViteTailwind CSSPythonONNX RuntimeDocker