Renderer is built; Release and address/undefined sanitizer tests pass, and both PNG/EXR example images were produced and inspected. Leak detection is unverified in the sandbox. Continuous host telemetry is enabled with verified remote delivery after explicit user authorization to activate via SSH localhost. Keep logging live while extending workloads after the earlier unexplained display failure; see rainbow/dev/monitoring.
The workspace's .git directory is read-only. Git metadata is stored persistently in .git-local, excluded from the work tree. Use ./git-local in place of git; it supplies explicit --git-dir and --work-tree. No remote or push is configured.
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DRAINBOW_NATIVE=ON
nice -n 10 cmake --build build --parallel 2
OMP_NUM_THREADS=2 ctest --test-dir build --output-on-failure
python3 -m unittest discover -s tests -p 'test_host_health.py' -v
Build, Release CTest and telemetry commands above have been exercised. Defaults use two threads; --threads 0 selects OpenMP's automatic count, and explicit larger values are supported but were not stress-tested after the blackout. RAINBOW_NATIVE builds for this CPU; omit it for portability. Keep strict floating-point semantics unless numerical checks justify otherwise.
build/rainbow --help
build/rainbow defaults output/defaults.toml
build/rainbow table scenes/waterfall.toml --threads 2
build/rainbow render scenes/waterfall.toml --threads 2 --samples 1000000 --output output/first
TOML provides physical controls and numerical/resource controls separately. Current source supports box/ellipsoid homogeneous clouds, fixed physical counts or weighted samples, mono/truncated-lognormal radii, finite-disc blackbody sunlight, real-index water at 20 C, optically thin single scattering, Gaussian PSF, constant velocity and exposure sampling. Broader finalized-design features such as tabulated distributions, spectral attenuation, adaptive tables and a sweep scheduler are not implemented and must not be claimed.
A complete run writes PNG for normal viewing, float EXR for linear data, .resolved.toml, .stats.toml and checksummed foreground .accum. Sharded runs write accumulators and metadata; merge before displaying. Worker shard indices are zero-based. Use identical scene files and compatible optics across workers. No remote worker machines have been launched.
build/rainbow render scenes/waterfall.toml --threads 2 --shard-count 2 --shard-index 0 --output output/part0
build/rainbow render scenes/waterfall.toml --threads 2 --shard-count 2 --shard-index 1 --output output/part1
build/rainbow merge output/merged output/part0.accum output/part1.accum
Full design parameter contract
Host logging and service activation
build/rainbow render scenes/waterfall.toml --threads 2 --output output/waterfall
build/rainbow render scenes/spray.toml --threads 2 --samples 32000000 --output output/spray
The first image deliberately uses equal-radius droplets to show interference structure; the second uses a configurable number-lognormal spread that smooths the fine bands. Both are uniform spray clouds, without scenic waterfall geometry. Generated results include an exact resolved TOML configuration, source digest, stage/complete timings and peak RSS. Example timings: mono 1.945 s complete; 32-million-sample spray 5.324 s complete.
tools/distribution_gallery.py requires Python 3.11+ and optional Pillow 12.2.0 (requirements-gallery.txt). Pillow was already installed; no packages were installed. It renders missing simulated images sequentially at nice 10 with two CPU threads by default, then makes a labelled PNG collage and a desktop-sized preview. Existing image paths are skipped, so the two original renders are preserved. It does not detect stale images after editing scene settings: choose a new output prefix/image path in the manifest for a new variant.
# If Pillow is absent, install the optional gallery dependency:
python3 -m pip install --user --break-system-packages -r requirements-gallery.txt
# Render missing panels and make the collage:
python3 tools/distribution_gallery.py --render --threads 2
# Reassemble existing panels without rendering:
python3 tools/distribution_gallery.py
python3 tools/distribution_gallery.py --help
scenes/distribution-gallery.toml specifies the nine panels, paths, sample counts and labels. Six new scene files: spray-fine (20 um radius, GSD 1.25, 8..45); spray-small (40, 1.18, 20..70); spray-narrow (80, 1.03, 65..100); spray-broad (80, 1.50, 15..240); spray-large-narrow (160, 1.04, 130..200); spray-large (160, 1.18, 85..260). All are truncated number-lognormal distributions; radius is the underlying median parameter, slightly shifted by truncation. These are exploratory choices, not measured waterfall sizes. New scenes use 32 million weighted samples, identical position/radius seeds and unchanged density, sun, camera and exposure. Original waterfall.toml and spray.toml are unchanged.
Outputs: output/distribution-gallery.png (full resolution), output/distribution-gallery-preview.png (fits 1600x980), and individual new PNG/EXR/resolved-TOML/statistics/accumulator files at their scene output prefixes. The ninth panel requires output/reference-vernal-fall.jpg, Wing-Chi Poon's licensed Vernal Fall photograph. Source URL is recorded in the manifest and rainbow/dev/review. Download the original JPEG from that Commons page before assembling on a fresh machine. Reference photograph is resized uncropped; the collage carries CC BY-SA 2.5 attribution/license.
Show on the existing desktop via SSH localhost, as John authorized: DISPLAY=:0.0 XAUTHORITY=/home/john/.Xauthority /usr/bin/display output/distribution-gallery-preview.png . Use an absolute path when executing from a different directory. Fixed exposure means larger drops can produce brighter panels; liquid water content changes with radius even though number density stays fixed. This is not a constant-water-mass or brightness-normalized comparison.
Executed and visually inspected all nine panels on 2026-10-16; desktop display window confirmed. Local commit 053c412 adds the six presets, manifest, pinned optional dependency and 85-line collage helper; renderer source is unchanged. New complete run times, including cold optical-table builds and output: fine 7.429 s, small 9.125 s, narrow 12.487 s, broad 35.910 s, large-narrow 27.297 s, large 34.853 s. Mean-spectrum optical-depth bounds range 0.0023..0.0768, below the renderer warning threshold 0.1. This is not a general accuracy guarantee. All PNGs decoded, resolved sample/thread settings verified, original two PNG SHA256 hashes unchanged, help/py_compile and Release CTest passed. The helper and presets were read back for simplicity/readability; no new physics implementation was needed.
scenes/size-density-gallery.toml specifies four columns and sixteen panels in row-major order. Rows use exact droplet radii 20, 40, 80 and 160 um (diameters 40, 80, 160 and 320 um). Columns use number densities 250, 750, 2000 and 6000 droplets/m3. Each scene under scenes/size-density/ uses distribution=mono; radius is constant within every image. All other settings match waterfall.toml except the numerical sample count (32 million in every new image) and new output prefix. Lighting, camera, exposure, position/radius seeds and geometry remain fixed.
python3 tools/distribution_gallery.py --manifest scenes/size-density-gallery.toml --output output/size-density-gallery.png --render --threads 2
Output images are under output/size-density/, with full collage output/size-density-gallery.png and desktop preview output/size-density-gallery-preview.png. The gallery helper now accepts an optional positive integer columns in its TOML manifest, defaulting to three for the earlier collages. Earlier scene files and image paths are preserved.
Number density controls physical particle weight in these weighted runs, while fixed sample count/seeds keep the same computational positions for each row. In the current optically thin single-scattering model, foreground linear intensity scales with number density; PNG brightness changes nonlinearly through the fixed exposure/tone map. Increasing density does not independently wash out coherent single-drop fringes in this model. Real denser sprays can involve attenuation and multiple scattering, neither included here. These settings deliberately keep the reported mean-spectrum optical-depth bound below 0.1; it is a model diagnostic, not an accuracy guarantee.
Executed and visually inspected all sixteen images and the 4x4 collage on 2026-10-16; desktop display title verified. Total of per-render complete times: 77.573 s on two threads. All resolved scenes checked for exact Cartesian-product parameters and fixed controls, PNGs decoded, and mean-spectrum optical-depth bounds stayed below 0.08752. Density-normalized foreground Y images agree within relative L1 1.09e-15, confirming the intended thin-model scaling for these realizations. Original PNG and scene SHA256 hashes remain unchanged. The earlier default three-column collage was regenerated to a separate path and is byte-identical, verifying the optional columns change preserves its output. Python compilation passed. Detailed evidence: output/size-density/verification.json. No C++ renderer changes or new dependency installation.