YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
FaceFusion Mobile β Hexagon NPU context binaries (v0.1.0)
Qualcomm QAIRT context binaries for FaceFusion's default face-swap path, converted to run fully offline on the Hexagon NPU.
These are not ONNX models and are not portable. Each file is a compiled graph pinned to a Hexagon architecture, and it will not load on anything else.
- Upstream project: https://github.com/facefusion/facefusion (Henry Ruhs)
- This port: https://github.com/AbrahamPaulJ/facefusion-mobile
- Converted with QAIRT 2.49.0, W8A16 per-channel quantisation (see per-file notes below)
Which files do I need?
One tier, chosen by your chip. The app measures the HTP at startup and downloads only the matching set β about 275 MB. Do not mix tiers.
| tier | download | covers |
|---|---|---|
v68 |
271.6 MB | Snapdragon 888 and older, 8 Gen 1, or any part with under 8 MB VTCM |
v73 |
272.3 MB | 8 Gen 2, 8 Gen 3, newer v81 parts |
v79 |
279.2 MB | Snapdragon 8 Elite (SM8750) |
manifest.json lists every file with its size and SHA256. Verify after download; a
truncated context binary is a plausible-looking file that fails at load.
β Only v79 has ever been executed
Every measurement in this repo β accuracy, latency, correctness β was taken on an
SM8750 (Galaxy S25 Ultra). The v68 and v73 binaries are built and their tier mapping is
asserted against a synthetic device table, but no v68 or v73 part has ever run a single
inference of them. They are untested, not validated.
Contents of a tier
| file | what | notes |
|---|---|---|
yoloface_<tier>.bin |
face detector, 640x640 | |
fan2d_<tier>.bin |
2D face landmarker | cut at heatmaps |
arcface_<tier>.bin |
face recogniser | 512-d embedding |
hyperswap_<tier>.bin |
face swapper, 256x256 | fp32-demoted before quantisation |
nsfw_v79.bin / nsfwq_<tier>.bin |
content checker | fp32 on v79; quantised below |
The content checker is mandatory in the shipping app: a missing gate context is an initialisation failure, not a fallback. The quantised build shifts its decision statistic about +0.087 toward flagging, so lower tiers refuse slightly more readily.
Output resolution is not fixed by the 256x256 swapper: pixel boost warps the face larger and runs the same binary over NΒ² polyphase sub-images, so 512 and 1024 come from these files with no reconversion.
Licences β read before redistributing
These are derived works of FaceFusion's model weights and carry the same terms. They are not uniformly permissive:
| model | licence |
|---|---|
yoloface_8n |
GPL-3.0 |
arcface_w600k_r50 |
Non-Commercial |
inswapper_128 |
Non-Commercial |
hyperswap_1a_256 |
ResearchRAIL |
nsfw_2 |
see upstream |
The original weights are distributed by the FaceFusion project itself, from
huggingface.co/facefusion/models-* and github.com/facefusion/facefusion-assets. This
repository re-hosts converted forms of them for the Hexagon NPU. Upstream's own licence is
OpenRAIL-AS, which carries use restrictions: read
https://github.com/facefusion/facefusion/blob/master/LICENSE.md before you use, modify or
redistribute any of this.
Intended use
Offline, on-device face swapping on Qualcomm hardware. The app that consumes these files ships FaceFusion's content checker as a blocking check and refuses material it flags.
Do not use this to create images or video of real people without their consent. That is the principal way software of this kind causes harm, and it is what the content checker and the OpenRAIL-AS use restrictions exist to limit.