SpotAI
A multimodal misinformation platform that verifies claims from video through speech, text and retrieval — and marks generated media at source so provenance survives re-upload.
- Role
- Owned the claim-verification pipeline end to end, and designed the watermarking and provenance layer.
- Status
- Prototype — presented to Dell executive leadership
- Team
- Six-person sprint
- Stack
- Python, Faster-Whisper, RoBERTa-MNLI, C2PA, Rust, Wikipedia retrieval
Measured by the team during the sprint, checking extracted claims against scraped Wikipedia articles after a polarity score narrowed which statements were worth verifying.
Achieved by batching the entailment pass across every claim in a transcript and caching retrieval results, which repeat heavily across claims from the same video.
Ingestion, speech recognition, OCR, retrieval, entailment and verdict — each a distinct stage with its own place to intervene.
Overview
Generative models made convincing fake video cheap. SpotAI attacks that from both ends at once: detection, which asks whether a claim in a piece of media survives contact with evidence, and prevention, which marks generated media at creation so its provenance travels with it.
Most work in this space picks one end. Doing both is what made the sprint interesting, because the two halves fail in opposite ways — detection is probabilistic and arrives late, provenance is deterministic and only works if it was applied early.
Context
A six-person sprint at Dell Technologies, presented to executive leadership. I was selected from a field of more than twelve thousand applicants.
My role
I owned the claim-verification pipeline end to end, and designed the watermarking and provenance layer.
The verification pipeline
Video is an opaque blob. Nothing can be checked until it is decomposed into claims, and every stage of that decomposition is a place errors enter.
Ingestion. Accepts an upload or a URL. Validates MIME type, duration and size. Computes a SHA-256 over the asset, which serves double duty as a deduplication key and as the idempotency key for the job queue — the same file submitted twice is recognised rather than reprocessed. Technical metadata (codec, frame rate, audio tracks) is extracted and persisted.
Speech recognition. Faster-Whisper on CTranslate2. Audio is segmented by voice-activity detection into 20–30 second windows with 1–2 seconds of overlap, so a sentence spanning a window boundary is not cut in half. The model version is pinned and decoding is deterministic at temperature zero — a verification system that returns different transcriptions for the same input on different runs cannot be audited.
OCR. On-screen text carries a large share of the claims in short-form video — chyrons, captions, screenshots of headlines. Sampled frames go through OCR and the results are normalised and merged with the transcript.
Polarity scoring. Before anything is retrieved, each candidate statement gets a polarity score. Most of what a transcript contains is not a checkable claim — it is opinion, hedging, narration. Scoring polarity first is a cheap filter that decides what is worth spending a retrieval round-trip on, and it keeps the expensive part of the pipeline pointed at statements that actually assert something.
Retrieval against Wikipedia. Surviving claims are checked against scraped Wikipedia articles, followed from the links most relevant to the claim's entities. Wikipedia is a deliberate choice: it is broad, it is structured, its citations are traceable, and it does not require trusting a search engine's ranking as an implicit relevance judgement. Evidence a reader can follow to a citation is worth more here than evidence from a wider net.
Entailment. RoBERTa-MNLI scores each claim against each retrieved passage. This is the step that turns "here are some articles" into "this passage supports or contradicts this claim".
Output. A verdict, a confidence, and — most importantly — the evidence set. A verification tool that returns a verdict without its evidence is asking to be trusted, which is precisely the habit that makes misinformation work in the first place.
Key decision: entailment over classification
The obvious approach is to train a classifier on true and false claims. It is also the wrong one: it produces a model that has memorised which claims were false at training time, which is useless for anything new, and it gives the user nothing to inspect.
Framing it as entailment against retrieved evidence means the system's answer is always grounded in a document a human can go read. It moves the failure mode from "the model is wrong" to "the retrieved evidence was wrong or missing" — which is a far more debuggable place to fail.
The provenance layer
The detection side is inherently reactive. Prevention marks media at the point of creation.
Each asset receives a 128-bit content_id, a family_id that a scanner updates as
near-duplicates and derivatives appear, and a short human-readable code that is printed next
to a visible badge and encoded in a QR.
Provenance itself is a C2PA-signed manifest — creator, tool chain, edit history, timestamps, licence, signature — stored in PostgreSQL as the system of record and copied to object storage alongside the media. A visible badge and QR are overlaid with FFmpeg, and hidden marks are embedded for robustness.
A Rust worker computes perceptual hashes — pHash and dHash for images, keyframe hashes for video — so that a re-encoded, cropped or re-uploaded derivative can be linked back to its family even when the visible badge has been stripped. That is the part that matters: a watermark that only survives a lossless copy is decorative.
Design constraints
- Retrieval sets the ceiling. The verdict is only ever as good as the evidence behind it, which is why the evidence set ships with every answer rather than sitting behind it.
- Wikipedia bounds what is checkable, and that boundary is a deliberate trade for traceable, citable evidence over a search engine's ranking.
- Polarity filtering decides what gets checked. Spending retrieval on confident assertions rather than on hedged narration is what keeps the pipeline affordable.
- Provenance works at source. The watermarking layer marks media as it is created, which is what makes the perceptual-hash family linking possible downstream.
- Calibration matters more than headline accuracy in this domain, which is what shaped the decision to return evidence and confidence rather than a bare verdict.
Where I would take this next
- Report calibration alongside accuracy. In a verification system, knowing when to abstain is worth more than a point of accuracy.
- An explicit error taxonomy separating retrieval misses from entailment misses, since the two call for different fixes.
- An adversarial suite for the perceptual hashes, measuring how the family linking holds up under crops, re-encodes and overlays.
- A documented latency baseline, turning the batching and caching work into a published before-and-after.
Team
A six-person sprint: Abdallah Anes (project manager), Ahmed Gaballah, Mariam Tamer, Yasmeen Shaaban and Fatema Waly, alongside me.
Constraints
- Video arrives as a single opaque blob and has to be decomposed before anything can be checked
- Evidence has to be traceable, so a reader can check the verdict rather than trust it
- Provenance marks have to survive re-encoding and re-upload
- The output has to show its evidence, not just a verdict
Credits
- Abdallah Anes — Project manager
- Ahmed Gaballah
- Mariam Tamer
- Yasmeen Shaaban
- Fatema Waly
Artifacts
The six pipeline stages and the provenance layer, written up below.
Notes on evidence
- A six-person sprint. My ownership covers the verification pipeline and the watermarking design.
- The architecture described is the prototype design taken to Dell leadership.