# deepfakes/faceswap: the GPL-3.0 Python tool behind the deepfake pipeline

> FaceSwap is a Python program that extracts faces from photos and videos, trains a model on them, and converts sources with that model. It is a research and VFX tool with a manual, three-stage workflow, not a one-click web app.

**deepfakes/faceswap** — Deepfakes Software For All. Please see this forum post: Manifesto FaceSwap has ethical uses.

- Repository: https://github.com/deepfakes/faceswap
- Website: https://www.faceswap.dev
- Stars: 57,556 · Forks: 13,467
- Language: Python
- License: GPL-3.0
- Published: 2026-08-08 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/deepfakes-faceswap

## What FaceSwap actually does, and who the project is written for

FaceSwap is a Python program that, in the project's own words, "utilizes deep learning to recognize and swap faces in pictures and videos." That single sentence hides the structure of the tool. It is not a service and not a filter. It is a local pipeline that you run yourself, in three stages, against files you already have on disk.

The intended user is closer to a VFX artist or an AI hobbyist than to someone who wants a fun photo edit. The repository's manifest splits contributors into four groups: people interested in the generative models, developers, advanced non-developer users, and end users. That taxonomy is honest about the audience. The README also states that you will need a modern GPU with CUDA support for best performance, with many AMD GPUs supported through ROCm on Linux. A machine without a usable GPU is not excluded, but it is not the target either.

The project ships a manifesto that states what it is not for: creating inappropriate content, changing faces without consent, or hiding the fact that a swap was used. It also says the developers will take a zero tolerance approach to unethical use. That is a policy statement, not a technical control. Nothing in the repository layout suggests a consent check or a watermark is enforced by the code, so treat the manifesto as the maintainers' position rather than a guardrail you can rely on.

## Extract, train, convert: the three-stage data flow

The README describes the workflow as a sequence of named folders. You gather photos or videos, you extract faces from the raw material, you train a model on those extracted faces, and you convert your sources with the trained model.

Each stage has a documented command and a documented input and output location, which is the clearest part of the project's documentation:

```bash
python faceswap.py extract
python faceswap.py train
python faceswap.py convert
```

Extract reads photos from a `src` folder and writes extracted faces into an `extract` folder. Train reads from two folders containing pictures of both faces and writes a model into the `models` folder. Convert reads from an `original` folder and writes modified output into a `modified` folder. Those folder names and paths are fixed by the README's examples, not invented here.

The consequence of this design is that the tool is stateful between runs. The `models` folder is the artifact that carries value from one session to the next. If you delete it, or move the project directory, the training work is what you lose. There is also a GUI entry point, which the README presents as an alternative to the command line, but the README's own walkthrough is written for the CLI.

One detail worth noticing is that extraction is a separate pass over your media rather than something the trainer does internally. That means a bad extraction (blurry crops, wrong faces selected) propagates into training and cannot be corrected later without redoing both stages.

## Installing FaceSwap and running a first conversion

The README does not contain installation steps. It says, in a line of its own, to make sure you check out INSTALL.md before getting started, and INSTALL.md is a top-level file in the repository. The project also publishes installers: the v3.0.0 release is titled "Faceswap Windows, Linux and macOS Installers v3.0.0", so a packaged installer exists for all three platforms in addition to the source route.

If you install from source, the repository ships a `setup.py` whose docstring is "Install packages for faceswap.py", and it imports requirement definitions from `requirements/requirements.py`. The setup script is backend-aware: it defines a backend type of `nvidia`, `apple_silicon`, `cpu`, `rocm` or `all`, and it has a separate map of Conda packages needed per backend and per operating system. For Linux it lists `xorg-libxft`, described in a comment as required to fix TK fonts on Linux. That is a concrete signal that the GUI has platform-specific dependency needs beyond the Python packages.

Once the environment is in place, the first real use is the extract step. From your setup folder, with source images in `src`, the README gives this command:

```bash
python faceswap.py extract
```

What you should see is a populated `extract` folder containing cropped faces taken from the images in `src`. The README does not document what the output filenames look like, so if you need a naming convention for downstream scripting, verify it on your own run rather than assuming.

The repository also carries `tools.py` and a `tools/` directory alongside `faceswap.py`, and `update_deps.py` at the top level. Those filenames imply that dependency updating is a separate operation from the main script, but the README does not document their usage, so this article will not guess at their flags.

## The GPU requirement is the real adoption barrier

The README's performance statement is short and unambiguous: you need a modern GPU with CUDA support for best performance, and many AMD GPUs are supported through ROCm on Linux. Read that as a compatibility matrix rather than a suggestion.

NVIDIA on CUDA is the primary path. AMD is supported, but the qualifier is "many" GPUs, and the supported route is ROCm on Linux, which means AMD users on Windows are not covered by that sentence. Apple Silicon appears as a backend name in `setup.py`, which indicates the install script can target it, but the README's performance claim is still framed around CUDA. CPU is also a named backend in `setup.py`, so the software will install and presumably run without a GPU, but the project does not claim that path is practical for training.

The second limitation is that the project's own documentation is split across files and the README is deliberately thin. It delegates installation to INSTALL.md and detailed operation to USAGE.md. If you are evaluating FaceSwap from the README alone, you will not learn how to install it, what the training options are, or how long anything takes. That is not a hidden flaw so much as a documentation layout that assumes you will follow the links.

