fix(attribution): correct third-party credit, and assert it stays correct - #73
Merged
Conversation
…rect zsmooth was credited to "Adrian Woracz" in the README, the About dialog and NOTICES. That name does not exist — the author's handle is `adworacz` and his LICENSE says Austin Dworaczyk Wiltshire. The handle had been expanded into a plausible-sounding human name rather than looked up, and he found it himself (#72). Re-derived every attribution from upstream LICENSE files and source headers rather than patching the one report, because the same class of error was throughout the file: - Wrong licences. CTMF is GPL-3.0 (listed 2.0), DCTFilter is MIT (listed GPL-2.0), AWarpSharp2 is ISC and RemoveGrain/Repair is WTFPL (both listed GPL-2.0). The bundled FFmpeg is built --enable-gpl --enable-version3 on every platform, so it is GPL-3.0, not the LGPL 2.1+ claimed. - Invented year ranges. "Copyright (c) 2012-2024 ..." appeared on components whose upstream asserts no such range, including two that assert no copyright at all (havsfunc is Unlicense; FluxSmooth's author explicitly disclaimed it). - Credited ffms2, removed alongside BestSource, and omitted ~15 plugins that are bundled: Retinex, bifrost, fluxsmooth, DeScratch, VIVTC, TCanny, TTempSmooth, AddGrain, FFT3DFilter, KNLMeansCL, MiscFilters, TemporalMedian, BM3D, zimg, Zstandard, plus the Agner Fog VCL that eight HolyWu plugins compile in. - mvsfunc has no licence upstream at all — no LICENSE, no header, nothing in setup.py. It was listed as "Unlicense"; it now says so plainly, with an offer to remove it on request. Original authors are now named where a port obscured them (Kevin Stone behind DFTTest/TCanny/TTempSmooth/NNEDI3CL, Simon Perreault behind CTMF, Tom Barry behind AddGrain, Fizick behind FFT3DFilter/DeScratch/Deblock, SEt behind AWarpSharp2, Sergey Stolyarevsky behind CCD, Didee behind QTGMC's ancestor, SAPikachu behind neo_f3kdb, Akarin behind akarin), and the full text of every short permissive licence is reproduced — MIT, ISC, WTFPL, BSD-3, Boost, zlib and the Unlicense all require the notice be included, and it was not. Two in-app strings were wrong too: the Windows exe's file properties gave CompanyName and LegalCopyright as "com.vapourbox", and both platforms claimed "All rights reserved" on a GPL-3 app. app/test/attribution_test.dart keeps the three places in step: every plugin in deps-expected-plugins.json must be credited in NOTICES, every About-dialog component must appear there, no removed component may linger, and every referenced licence file must exist. It caught two inconsistencies while being written. What it cannot catch is a name that is simply wrong, so CLAUDE.md records the rule: a handle is not a name, a repo owner is not the copyright holder, and every line comes from upstream at the time of writing. Fixes #72
StuartCameronCode
marked this pull request as ready for review
August 17, 2026 01:29
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #72.
The reported bug
zsmooth was credited to "Adrian Woracz" in the README, the About dialog and
NOTICES.txt. That name does not exist — the author's handle isadworaczand his LICENSE says Austin Dworaczyk Wiltshire. The handle had been expanded into a plausible-sounding human name instead of being looked up, and he found it himself.Why this touches so much
Rather than patch the one line, I re-derived every attribution from upstream
LICENSEfiles and source headers. The same class of error was throughout:Wrong licences
--enable-gpl --enable-version3Invented year ranges —
Copyright (c) 2012-2024 …appeared on components whose upstream asserts no such range, including two that assert no copyright at all (havsfunc is Unlicense; FluxSmooth's original author explicitly disclaimed copyright).Credited something not shipped — ffms2, removed alongside BestSource.
Omitted ~15 plugins that are shipped — Retinex, bifrost, fluxsmooth, DeScratch, VIVTC, TCanny, TTempSmooth, AddGrain, FFT3DFilter, KNLMeansCL, MiscFilters, TemporalMedian, BM3D, zimg, Zstandard, plus the Agner Fog Vector Class Library that eight HolyWu plugins compile in.
mvsfunchas no licence upstream at all — no LICENSE file, no header, nothing insetup.py. It was listed as "Unlicense". It now says so plainly, with an offer to remove it on request.What else changed
CompanyNameandLegalCopyrightas literally"com.vapourbox"; both platforms claimed "All rights reserved" on a GPL-3 app.Guard
app/test/attribution_test.dart(4 tests, runs in the push gate — no deps needed) keeps the three places in step:deps-expected-plugins.jsonis credited inNOTICES.txtNOTICES.txtLicence text:file referenced actually exists inlicenses/It caught two of my own inconsistencies while I was writing it. What it cannot catch is a name that is simply wrong, so
CLAUDE.mdrecords the rule: a handle is not a name, a repo owner is not the copyright holder, and every copyright line comes from upstream at the time of writing.Note on scope
bifrost, fluxsmooth and Retinex arrive with deps 1.9.0 on
feat/advanced-mode-and-filter-curation, not onmain— they are credited here anyway, since both branches land before the next release. Nothing else here depends on that branch; the two touch no common files apart fromREADME.mdandCLAUDE.md, which merged cleanly in testing.Verification
flutter test test/attribution_test.dart— 4/4flutter analyze— no new issuesLICENSEor source header (gh api repos/<r>for the SPDX id, raw file fetch for the holder)