Inspiration
Video production has a strange gap.
A creator sends revision notes. An editor makes the changes and exports a new version. Then someone still has to manually scrub through both videos asking:
- Did every requested revision actually happen?
- Did something else change by accident?
- Where exactly did the change happen?
- Is this export actually ready to publish?
Software teams have regression tests before they ship code. Video teams usually do not.
That became the idea behind EditDiff:
Regression testing and release QA for video production.
We wanted to build something that does not simply look at a video and make AI-generated claims. Every conclusion should be backed by measurable evidence.
Our core principle became:
Evidence before assertion.
What it does
EditDiff has two main product directions.
Compare Versions
This is the evidence workspace for understanding exactly what changed between two video exports.
It has two modes.
Verify Revisions
Upload:
- V1
- V2
- revision notes
EditDiff checks every requested revision independently and returns:
PASS · FAIL · REVIEW
Each result includes timestamped evidence, synchronized before/after playback, measured signals, and an explanation of how the conclusion was reached.
REVIEW is intentional. If the evidence is not strong enough to prove a requested change, EditDiff does not turn uncertainty into a fake PASS.
Discover Changes
Sometimes there are no revision notes. You simply have two exports and want to know what changed.
EditDiff aligns both timelines and generates a timestamped Change Ledger containing detected:
VISUAL · TIMING · AUDIO · TEXT · REVIEW
This lets EditDiff answer both:
Did the requested edit happen?
and:
What else changed?
Release Gate
Release Gate combines those capabilities into a final pre-publish QA workflow.
Upload:
- baseline / pre-final export
- release candidate / final export
- revision notes
EditDiff then checks:
Requested revisions Were the requested edits actually completed?
Unexpected changes Did something else change that was not accounted for by an approved revision?
Technical QA Are there measurable regressions such as audio-track loss, sustained audio dropout, suspicious black-frame changes, resolution differences, or unexplained duration changes?
The final result is one of:
READY TO PUBLISH
All requested revisions passed, discovered changes were accounted for, and applicable technical checks passed.
NEEDS REVIEW
There is no definite blocking failure, but EditDiff found uncertainty, an unexpected change, or another issue requiring a human decision.
BLOCKED
A requested revision definitely failed or a high-confidence blocking technical failure was detected.
An unexpected change alone does not automatically mean the video is bad. EditDiff can prove that something changed, but it should not pretend to know whether the creator intended it.
That distinction is central to the product.
The regression-testing moment
Our Release Gate demo illustrates the problem clearly.
A requested audio mute is completed successfully:
PASS
EditDiff also detects the corresponding audio difference and correctly marks it:
ACCOUNTED FOR
But elsewhere in the same export, a logo disappears even though no revision requested that change.
EditDiff marks it:
UNEXPECTED
The requested edit was completed, but the entire export is not automatically approved.
The final decision becomes:
NEEDS REVIEW
That is the idea behind EditDiff in one example:
Passing the requested edit does not mean nothing else broke.
How we built it
EditDiff uses a hybrid deterministic + semantic architecture.
The frontend is built with Next.js, React, and TypeScript.
The backend uses Python and FastAPI, with FFmpeg, ffprobe, OpenCV, and NumPy for media analysis.
Timeline alignment
A simple timestamp-to-timestamp comparison breaks as soon as an editor inserts or removes footage.
EditDiff samples compact visual descriptors from both videos and performs bounded sequence alignment.
This lets the system distinguish:
- matched regions
- replacements
- insertions
- deletions
- timing shifts
and realign the videos instead of producing a flood of false differences after an edit.
Visual analysis
Whole-frame averages can easily miss small but important changes such as:
- titles
- logos
- lower thirds
- crop adjustments
- color changes
We therefore combine multiple deterministic signals:
- global luminance difference
- changed-pixel ratio
- localized tile differences
- color distance
- edge differences
- ORB feature matching
- multi-frame confirmation
This makes it possible to detect both large shot changes and small localized regressions.
Audio analysis
EditDiff extracts audio and measures local RMS/envelope behavior to identify changes such as:
- localized muting
- major energy shifts
- sustained audio dropout
- complete audio-track loss
For revision verification, a requested mute is only considered a PASS when the deterministic evidence supports it.
Timing changes
Insertions and deletions are verified using timeline alignment and matching visual flanks around a changed region.
This prevents an edit early in the timeline from making every later timestamp look incorrect.
Visible text
Google Gemini is used only as an optional semantic interpretation layer.
The deterministic system must first identify and support a real visual difference.
Only then can Gemini inspect a bounded set of aligned evidence frames and help classify readable text changes.
Gemini is not allowed to invent where a change happened.
If Gemini is unavailable, times out, returns malformed output, or cannot confidently interpret the evidence, EditDiff keeps the deterministic result instead of fabricating certainty.
Our architecture can be summarized as:
AI interprets evidence. It does not invent the evidence.
Challenges we faced
Timeline drift
Comparing identical timestamps fails immediately after an insertion or deletion.
We solved this with bounded sequence alignment and independent flank verification.
Small visual edits
Early versions were good at detecting full-shot replacements but could miss small logos, titles, crops, and color changes.
We rebuilt visual detection around localized and structural signals rather than relying on one global frame-difference score.
Compression noise
Lowering thresholds helps find smaller edits, but can also make re-encoded copies look different.
We added regression cases covering different CRF values, bitrates, scaling, and re-encoding paths so compression alone would not become a meaningful change.
Requested vs. unexpected changes
Release Gate introduced a new problem: a discovered difference should not be labeled unexpected if it is simply the evidence of a requested revision that passed.
We built conservative correlation logic between revision evidence and discovered change windows.
A change is only treated as accounted for when the relationship is strong enough. Ambiguous relationships remain REVIEW instead of being silently hidden.
Technical QA without false confidence
Video production contains intentional silence, still frames, black slates, resolution changes, and timing changes.
We deliberately kept the first technical QA layer conservative rather than shipping a long checklist full of unreliable alarms.
What we learned
The biggest lesson was that useful AI tooling does not always mean giving the model more control.
EditDiff became more reliable when we separated:
detection
from:
interpretation
Deterministic systems handle measurable facts.
AI is used where semantic understanding is genuinely useful.
We also learned that uncertainty should be part of the product rather than treated as an error.
A trustworthy system should be able to say:
“I found evidence, but I cannot prove the claim.”
That is why REVIEW is a first-class result throughout EditDiff.
Finally, Release Gate changed how we thought about the product.
We started by asking:
Did the requested revision happen?
Then:
What else changed?
The larger question became:
Should this export ship?
That turned EditDiff from a video-difference tool into a release-quality workflow.
Current result
EditDiff can now perform three connected jobs:
Verify
V1 + V2 + revision notes → PASS / FAIL / REVIEW
Discover
PRE-FINAL + FINAL → timestamped Change Ledger
Release Gate
Baseline + candidate + revision notes → requested-revision QA + unexpected-change detection + technical QA + release decision
The goal is simple:
Stop manually hunting through exports. Know what changed, prove what landed, and catch regressions before they ship.
Software has regression tests.
Video production should too.
Built With
- css
- fastapi
- ffmpeg
- ffprobe
- github
- google-gemini
- google-gen-ai-sdk
- html
- javascript
- next.js
- numpy
- opencv
- pydantic
- python
- react
- render
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.