The third limitation is legal and ethical rather than technical. The licence is GPL-3.0, and the manifesto explicitly disclaims inappropriate uses. The tool itself does not appear to enforce those constraints.

## FaceSwap compared with a hosted face swap service

The obvious alternative for most people searching for a face swap is a hosted web or mobile service, the kind of thing that appears under searches like "face swap online" or "face swap app". The difference in approach is fundamental, not cosmetic.

A hosted service runs the model on someone else's hardware, exposes a single upload-and-download interaction, and hides the extraction and training stages entirely. You get a result in seconds or minutes and you own no model. FaceSwap does the opposite. You supply the GPU, you run extraction and training yourself, and the model in your `models` folder is yours to keep, retrain, or reuse on new source material without paying per conversion.

That trade is worth naming precisely. FaceSwap buys you control over the model and no per-use cost, at the price of a hardware requirement, a multi-stage workflow, and a training run you have to supervise. A hosted tool buys you speed and no setup, at the price of uploading your media to a third party and having no reusable artifact at the end.

There is a middle category that the repository's own structure hints at: FaceSwap has a GUI, and the release notes include packaged installers for Windows, Linux and macOS. So the project is not purely a command-line tool for researchers. But the GUI is an alternative entry point to the same three-stage pipeline, not a simplification of it.

## Maintenance, releases and what the GPL-3.0 licence means here

The repository is not archived. Its last push was on 2025-12-21, and the same date carries the v3.0.0 release, titled "Faceswap Windows, Linux and macOS Installers v3.0.0". The prior release, v2.3.0, is dated 2025-12-19, two days earlier, and v2.2.0 is dated 2023-06-18. That gap between 2023 and late 2025 is the useful fact for anyone planning an upgrade path: this project does not ship on a predictable cadence, and a two-year quiet period has happened before.

Because the last push is on 2025-12-21, which is more than six months before today, this is not a project to describe as actively developed. Plan around the release you can actually download rather than around an expectation of frequent updates.

The licence is GPL-3.0, stated in the repository's LICENSE file and in the project metadata. The practical implication for an engineering team is that if you distribute software built on FaceSwap's code, the GPL's copyleft terms apply to that distribution. Using the tool internally to produce video output is a different question from shipping a product that links or embeds its code, and the two should not be conflated. This is a description of the licence, not legal advice; if your use case involves redistribution, that is a question for your own counsel.

The upgrade cost is mostly environmental. `setup.py` is backend-aware and `update_deps.py` exists at the top level, which suggests dependency management is a maintained part of the project rather than an afterthought. Moving between major versions still means re-checking your backend selection and your Python version, since `requirements/requirements.py` defines a `PYTHON_VERSIONS` object that the setup script imports.

## Conclusion

Adopt FaceSwap if you have a CUDA-capable GPU, patience for a three-stage extract, train, convert workflow, and a use case that matches the project's stated ethical position. Do not adopt it if you want a browser-based face swap with no install, or if you cannot accept the GPL-3.0 obligations on derivative code. Before committing, check that your GPU backend is actually supported (NVIDIA via CUDA, many AMD cards via ROCm on Linux, CPU as a slow fallback), and read INSTALL.md for your operating system rather than the README, which only points at it.

## FAQ

### Is FaceSwap safe to use?

The repository is not archived and its source is public under GPL-3.0, so the code can be inspected. The project's manifesto states that FaceSwap is not for creating inappropriate content or for changing faces without consent, and says the developers take a zero tolerance approach to unethical use, but that is a policy statement rather than an enforced technical control.

### How does FaceSwap work?

It runs a three-stage pipeline. Extract takes photos from a `src` folder and writes faces into an `extract` folder, train reads two folders of faces and saves a model into `models`, and convert reads from `original` and writes to `modified`.

### Is using AI face swap illegal?

The repository does not address legality. It states a position instead: FaceSwap is not for changing faces without consent or with the intent of hiding its use, and not for illicit, unethical or questionable purposes. Whether a specific use is lawful depends on your jurisdiction and is not something the project's files answer.

### How do I install FaceSwap?

The README does not contain install steps; it directs you to INSTALL.md, which is a top-level file in the repository. The project also publishes packaged installers, and the v3.0.0 release is titled "Faceswap Windows, Linux and macOS Installers v3.0.0".

### Can I install FaceSwap on macOS?

Yes, macOS is listed among the supported operating systems, and the v3.0.0 release covers Windows, Linux and macOS installers. The `setup.py` script also defines an `apple_silicon` backend, so the installer is backend-aware on that platform.

### Can faceswaps be detected?

The README and the repository's top-level files do not document any detection or watermarking feature, and the manifesto does not claim the output is detectable or undetectable. The project's stated position is against hiding the use of a swap, which is a rule for users rather than a capability of the software.

## Sources

- [Official documentation](https://www.faceswap.dev)
- [Official README](https://github.com/deepfakes/faceswap#readme)
- [Project repository](https://github.com/deepfakes/faceswap)
- [Release notes](https://github.com/deepfakes/faceswap/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/deepfakes-faceswap
