Skip to main content

Fast face retrieval via PCA+ITQ binary quantization — up to 96x less memory than HNSW at equal recall

Project description

⚡ FaceFlash

FaceFlash searches 1M faces in 61 MB of RAM. HNSW needs 2.9 GB, USearch needs 2.5 GB, FAISS needs 1.9 GB — for the same 100% recall.

FaceFlash is a Rust face search engine with Python bindings, built on PCA+ITQ binary quantization — a learned hash that preserves identity information with zero recall loss and no separate training phase.

  • 100% Recall@1, 48–96× less memory. On the MS1MV2 benchmark (44,291 identities), FaceFlash held 100% Recall@1 at every scale from 100K to 1M while using 48× less index memory than HNSWLIB at the default 512-bit config (~42× vs USearch, ~32× vs FAISS-Flat) — and 96× less at the 256-bit compact config (100% recall, ~2× single-query latency).
  • Faster than HNSW at 100K. On the same benchmark, FaceFlash single-query latency was 0.30ms vs HNSWLIB's 0.60ms (2× faster). Batched throughput: 27,661 qps vs 5,813 qps (4.8× faster). Both at 100% recall.
  • AVX-512 VPOPCNTDQ + NEON. Hand-written SIMD kernels process one 512-bit face code per instruction (~3× faster than scalar). Multi-core batched search measured at 10–17× throughput vs single-query serial on the same hardware.
  • Zero-config indexing. Add faces, they're indexed — PCA fits automatically after 1,024 samples, no hyperparameter tuning, no rebuilds as the gallery grows.
  • Pure local. No managed service, no data leaving your machine. Pair with any ArcFace model for a fully air-gapped face search stack.

License: MIT Python 3.10+ Rust AVX-512 CI

from faceflash import FaceFlash

ff = FaceFlash()
ff.register_folder("employees/")   # bulk enroll
ff.save("my_index/")

result = ff.search("visitor.jpg")
# {"matches": [{"name": "Alice", "confidence": 0.92}], "search_time_ms": 0.4}

The Problem

Most face search libraries force a trade-off:

  • HNSW is fast and accurate — but consumes 2.9 GB of RAM at 1M faces
  • ScaNN / USearch are blazing fast — but drop to 94–99% recall
  • FAISS-Flat is exact — but is 10× slower at scale

FaceFlash breaks this trade-off. It compresses each face into a 64-byte binary fingerprint using PCA + ITQ quantization, scans them with a single AVX-512 VPOPCNTDQ instruction, then re-ranks only the top candidates with exact cosine similarity. The result: exact accuracy at a fraction of the memory.


At a Glance

FaceFlash HNSWLIB USearch ScaNN FAISS-Flat
Recall@1 100% 100% 99.5% 98.3% 100%
Memory @ 100K 3.05 MB 293 MB 254 MB 12 MB 195 MB
Memory @ 500K 15.3 MB 1,465 MB 1,270 MB 61 MB 977 MB
Memory @ 1M 30.5 MB 2,930 MB 2,539 MB 122 MB 1,953 MB
Latency @ 100K 0.30ms 0.60ms 0.17ms 0.10ms 4.90ms
Batched QPS @ 100K 27,661 5,813 137,264
Index build Auto (PCA fit) Build graph Build graph Partition None

Tested on MS1MV2 (44,291 identities, 645,019 embeddings). Hardware: AMD EPYC 9355, 128 threads, AVX-512 active.

Memory = binary index only. Float vectors for cosine reranking are mmap'd from disk after save()/load() — only ~100 candidate rows are paged per query. See Limitations.

Memory comparison: FaceFlash vs all competitors at 500K faces

Index Memory at 500K Faces (256-bit compact config): FaceFlash (15 MB) vs HNSW (1,465 MB) — 96× less RAM at 100% recall

FaceFlash live demo

Install

pip install "faceflash[cpu] @ git+https://github.com/raghavenderreddygrudhanti/faceflash.git"

# With benchmark dependencies
pip install "faceflash[cpu,benchmark] @ git+https://github.com/raghavenderreddygrudhanti/faceflash.git"

