Find files, editable templates and browser test targets by what you need to make or test. The directory below is cut by format; the two collections under it cut the same library by subject and by workflow.
Salt and pepper 8% applied to the detail-chart base plate with seed 9085. Dense impulse noise. A median filter handles this trivially and a Gaussian one cannot, so it separates the two families of denoiser immediately. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 24 rather than 19: random noise is incompressible, and at this amplitude the codec's own artefacts sit far below the noise floor, so a coarser quantiser saves several megabytes without affecting any measurement.
Gaussian σ=15 applied to the gradient-sky base plate with seed 9017. Moderate Gaussian noise, roughly a mid-ISO handheld shot. The level most denoise benchmarks use. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 19, where the light noise could otherwise be confused with compression artefacts.
Gaussian σ=30 applied to the gradient-sky base plate with seed 9034. Heavy Gaussian noise where fine detail and noise overlap in amplitude, so recovery requires temporal information rather than spatial smoothing alone. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 24 rather than 19: random noise is incompressible, and at this amplitude the codec's own artefacts sit far below the noise floor, so a coarser quantiser saves several megabytes without affecting any measurement.
Gaussian σ=5 applied to the gradient-sky base plate with seed 9000. Light sensor noise: the level a modern camera produces at base ISO. Subtle enough that an over-aggressive denoiser does more damage than the noise did. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 19, where the light noise could otherwise be confused with compression artefacts.
Gaussian σ=50 applied to the gradient-sky base plate with seed 9051. Severe noise approaching the signal level. Included as the failure case: most denoisers hallucinate structure here, which is exactly what the paired reference exposes. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 24 rather than 19: random noise is incompressible, and at this amplitude the codec's own artefacts sit far below the noise floor, so a coarser quantiser saves several megabytes without affecting any measurement.
Multiplicative speckle applied to the gradient-sky base plate with seed 9102. Multiplicative rather than additive noise, so its amplitude scales with local brightness: the pattern seen in ultrasound and radar. Additive-noise models systematically under-correct highlights. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 24 rather than 19: random noise is incompressible, and at this amplitude the codec's own artefacts sit far below the noise floor, so a coarser quantiser saves several megabytes without affecting any measurement.
Poisson shot noise applied to the gradient-sky base plate with seed 9119. Photon shot noise, signal-dependent and the physically correct model for low-light capture. Dark regions are proportionally far noisier than bright ones. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 24 rather than 19: random noise is incompressible, and at this amplitude the codec's own artefacts sit far below the noise floor, so a coarser quantiser saves several megabytes without affecting any measurement.
Salt and pepper 2% applied to the gradient-sky base plate with seed 9068. Two per cent of pixels forced to pure black or white: impulse noise from sensor faults and transmission errors. Defeats Gaussian-assuming filters, which smear each spike instead of rejecting it. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 19, where the light noise could otherwise be confused with compression artefacts.
Salt and pepper 8% applied to the gradient-sky base plate with seed 9085. Dense impulse noise. A median filter handles this trivially and a Gaussian one cannot, so it separates the two families of denoiser immediately. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 24 rather than 19: random noise is incompressible, and at this amplitude the codec's own artefacts sit far below the noise floor, so a coarser quantiser saves several megabytes without affecting any measurement.
Gaussian σ=15 applied to the pan-city base plate with seed 9017. Moderate Gaussian noise, roughly a mid-ISO handheld shot. The level most denoise benchmarks use. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 19, where the light noise could otherwise be confused with compression artefacts.
Gaussian σ=30 applied to the pan-city base plate with seed 9034. Heavy Gaussian noise where fine detail and noise overlap in amplitude, so recovery requires temporal information rather than spatial smoothing alone. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 24 rather than 19: random noise is incompressible, and at this amplitude the codec's own artefacts sit far below the noise floor, so a coarser quantiser saves several megabytes without affecting any measurement.
Gaussian σ=5 applied to the pan-city base plate with seed 9000. Light sensor noise: the level a modern camera produces at base ISO. Subtle enough that an over-aggressive denoiser does more damage than the noise did. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 19, where the light noise could otherwise be confused with compression artefacts.
Gaussian σ=50 applied to the pan-city base plate with seed 9051. Severe noise approaching the signal level. Included as the failure case: most denoisers hallucinate structure here, which is exactly what the paired reference exposes. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 24 rather than 19: random noise is incompressible, and at this amplitude the codec's own artefacts sit far below the noise floor, so a coarser quantiser saves several megabytes without affecting any measurement.
Multiplicative speckle applied to the pan-city base plate with seed 9102. Multiplicative rather than additive noise, so its amplitude scales with local brightness: the pattern seen in ultrasound and radar. Additive-noise models systematically under-correct highlights. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 24 rather than 19: random noise is incompressible, and at this amplitude the codec's own artefacts sit far below the noise floor, so a coarser quantiser saves several megabytes without affecting any measurement.
Poisson shot noise applied to the pan-city base plate with seed 9119. Photon shot noise, signal-dependent and the physically correct model for low-light capture. Dark regions are proportionally far noisier than bright ones. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 24 rather than 19: random noise is incompressible, and at this amplitude the codec's own artefacts sit far below the noise floor, so a coarser quantiser saves several megabytes without affecting any measurement.
Salt and pepper 2% applied to the pan-city base plate with seed 9068. Two per cent of pixels forced to pure black or white: impulse noise from sensor faults and transmission errors. Defeats Gaussian-assuming filters, which smear each spike instead of rejecting it. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 19, where the light noise could otherwise be confused with compression artefacts.
Salt and pepper 8% applied to the pan-city base plate with seed 9085. Dense impulse noise. A median filter handles this trivially and a Gaussian one cannot, so it separates the two families of denoiser immediately. Paired with the clean ground truth in this group, so denoiser output can be scored numerically. Encoded at CRF 24 rather than 19: random noise is incompressible, and at this amplitude the codec's own artefacts sit far below the noise floor, so a coarser quantiser saves several megabytes without affecting any measurement.
The depth map for the parallax plate, encoded brighter-is-nearer across three layers. These values are not an estimate: they are derived from the layer velocities the generator used, so the depth ordering is exact by construction. Relative depth is what matters here: the layers move at 0.6, 2.4 and 6.0 pixels per frame, a 1 : 4 : 10 ratio.
Three planes translating at 0.6, 2.4 and 6.0 pixels per frame, a 1 : 4 : 10 velocity ratio that defines their relative depth by motion alone. There are no pictorial depth cues to fall back on: no perspective convergence, no shading, no familiar object sizes. A monocular depth model that has learned pictorial cues rather than motion parallax will do poorly here, which is precisely what makes the fixture informative.
Timed text as DFXP, byte-for-byte a TTML document, just under the extension Netflix, Adobe and older captioning tool-chains still use. Same tt root, same head/body/div/p structure, same styling and region attributes. It exists to check that a caption parser dispatches on document content rather than on the file extension: a parser that accepts .ttml but rejects an identical .dfxp is exactly the bug this catches.
A 2.0 second 640x480 H.264 clip at 24 fps, 49 frames. Animated from the still nss-n-dog-park_00001_.png, so the first frame is a known image and frame extraction can be checked against it. Measured mean inter-frame change 0.0312 (moderate). Clear movement without a scene change, which is the ordinary case for short footage. Synthetic footage: two seconds at this size is a decoder and pipeline fixture rather than showcase material, hands degrade in later frames, and no text in shot is legible.
Cover art embedded in an MP4 as a still JPEG carrying the `attached_pic` disposition. Note what that means structurally: the artwork is a *second video stream*, not a metadata field.
That is the trap. A pipeline that maps 'the video stream' with `-map 0:v` picks up both and produces a file with a stray one-frame track; one that counts video streams to decide whether a file is a video reports two. Both are common, and neither shows up until a file with artwork arrives.
A Matroska attachment: a whole file carried inside the container alongside the media, with its own filename and MIME type. In the wild this is how fonts travel with styled ASS subtitles, so that a rendering machine lacking the typeface still gets the right result. Extract it with `ffmpeg -dump_attachment:t:0 out.txt -i …`.
Unlike the MP4 cover art in this group, an attachment is not a media stream: it demuxes as `codec_type=attachment` and has no frames, which is why remuxing to any container without an attachment concept discards it silently.
The filename here is deliberately not `cover.jpg`. Matroska's cover-art convention is simply an attachment named `cover.*`, and FFmpeg and most players special-case that name and promote it to an `attached_pic` video stream. So the same bytes attached under two different filenames produce two different stream lists: a genuinely surprising result if you are counting streams to decide what a file contains.
A file with a known, fixed creation time: the field media libraries sort by, importers use to build folders, and forensic tools read first. Fixed rather than generated at build time, so re-running the generator produces byte-identical output and the published value never goes stale.
Two behaviours worth testing against it. MP4 stores the `mvhd` timestamp in seconds since 1904 with no timezone, so anything that displays a local time is applying an assumption; and the stripped file in this group has no creation time at all, which is what a privacy-scrubbed file should look like.