research/catalogue-prior/decisive-rule.json is the rule that judges a run on a learned prior tuned on a catalogue (H1c) or on an episodic series (H1b), committed before any such run. Its SHA-256 is 8e265cfa2a3cb3de8c02a2c79a65bba59b52f2c134f4baf39d8bf163c0c38bc2. It keeps the record's rule and answers the three faults §2.1 lists: K1 is diagnostic, the bar for a video claim is plain per-title AV1, and K4 kills H1c for an arm whose catalogue-tuned set beats the same codec's generic set by less than 5 % BD-rate on PSNR on the median held-out title, before the set's bytes are charged. Its `base` field names what is new in this file and not carried over: - GO judges H1b on the openings arm, against per-episode encodes, where the record's rule named no comparator for H1b and only K3 decided it. - Each clause names the arms it judges. GO judges wai.neural.int_hyper's catalogue-tuned set against AV1 all-intra, the catalogue-tuned set of any other arm with inter prediction whose P-frames are not integer block motion compensation, named in a run's record before its first reading, against plain per-title AV1, and the openings. K4 judges each catalogue-tuned set against its generic set. wai.video.int_hyper's verdict is a kill or INCONCLUSIVE. - One AV1 bar: 8-bit at preset 4, coded as §3.5 codes base8 in all else, and all-intra at preset 4. Preset 8 and a ×4 10-bit pipeline are reported. - A kill wins over GO for an arm and claim, and K1 with GO is INCONCLUSIVE. K1 reads only a rate proxy measured in the same run on the same titles, so a run that measures none has no K1, and run.json's K1 carries to no run here. - GO's three quarters are of all the arm's titles, rounded up. A title INCONCLUSIVE on VMAF stays among them and does not count as meeting the bar. GO reads the cubic VMAF figure. tools/wai_catalogue_prior_verify.py holds each rule file's SHA-256 itself (RULE_SHA256), treats every file of the record named *-rule*.json as a rule file, and checks it against that digest and the one §2.2 quotes in a <!--cat-sha256:NAME--> marker. Its --self-test requires the record to pass and each mutated copy to fail with its finding: a byte of the rule, a quoted digit, the rule and its quoted digest changed together, an unlisted rule file, a removed one, a removed, stray or misplaced marker, another format, and text that is not JSON. The conformance step runs it before the record. Co-Authored-By: Claude Opus 5.5 <[email protected]>
91 lines
9.6 KiB
JSON
91 lines
9.6 KiB
JSON
{
|
||
"format": "wai-catalogue-prior-rule/1",
|
||
"about": "The decision rule for a run on a learned prior tuned on a catalogue (H1c) or on an episodic series (H1b), as research/catalogue-prior.md §2.2 summarises it. That page quotes this file's SHA-256, and tools/wai_catalogue_prior_verify.py holds the same digest and checks the file against both. A later rule is a new file: the repository checks (scripts/check-frozen-rules.py) read the history on every run and go red while this file differs from what first reached main.",
|
||
"committed": "Before any run it judges. When this file was committed, the record had measured H1c not at all, and H1b only across the films of one studio, not across the episodes of a series (research/catalogue-prior.md §5, §6).",
|
||
"base": "run.json's rule (GO, K1, K2, K3), as research/catalogue-prior.md §2 states it: a clause not changed here is run.json's. Three changes answer the faults §2.1 lists: K1 is diagnostic, the bar for a video claim is plain per-title AV1, and K4 can kill H1c. The rest are new clauses of this file, not carried over from run.json's rule or §2.1: GO judging H1b on the openings arm against per-episode encodes, where run.json's rule names no comparator for H1b and only K3 decides it; the comparator for each arm, and the pipeline and presets of the AV1 bars; what GO's three quarters count; the order of a kill, K1 and GO; what K1 reads; the three VMAF interpolations; the stop rule; and the arms, hold-outs, counting, metrics and corpus a run uses.",
|
||
"claims": {
|
||
"H1b": "exact recurrence across the episodes of one series, judged by K3 with the episodes as the titles, and by GO on the openings arm",
|
||
"H1c": "a learned prior: a codec's parameter set tuned on the catalogue minus the held-out title, judged by K4 and GO"
|
||
},
|
||
"comparators": {
|
||
"plain_av1": "The bar for a video claim: arms.av1 at preset 4, 8-bit, per title, and no other. Its figures at preset 8 are reported, and no clause reads them. A 10-bit pipeline that scales each 8-bit sample by 4 may be run beside it: it is reported, and no clause reads it. The ×2 10-bit pipeline of §3.5 (base10) is a pipeline control only, and no clause reads it.",
|
||
"by_arm": {
|
||
"neural_int_hyper": "wai.neural.int_hyper codes each picture alone, so it makes an image claim, against AV1 all-intra (arms.av1_intra). GO judges its catalogue-tuned set against AV1 all-intra, and K4 against its generic set. Its title-tuned set, that set's bytes charged to the title, is reported against AV1 all-intra, and no clause reads it.",
|
||
"video_int_hyper": "wai.video.int_hyper has inter prediction, and its P-frames are integer block motion compensation. K4 judges its catalogue-tuned set against its generic set, and GO does not judge it, so its verdict is a kill or INCONCLUSIVE. Its figures against plain per-title AV1 (comparators.plain_av1) are reported, and no clause reads them.",
|
||
"inter": "Any other arm with inter prediction is a video claim, and arms.inter says which arm that is. GO judges its catalogue-tuned set against plain per-title AV1 (comparators.plain_av1), and K4 against its generic set.",
|
||
"openings": "Per-episode encodes: each episode coded whole by plain per-title AV1 (comparators.plain_av1), its opening included. GO judges the openings arm against them, with the episodes as its titles and the opening's bytes as its prior, counted once per sink.",
|
||
"per_title_prior": "wai_upscale_measure's sr-title (the title's own prior, its bytes counted once for the title) against its sr (the generic prior) at the same q, with its direct and up2 beside them. Reported, and no clause reads it."
|
||
},
|
||
"other": "A clause judges only the arms and sets that by_arm and the clause's own list name it for."
|
||
},
|
||
"arms": {
|
||
"av1": "SVT-AV1 per title, 8-bit, at preset 8 and at preset 4, coded as §3.5 codes base8 in all else: its CRF ladder, key-frame interval and tune",
|
||
"av1_intra": "AV1 all-intra: arms.av1 at preset 4, with every picture a key frame",
|
||
"neural_int_hyper": "wai.neural.int_hyper with its generic set; with a set fine-tuned on the catalogue minus the held-out title; and with a set fine-tuned on the title itself, that set's bytes charged to the title",
|
||
"video_int_hyper": "wai.video.int_hyper with its generic set and with a catalogue-tuned set",
|
||
"inter": "any other codec with inter prediction whose P-frames are not integer block motion compensation, with its generic set and with a set tuned on the catalogue minus the held-out title, that a run names in its record before its first reading",
|
||
"per_title_prior": "exact-upscale's per-title prior (WSR1, exact-upscale §5) through wai_upscale_measure, on the corpus's footage",
|
||
"openings": "for H1b, each episode's opening coded once as its own closed-GOP segment at one <cid>.wai, against per-episode encodes: the bytes a sink fetches across a season"
|
||
},
|
||
"held_out": "Every arm tuned on the catalogue is held out by title: its set never saw the title it is tested on. Each such arm is also held out by date, tuned on titles released before a date and tested on later ones; the gain per catalogue epoch is reported, and no clause reads it.",
|
||
"rule": {
|
||
"go": {
|
||
"bd_rate_max": -10,
|
||
"metrics": ["psnr", "vmaf"],
|
||
"titles_min_fraction": "3/4",
|
||
"titles_counted_of": "every title of the arm",
|
||
"titles_min_rounding": "up",
|
||
"breakeven_titles_per_sink_max": 5,
|
||
"judges": ["neural_int_hyper: the catalogue-tuned set, against AV1 all-intra", "inter: the catalogue-tuned set, against plain per-title AV1", "openings: against per-episode encodes"],
|
||
"text": "GO, worth a capability and a demonstration, needs both: a BD-rate of −10 % or less against the arm's comparator (comparators) on both PSNR and VMAF, with the side information charged, on at least three quarters of its titles (the held-out titles; for the openings arm, the episodes); and a break-even of at most five titles per sink, with the prior's bytes counted once per sink. Three quarters is of all those titles, rounded up: 15 of 20, 16 of 21. A title INCONCLUSIVE on VMAF (rule.vmaf) stays among them and does not count as meeting the bar. GO judges only the arms its list names."
|
||
},
|
||
"k1": {
|
||
"claim": "H1a",
|
||
"below_dct_pct": 5,
|
||
"targets": [35, 40],
|
||
"role": "diagnostic",
|
||
"reads": "a catalogue basis's rate proxy, measured in the same run on the same titles",
|
||
"judges": [],
|
||
"text": "K1 is diagnostic: it kills nothing, and when it holds, a result that would otherwise be GO is INCONCLUSIVE. It reads only a rate proxy measured in the same run on the same titles. No arm of this rule takes one, so a run that measures none has no K1, and K1 does not hold for it. The K1 run.json records is of its own four titles, and carries to no run judged here."
|
||
},
|
||
"k2": {
|
||
"claim": "H1a",
|
||
"judges": [],
|
||
"text": "K2 is H1a's clause, run.json's K2. No arm of this rule is a linear or spectral basis, so K2 judges none of them."
|
||
},
|
||
"k3": {
|
||
"claim": "H1b",
|
||
"runtime_pct_below": 1,
|
||
"thumb_psnr_min": 40,
|
||
"full_psnr_min": 35,
|
||
"judges": ["the recurrence across the episodes of the series, measured as §3.4 measures it across titles"],
|
||
"text": "run.json's K3, with the episodes of a series as its titles: K3 holds, and kills H1b for the series, when non-flat material recurring across episodes within the tight bound is under 1 % of every episode's runtime."
|
||
},
|
||
"k4": {
|
||
"claim": "H1c",
|
||
"bd_rate_above": -5,
|
||
"metric": "psnr",
|
||
"judges": ["neural_int_hyper: the catalogue-tuned set, against its generic set", "video_int_hyper: the catalogue-tuned set, against its generic set", "inter: the catalogue-tuned set, against its generic set"],
|
||
"text": "K4 (H1c) holds for an arm, and kills H1c for it, when its catalogue-tuned set beats the same codec's generic set by less than 5 %: a BD-rate (PSNR) of the tuned set against the generic set above −5 % on the median held-out title, before the set's bytes are charged. Over an even number of titles the median is the mean of the two middle figures."
|
||
},
|
||
"vmaf": {
|
||
"interpolations": ["cubic", "pchip", "linear"],
|
||
"go_reads": "cubic",
|
||
"text": "Each VMAF BD-rate is computed by §3.5's cubic fit, and also by piecewise-cubic Hermite (PCHIP) and by piecewise-linear interpolation of the same points. GO reads the cubic figure. A title whose PCHIP or linear figure does not have the sign of its cubic figure is INCONCLUSIVE on VMAF."
|
||
},
|
||
"precedence": "A verdict is for one arm and one claim, read in this order: if K3 or K4 holds for it, that kill is the verdict, whether or not GO holds; otherwise, if GO and K1 both hold, INCONCLUSIVE; otherwise, if GO holds, GO; otherwise INCONCLUSIVE.",
|
||
"inconclusive": "Anything between GO and a kill is INCONCLUSIVE.",
|
||
"stop": "An INCONCLUSIVE result is recorded as no-go for now. It does not lead to another run of the same test."
|
||
},
|
||
"counting": ["the prior's bytes once per sink, with the span they are amortised over and the generations of the prior a sink holds", "bytes per hour of programme", "sink decode energy, reported", "the compute that tunes a set, reported apart"],
|
||
"metrics": {
|
||
"decide": ["luma PSNR", "VMAF (libvmaf, model vmaf_v0.6.1, mean pooling), a second check, since it is not reproducible to the bit across builds"],
|
||
"reported": ["chroma PSNR, weighted 6:1:1 (Y:Cb:Cr)", "ssim_y_q32 (staged-measurement)"],
|
||
"raster": "1080p"
|
||
},
|
||
"corpus": {
|
||
"catalogue": "at least 20 titles of one franchise, from 1080p masters",
|
||
"series": "an episodic series of two or more seasons, from 1080p masters",
|
||
"open": "A run on an openly licensed episodic series is judged by this rule as written. Each of its titles has its licence page fetched and the page's SHA-256 recorded, and each file's frame size is read from its own header before the file is used."
|
||
}
|
||
}
|