Requires a Rust toolchain — it compiles the AVX-512/NEON backend automatically and falls back to NumPy if unavailable.


Quick Start

from faceflash import FaceFlash

ff = FaceFlash()  # downloads ArcFace model (~166 MB) on first run

# Register individual faces
ff.register("Alice", "alice.jpg")
ff.register("Bob", "bob.jpg")

# Identify a face
result = ff.search("query.jpg")
# {"matches": [{"name": "Alice", "confidence": 0.92}], "search_time_ms": 0.4}

# Verify two faces are the same person
ff.verify("photo1.jpg", "photo2.jpg")
# {"match": True, "confidence": 0.87}

# Bulk enroll from folder (expects folder/person_name/photo.jpg)
ff.register_folder("employees/")
ff.save("my_index/")
ff.load("my_index/")

# Manage the index
len(ff)                  # how many faces are registered
"Alice" in ff            # is this person registered?
ff.names()               # list registered people
ff.remove("Alice")       # unregister a person (returns count removed)

For best accuracy, use pre-aligned 112x112 face crops. 5-point alignment (SCRFD/RetinaFace) adds +1.28 accuracy points over a basic center-crop.


Gallery Management

from faceflash import FaceFlash

ff = FaceFlash()
ff.register("Alice", "alice.jpg")
ff.register("Bob", "bob.jpg")
ff.register("Alice", "alice2.jpg")  # multiple photos per person

# Check gallery state
len(ff)              # 3 (total face entries)
ff.names()           # ["Alice", "Bob"]
"Alice" in ff        # True
"Charlie" in ff      # False

# Remove a person (GDPR / right-to-be-forgotten)
ff.remove("Bob")     # removes all entries for Bob
len(ff)              # 2
ff.names()           # ["Alice"]

# Monitor index stats
ff.stats()
# {'count': 2, 'pca_fitted': True, 'rust_backend': True,
#  'binary_memory_mb': 0.0, 'resident_memory_mb': 0.0, ...}

Batch Identification

Process many query faces at once (4.8x faster than one-by-one):

import numpy as np
from faceflash import FaceFlash

ff = FaceFlash()
ff.register_folder("gallery/")
ff.save("my_index/")

# Low-level batch search (for bulk dedup, watchlists, video frames)
embeddings = np.load("query_embeddings.npy")  # (N, 512) float32
results = ff.index.search_batch(embeddings, k=1)
# results[i] = [(name, similarity, index), ...]

# Example: find all matches above threshold
for i, matches in enumerate(results):
    if matches and matches[0][1] > 0.5:
        print(f"Query {i}: {matches[0][0]} (confidence {matches[0][1]:.2f})")

Is FaceFlash Right for You?

Scenario Why FaceFlash wins
Edge / mobile / IoT 3–30 MB vs 293–2,930 MB for HNSW — fits in device RAM
Multi-tenant servers 100 galleries x 30 MB = 3 GB. HNSW: 100 x 1.5 GB = 150 GB
Batch dedup / watchlists 4.8x faster than HNSW batched at 100K; 1.9x at 500K
100% recall is non-negotiable FaceFlash hits 100% at every scale; USearch drops to 94-99%
Budget / offline / air-gapped Runs on Raspberry Pi, cheap VPS, phones — no GPU, no network
10K-500K face databases The sweet spot: faster AND less memory than HNSW

