Project Truth: a Shazam for video claims

Design draft: matching viral clips back to their source footage, starting with Romania

Idea · design draft Alin Rizea · DBM AI · alin.rizea@gmail.com · October 2026 · PDF version · More ideas, and how to collaborate
Summary Many misleading clips are not fake footage. They are real footage, cut so that someone seems to say what they did not mean, or shown without the question they were answering. Project Truth is a Shazam for video claims. Ahead of time it ingests source footage (interviews, debates, news, speeches), transcribes it, extracts every factual claim with speaker, timestamp and topic, and stores a fingerprint for every few seconds of audio and video. When someone pastes a short clip from TikTok, X or WhatsApp, it fingerprints the clip, finds the original even if it was cropped, re-encoded or re-captioned, and shows what was really said around it, what was cut, and how the clip's claims compare with claims already checked. It also works as a phone app on its own: share a clip to it from any social app, and it lists the claims in the video, what is wrong with each one, how confident it is and why, and where the same claim appears in other videos. A clip that is not in the archive yet is processed on the spot and added, so the archive grows with every check. Nothing is built yet. This note sets out the design, the parts I expect to be hard, and how I would test it.

1. The problem

A clip on TikTok shows a minister saying “pensions will be cut”. The full recording has him saying “some people claim pensions will be cut; that is false”. Every frame is genuine; the meaning is reversed. Edits like this are often called cheapfakes. They are cheaper to make than deepfakes and harder to dismiss, because nothing in them is synthetic.

Checking such a clip today is manual work. Someone has to work out where it came from, find the full recording, scrub to the right minute and compare, while the clip keeps spreading. The slowest step, finding the original, is the one a machine can do best. That is the core of this idea: answer “where is this from, and what was cut?” in seconds, then hand the harder question, “is it true?”, to evidence and a human reviewer.

2. How it works

Two pipelines share one archive. The ingest pipeline runs ahead of time on source footage. The check pipeline runs when someone pastes a clip. The colours in Figure 1 mark the design rule that matters most: blue steps produce mechanical facts with timestamps that anyone can verify, so they can be shown at once; orange steps involve judgment and go through evidence and human review.

INGEST · AHEAD OF TIME Source footage debates, speeches Transcribe speech + speakers Claims who, when, topic Visual context captions, charts Fingerprints audio, frames, text Archive segments, claims Postgres, pgvector CHECK · WHEN A CLIP IS PASTED Shared clip via the app Fingerprint + transcribe Match + align source + offsets Edit diff cuts, context Claim check DB + human gate Result page original + context nearest segments checked claims no match: process now, add to archive mechanical: shown at once, with timestamps judgment: evidence and a human reviewer
Figure 1. Two pipelines, one archive. Ingest runs ahead of time on source footage; check runs on a shared clip in seconds when the clip is known. An unknown clip is processed on the spot and added to the archive.

2.1 Ingesting source footage

A clip can only be matched to footage that is already in the archive, so coverage is the product. In Romania the first sources would be the footage most often clipped: parliament sessions, government and presidential press conferences, televised debates and talk shows, campaign speeches, and politicians' own channels. During an election, everything the candidates say on camera.

For each source the archive keeps the transcript with word timestamps, speaker turns, the extracted claims, the fingerprints and a link to the original. The original video is kept privately as evidence. The public page shows only short excerpts with the source named and a link to the full recording.

2.2 Claims with their context

2.3 Fingerprints that survive TikTok

A perceptual hash of each frame (pHash and similar) is the obvious first choice, and it breaks on the most common edit of all. Cropping a 16:9 TV frame to a 9:16 phone video keeps about a third of its width, and a whole-frame hash no longer matches. So every few seconds of source gets three independent signals:

Table 1. Which signal survives which edit. Expected behaviour, to be measured (section 5).

Edit made to the clipAudio fingerprintVisual descriptorTranscript
Re-encoded at low bitrateyesyesyes
Cropped from 16:9 to 9:16yespartlyyes
Captions, stickers or emoji burned inyespartlyyes
Mirroredyespartlyyes
Sped up or slowed by about 10%partlyyesyes
Music added under the speechpartlyyespartly
Phone filming a TV screenpartlypartlyyes
Voiceover replaces the original audionoyesno

