-
Handout
-
Nvidia Ai Checker counts video as real when it is AI
-
Our System flags video as AI generated which Nvidia Checker counted as real (The video is AI generated)
-
Day 1 Testing of Throwing a ball to the floor and it not counting as AI (since acceleration would be greater than g)
-
Website Home Page (locally hosted)
-
Website processing page
-
Website: Result is AI
-
Website: Result is Real
-
Testing Irregularly Shaped Objects (In this case a Celsius can)
-
Testing irregularly shaped objects (in this case an eraser)
-
Ball/Camera Moving Tests + Adding extra physics features
Inspiration
AI video is getting good enough that your eyes can't be trusted. Most detectors fight that with another model, which is a classifier trained on only current models, which becomes obsolete with every new model. We wanted something that doesn't age. Real things fall at 9.8 m/s², and generated video has no idea what gravity is. A video model learns what falling looks like, not what it is. So we started asking "does this obey the laws of physics?"
What it does
NØVEX takes a video of something falling (a ball, a phone, a rotisserie chicken) and measures the gravitational acceleration inside the clip. If the number lands inside Earth's range, the clip is likely real. If the object falls slowly, eases in, or falls at a constant speed, it's flagged as likely AI. It returns a verdict (Real, AI-generated, Real slow motion, or Can't tell), an error bar, and plain-English reasons.
How we built it
The core is one equation:
$$g = s \cdot a_{px} \cdot k^2$$
- $s$ is meters per pixel, taken from the falling object's own known size
- $a_{px}$ is acceleration in pixels/s², from a fitted parabola
- $k$ is real seconds per video second, read from the clip ($k=1$ unless it's slowed down)
The pipeline, all in Python:
- Stabilize and track. Camera shake, pans and zooms are removed. Background subtraction finds moving objects, which are scored on how much they look like a dropped ball.
- Fit the physics. A proper parabola gives $a_{px}$ for each drop. We correct for air drag on light balls (a ping-pong ball falls 5–20% slower than vacuum) and for rolling shutter.
- Handle any camera angle. A camera tilted down by angle $\theta$ sees only a $\cos\theta$ share of the fall. We read tilt and roll from the room's vertical lines (door frames, wall corners) and from the ball's changing size, then warp the picture to a level view where gravity points straight down.
- Run checks that need no ruler. Constant acceleration, bounce restitution, equal falls for several objects, steady spin, and a shadow that follows the ball.
- Catch the slow-motion trick. Real slow motion reads as low gravity, so we read capture-rate tags and timestamps, and detect repeated or interpolated frames, to tell it apart from a fake.
- Name the object. Gemini identifies what's falling to get its real-world size, and says "can't tell" when the answer depends on a guess.
We also built a FastAPI web app with side-by-side comparison, a gravity gauge, tracking overlays, frame by frame playback, a debug video, and optional object verification.
What we learned
- A measurement is only as good as its ruler. Most of the work went into error: object size, air drag, rolling shutter, lens and tilt.
- Honest uncertainty beats a confident wrong answer. "Can't tell" is a legitimate verdict. Feathers and balloons are dominated by drag, not gravity, so we can't accurately judge them.
- Pretrained models are overconfident. Gemini called the same pickleball three different things, each time "85–98% sure," so we pool multiple answers and flag when the verdict depends on the guess.
Challenges
- Slow motion looks exactly like fake gravity. A real 240 fps clip played back at 30 fps reads about 0.15 m/s², so we had to read the file's clocks to avoid false accusations.
- Camera angle. A level-camera assumption would call a real drop filmed from 35° above "8 m/s² = AI." Recovering the tilt without knowing the lens was the hardest geometry.
- Tracking in the wild. Hands, shadows and edges all look like falling objects, and bounces can move the ball toward the camera, changing its size.
Built With
- clip
- css
- depth-pro
- fastapi
- gemini-api
- html
- javascript
- micropython-(raspberry-pi-pico)
- numpy/scipy
- opencv
- pyav
- python
- sam-2
- veo
Log in or sign up for Devpost to join the conversation.