When HNSW is the better choice:

  • You need <0.3ms single-query latency at >500K faces and have gigabytes of RAM to spare
  • Your database exceeds 2M faces (HNSW's O(log N) pulls clearly ahead)
  • You need 100K+ batched QPS regardless of memory (USearch wins there)

How It Works

FaceFlash Architecture Pipeline

Each face is compressed into a 64-byte binary fingerprint:

  1. ArcFace extracts a 512-dimensional float embedding
  2. PCA aligns the quantization with the axes where identity varies most
  3. ITQ rotates bits to maximize information per bit (balanced marginals)
  4. AVX-512 VPOPCNTDQ scans all binary codes in a single instruction per face
  5. Cosine rerank runs exact similarity on only the top ~100 candidates

This is why 512 bits is the fastest setting — the entire code fits in one AVX-512 register.


Benchmark Methodology

FaceFlash's recall, latency, throughput, and memory are measured. Competitor recall and latency are also measured; competitor memory is estimated from the standard vectors + index-structure overhead formula (e.g. HNSW ≈ 1.5× raw vectors).

Details
Dataset MS1MV2 — 645,019 ArcFace embeddings, 44,291 distinct identities
Embedding ArcFace ONNX (w600k_r50), 512 dimensions, L2-normalized
Hardware AMD EPYC 9355 (32 cores / 128 threads), AVX-512 VPOPCNTDQ enabled
Competitors HNSWLIB 0.8+, FAISS 1.7+, USearch 2.x, ScaNN (latest)
Ground truth Exact brute-force cosine argmax (FAISS-Flat)
Timing time.perf_counter() per query, 10 warmup excluded
Recall metric Recall@1 — fraction of queries where the true nearest neighbor is rank-1
Memory metric FaceFlash: measured binary index size in RAM (floats mmap'd after save/load). Competitors: estimated (vectors + index-structure overhead)
Batched timing Wall-clock for the full query batch / number of queries
Reproducibility bash scripts/runpod_ms1m.sh reproduces all results end-to-end

All single-query rows are single-threaded. Batched rows use all available cores. Every benchmark script validates correctness before reporting speed.


Performance

Scale Summary (100K-1M)

Batched throughput: FaceFlash vs all competitors 100K to 1M

Batched Throughput (QPS): FaceFlash 100K→1M — 4.8× faster than HNSW at 100K

Single-query latency: all methods 100K to 1M

Single-Query Latency: FaceFlash 0.30ms vs HNSW 0.60ms at 100K — both at 100% recall

Recall vs Memory at 500K

Recall vs Memory Pareto: FaceFlash sits at the frontier — 100% recall, 30 MB

Scale Recall Single-query Batched QPS Memory vs HNSW memory
100K 100% 0.30ms (2× faster than HNSW) 27,661 6.1 MB 48× less
200K 100% 0.57ms (tied with HNSW) 19,930 12.2 MB 48× less
300K 100% 0.84ms 15,147 18.3 MB 48× less
500K 100% 1.45ms 10,337 30.5 MB 48× less
1M 100% 2.95ms 5,403 61 MB 48× less

Numbers are the default 512-bit config (fastest, 100% recall). The 256-bit compact config holds 100% recall at half the memory — 96× less than HNSW — trading ~2× single-query latency.

FaceFlash dominates up to 300K on every axis. At 500K-1M, HNSW edges ahead on single-query latency (O(log N) vs O(N)), but FaceFlash still wins on batched throughput and always uses 48–96× less memory.

1:N Identification - 44,290 Distinct People

The hardest test: one photo per person in the gallery, identify them from a different photo.

Rank-1 identification ties exact search on 44,290 people

1:N Identification on 44,290 Identities: FaceFlash matches FAISS-Flat accuracy at 32× less memory

Method Rank-1 Accuracy Memory
FAISS-Flat (exact ceiling) 95.8% 86.5 MB
FaceFlash (512b / 100c) 95.8% 2.70 MB
FaceFlash (512b / 300c) 95.8% 2.70 MB
FaceFlash (256b / 100c) 95.6% 1.35 MB

FaceFlash ties exact search using 32× less memory (512 float32 → 512 bits = exactly 32× compression). Binary quantization is lossless at 512 bits.

Detailed per-scale benchmark tables

100K Faces (6,939 identities)

Method Recall@1 Latency QPS Memory
FaceFlash (batched) 100% 0.036ms 27,661 6.1 MB
FaceFlash (512b/200c) 100% 0.30ms 3,310 6.1 MB
FaceFlash (512b/100c) 100% 0.43ms 2,344 6.1 MB
HNSWLIB (ef=128) 100% 0.60ms 1,671 293 MB
HNSWLIB batched 100% 0.172ms 5,813 293 MB
USearch batched 99.5% 0.007ms 137,264 254 MB
USearch 99.5% 0.17ms -- 254 MB
ScaNN 98.3% 0.10ms -- 12 MB
FAISS-Flat (exact) 100% 4.90ms 204 195 MB

200K Faces (13,749 identities)

Method Recall@1 Latency QPS Memory
FaceFlash (batched) 100% 0.050ms 19,930 12.2 MB
FaceFlash (512b/200c) 100% 0.57ms 1,751 12.2 MB
HNSWLIB (ef=128) 99.9% 0.65ms 1,531 586 MB
HNSWLIB batched 99.9% 0.378ms 2,646 586 MB
USearch batched 99.1% 0.008ms 121,660 508 MB
ScaNN 97.2% 0.19ms -- 24 MB

300K Faces (20,615 identities)

Method Recall@1 Latency QPS Memory
FaceFlash (batched) 100% 0.066ms 15,147 18.3 MB
FaceFlash (512b/200c) 100% 0.84ms 1,187 18.3 MB
HNSWLIB (ef=128) 99.9% 0.66ms 1,510 879 MB
HNSWLIB batched 99.7% 0.269ms 3,715 879 MB
USearch batched 98.7% 0.014ms 73,383 762 MB
ScaNN 97.8% 0.28ms -- 37 MB

500K Faces (34,328 identities)

Method Recall@1 Latency QPS Memory
FaceFlash (batched) 100% 0.097ms 10,337 30.5 MB
FaceFlash (512b/200c) 100% 1.45ms 692 30.5 MB
HNSWLIB (ef=128) 100% 0.71ms 1,416 1,465 MB
HNSWLIB batched 99.9% 0.179ms 5,577 1,465 MB
USearch batched 98.4% 0.013ms 76,150 1,270 MB
ScaNN 97.6% 0.45ms -- 61 MB

1M Faces (44,291 identities)

Method Recall@1 Latency QPS Memory
FaceFlash (batched) 100% 0.185ms 5,403 61 MB
FaceFlash (512b/100c) 100% 2.92ms 342 61 MB
HNSWLIB (ef=128) 100% 0.66ms 1,523 2,930 MB
HNSWLIB batched 100% 0.178ms 5,621 2,930 MB
USearch batched 94.1% 0.013ms 77,266 2,539 MB
ScaNN 98.2% 0.86ms -- 122 MB

Tuning

Pick a config that matches your deployment:

Deployment Config Recall@1 Memory/face Notes
Ultra-compact (mobile/IoT) n_bits=128, n_candidates=500 99.4% 16 bytes Minimum RAM
Balanced n_bits=256, n_candidates=100 100% 32 bytes Good default
Default (fastest) n_bits=512, n_candidates=100 100% 64 bytes One AVX-512 instruction
Edge (minimize disk reads) n_bits=512, n_candidates=50 99.5% 64 bytes --
ff = FaceFlash(n_bits=128, n_candidates=500)   # mobile/IoT
ff = FaceFlash(n_bits=256, n_candidates=100)   # balanced
ff = FaceFlash(n_bits=512, n_candidates=100)   # default: fastest

ff.search("query.jpg", n_candidates=200)       # per-query override

Speed up large indexes with clustering

Clustering recall/speed tradeoff

IVF Clustering Speedup: 5–8× faster at 500K+ with configurable recall trade-off

ff.index.build_clusters(n_probe=16)
Scale n_probe Recall@1 Latency Speedup
100K 16 96.1% 0.12ms 2.6x
100K 32 98.5% 0.17ms 1.8x
500K 16 87.9% 0.31ms 5.0x
500K 32 92.8% 0.56ms 2.8x

Clustering is mainly useful at 500K+ where it delivers 5-8x speedup at ~88-93% recall.


Architecture

faceflash/                          # Python package
├── engine.py         ◀─ High-level API (register, search, verify)
├── detect.py         ◀─ Face detection (SCRFD + Haar fallback)
├── align.py          ◀─ 5-point alignment to ArcFace template
├── embed.py          ◀─ ArcFace ONNX embedding (512-dim, auto-download)
├── index.py          ◀─ Binary index + batched search
└── pca_quantize.py   ◀─ PCA+ITQ quantizer (the core algorithm)

rust/                               # Rust backend (PyO3 + Rayon)
├── src/lib.rs        ◀─ AVX-512 VPOPCNTDQ / NEON / scalar POPCNT
└── Cargo.toml

Why PCA+ITQ? ArcFace embeddings concentrate identity information along principal axes. PCA aligns quantization with those axes; ITQ rotates bits for balanced marginals. The result is lossless compression at 512 bits.

Why not HNSW internally? HNSW stores a graph on top of full float vectors — about 1.5x raw memory. FaceFlash stores 32–64 bytes per face. Float vectors are memory-mapped from disk and paged only for the top ~100 candidates per query. Trade-off: higher single-query latency at 500K+, but 48–96× less memory.

Why Rust + AVX-512? AVX-512 VPOPCNTDQ processes an entire 512-bit code in one instruction (~3× faster than scalar POPCNT). Combined with Rayon multi-core parallelism (and cache-blocked batching to keep the scan cache-friendly), batched search reaches 10-17× throughput versus single-query serial. Runtime-detected — no user configuration needed.


Limitations

  • Single-query at 1M+ — O(N) linear scan; HNSW is 4.4x faster per single query at 1M. Batched path ties.
  • Memory during build — holds all float vectors in RAM. The 48–96× savings apply after save() / load().
  • AVX-512 VPOPCNTDQ — the ~3× kernel speedup requires Ice Lake / Zen 4+ / EPYC 9004+. Older CPUs fall back to scalar POPCNT automatically.
  • Rerank I/O — pages ~100 float rows from disk per query. Invisible on NVMe; adds latency on slow storage.

Reproduce the Benchmarks

# Local (LFW + VGGFace2 100K)
python scripts/extract_lfw_embeddings.py
python benchmarks/bench_ann_comparison.py --scales 100K --queries 500

# RunPod (full suite)
export GITHUB_TOKEN=<token>
bash scripts/runpod_ms1m.sh   # FORCE_EXTRACT=1 for full 85K extraction

Roadmap

v0.1.0 (current)

  • PCA+ITQ binary quantization + Rust search backend
  • High-level API: register, search, verify
  • Benchmarked against FAISS, HNSWLIB, USearch, ScaNN at 100K-1M
  • 1:N identification on 44,290 distinct identities (MS1MV2)
  • 5-point alignment via SCRFD/RetinaFace — 99.85% LFW accuracy

v0.2.0 (done)

  • Prebuilt wheels (pip install faceflash)
  • Full 85K-identity benchmark (76,872 identities extracted, 44,291 with sufficient data)
  • On-device memory measurement (3.05 MB binary index @100K with 256b)

v0.3.0 (done)

  • IVF coarse clustering (2.7-4.9x speedup at scale)
  • AVX-512 VPOPCNTDQ — native 512-bit popcount (~3x faster than scalar)
  • Batched search — 17x throughput at 500K-1M (multi-core + VPOPCNTDQ; cache-blocked)
  • NEON kernels — ARM-optimized (vcntq_u8)

v1.0.0 — next

  • Stable public API (no breaking changes)
  • DiskANN comparison
  • Mobile deployment (ONNX + CoreML)
  • Streaming insertion (add faces without refitting PCA)

Contributing

# Dev setup (one command)
git clone https://github.com/raghavenderreddygrudhanti/faceflash.git
cd faceflash && python -m venv .venv && source .venv/bin/activate
pip install -e ".[cpu,benchmark]" && maturin develop --release
python -m pytest tests/  # 33 tests, ~17s

Open areas for contribution:

Area Difficulty Impact
DiskANN comparison Medium High — the one competitor missing
Mobile deployment (ONNX + CoreML) Medium High — iOS/Android face search
Streaming insertion (no PCA refit) Hard High — online learning
GPU batched search (CUDA) Hard Medium — 10M+ galleries
Raspberry Pi / Jetson benchmarks Easy Medium — edge credibility
WebAssembly build Medium Medium — browser face search

See CONTRIBUTING.md for coding guidelines.


Credits & References

FaceFlash does not introduce a new embedding model or hashing algorithm. It combines proven, published techniques into a CPU-efficient retrieval system — with hand-written Rust AVX-512/NEON kernels, cache-blocked batching, and rigorous, reproducible benchmarks. The contribution is the system (exact-recall face search in a megabyte-scale footprint) and the honest measurement of it, not the underlying math.

It builds directly on:

Component Reference
Binary quantization (PCA + ITQ — the core method) Gong & Lazebnik, "Iterative Quantization: A Procrustean Approach to Learning Binary Codes," CVPR 2011
Face embeddings Deng, Guo, Xue & Zafeiriou, "ArcFace: Additive Angular Margin Loss for Deep Face Recognition," CVPR 2019 — weights from InsightFace
Detection & 5-point alignment RetinaFace (CVPR 2020) / SCRFD (ICLR 2022), InsightFace
Dataset Guo et al., "MS-Celeb-1M," ECCV 2016 (MS1MV2 = ArcFace's refined/cleaned version)
Verification benchmark Huang et al., "Labeled Faces in the Wild (LFW)," UMass TR 2007
Baselines compared FAISS (Johnson et al.), HNSW (Malkov & Yashunin, TPAMI 2018), ScaNN (Guo et al., ICML 2020), USearch

PCA dates to Pearson (1901) / Hotelling (1933); the Hamming distance to Hamming (1950); POPCNT / VPOPCNTDQ are Intel/AMD hardware instructions. FaceFlash's value is in how these are combined and implemented — not in inventing them.


License

MIT — see LICENSE.

If FaceFlash is useful to you, a star helps others find it.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

faceflash-0.1.0.tar.gz (33.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

faceflash-0.1.0-cp313-cp313-win_amd64.whl (214.3 kB view details)

Uploaded CPython 3.13Windows x86-64

faceflash-0.1.0-cp313-cp313-manylinux_2_34_x86_64.whl (338.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

faceflash-0.1.0-cp313-cp313-macosx_11_0_arm64.whl (297.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

faceflash-0.1.0-cp312-cp312-win_amd64.whl (214.7 kB view details)

Uploaded CPython 3.12Windows x86-64

faceflash-0.1.0-cp312-cp312-manylinux_2_34_x86_64.whl (338.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

faceflash-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (297.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

faceflash-0.1.0-cp311-cp311-win_amd64.whl (213.8 kB view details)

Uploaded CPython 3.11Windows x86-64

faceflash-0.1.0-cp311-cp311-manylinux_2_34_x86_64.whl (337.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

faceflash-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (297.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

faceflash-0.1.0-cp310-cp310-win_amd64.whl (214.0 kB view details)

Uploaded CPython 3.10Windows x86-64

faceflash-0.1.0-cp310-cp310-manylinux_2_34_x86_64.whl (338.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

faceflash-0.1.0-cp310-cp310-macosx_11_0_arm64.whl (297.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file faceflash-0.1.0.tar.gz.

File metadata

  • Download URL: faceflash-0.1.0.tar.gz
  • Upload date:
  • Size: 33.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for faceflash-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f890ca970f68ea64c9236dbe33266064afc19bd9a18176845cfb09a0fa119739
MD5 5c04a727711da9d0b0ba2e7a8ce212d2
BLAKE2b-256 6194cce69ea61868723a4bffd26754fc526af33c9c942e0fa2de6ba37e9951df

See more details on using hashes here.

File details

Details for the file faceflash-0.1.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for faceflash-0.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 654abddabb892f4f63ec63b2a4577ad5c464acd822761de256ebe443a793f06f
MD5 6908822426687a9ba39c937ffd888758
BLAKE2b-256 41762922f76ae6eac5308b211f81ac5c96d8bc9d3e059e4ad549153395fb4b79

See more details on using hashes here.

File details

Details for the file faceflash-0.1.0-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for faceflash-0.1.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 0ca47578d32301ba8acb7be48b57b1bb1b3570c323c802c3c50dcd81141b8a6c
MD5 78ac5412faf7509e414310b8a4c541a7
BLAKE2b-256 cc5d3582c3f340572b52630446ef3cc66c753c1cb951c883ec27a7ec584db817

See more details on using hashes here.

File details

Details for the file faceflash-0.1.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for faceflash-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 654ecb15f55b4b65b2f766a21808433d5c7437edba8fe8a70e94c2c7897f21ed
MD5 4ce94075225efd9e5bb2728c201c7893
BLAKE2b-256 6a84d86c43769e30afb516ab7402ffdac494eb673223aa1272780c6af7683d65

See more details on using hashes here.

File details

Details for the file faceflash-0.1.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for faceflash-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7ce647784fc5055bcdcbf4a8fb56733d95f36fa3bc3be7fab0dbe27019ae29cd
MD5 a4615243905e4ed421943acdd17a53e5
BLAKE2b-256 20fdf5b6ff58ca2b8de6c67908c38c89e8c7021d6abcaef8ebe2c6091db4d2b8

See more details on using hashes here.

File details

Details for the file faceflash-0.1.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for faceflash-0.1.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 38796afd64869ac602367c663b575dfeb46d3066fa09298f05aea6a54d0987e2
MD5 ce8fc8e4c01de6775a4fd93967dcc233
BLAKE2b-256 23dcb5bd8a43aa85a56514c1fe0180b96913e46a13f146ae7f93ae18e3067a43

See more details on using hashes here.

File details

Details for the file faceflash-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for faceflash-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d2e6e28f95f88c135718e661fa80e634e403f57fb7eb420a99ed2ce59aab4950
MD5 4e79350a53e40f7e2c159f6504888b4f
BLAKE2b-256 29ba0e880cda6f7abcafdbdcca1be22232d84555db7add4a55ba5d9e4b809e4d

See more details on using hashes here.

File details

Details for the file faceflash-0.1.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for faceflash-0.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 552d17418a82ac1001e068e7e643f94246f690fce33bdee13d7826ce87e2ec41
MD5 5e15e338f14c4bb3f513a0f9caff7501
BLAKE2b-256 f41147c061fd8c03b9b677a751193d7308958428b9f81fef7f67a42df842fe0a

See more details on using hashes here.

File details

Details for the file faceflash-0.1.0-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for faceflash-0.1.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 f0f11162b6299c8220334982a7bd8f1a51f6de6c58f8262d55139bf6cc23f199
MD5 504022306d6dbd6955bae69edee1703f
BLAKE2b-256 862a6b1b9b641fbcd3a2ce319a65560d8fb8c318c2ee3f5d62bfa15a1629085f

See more details on using hashes here.

File details

Details for the file faceflash-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for faceflash-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d4d81f2782343c90a135d125f9b0e8bd05225136f7be47cfbb7ec83d9bd9f4de
MD5 64c80cf9820bb565c54551a295d1b564
BLAKE2b-256 9ed7398ce32af7bd2c76c2283c0aa325f4ad4db6e7fba9e41ea448c8cc9d69e7

See more details on using hashes here.

File details

Details for the file faceflash-0.1.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for faceflash-0.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 2147cd78d11fef1aed6eebe25bf3a7c1fa47fc52639fb8b573a6b58229b68a1e
MD5 2a843069024393bc94d99628574110d7
BLAKE2b-256 ef0404b0537a97e6430d56768727c7c9525bf4e7db4bc9d8f6f36a62148eed5b

See more details on using hashes here.

File details

Details for the file faceflash-0.1.0-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for faceflash-0.1.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 2a0907a21ad0f4c08cb985f9358fad67fa403e53883433d20652fbf976d56828
MD5 4924e8f315e371df4333c90586711099
BLAKE2b-256 2a977accb26a04097e76abdd7a309747dfb494f7819c8c0d647b2cf12789b35b

See more details on using hashes here.

File details

Details for the file faceflash-0.1.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for faceflash-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7d2a1098402f921912ac9b3c00ed9d98655aefc3f111bb7c51eb8f0cbe3a34ab
MD5 06284b636d5a64e77c15ec9c314ef240
BLAKE2b-256 0220d07c98dbba0ef80bcb0cc568c061138af46624fc21aa79a28a84ef992c35

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page