No signal survives every edit. So any signal may propose a candidate, and a candidate counts as a match only when several segments line up at a consistent time offset. That temporal check is what keeps false matches out, and it is also what produces the alignment the next step needs. I am about 80% confident in the pattern in Table 1; the real numbers come from the test suite.

2.4 Match, align, diff

Once a clip is aligned, every second of it maps to a second of the source. The differences are mechanical facts:

Source full interview Question “Some claim…” “…pensions will be cut” “That is false.” … 0:300:400:50 1:021:15 Clip as shared “…pensions will be cut” caption: “He admits it” 0:000:12 Question removed (0:30–0:40) Starts mid-sentence Rebuttal cut (1:02–1:15) illustrative example
Figure 2. Alignment turns a clip into a set of checkable facts. Every flag points at a timestamp in the original; none of them needs a judgment about whether anything is true.

2.5 Claims and the verdict

The clip's claims are matched against claims already checked, because false claims repeat in new words. Each claim is embedded with a multilingual model (bge-m3 or multilingual-e5 both handle Romanian), the nearest checked claims come from pgvector, and one model call confirms “same claim, yes or no”. New claims are checked against evidence in a fixed order: primary sources first (official statistics, court documents, full recordings), then wire agencies, then professional fact-checkers, then news of record.

Two answers at two speeds. “Here is the original, the context and what was cut” is shown in seconds, because it is mechanical. “Here is whether it is true” is automatic only when the claim matches one a human has already verified, and it says so with a link. Every new claim gets a proposed verdict with its evidence and waits for a human reviewer before anything is published as a verdict. A model's self-reported confidence is not a substitute for that check.

3. The app on its own: share a clip, get the claims

The phone app needs no website visit and no copying of links. Watching a clip in TikTok, Instagram, Facebook, X, YouTube or WhatsApp, the person taps Share and picks Project Truth, or opens a saved video with it. Both Android and iOS support this through the system share sheet: the app receives the link, or the video file itself for WhatsApp, and nothing else from the phone. No app can watch what is playing inside another app, and this one does not try.

3.1 Known clip or new clip

3.2 One card per claim

For every claim in the video the app shows:

Table 2. Confidence comes from the evidence found, by fixed rules, not from the model's own score.

RatingGiven whenShown as
HighThe claim matches one a human reviewer has already verified, or a published check by a signatory of the International Fact-Checking Network exists for itThe verdict, with a link to the earlier check
MediumPrimary-source evidence was found that supports or contradicts the claim, but no reviewer has confirmed it yet“Preliminary, not reviewed”, with the evidence
LowOnly weaker sources were found, or the sources disagree“Unclear”, with what was found
Not verifiableOpinion, prediction, or nothing checkable found“Not verifiable”, and why

A language model's self-reported confidence is poorly calibrated, so a number like “92%” would look precise and mean little. A rule over the evidence can be checked by anyone, and the app shows which rule applied. The match itself gets a separate confidence, computed from the alignment: how many segments line up, and how many of the three signals agree.

3.3 The full result page

4. The hard parts

5. How I would test it

6. Build order

  1. Ingest one source type, parliament sessions: transcripts, audio fingerprints and transcript alignment. A command line tool: give it a clip, get the original and the timestamp. This step alone answers the slowest question today, “where is this from?”
  2. Visual descriptors, temporal alignment, and the transformation suite.
  3. The edit diff and the public result page.
  4. Claims: extraction, matching against checked claims, the confidence rules in Table 2, and the reviewer screen.
  5. The phone app: share-sheet intake, on-the-spot processing of unknown clips, one card per claim with links to the same claim in other videos.
  6. More sources, and full ingestion of candidates during election periods.

7. Status, and who I am looking for

This is a design; nothing is built yet. It extends a claim-checking design I worked on in September 2026 with a provenance layer. I am looking for:

Email alin.rizea@gmail.com, message me on LinkedIn, or open an issue on the repository.