🛡️ ThreatEngine
ThreatEngine is a high-performance, 100% native Rust implementation of all 4 Meta (Facebook) ThreatExchange core components: PDQ (Image), TMK (Video), vPDQ (Video PDQ), and HMA (Hasher-Matcher-Actioner) with Python bindings (
PyO3).
✨ Full Component Coverage
- 📷 PDQ (Photo Hashing): 256-bit perceptual image signatures via 2D Discrete Cosine Transform (DCT) & Median Quantization.
- 🎬 TMK+PDQF (TMK Video Hashing): Aggregates frame-level PDQF signatures across video timelines using Fourier/Cosine basis functions $\psi_m(t)$.
- 📽️ vPDQ (Video PDQ): Frame-overlap video similarity algorithm for sub-clip and video segment matching based on shared similar frames.
- 🛡️ HMA (Hasher-Matcher-Actioner Engine): In-memory high-speed indexing, lookup, and action trigger platform (
BLOCK,REVIEW,ALLOW) for Trust & Safety workflows. - ⚡ Zero-Cost Performance: Native SIMD and bitwise Hamming distance calculations in Rust (10x-50x faster than pure Python loops).
🚀 Installation
Rust (Cargo Crate)
Add threatengine to your Cargo.toml:
[dependencies]
threatengine = "0.1.0"
Or run:
cargo add threatengine
Python Package (PyO3)
pip install threatengine
📖 Usage Examples
🦀 Rust Example
use threatengine::{
generate_pdq_hash, pdq_similarity, hash_video_file,
compute_vpdq_similarity, HmaEngine, MatchAction,
};
use image::open;
fn main() {
// 1. PDQ Image Hashing
let img1 = open("photo1.jpg").unwrap();
let img2 = open("photo2.jpg").unwrap();
let (hash1, q1) = generate_pdq_hash(&img1);
let (hash2, q2) = generate_pdq_hash(&img2);
let (distance, similarity) = pdq_similarity(&hash1, &hash2);
println!("Hamming Distance: {} bits ({:.2}% similarity)", distance, similarity * 100.0);
// 2. TMK Video Hashing
let sig1 = hash_video_file("video1.mp4", 2.0).unwrap();
let sig2 = hash_video_file("video2.mp4", 2.0).unwrap();
println!("TMK Score: {:.4}", sig1.match_score(&sig2));
// 3. HMA Engine Indexing & Action Triggering
let mut hma = HmaEngine::new();
hma.add_record("media_001", "known_bad_image", hash1, MatchAction::Block);
let matches = hma.match_hash(&hash1, 31);
println!("HMA Matches: {}, Action: {:?}", matches.len(), matches[0].action);
}
🐍 Python Example
import threatengine
# 1. Image Hashing & Distance
hash1, quality1 = threatengine.pdq_hash_file("photo1.jpg")
hash2, quality2 = threatengine.pdq_hash_file("photo2.jpg")
distance, similarity = threatengine.pdq_similarity(hash1, hash2)
print(f"Hamming Distance: {distance} bits (Match: {distance <= 31})")
# 2. TMK Video Comparison
score = threatengine.tmk_compare_videos("video1.mp4", "video2.mp4", fps=2.0)
print(f"TMK Video Match Score: {score:.4f}")
# 3. vPDQ Frame-Overlap Comparison
vpdq_score = threatengine.vpdq_match_hashes([hash1], [hash2], threshold=31)
print(f"vPDQ Similarity Score: {vpdq_score:.4f}")
👨💻 Author
Crafted with ❤️ by Shakib Ahmed (@expertskb)
📜 License
Distributed under the MIT License. See LICENSE for more details.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
threatengine-0.2.0.tar.gz
(18.7 kB
view details)
File details
Details for the file threatengine-0.2.0.tar.gz.
File metadata
- Download URL: threatengine-0.2.0.tar.gz
- Upload date:
- Size: 18.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4690c378812d65a2c8a369e2312f6d8d0534e7d8c23eb545b9159205dfd3969b
|
|
| MD5 |
a880254ebb8ee98e8d6d377eb8c8d285
|
|
| BLAKE2b-256 |
d2b4d848814aa43c21071e453fdb1b64a5ee87981c9a45a7749988bf8a8afec5
|