The app can suggest a better-preserved candidate. It cannot prove generation order: a re-encode can inherit its source’s defects, and two files may be independent exports from a third source.
Method and limitations
A seeded random sample is drawn across the shared duration, excluding the first and last 5%. Each file is sought by time, with a configurable offset. All frames are analyzed at the smallest common width, capped at 960 pixels. Downscaling can hide artifacts; results are stronger when all inputs have the same dimensions.
Block pattern compares luminance jumps at every phase of 8- and 16-pixel grids against ordinary adjacent-pixel jumps. Edge detail is mean absolute luminance Laplacian. Low-resolution luminance signatures screen for likely mismatches. A paired win requires at least 5% less block pattern and no more than 5% less detail, or 5% more detail without 5% worse blocking. Agreement screening and thresholds are heuristics; verify alignment visually.
We leave the conclusion inconclusive unless one candidate wins at least 60% of its eligible comparisons with each other file, with at least four eligible samples per pair. No size, bitrate, filename, or timestamp is used as a quality signal. Browser decoding does not provide reliable encoder history. HDR, edits, crops, color changes, noise, and frame-rate conversion can confound these results. Single frames also miss temporal artifacts.
Use an offset of +0.5 seconds when the matching content appears 0.5 seconds later in that file. Native browser seeking may still land on adjacent frames, especially with variable frame rates. Unsupported codecs will be reported, rather than transcoded. No files are uploaded and no external services are called by this app.