Inspiration
Most accident claims now come with a video. Dashcams are cheap and there's a camera on every street. But someone still has to watch each clip and check it line by line against what the claimant wrote. It's slow, and small details slip through: which side the other car came from, who moved first, whether the camera got knocked in the crash. Video AI can describe a clip, but describing isn't the same as checking a story. We wanted something that reads footage like an investigator and shows its work.
What it does
You give Physics Witness a video and the claimant's story. It breaks the story into small statements and marks each one:
- Supported: the footage shows it.
- Contradicted: the footage clearly shows something else.
- Can't tell: the footage doesn't settle it.
Each verdict has its reasoning and timestamped frames. Click a verdict and the video jumps to that moment.
For Can't tell, it doesn't guess. It asks the claimant for something specific, like "the rear camera angle" or "the 10 seconds after impact". Once that's uploaded, only the open statements get re-checked.
Also included:
- a home page of past claims, each with its own link
- three sample claims to try (one has a planted lie)
- cancel and delete for running claims
- a live cost meter
- a "Liar Test" that measures how many planted lies get caught
It gives evidence to a human adjuster. It never calls anything fraud.
How we built it
- Frame sampling: ffmpeg picks the frames with the most motion, plus the ones right before a sudden jolt, and stamps the real timestamp on each. The model can't get the timing wrong.
- Seeing: Nemotron 3.5 Super VL on Nebius Token Factory looks at 6-frame windows and reports only physical facts: events, actors, direction, lighting, camera jolts and scene cuts.
- Segments: scene cuts split merged videos so one clip's evidence never judges another.
- Reading the story: Nemotron 3 Nano splits it into single statements.
- Judging: Nemotron 3 Ultra checks each statement against the timed observations. Contradicted needs real evidence; missing footage means Can't tell. Nemotron 3 Super is the cheaper judge in "budget" mode.
- Context: Tavily pulls the weather on the claim date and facts about the location as extra evidence.
- App: Python + FastAPI backend, with a hand-built UI styled like an accident case file.
- Storage: Supabase Postgres for claims and verdicts, a private bucket with signed URLs for videos and frames, and a shared model cache. Any server can pick up another's work.
- Deployment: Docker, Render, and a Nebius Serverless runbook.
- Testing: 90 pytest tests with mocked models and a fake in-memory Supabase.
Challenges we ran into
- No Cosmos access. We planned around NVIDIA Cosmos, so we rebuilt the vision step on Nemotron VL and made every model swappable.
- False "Contradicted" verdicts. True stories were getting flagged because:
- two clips were joined into one video
- sampling skipped the impact frame
- the judge treated "I don't see it" as proof against the claim
Scene-cut segments, pre-spike sampling and stricter rules fixed all three.
- A dashcam knocked toward the sky looked like "the car flew into the air". We now track camera motion separately.
- Long videos were slow. We read duration from the header, cap candidate frames and seek instead of decoding everything.
- Windows encoding errors (
UnicodeEncodeError) in the console and file writes. - Stateless deploys: containers lose their disk, so everything moved to Supabase. A heartbeat tells dead runs from live ones, and cancel works from any server.
- Demo footage licensing: clips we can't share stay out of git and reach the server through the private bucket.
Accomplishments that we're proud of
- The liar sample works. The story says "a train came from the left", Physics Witness marks that line Contradicted, and one click shows the train coming from the right.
- "Can't tell" is a real answer, not a failure. Missing evidence becomes a clear request, not a guess against the claimant.
- Every verdict can be audited: reasoning, frames, models used and cost.
- Cached samples load in seconds for free, so the demo is reliable.
- 90 tests cover the pipeline, storage and UI routes.
What we learned
- Time matters most. Stamping real timestamps on frames made answers far more reliable.
- One model to see and another to judge works better than one doing both.
- The biggest decision was how it fails. Requiring real evidence for a contradiction matters more than raw accuracy when a real person's claim is at stake.
- Caching every model reply made testing and demos almost free.
- Planning for stateless deploys early saved us on deploy day.
What's next for omni-coders
- Run the Liar Test on more openly licensed clips and publish catch, false-alarm and abstain rates.
- Move to NVIDIA Cosmos when available and compare it with Nemotron VL.
- Multi-camera claims: front, rear and CCTV on one timeline.
- Claims-system integrations and a reviewer flow to accept or override verdicts.
- Estimates for speed, distance and right of way, without overclaiming.
- Host fully on Nebius Serverless and run Liar Test batches as Serverless Jobs.
Built With
- css3
- fastapi
- ffmpeg
- html5
- javascript
- nebius
- nemotron
- nvdia
- postgresql
- python
- render
- supabase
Log in or sign up for Devpost to join the conversation.