# Where every number in Part V comes from This is the working source record for chapters 26-29: each figure, metric and training detail beside the run and file it was read from. Machine-specific paths have been removed; what remains is the run name, the artefact and the value. --- Compiled by the Fable design worker, 2026-09-15 ~12:00Z. **This file is the ONLY allowed source of numbers for chapters 26–29 and videos T13–T16.** Every line carries its source; if a number you want is not here, it does not go in the book. "ABSENT" marks a fact or artefact that does not exist yet — use the stated substitute and say so on the page, never fill the gap. Sources are on bigmem. Code: `pipeline repo: pipeline/src/metoc_pipeline/`. Ledger: `pipeline repo: docs/aar/`. Evidence pack (read-only for this book; **copy what you use into `figures/data/training//` and `media/training//` so the build is reproducible from the repo alone**, exactly as P7 did for reading-the-graphs): `evidence pack 2026-09-15: ` (`runs//{SUMMARY.md,epochs.jsonl,steps.jsonl, run.json,probes/,animations/}`, `RUNS.json`, `PRESENTATION-INDEX.md`, `live-archive//probes/`). > **reviewer verification, 2026-09-15 13:5xZ (Phase B).** Every headline number in this file was > re-checked against the pack's own `SUMMARY.md` files before the chapters were written. All of > super-resolution (red +0.541 dB ep 6, blue +1.094 dB ep 14, green +1.086 dB ep 15), every parameter > count (9,027 / 1,515,265 / 1,367,553 / 27,223,297), every batch size, learning rate and wall-clock > duration, and the nowcast table (CSI20@30 0.695 [0.648, 0.737] vs advection 0.516 vs S-PROG 0.638) > reproduced exactly. **One row was wrong and is corrected below:** the true-colour result row called > epoch 30 the best of the run; it is not — epoch 14 (ΔE76 11.028) is, and epoch 30 is worse. > **Two cautions for the chapters:** > 1. `nowcast-large-v2`'s "best epoch" is 2 by `best_rewritten` (the checkpoint-selection metric) and > 4 by mean CSI20 (the headline score). Both are real; say which one you mean. > 2. The 0.695 figure is from a re-scoring on a **24-of-441-sample, 17-day** day-stratified subset > (`MODEL-QUALITY-REVIEW.md` §3.1), not the whole split; the trainer's own full-split figure for > the same checkpoint is 0.672. And per §4.2 a stock pySTEPS Lucas–Kanade extrapolation beats our > advection lane by ~0.09 CSI, so "vs advection" flatters the model — **S-PROG 0.638 is the fair > baseline to headline.** ## 0. Cross-cutting facts | fact | value | source | |---|---|---| | hardware | 2 × RTX 4080 16 GB in a WSL2 host, 39 GB RAM visible to Linux | `docs/aar/01-design.md`; the operator's own notes | | split rule (all three models) | held-out **whole days** (or whole scans for SR); no (domain, day) in both splits; no validation sample within 1 h of a training anchor | `docs/MODEL-QUALITY-REVIEW.md` §2 table (rows: 0 shared days, 0 shared frames, min anchor gap 2.30 h CONUS) | | honest-metric rule | every headline number is on the held-out split with a 95 % day-block CI where one exists | `docs/MODEL-QUALITY-REVIEW.md` §3 | | telemetry contract | `steps.jsonl` rows every 5 steps with `loss, lr, grad_norm, grad_norm_clipped, data_wait_s, h2d_s, fwd_bwd_s, step_s, samples_per_s, mem_allocated_bytes, wall_s`; `epochs.jsonl` one row per epoch | any `runs//steps.jsonl` in the pack; `docs/aar/04-training.md` | | per-epoch probes | fixed validation samples rendered after every epoch (`probes/e-.png`) — the flipbook material | `runs//probes/` | ## 1. True colour (chapter 26) | fact | value | source | |---|---|---| | problem | GOES ABI / Himawari AHI have red (0.64 µm), blue (0.47 µm) and a near-IR "veggie" band (0.86 µm) but **no green**; the classical product is a fixed formula: synthetic green from red/veggie/blue, then fixed RGB gains | `truecolour/features.py` (`FEATURES`, `fixed_rgb`, `recover_veggie`), `truecolour/model.py::baseline` | | input tensor | **7 features per pixel**: red, blue, veggie reflectance; sun zenith, view zenith, relative azimuth (degrees); latitude — normalised by a fixed buffer `[1.5,1.5,1.5,90,90,180,90]` | `truecolour/model.py` lines 10–30 | | output | sRGB triple in [0,1] per pixel (Sigmoid) | same | | model | `TrueColourMLP(width=64)`: Linear(7→64) ReLU, Linear(64→64) ReLU, Linear(64→64) ReLU, Linear(64→3) Sigmoid — **9,027 parameters** | `runs/truecolour-himawari-v1/SUMMARY.md` ("parameters: 9,027") | | target | MODIS/VIIRS corrected-reflectance true colour from NASA GIBS, coincident with the geostationary scan within a pass-time gate; instruments SNPP/NOAA-20/NOAA-21 VIIRS, Aqua MODIS, Terra MODIS (3 strips) | `docs/TRUECOLOUR-TRAINING.md` lines 97–98, 283 | | corpus (GOES history run) | 150 jobs fetched, **96 pairs built / 58 rejected**, 21 regions, 5 instruments; held-out days 2023-12-21, 2024-06-20, 2025-03-20, 2025-09-22 = **9 held-out pairs vs 87 training pairs**; QA masked 25,637 px (0.145 %) | `docs/TRUECOLOUR-TRAINING.md` lines 280–301 | | loss | mean squared error **in CIE Lab (D65)** after a differentiable sRGB→Lab conversion: `lab_loss = mean((Lab(pred) − Lab(target))²)` | `truecolour/model.py::srgb_to_lab, lab_loss` | | why Lab | Euclidean distance in Lab ≈ perceived colour difference (ΔE76 = that distance); the metric and the loss are the same geometry | same; ΔE76 column in SUMMARY.md | | training (Himawari v1) | batch 8192 pixels, Adam constant lr 0.001, 30 epochs, **0.31 h**, 0.2 min/epoch, unit `globalsat-himawari-truecolour.service`, held-out day 2025-09-22 | `runs/truecolour-himawari-v1/SUMMARY.md` | | result (Himawari v1) | held-out **ΔE76 11.028 at epoch 14 — the best of the run** vs **fixed-formula ΔE76 27.296** on the same pixels. The run's **last** epoch (30) reads **11.458**, slightly WORSE than its own best, because this trainer has a fixed 30-epoch schedule and no early stopping; `best.pt` is epoch 14. Quote 11.028 as the result and 11.458 as where it finished. Train Lab-MSE 152.74 → 68.59 | `runs/truecolour-himawari-v1/SUMMARY.md` ("Best (lowest held-out ΔE76): epoch 14 — 11.028"); `docs/aar/04-training.md` run index row | | honest thing that went wrong | first attempt trained on **19 pairs from a single day** and plateaued — it could not generalise; and the Terra "0 of 6 coincident" finding was wrong (3 of 4 on re-measure) so Terra was dropped then re-admitted | `docs/TRUECOLOUR-TRAINING.md` lines 6, 34–77; memory `metoc-truecolour-terra-readmit-20260912.md` | | what it is not | a per-pixel MLP: no spatial context, so it cannot fix haze/geometry errors, only colour mapping; sun zenith in training spans 12°–79° (cap 85°) — night is out of scope | `docs/TRUECOLOUR-TRAINING.md` line 215; model.py | | images | per-epoch probes: `runs/truecolour-himawari-v1/probes/e-.png` (63 files, 2 probe ids × ~30 epochs); animations `runs/truecolour-himawari-v1/animations/truecolour-himawari-v1__probes.mp4`, `__epoch-loss.mp4`, `__dashboard.mp4` (15 mp4) | pack | | ABSENT | a blend-vs-model-vs-reference triptych on a full scene (only probe tiles exist); ΔE map image. **Substitute:** build the triptych + ΔE map from one held-out pair with `truecolour/compare.py` (read it; it exists for this) and cite the pair id | `truecolour/compare.py` | ## 2. Super-resolution (chapter 27) | fact | value | source | |---|---|---| | problem | Himawari/GOES visible bands are 1 km (blue, green, veggie) while red is 0.5 km; make the 1-km bands look like 0.5 km (**2×**); earlier GOES runs did 4× on red from a box-downsampled LR | `docs/SUPERRES-TRAINING.md` lines 71, 124–150 | | input / output | LR patch (1, 64, 64) → HR patch (1, 128, 128) at scale 2 (the checkpoints say `scale`); validation at 64→256 for the 4× GOES runs | `superres/model.py` docstring; `docs/SUPERRES-TRAINING.md` line 132 | | model | `EDSRLite(features=64, blocks=16, scale)`: conv head on (x − 0.5), 16 residual blocks (no batch-norm), pixel-shuffle up-stages, and the output is **added to a bicubic upsample of the input** — the network only learns the residual; final conv zero-initialised so it starts *exactly at bicubic* | `superres/model.py` lines 17–58; `docs/SUPERRES-TRAINING.md` line 220 | | parameters | **1,515,265** (scale 4 Himawari red run); 1,367,553 (sr-v3b-blue, scale 2) | `runs/sr-himawari-red/SUMMARY.md`; P7 brief §1 | | loss | masked L1 + 0.5 × (1 − SSIM) over valid windows (`loss: l1+ssim, ssim_weight 0.5`); mask excludes night/limb | `superres/train.py::loss_terms, masked_ssim_loss`; SUMMARY "loss config" | | training (Himawari red) | batch 17, constant lr 2e-4, fp16 autocast, 8 epochs, **3.25 h**, 6.8 min/epoch; 41,400 training / 3,600 validation sequences; 6 held-out scan days | `runs/sr-himawari-red/SUMMARY.md` | | results | PSNR over bicubic on held-out: **red +0.541 dB (ep 6, 34.902 vs 34.362)**, **blue +1.094 dB (ep 14, 39.758 vs 38.664)**, **green +1.086 dB (ep 15, 38.838 vs 37.752)** | `runs/sr-himawari-{red,blue,green}/SUMMARY.md` score tables | | baseline | bicubic interpolation (the thing the model starts as) | model.py | | human metric | blind pairwise page `weather.theinformed.org/ai-ml/superres-judge.html`, Bradley–Terry pooled decision; **ABSENT: no non-smoke verdicts yet** (`run logs: superres-verdicts.jsonl` has 3 rows, 2 non-smoke = the owner's test runs; do not report) | `pipeline/scripts/superres_verdict.py`; the jsonl | | honest thing that went wrong | Himawari SR validation split was built with **0 sequences** (stale `--raw` root after an SSD move) so the first launch would have scored nothing; caught by the readiness gate and rebuilt (red 3600 / blue 2700 / green 2700) | `docs/aar/05-pitfalls.md` §D/§G (2026-09-15 tick), `docs/TRAINING-READINESS.md` | | what it is not | +0.5–1.1 dB is a modest gain; it sharpens texture it has seen (cloud edges, coastlines) and cannot invent sub-pixel truth; night pixels are masked out | SUMMARY tables; train.py mask | | images | probes `runs/sr-himawari-{red,blue,green}/probes/e-.png` — each is a composed panel **LR · bicubic · model · HR** (37/65/65 files); animations `__probes.mp4`, `__score-psnr-ssim.mp4`, `__loss-step-overlay.mp4`, `__dashboard.mp4` | `superres/train.py::record_probes` (`compose_panel([('LR',…),('bicubic',…),…])`); pack | ## 3. Nowcasting (chapter 28) | fact | value | source | |---|---|---| | problem | given the last radar frames, predict reflectivity (dBZ) up to 60 min ahead, every 5 min | `nowcast/model_large.py` (`LEADS = 12`), `docs/NOWCAST-LARGE.md` | | input tensor | six 5-min frames of (dBZ, valid mask, optical-flow u/v) on a **512² crop** at z5, plus the advected "base" field; `FRAME_FIELDS` = dbz, mask, flow (the model **never reads IR** in v2 — that is experiment E4 of the rigor pass) | `nowcast/model_large.py` comments ("the six input frames", "the 512 crop"), `nowcast/channels.py`; `docs/RESEARCH-PLAN.md` E4 | | output | 12 residual dBZ fields (5…60 min) added to the advected base | model_large.py (`HEAD_INIT_SCALE` comment: "residual … against a target residual (observation minus advected base)") | | model | `NowcastUNetGRU` v2: conv stem → 3-level U-Net at 1/4, 1/8, 1/16 with channels (96, 192, 384) → two ConvGRU stacks (77 % of parameters) → FiLM lead-time embedding (8 sinusoidal bands, 128-wide) → pixel-shuffle decoder → head; **27,223,297 parameters**; `PixelChannelNorm` instead of GroupNorm | `runs/nowcast-large-v2/SUMMARY.md`; model_large.py lines 60–98, 245+ | | loss | multi-scale intensity-weighted masked L1 (weight 1 + 4·target so a 63.75 dBZ core counts 5× a clear pixel; 82 % of pixels are echo-free) **plus a soft-CSI term** (2 dBZ sigmoid) at 20 and 35 dBZ — because a plain pixel L1's minimiser is persistence | `nowcast/model.py::nowcast_loss` docstring (lines 197–210) | | metric | CSI (hits / (hits + misses + false alarms)) at 20 and 35 dBZ, at 30 and 60 min; `mean_csi` = mean of the four; best.pt gated on the 35-dBZ bias ∈ [0.8, 1.2] | `train_large.py::mean_csi`; `docs/MODEL-QUALITY-REVIEW.md` | | training (v2 base) | batch 8, 2 GPUs (DDP), constant lr 2e-4 (head ×5), 8 epochs, **10.87 h**, 78.5 min/epoch; 13,208 training / 441 validation sequences (34 held-out days) | `runs/nowcast-large-v2/SUMMARY.md`; quality review §2 | | result (v2, CONUS+Alaska) | **CSI20@30 0.695 [0.65, 0.74]** vs advection **0.516** vs pySTEPS S-PROG **0.638**; best epoch 2 | `docs/MODEL-QUALITY-REVIEW.md` §3.1; `docs/NOWCAST-CLASSICAL.md` table | | regional fine-tunes | Europe 0.675 vs 0.591 adv vs 0.611 S-PROG; Hawaii 0.656 vs 0.503 vs 0.622; Guam 0.711/0.631 (30/60) vs 0.562; Caribbean 0.668/0.582 | quality review; `run logs: superres-train-window.log` 2026-09-15 lines; `runs/nowcast-large-guam/SUMMARY.md` | | honest things that went wrong | (a) v1 zero-initialised head → every gradient exactly 0, run never left persistence (E1); (b) "plateaus" were overfitting — the 35-dBZ bias collapsed while loss kept falling, so best.pt is now bias-gated; (c) the winning epoch was chosen on a 441-sample split whose CI half-width (±0.051) was 16× the winning margin (0.003) — hence the rigor pass; (d) grad-norm was logged post-clip as a flat 1.0 (E17) | `docs/aar/05-pitfalls.md` E1, E17; quality review §3.2 table (margin ÷ half-width) | | rigor pass (ongoing) | queue of 15 experiments: warm-start check E0 (Hawaii, flat 0.669/0.667/0.668 at 30 min over epochs 1–3), grad-clip sweep e2a (clip 5: 0.547 at ep 1) / e2b (clip off), LR sweep, seeds, IR input, GFS/HRRR fields, regional refits | `run logs: experiments/queue.json`; event log; `docs/RESEARCH-PLAN.md` | | what it is not | extrapolation of what is already on the radar: it cannot initiate convection from nothing; skill decays with lead; no IR yet | quality review §4 | | images | probes: `runs/nowcast-large-v2/probes/e-.png` (37; single lead 30 min); `live-archive/nowcast-large-alaska/probes/strip-e-.png` (truth · advection · model strips); Guam/Carib animations `__probes.mp4`, `__score-csi20.mp4`, `__score-mean-csi.mp4`, `__loss-step-overlay.mp4`, `__plateau.mp4`; ABSENT: v2 base run animations (no `animations/`) — render from its probes with the pack's `tools/aar/animate_run.py` or use Guam's | pack | ## 4. Doppler everywhere — satellite-derived radar (chapter 29) | fact | value | source | |---|---|---| | problem | ground radar covers a small fraction of the planet; the product is a global **synthetic reflectivity** estimate from geostationary imagery, labelled "satellite-derived", 10-min cadence at z5 ≈ 4 km, with a two-way chip Observed / Satellite | `docs/REDESIGN-SATELLITE-RADAR.md` §1 | | inputs | IR window channels (cloud-top temperature), visible by day, three frames t−20…t, ancillaries (solar zenith, terrain), **GFS 0.25° fields** (PWAT, freezing level, CAPE/CIN, shear, column RH, model precip rate) | §2, §4b | | model (designed) | per-pixel U-Net with the nowcast encoder shape (~10–25 M params) predicting a **distribution over dBZ bins** (0,5,…,60 in 5-dB classes); expectation = displayed dBZ, spread = confidence; cross-entropy with class weights + CSI-aligned term at 20/35; day and night variants; forecast heads at +30/+60 min | §4, §4b | | why classification, not regression | MSE regression from an ambiguous cloud top yields a smeared ~15 dBZ "grey soup"; classes give "no rain" a real probability | §4 | | targets | radar composites where they exist: MRMS (CONUS), OPERA (Europe), AURA (Australia), IDEAM (Colombia), REDEMET (Brazil), Taiwan CWA (collector started 2026-09-15, latest-only source) | §3; `docs/RADAR-FEEDS-GLOBAL-SURVEY.md` (Taiwan section, commit 67afb5f) | | gate before shipping | held-out-region CSI at 20/35 dBZ vs a climatology baseline, ablation without the GFS block | §5 | | status | **ABSENT: no trained model, no output.** Corpus is being assembled (`corpus: satradar/goes` 913 GB of GOES full-disk, `corpus: nowcast-fd-ir` full-disk C13, NWP regrid HRRR 0.987 / GFS 0.829 coverage). **Substitute:** show one input/target pair (IR frame + coincident MRMS composite) and the architecture diagram; label the chapter "designed, not yet trained" in its subtitle | pack `docs/`; event log 2026-09-15 | ## 5. What already exists in the book that these chapters must link back to (never re-teach) `how-wrong-is-it` (L1/L2, what a loss is), `the-convolutional-network` (conv, residual), `the-recurrent-network` (GRU), `reading-the-graphs` (the four curves; it already uses `nowcast-large-v2`, `-alaska`, `-eu`, `sr-v3b-blue` telemetry under `figures/data/training/reading-the-graphs/`), `the-training-dashboard`, `did-it-actually-learn` (baselines, held-out, CI), `when-it-goes-wrong` (zero-init, overfitting), `data-into-tensors` (splits), `designing-the-run`. ## 6. Measured synthetic classroom runs (P9 implementation) These are **synthetic teaching experiments**, not production weather results. Generated from the deterministic samples in `trainkit/samples/make_weather_samples.py` and measured serially on CPU with two threads and niceness 19. Wall time below is the recorded training timer, including preparation, excluding interpreter startup; it is not a laptop guarantee. Summary values are exact stored values, with pointers checked by `validate_summary`. | run | metric | model | baseline | wall seconds | source | |---|---|---:|---:|---:|---| | E10 | normalized Lab MSE | 0.0003432044 | 0.00626683 | 55.786716551 | `media/runs/E10.summary.json#/values`; exact run pointers in `sources` | | E11 | PSNR dB | 44.5473985859 | 38.9512549782 | 28.741979552 | `media/runs/E11.summary.json#/values`; exact run pointers in `sources` | | E12 | CSI at synthetic intensity 0.5 | 0.9676739573 | 0.5866261125 | 19.507738443 | `media/runs/E12.summary.json#/values`; exact run pointers in `sources` | | E13 | rain-or-heavy CSI | 0.9988003969 | 0.2034505159 | 7.192842874 | `media/runs/E13.summary.json#/values`; exact run pointers in `sources` | E12 also measured constant-velocity-reference CSI **0.8432203531**: `media/runs/E12.summary.json#/values/constant_velocity_csi`. This uses the known synthetic velocity and does not model growth. E13 scores the union of rain and heavy-rain toy classes, not a calibrated production reflectivity threshold. E11 fits tiles from the training region and evaluates the disjoint bottom-right quadrant. E10’s toy coordinates are D65 Lab divided by **100** before mean squared error; its toy score is not unscaled production Lab-MSE or ΔE76. Source: `trainkit/weather.py::lab`, `media/runs/E10.json#/meta/settings/loss`. ## 6. Verified literature (reviewer, 2026-09-15) — the ONLY citations allowed in Part V Every line below was confirmed against a publisher/DOI landing page, an arXiv abstract page, an official proceedings page, or the Crossref record. **28 VERIFIED, 2 UNVERIFIED.** Cite only the VERIFIED lines. Anything marked UNVERIFIED is CUT, not softened — and note that two of the reviewer's own starting assumptions were wrong and are corrected here; use these versions. # Part V reference verification Verified 2026-09-15. Every entry below was confirmed by opening the publisher/DOI landing page, the arXiv abstract page, the official proceedings page, or the Crossref record for the DOI. Nothing here is taken from a third party's reference list. Corrections to the brief are flagged inline with **[CORRECTED]**. --- ## A. Radar nowcasting - Pulkkinen, S., Nerini, D., Pérez Hortal, A. A., Velasco-Forero, C., Seed, A., Germann, U., & Foresti, L. (2019). "Pysteps: an open-source Python library for probabilistic precipitation nowcasting (v1.0)." Geoscientific Model Development, 12(10), 4185–4219. https://doi.org/10.5194/gmd-12-4185-2019 — VERIFIED via the GMD article landing page (gmd.copernicus.org/articles/12/4185/2019/) - Seed, A. W. (2003). "A Dynamic and Spatial Scaling Approach to Advection Forecasting." Journal of Applied Meteorology, 42(3), 381–388. https://doi.org/10.1175/1520-0450(2003)042<0381:ADASSA>2.0.CO;2 — VERIFIED via the Crossref record for the DOI (AMS landing page returns 403 to automated fetches). This is the S-PROG method paper; the AMS site now files vol. 42 under *Journal of Applied Meteorology and Climatology*, but the 2003 journal of record is *Journal of Applied Meteorology*. - Shi, X., Chen, Z., Wang, H., Yeung, D.-Y., Wong, W.-K., & Woo, W.-C. (2015). "Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting." Advances in Neural Information Processing Systems 28 (NIPS 2015). arXiv:1506.04214 / https://proceedings.neurips.cc/paper/2015/hash/07563a3fe3bbe7e3ba84431ad9d055af-Abstract.html — VERIFIED via the NeurIPS 2015 proceedings abstract page and the arXiv abstract page - Shi, X., Gao, Z., Lausen, L., Wang, H., Yeung, D.-Y., Wong, W.-K., & Woo, W.-C. (2017). "Deep Learning for Precipitation Nowcasting: A Benchmark and A New Model." Advances in Neural Information Processing Systems 30 (NIPS 2017). arXiv:1706.03458 / https://papers.nips.cc/paper_files/paper/2017/hash/a6db4ed04f1621a119799fd3d7545d3d-Abstract.html — VERIFIED via the NeurIPS 2017 proceedings abstract page and the arXiv abstract page - Ravuri, S., Lenc, K., Willson, M., Kangin, D., Lam, R., Mirowski, P., Fitzsimons, M., Athanassiadou, M., Kashem, S., Madge, S., Prudden, R., Mandhane, A., Clark, A., Brock, A., Simonyan, K., Hadsell, R., Robinson, N., Clancy, E., Arribas, A., & Mohamed, S. (2021). "Skilful precipitation nowcasting using deep generative models of radar." Nature, 597(7878), 672–677. https://doi.org/10.1038/s41586-021-03854-z — VERIFIED via the Crossref record for the DOI (nature.com redirects automated fetches to an IdP) - Sønderby, C. K., Espeholt, L., Heek, J., Dehghani, M., Oliver, A., Salimans, T., Agrawal, S., Hickey, J., & Kalchbrenner, N. (2020). "MetNet: A Neural Weather Model for Precipitation Forecasting." arXiv:2003.12140. https://arxiv.org/abs/2003.12140 — VERIFIED via the arXiv abstract page. **[CORRECTED]** The title is *"…for Precipitation Forecasting"*, not "…for Eight-Hour Precipitation Forecasting" (that is the wording of the Google blog post announcing it). **MetNet has no peer-reviewed venue — it exists only as an arXiv preprint**; cite it as such. - Espeholt, L., Agrawal, S., Sønderby, C., Kumar, M., Heek, J., Bromberg, C., Gazen, C., Carver, R., Andrychowicz, M., Hickey, J., Bell, A., & Kalchbrenner, N. (2022). "Deep learning for twelve hour precipitation forecasts." Nature Communications, 13, 5145. https://doi.org/10.1038/s41467-022-32483-x — VERIFIED via the Crossref record for the DOI. This is the MetNet-2 paper; "MetNet-2" appears in the text, not the title. - Andrychowicz, M., Espeholt, L., Li, D., Merchant, S., Merose, A., Zyda, F., Agrawal, S., & Kalchbrenner, N. (2023). "Deep Learning for Day Forecasts from Sparse Observations." arXiv:2306.06079. https://arxiv.org/abs/2306.06079 — VERIFIED via the arXiv abstract page. This is the MetNet-3 paper; like MetNet-1 it is **an arXiv preprint with no journal/conference venue**. So of the three MetNets, only MetNet-2 is peer-reviewed. - Zhang, Y., Long, M., Chen, K., Xing, L., Jin, R., Jordan, M. I., & Wang, J. (2023). "Skilful nowcasting of extreme precipitation with NowcastNet." Nature, 619(7970), 526–532. https://doi.org/10.1038/s41586-023-06184-4 — VERIFIED via the Crossref record for the DOI ## B. Image super-resolution - Dong, C., Loy, C. C., He, K., & Tang, X. (2016). "Image Super-Resolution Using Deep Convolutional Networks." IEEE Transactions on Pattern Analysis and Machine Intelligence, 38(2), 295–307. https://doi.org/10.1109/TPAMI.2015.2439281 (preprint arXiv:1501.00092, 2014) — VERIFIED via the Crossref record for the DOI and the arXiv abstract page. **[CORRECTED]** The journal version is 2016 TPAMI; the 2014 date belongs to the arXiv preprint. The related ECCV 2014 paper is a *different, earlier* title ("Learning a Deep Convolutional Network for Image Super-Resolution") — do not conflate them. - Lim, B., Son, S., Kim, H., Nah, S., & Lee, K. M. (2017). "Enhanced Deep Residual Networks for Single Image Super-Resolution." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition Workshops (CVPRW 2017), 1132–1140. arXiv:1707.02921 / https://openaccess.thecvf.com/content_cvpr_2017_workshops/w12/html/Lim_Enhanced_Deep_Residual_CVPR_2017_paper.html — VERIFIED via the arXiv abstract page and the CVF Open Access 2017 workshops listing - Zhang, Y., Li, K., Li, K., Wang, L., Zhong, B., & Fu, Y. (2018). "Image Super-Resolution Using Very Deep Residual Channel Attention Networks." Computer Vision – ECCV 2018, 294–310. https://doi.org/10.1007/978-3-030-01234-2_18 (arXiv:1807.02758) — VERIFIED via the arXiv abstract page and the CVF Open Access ECCV 2018 paper listing - White, C. H., Ebert-Uphoff, I., Haynes, J. M., & Noh, Y.-J. (2024). "Superresolution of GOES-16 ABI Bands to a Common High Resolution with a Convolutional Neural Network." Artificial Intelligence for the Earth Systems, 3(2), e230065. https://doi.org/10.1175/AIES-D-23-0065.1 — VERIFIED via the Crossref record for the DOI and the NOAA Institutional Repository record (repository.library.noaa.gov/view/noaa/67857). CNN superresolves ABI's 1- and 2-km bands to a common 0.5 km using band 2 as the high-resolution guide; trained on a degrade-and-restore proxy task; validated against Landsat-8/9. - McCarthy, N. F., Tohidi, A., Aziz, Y., Dennie, M., Valero, M. M., & Hu, N. (2021). "A Deep Learning Approach to Downscale Geostationary Satellite Imagery for Decision Support in High Impact Wildfires." Forests, 12(3), 294. https://doi.org/10.3390/f12030294 — VERIFIED via the Crossref record for the DOI. U-Net CNN downscaling GOES imagery against LEO products for active-fire monitoring. **Tangential** to image super-resolution proper — cite it only as an applied downscaling example, not as an SR method paper. - UNVERIFIED: a published super-resolution paper specifically on **Himawari AHI** bands — no dedicated peer-reviewed AHI super-resolution paper was found. Searches surfaced only AHI *true-colour* and *atmospheric-correction* work, generic remote-sensing SR surveys, and Sentinel-2/video-satellite SR. **The honest finding for the chapter: satellite-band super-resolution as a published line is thin, and White et al. (2024) on GOES-16 ABI is essentially the citable anchor.** Do not stretch a Himawari SR citation. - Bradley, R. A., & Terry, M. E. (1952). "Rank Analysis of Incomplete Block Designs: I. The Method of Paired Comparisons." Biometrika, 39(3–4), 324–345. https://doi.org/10.1093/biomet/39.3-4.324 — VERIFIED via the Crossref record for the DOI (Oxford Academic landing page confirms the same article) - International Telecommunication Union (2023). "Recommendation ITU-R BT.500-15: Methodologies for the subjective assessment of the quality of television images." ITU-R. https://www.itu.int/rec/R-REC-BT.500/en — VERIFIED via the ITU recommendation page (BT.500-15, approved 2023-05, in force). This is the standards reference for blind paired-comparison ("stimulus-comparison") subjective image quality testing. - Zhang, R., Isola, P., Efros, A. A., Shechtman, E., & Wang, O. (2018). "The Unreasonable Effectiveness of Deep Features as a Perceptual Metric." 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), 586–595. https://doi.org/10.1109/CVPR.2018.00068 (arXiv:1801.03924) — VERIFIED via the Crossref record for the DOI. This is the standard reference for *two-alternative forced choice* (2AFC) human pairwise judgement used to validate a perceptual image-quality metric (LPIPS). ## C. True colour from satellite bands (the missing green problem) - Bah, M. K., Gunshor, M. M., & Schmit, T. J. (2018). "Generation of GOES-16 True Color Imagery without a Green Band." Earth and Space Science, 5(9), 549–558. https://doi.org/10.1029/2018EA000379 — VERIFIED via the Crossref record for the DOI and the Wiley article landing page. **[CONFIRMED as you remembered it]** — authors, ~2018, and *Earth and Space Science* are all correct. - Miller, S. D., Schmit, T. L., Seaman, C. J., Lindsey, D. T., Gunshor, M. M., Kohrs, R. A., Sumida, Y., & Hillger, D. (2016). "A Sight for Sore Eyes: The Return of True Color to Geostationary Satellites." Bulletin of the American Meteorological Society, 97(10), 1803–1816. https://doi.org/10.1175/BAMS-D-15-00154.1 — VERIFIED via the Crossref record for the DOI. This is the Miller et al. hybrid-green-band paper for Himawari-8 AHI (blending the 0.86 µm band to correct AHI's 0.51 µm green). - Murata, H., Saitoh, K., & Sumida, Y. (2018). "True Color Imagery Rendering for Himawari-8 with a Color Reproduction Approach Based on the CIE XYZ Color System." Journal of the Meteorological Society of Japan. Ser. II, 96B, 211–238. https://doi.org/10.2151/jmsj.2018-049 — VERIFIED via the J-STAGE article landing page. **This is the authoritative JMA/MSC description** of Himawari true-colour reproduction: the native green band is replaced by a pseudo-green band near 0.555 µm derived by regression on the visible and near-IR bands, then rendered through CIE XYZ. - Broomhall, M. A., Majewski, L. J., Villani, V. O., Grant, I. F., & Miller, S. D. (2019). "Correcting Himawari-8 Advanced Himawari Imager Data for the Production of Vivid True-Color Imagery." Journal of Atmospheric and Oceanic Technology, 36(3), 427–442. https://doi.org/10.1175/JTECH-D-18-0060.1 — VERIFIED via the Crossref record for the DOI. **[CORRECTED]** This is commonly mis-cited as "Miller et al." — **Miller is the last author, Broomhall is first.** - Gonzalez, L., & Yamamoto, H. (2020). "The Wall: The Earth in True Natural Color from Real-Time Geostationary Satellite Imagery." Remote Sensing, 12(15), 2375. https://doi.org/10.3390/rs12152375 — VERIFIED via the Crossref record for the DOI. Uses artificial neural networks to recreate missing visible bands for MSG2/Himawari-8/GOES-16 true-natural-colour composites, **validated against Terra/Aqua MODIS reflectances**. This is the closest published thing to a learned green/colour reconstruction validated against a polar-orbiter reference. - UNVERIFIED: a published line of work on **learned colour correction of geostationary imagery trained against MODIS/VIIRS true colour**. Repeated targeted searches found no such literature beyond Gonzalez & Yamamoto (2020) above, which is a single paper and is framed as band *reconstruction* plus atmospheric correction rather than as a learned colour-correction method, and is validated against MODIS rather than trained on it end-to-end. **This is a useful negative finding: the published state of the art for geostationary true colour is deterministic — regression/linear pseudo-green bands (Bah 2018, Murata 2018), hybrid-band blends (Miller 2016) and radiative-transfer Rayleigh correction (Broomhall 2019). A learned colour-correction step is genuinely unusual, and the chapter can say so.** ## D. Satellite-derived radar reflectivity - Hsu, K.-L., Gao, X., Sorooshian, S., & Gupta, H. V. (1997). "Precipitation Estimation from Remotely Sensed Information Using Artificial Neural Networks." Journal of Applied Meteorology, 36(9), 1176–1190. https://doi.org/10.1175/1520-0450(1997)036<1176:PEFRSI>2.0.CO;2 — VERIFIED via the Crossref record for the DOI. This is the original PERSIANN paper. - Hong, Y., Hsu, K.-L., Sorooshian, S., & Gao, X. (2004). "Precipitation Estimation from Remotely Sensed Imagery Using an Artificial Neural Network Cloud Classification System." Journal of Applied Meteorology, 43(12), 1834–1853. https://doi.org/10.1175/JAM2173.1 — VERIFIED via the Crossref record for the DOI. This is PERSIANN-CCS. - Ashouri, H., Hsu, K.-L., Sorooshian, S., Braithwaite, D. K., Knapp, K. R., Cecil, L. D., Nelson, B. R., & Prat, O. P. (2015). "PERSIANN-CDR: Daily Precipitation Climate Data Record from Multisatellite Observations for Hydrological and Climate Studies." Bulletin of the American Meteorological Society, 96(1), 69–83. https://doi.org/10.1175/BAMS-D-13-00068.1 — VERIFIED via the Crossref record for the DOI - Huffman, G. J., Bolvin, D. T., Braithwaite, D., Hsu, K.-L., Joyce, R. J., Kidd, C., Nelkin, E. J., Sorooshian, S., Stocker, E. F., Tan, J., Wolff, D. B., & Xie, P. (2020). "Integrated Multi-satellite Retrievals for the Global Precipitation Measurement (GPM) Mission (IMERG)." In *Satellite Precipitation Measurement*, Advances in Global Change Research, 343–353. Springer. https://doi.org/10.1007/978-3-030-24568-9_19 — VERIFIED via the Crossref record for the DOI. This is the standard peer-reviewed IMERG citation. - Huffman, G. J., et al. (2020). "Integrated Multi-satellitE Retrievals for GPM (IMERG) Algorithm Theoretical Basis Document (ATBD), Version 06.3." NASA GPM. https://gpm.nasa.gov/resources/documents/algorithm-information/IMERG-V06-ATBD — VERIFIED via the NASA GPM document page. Cite this for the specifics of how IMERG uses microwave-calibrated **infrared** estimates to fill between passive-microwave overpasses. - Hilburn, K. A., Ebert-Uphoff, I., & Miller, S. D. (2021). "Development and Interpretation of a Neural-Network-Based Synthetic Radar Reflectivity Estimator Using GOES-R Satellite Observations." Journal of Applied Meteorology and Climatology, 60(1), 3–21. https://doi.org/10.1175/JAMC-D-20-0084.1 (preprint arXiv:2004.07906) — VERIFIED via the Crossref record for the DOI and the arXiv abstract page. **What it actually does:** a CNN (image-to-image translation, not a per-pixel regression) maps GOES-R ABI brightness temperatures — channels 7, 9 and 13 (3.9, 6.9, 10.3 µm) — plus GLM lightning group extent density onto **MRMS composite reflectivity**. Trained on warm-season convection over CONUS; the paper's second half is interpretability (which inputs and which spatial context the network uses). Named GREMLIN, "GOES Radar Estimation via Machine Learning to Inform NWP", and its stated purpose is feeding data assimilation in radar-sparse regions. - Lee, Y., & Hilburn, K. (2024). "Validating GOES Radar Estimation via Machine Learning to Inform NWP (GREMLIN) Product over CONUS." Journal of Applied Meteorology and Climatology, 63(3), 471–486. https://doi.org/10.1175/JAMC-D-23-0103.1 — VERIFIED via the Crossref record for the DOI. Full-annual-cycle, all-CONUS validation against MRMS; documents the seasonal failure mode (cold winter surfaces mistaken for precipitating cloud) inherited from warm-season training. - Hilburn, K. A. (2023). "Understanding Spatial Context in Convolutional Neural Networks Using Explainable Methods: Application to Interpretable GREMLIN." Artificial Intelligence for the Earth Systems, 2(3), e220093. https://doi.org/10.1175/AIES-D-22-0093.1 — VERIFIED via the Crossref record for the DOI. Single-author follow-on replacing the GREMLIN CNN with explicit feature engineering plus regression to expose the input-output relationships. --- ## What these say about our four models **Nowcasting.** Our ConvGRU U-Net sits squarely in the ConvLSTM/TrajGRU tradition: Shi et al. (2015) established convolutional recurrence for radar sequence prediction, and Shi et al. (2017) generalised it to location-variant recurrent connections while setting the evaluation protocol that the field still uses. Replacing the LSTM cell with a GRU cell and wrapping it in a U-Net encoder-decoder is a well-trodden engineering variation on that 2015-17 template, not a new architecture. What is genuinely recent in the literature — the adversarial/generative sharpness fix of Ravuri et al. (2021), the physics-hybrid design of Zhang et al. (2023), the axial-attention large-context models of the MetNet family — we do **not** claim; the honest framing is that we implement the deterministic-regression lineage and therefore inherit its known blurring at long lead times. Note when citing MetNet that only MetNet-2 was peer-reviewed; MetNet-1 and MetNet-3 are arXiv preprints. **Super-resolution.** Our residual network is an EDSR-style model, and EDSR (Lim et al., 2017) is itself a pruning of ResNet-style SR that follows directly from SRCNN (Dong et al., 2016); RCAN (Zhang et al., 2018) added channel attention on the same skeleton. Nothing about the architecture is ours. What is defensible as a contribution is the *application* — applying it to geostationary satellite bands — and even there we should be modest: White et al. (2024) already superresolve GOES-16 ABI's 1- and 2-km bands to a common 0.5 km with a CNN guided by band 2, using the same degrade-and-restore proxy training we use. A claim that satellite-band SR is unexplored territory would be a stretch. For the evaluation side, blind pairwise A/B ranking rests on Bradley & Terry (1952) for the ranking model, ITU-R BT.500 for the subjective-testing protocol, and Zhang et al. (2018) as the precedent for using 2AFC human judgements to validate an image-quality claim. **True colour.** The missing-green problem and its standard fixes are fully published: Bah, Gunshor & Schmit (2018) for the GOES-16 linear pseudo-green from the blue, red and 0.86 µm vegetation bands; Miller et al. (2016) for the hybrid-green blend on Himawari AHI; Murata, Saitoh & Sumida (2018) for JMA's operational CIE-XYZ rendering with a regressed ~0.555 µm pseudo-green; Broomhall et al. (2019) for Rayleigh and limb correction. Our synthetic green step is a straight reimplementation of that established practice and should be cited as such. **The learned colour-correction step is where lineage genuinely runs out** — we found only one published paper, Gonzalez & Yamamoto (2020), that uses a neural network to reconstruct missing visible bands for geostationary true colour with MODIS as the reference, and it is a single platform paper rather than a research line. The chapter can honestly say the published state of the art is deterministic and that a learned correction against a polar-orbiter reference is unusual — but it should say "we found essentially one precedent", not "none", and should not claim novelty beyond that. **Satellite-derived radar.** Estimating precipitation from infrared alone is a thirty-year-old idea: Hsu et al. (1997) trained a neural network to map GOES IR brightness temperature to rain rate (PERSIANN), Hong et al. (2004) added cloud-patch classification, and IMERG (Huffman et al., 2020) institutionalised microwave-calibrated IR as the gap-filler in the operational global product. The direct analogue to what we do is GREMLIN (Hilburn, Ebert-Uphoff & Miller, 2021): a CNN doing image-to-image translation from ABI channels 7/9/13 plus GLM lightning to MRMS composite reflectivity over CONUS — same inputs, same target, same framing. Lee & Hilburn (2024) then validated it across the full annual cycle and documented the cold-surface false-precipitation failure in winter, which is the failure mode any model trained the same way should expect. Our architecture and our problem statement are both prior art; the defensible claims are about domain, coverage and operational packaging, not about method. ## 7. P9-FIX source reconciliation and classroom arithmetic Added by the repair pass, 2026-09-15. This section distinguishes source measurements from illustrations and derived values; it does not supply missing confidence intervals or human verdicts. The two existing §6 headings above remain unchanged. ### reviewer-supplied scene figures (explicitly authorized by FIX brief items 11–12) - `media/training/true-colour-from-three-bands/measurements.json` and `TRIPTYCH-SOURCE.md`: scan 2025-09-22T02:20:20Z, Terra pass 02:22:30Z, bounds 127.50–132.50 E / 55.00–60.00 N, 62,500 pixels; mean fixed/model ΔE76 29.09/13.98, medians 27.90/9.64, model closer on 90.4%. These are this scene's numbers, distinct from the §1 run-wide means. - `media/training/super-resolution-two-x/QUAD-SOURCE.md`: blue probe 2010, epoch 14, recorded model 37.987 (printed 37.99) dB / SSIM 0.9660 versus recomputed bicubic 36.596 dB / 0.9500; gain 1.392 (printed 1.39) dB. The selected high-texture patch is not the pooled +1.094 dB. Its observed 1 km HR is paired with stored 2 km box-averaged LR: LR 128×128, HR 256×256. The displayed detail is 64×64, not a separate scored sample. - `figures/data/training/nowcasting-the-radar/nowcast-large-v2/epochs.jsonl`, epoch 2: the trainer full-split model CSI20@30 0.6721423500164068 (0.672) versus full-split advection 0.5044153452012239 (0.504). These are NOT the subset re-score's 0.695/0.516. - `media/training/nowcasting-the-radar/strip-selection.json`: all 40 epoch strips measured; best epoch 2 from the Alaska SUMMARY, busiest target is probe 103, colored echo fraction 0.0433807373046875. This uses channel range >35 as a display-color proxy, not calibrated dBZ. - `figures/data/training/doppler-everywhere/MAP-SOURCE.md`: the map uses actual MRMS contributing coverage from the 2026-09-08T14:54:19Z scan and Taiwan's published 115.00–126.50 E / 17.75–29.25 N domain. Other target footprints remain unsourced; no global coverage fraction is claimed. Natural Earth land outlines are 1:50m. ### Hand computations (illustrative, NOT measured weather) - Lab triples (6,2,1) and (6,5,5): differences (0,3,4), squared differences (0,9,16), sum 25, distance 5, coordinate MSE 25/3. Swatches use neutral D65 Lab L*=60 and L*=71.028/87.296: exact distances 11.028/27.296. They illustrate those magnitudes, not the colors or perception of an average pixel. ΔE76 has lower bound 0 and no universal upper bound. The reviewer metric amendment uses roughly 1 as a barely visible reference; a universal just-noticeable threshold is not established here. - CSI toy: 6 hits, 2 misses, 1 false alarm: 6/(6+2+1)=6/9, two thirds. Range 0–1; if there are no event pixels at all, the denominator is zero and a scoring convention is needed. - Decibel definition: PSNR=10 log10(P²/MSE). For normalized bounded pixels, range 0 to infinity. Exactly +1 dB gives MSE ratio 10^(-1/10)=0.794328… (rounded 0.7943); error falls 20.6%, not 26%. The inverse ratio is 1.258925… (rounded 1.259) (25.9% larger). This corrects the metric amendment's arithmetic. The crop demonstration scales bicubic error by 10^(-1/20). - SSIM is the product of local luminance, contrast, and structure agreements; conventional range −1 to 1. A score 0.9660 is not 96.6% correct pixels. No uncertainty band is supplied. - Bradley–Terry (verified §6): probability exp(sA)/(exp(sA)+exp(sB)), range 0–1; unconstrained relative log strengths have no absolute score scale. No usable verdict or CI exists. - Illustrative three-class vector (0.5,0.3,0.2): observed class probability 0.5 and weight 1 gives −ln(0.5)=ln(2)≈0.693; probability 1 gives −ln(1)=0. - Derived solely from §6 toy values: E10 ratio 0.0548 (about 5.5% of baseline error); E11 difference 5.596 dB; E12 gains 0.381 over persistence and 0.124 over its known-velocity reference; E13 gain 0.795. No repeated-run confidence interval was measured for these toys. ## 8. Fable refinement audit — 2026-09-16 **No new confidence interval was measured.** The sanctioned companion `docs/handoffs/TRAINING-P9-CI-AUDIT.json` preserves the selected-epoch logs, probe scores, source hashes, score-file inventories, and verified module paths. It is an evidence audit, not a new scoring run. Retain the honest interval disclaimers in chapters 26 and 27. - True color: the checkpoint report for `truecolour-himawari-v1` records **one held-out day, 2025-09-22, with two pairs**. Epoch 14 has the existing pooled result; its probe file holds only two model means. A day-block bootstrap of one day repeats that same block and cannot estimate uncertainty across days. `truecolour/train.py::validate` emits per-day summaries only when multiple days exist. No stored per-pixel prediction arrays were found in this checkpoint directory. More held-out days and evaluation would be needed for an informative day-block interval. - Super-resolution: `sr-himawari-{red,blue,green}/metrics.jsonl` retains pooled scores; `probes/epoch-{006,014,015}/metrics.json` respectively retains **four model-only probe scores**, not the paired per-scan squared-error/pixel totals for the full held-out set. The live and evidence-pack score directories contain earlier GOES runs, not these Himawari checkpoints. `superres/train.py::evaluate` discards the block totals after pooling; `pipeline/scripts/superres_score_v3.py::score` requires a model forward pass and reports per-day summaries. No bootstrap was attempted on probe PSNRs, epoch history, or another sensor's scores. Recovering the required totals would require inference, which this refinement pass explicitly forbids. Architecture caption sources were verified by resolving and reading these files in the metoc pipeline checkout; their hashes are in the companion: - `pipeline/src/metoc_pipeline/truecolour/model.py` — `TrueColourMLP`. - `pipeline/src/metoc_pipeline/superres/model.py` — `EDSRLite`. - `pipeline/src/metoc_pipeline/nowcast/model_large.py` — `NowcastUNetGRU`. - Chapter 29 cites that last module **only as the encoder reference**. Its distribution head remains proposed: the satellite-radar design §4 names the nowcast encoder shape, and no `satradar` model module exists in the inspected tree. The design remains the source for its class count. Its contribution sentence names the planned cross-network corpus, mask, and forecast heads, consistent with §§4 and 6 above. The chapter 28 comparison keeps the existing **0.003 winning margin / 0.051 CI half-width** from §3. Only the figure's layout changes; these are not newly estimated intervals.