
Detect face-swapped deepfake videos with Bynn's own detector, built for identity verification. Scores frames across the clip as one decision and names the face-swapping method.
The Bynn Video Deepfake Detection model identifies face swaps in video: footage in which a real person's face has been replaced, frame after frame, by a face-swapping tool. Built by Bynn for identity verification, it returns a clear decision, a probability, per-frame scores and the face-swapping method the content most resembles.
Video deepfakes represent an escalation in manipulation sophistication. Real-time face-swapping tools maintain facial consistency across frames, match lighting and expression, and follow head movement, so the result blinks, turns and follows liveness challenges like a real person.
For KYC and identity verification, this undermines the premise of video-based authentication. A manipulated feed can show a stolen document's face on an attacker's moving head. Presentation attack detection looks for printed photos, masks and screens, so it sees a real, moving face and lets it through.
The Bynn Deepfake Detection model is Bynn's own face-swap detector, built for identity verification: it is designed for the selfie frames and videos real verification sessions produce, and it is kept current as new face-swapping tools appear. It returns a probability, a clear decision and the face-swapping method the content most resembles.
Achieving 99.8% accuracy, with 99.99% of face-swap attacks detected at a false reject rate of 0.32% on held-out verification sessions, it provides robust protection against face-swap attacks on identity verification and authentication flows.
Send a video with video_url or base64_video (MP4, MOV, AVI, WebM or MKV, up to 100MB). 32 frames per minute of video are taken evenly through the clip and combined into one decision, and the per-frame results in the response show which frames carry the manipulation. Send the file as it was recorded, without re-encoding or downscaling it first.
Billing: per minute of video, with a partial minute counted as a full minute.
The API returns a structured JSON response containing:
Example Response:
{
"label": "fake",
"is_fake": true,
"is_real": false,
"fake_probability": 0.998,
"confidence": 0.998,
"frames_total": 32,
"frames_scored": 31,
"swapper": "inswapper_128",
"frame_probabilities": [0.998, 0.997, 0.996, null, 0.998, 0.995, 0.997, 0.998, ...]
}Code
Note: an "unverifiable" result means no face could be analyzed. Treat it as content to retry or review, not as evidence of a real person.
| Metric | Value |
|---|---|
| Detection Accuracy | 99.8% |
| True Positive Rate (burst) | 99.99% |
| True Positive Rate (single frame) | 99.90% |
| False Reject Rate (FRR) | 0.32% |
| AUC | 0.999 |
| Average Response Time | 3,000ms |
| Max File Size | 100MB |
| Supported Formats | MP4, MOV, AVI, WebM, MKV |
This model provides a probability and a decision, not definitive proof of manipulation.
Live face-swap detection on a burst of selfie frames: detects real-time face swaps and names the swapper family they resemble
framesarrayThe stills of one verification burst, 1 to 32 JPEG or PNG frames as URLs. Frames are scored individually and pooled; a frame without a face is reported and left out of the decision
["https://example.com/burst/frame1.jpg","https://example.com/burst/frame2.jpg"]base64_framesarrayThe same burst as base64-encoded frames (bare or data URI)
["/9j/4AAQSkZJRgABAQAA..."]image_urlstringA single frame, scored as a one-frame burst
https://example.com/selfie.jpgvideo_urlstringA video (MP4, MOV, AVI, WebM, MKV, up to 100MB): 32 evenly spaced frames per minute are cut from it and scored as one burst
https://example.com/selfie.mp4base64_videostringThe same video, base64-encoded
AAAAIGZ0eXBpc29t...Face-swap verdict for the burst with the per-frame evidence behind it
labelstring"fake" or "real" at the calibrated burst threshold; "unverifiable" when no frame had a face
fakeis_fakebooleanTrue if the burst is a face swap; null when unverifiable
trueis_realbooleanInverse of is_fake; null when unverifiable
falsefake_probabilityfloatCalibrated probability that the burst is a face swap, pooled over the frames with a face; null when unverifiable
0.998confidencefloatProbability of the returned label: fake_probability for "fake", its complement for "real"
0.998frames_totalintegerFrames received
5frames_scoredintegerFrames in which a face was found and scored
5swapperstringThe swapper family the artefacts most resemble, "real" for real content; explanatory only
inswapper_128frame_probabilitiesarrayThe fake probability of each frame in order, null where no face was found
[
0.998,
0.997,
null
]{
"model": "bynn-deepfake-video",
"frames": [
"https://example.com/burst/frame1.jpg",
"https://example.com/burst/frame2.jpg",
"https://example.com/burst/frame3.jpg"
]
}{
"success": true,
"data": {
"label": "fake",
"is_fake": true,
"is_real": false,
"fake_probability": 0.998,
"confidence": 0.998,
"frames_total": 3,
"frames_scored": 2,
"swapper": "inswapper_128",
"frame_probabilities": [
0.998,
0.997,
null
]
}
}429 HTTP error code along with an error message. You should then retry with an exponential back-off strategy, meaning that you should retry after 4 seconds, then 8 seconds, then 16 seconds, etc.Integrate Video Deepfake Detection into your application today with our easy-to-use API.