Spaces:
Paused
title: Face Swap Image To Video
emoji: π
colorFrom: purple
colorTo: pink
sdk: docker
app_port: 7860
pinned: false
license: other
Face Swap: Image β Video
Upload a face photo and a target video; the app swaps the face from your photo onto every face it detects in the video, frame by frame, and re-attaches the original audio.
It uses:
- insightface (
buffalo_l) for face detection/analysis - inswapper_128.onnx for the actual face swap
- onnxruntime-gpu to run on a GPU
- ffmpeg to remux the original audio back onto the output
This Space builds from a custom Dockerfile (lean python:3.10-slim base)
rather than the Gradio SDK's auto-build, which avoids compiling Python from
source and pulling in a huge C toolchain β the auto-build path was timing
out during apt-get on this dependency stack. Build should now take a few
minutes instead of 40+.
Setup on Hugging Face
- Create a new Space β SDK: Docker (not Gradio).
- Upload all files in this folder (
Dockerfile,app.py,requirements.txt,README.md) to the Space repo root. - In Settings β Hardware, select a rented GPU tier (e.g. T4 small, T4 medium, or A10G) β CPU Basic will work but will be very slow for video.
- Build/restart the Space. On first launch it downloads:
- the
buffalo_lface analysis model (auto, viainsightface) inswapper_128.onnx(auto, via a Hugging Face Hub mirror β see below)
- the
If the download is slow
- The app already enables
hf_transfer(parallel chunked downloads), which is usually a big speedup over a plain single-stream download. - Turn on Persistent Storage in Settings β this is the biggest win: without it, the ~530 MB model gets re-downloaded every time the Space restarts or wakes from sleep. With it, you only pay for the slow download once.
- Check the Space logs β the app prints which mirror it's trying
(
[model-download] trying ...). If it's stuck on one mirror, that mirror may be throttled; you can reorder/editINSWAPPER_MIRRORSinapp.pyto try a different one first, or download the file yourself and upload it directly to the Space root asinswapper_128.onnx(skips the download entirely).
If the automatic model download fails
inswapper_128.onnx (~530 MB) isn't included in this zip because it's a
large binary model file, and its original hosting has moved around over
time. app.py tries a few known public mirrors on the Hub automatically.
If all of them fail (mirrors do occasionally disappear), just download the
file yourself from wherever you can find a trusted copy and drop it into
the Space's root folder as inswapper_128.onnx β the app checks for a
local copy first before trying to download anything.
Files
| File | Purpose |
|---|---|
Dockerfile |
Lean build: python:3.10-slim + ffmpeg + pip deps |
app.py |
Gradio UI + face-swap pipeline |
requirements.txt |
Python packages |
README.md |
This file / Space metadata header |
Responsible use
Only upload media you have the rights and consent to modify. Don't use this to impersonate real people without their permission, create non-consensual explicit content, or spread misinformation. You are responsible for how you use the output.
Local testing
pip install -r requirements.txt
python app.py
(You'll need ffmpeg installed locally too, and a CUDA-capable GPU +
matching drivers for onnxruntime-gpu to actually use the GPU β otherwise
it'll fall back to CPU.)