Skip to content

GALOSH v0.4.0 — GALOSH-420: planar YCbCr containers + Vulkan YUV engine

Choose a tag to compare

@luxgrain luxgrain released this 11 Jul 07:36
· 21 commits to main since this release

GALOSH-420: planar YCbCr video containers + a Vulkan YUV engine with real-time 4K.

Highlights

  • GALOSH-420 planar front-end on all three backends (CPU / OpenCL / Vulkan): feed 4:2:0 / 4:2:2 / 4:4:4 / 4:0:0 integer containers directly — --pix --depth=8..16 --range=full|limited --matrix=bt601|bt709|bt2020|custom:Kr,Kb --eotf=srgb|g22|g24|bt709|hlg|pq|linear --siting=center|left|topleft — format-preserving in/out. DVD, Blu-ray, HDR10 (PQ 10-bit top-left), HLG and JPEG profiles covered. One shared header (standalone/galosh_yuv420.h) serves every backend, so flag vocabulary and chroma-siting phases cannot drift.
  • Design locked by experiment (SIDD 80 scenes × 3 sitings × 2 matrices): chroma is denoised at its native half-resolution lattice with a siting-phased downsampled-luma guide — beats upsample-to-444-first by +0.3–0.5 dB Cb/Cr at ~4× lower chroma cost. Siting itself does not affect denoise quality; only a guide-phase mismatch costs (−0.13/−0.19 dB), and the phase-matched guide is machine-verified by a built-in affine-field selftest (--selftest-phase). Spec: docs/yuv420_frontend_spec.md.
  • New Vulkan YUV engine (standalone/vk/galosh_yuv_vk.exe): FP16 inter-phase storage, zero mid-frame readbacks, watchdog-safe banded submissions; the heavy shrinkage / inverse-LUT shaders are shared verbatim with the raw engine. Parity 67.3 dB vs the CPU FP32 reference on NVIDIA / Arc / AMD iGPU, 95 dB cross-GPU agreement.
  • Video amortization ported to YUV: --noise=hold|every:N + state file + 32 KB LUT sidecar. A held frame skips both exact-median noise estimators and is bit-identical to a fit frame for the same model.

Measured speed (GPU time, ms (fps), fit → hold)

GPU Mode 1080p 4K 8K
NVIDIA RTX 4070 Ti 444 38.2 → 2.7 (376) 50.4 → 11.0 (91) 98.3 → 45.1 (22.2)
420 54.4 → 2.6 (391) 130 → 10.2 (98) 316 → 105 (9.5)
Intel Arc A310 444 139 → 34.7 (28.8) 258 → 149 (6.7) 754 → 625 (1.6)
420 196 → 37.5 (26.7) 416 → 158 (6.3) 857 → 609 (1.6)
AMD Radeon iGPU 444 244 → 124 (8.1) 593 → 499 (2.0) 2116 → 1996 (0.5)
420 252 → 118 (8.5) 732 → 470 (2.1) 2123 → 1881 (0.5)

4:2:0 video steady state clears 4K60 with headroom on the 4070 Ti (98 fps) in the quality configuration. OpenCL (kept as the FP32 portable reference, same --pix front-end): NVIDIA 4K 444 = 79 ms — Vulkan is 1.6× faster fitting and ~7× at video steady state.

Downloads

  • GALOSH_YUV_win64.zip — sRGB PNG in → denoised PNG out (drag & drop or CLI). Rebuilt with the v0.4.0 engine (the bundled CLI exe also accepts the new --pix planar container flags).
  • GALOSH_RAW_win64.zip — DNG in → denoised DNG out (unchanged from v0.3.0).

SHA256:

e6aee6c7062b3c18e7d3d12d2f387a0a4f28d74815ca72e758eebeb5ff547e91  GALOSH_YUV_win64.zip
99730d51aae71bcb5d3e08f480a03f9874b31a39c4844d788149c177ba2a2573  GALOSH_RAW_win64.zip

See CHANGELOG.md for the complete list.