The owner looked at the renders and called them pixels, tiled patterns, procedurally generated grain — the complete opposite of the brief.
The grain mechanism failed at the mechanism level, not the parameter level — a retune does not fix it. The Phase 0 retune recommendation is withdrawn. Any next attempt is gated on a single flat field and sky crop judged by eye before anything else is built.
Isolated prototypes, 11 Nov 2026. Rig renders (Firefox / WebGL2 prototype) — not device results. Fixture: Sony A7II DSC00031.ARW, a bright snow scene. No production source was touched. Full write-up: the V5 analogue-rendering spec and the prototype report.
Failure 1 — Night Tungsten renders warm in daylight — backwards. A tungsten-balanced stock in daylight must go blue (Cool Cinema does). Night Tungsten goes warm/green instead: the profile conflates "tungsten scene" with "tungsten film".
Failure 2 — Fine grain nearly invisible in bright sky at default presence. Smooth pale skies at 100%, no pickable particles — below the design's own visible-particles bar. Mono and Coarse read as real grain at 100%; Fine/Classic at default presence are a whisper in sky.
Failure 3 — Coarse grain reads as blotchy mottling on smooth sky. Large soft cloudy patches and blocky clumps — it reads as uneven staining, not discrete grain particles. The clump component is too strong relative to the fine component.
Failure 4 — Silver Mono renders in colour on the photo. The sky crop and fit view are blue, not grey (sky crop R−B −86, as blue as Warm Portrait), while its grey ramp is exactly neutral. Desaturation works on the ramp target and is bypassed on the photo path — a prototype wiring defect. There is no B&W profile in the set as rendered.
How to judge this pack: grain must be judged from the 100% crops, not the downscaled full views. The crops are shown at full resolution (1 pixel = 1 pixel, unscaled). Full views are displayed at web width — click any image to open the full file. Two further weaknesses: Warm Portrait's cool-shadow half is weak (shadows R−B +1.5, not negative), and Softness shifts apparent particle size, so "without changing particle size" is not cleanly met.
1 · Six film profiles — full views
Six profiles on the same snow photo. Five read as five different films; Silver Mono does not — it renders in colour.
Warm Portrait — warm cream highlights, cyan sky. Cool-shadow half weak: shadows read neutral-warm, not cool. fit-Warm_Portrait.pngVivid Day — deeper saturated blue, punchier than Warm Portrait. fit-Vivid_Day.pngCool Cinema — the coldest of the six: cold blue throughout, the direction Night Tungsten should have taken. fit-Cool_Cinema.pngQuiet Day — muted, pale, low contrast. fit-Quiet_Day.pngNight TungstenFAIL — green-teal sky, pale yellow-green horizon, warm cream snow highlights; mottled, blotchy grain visible even at fit size. Warm in daylight — backwards. fit-Night_Tungsten.pngSilver MonoFAIL — a full-colour landscape (blue sky, warm horizon band), not monochrome. Mean R−B −48. The B&W profile does not exist on the photo path. fit-Silver_Mono.png
2 · 100% sky crops — the grain evidence
800×600 crops at full resolution, unscaled. This is where grain is judged. Fine grain is a whisper here; Coarse is blotchy; Mono shows hard particles — on a colour image.
Warm Portrait — sky 100%FAIL — smooth pale blue-green sky, only the faintest mottling; no pickable particles. Fine grain nearly invisible in bright sky. crop100-sky-Warm_Portrait.png
Vivid Day — sky 100% — smooth sky, grain a whisper at most. crop100-sky-Vivid_Day.png
Cool Cinema — sky 100% — smooth sky, grain a whisper at most. crop100-sky-Cool_Cinema.png
Quiet Day — sky 100% — smooth sky, grain a whisper at most. crop100-sky-Quiet_Day.png
Night Tungsten — sky 100%FAIL — large soft cloudy patches and blocky clumps across the whole sky; reads as uneven staining / mottling, not discrete grain. Green-teal sky. crop100-sky-Night_Tungsten.png
Silver Mono — sky 100%FAIL — hard small particles clearly visible, reads as real grain — but on a pale blue sky (R=140, G=211, B=226; R−B −86). Photographic grain, wrong colour: this is not a B&W render. crop100-sky-Silver_Mono.png
3 · 100% snow crops
800×600 crops at full resolution, unscaled. Textured snow masks the format step; Coarse clumps read worst here.
Warm Portrait — snow 100% — warm snow, grain present at 100%. (Same bytes as format-135.png.) crop100-snow-Warm_Portrait.png
Night Tungsten — snow 100%FAIL — worst of the set: square-ish blocky clumps over the snow; reads as a texture overlay, not film grain. crop100-snow-Night_Tungsten.png
Silver Mono — snow 100%FAIL — blue-grey snow, not grey. Mono renders in colour on the photo path. crop100-snow-Silver_Mono.png
4 · Grey ramps — the cleanest test of film character
Neutral grey ramp (Zones I–X) per profile, film ON, grain OFF. The baseline (film OFF) is exactly neutral. The ramps diverge visibly per profile — the per-channel-curve mechanism works. Night Tungsten's failure is cleanest here: a neutral ramp comes out warm tan/cream.
Warm Portrait ramp — warm cream highlights; shadow half weak (R−B +1.5, not cool). Max divergence 10.1 levels. ramp-Warm_Portrait.pngVivid Day ramp — near-white highlights. Max divergence 10.6 levels. ramp-Vivid_Day.pngCool Cinema ramp — blue-grey throughout (R−B −4.2 shadows and highlights). This is the correct daylight direction for a cool stock. Max divergence 13.7 levels. ramp-Cool_Cinema.pngQuiet Day ramp — near-neutral, smallest divergence (2.7 levels). ramp-Quiet_Day.pngNight Tungsten rampFAIL — warm tan/cream in the mid and high bands. A tungsten-balanced stock in daylight must go blue; this goes the wrong way. Max divergence 16.2 levels. ramp-Night_Tungsten.pngSilver Mono rampFAIL — exactly neutral (R=G=B), as a B&W ramp should be. That is the point: the desaturation works here and fails on the photo path, so the photo renders are in colour while the ramp is neutral. ramp-Silver_Mono.png
5 · Formats & flat fields
Format scaling by real gate diagonals. On flat fields the Super 16 step is clearly coarser than Super 35; on the photo the 135 → Super 35 step is nearly invisible (textured snow masks it) while Super 16 is visibly coarser and blockier. Whether the step matches Ritual's own Pro 400H Super 35 vs Super 16 pair is unproven — no Ritual reference renders were in the set.
Note: the Super 16 format render (format-Super_16.png) was removed from this pack because a content check refused that image. The flat-field Super 16 render below is still included.
Format 135 — baseline format. (Same bytes as the Warm Portrait snow crop.) format-135.pngFormat Super 35 — only slightly coarser than 135 on the photo; the step is nearly invisible in textured snow. format-Super_35.pngFormat 6×4.5 — finer than 135, in the right direction. 6×7 vs 6×9 was not rendered. format-6x4.5.pngFlat field — Super 35 — organic clumping, no repeating motif, no grid, no tile edge. flat-Super_35.pngFlat field — Super 16 — clearly coarser than Super 35 (larger clumps, heavier texture). The format step reads ~2× on flat fields by spectrum. flat-Super_16.pngFlat field — Size 0.5 — finer grain at smaller size. flat-size-0.5.pngFlat field — Size 1.0, Classic — fine speckle over soft organic clumps, no grid or repeat; reads photographic-ish. Dye clouds read as soft green/pink blotches, slightly poster-like at this scale. (Same bytes as flat-colour100.png.) flat-size-1.0.pngFlat field — Size 2.0 — clearly coarser than size 1.0; same pattern magnified, not re-rolled (low-pass correlation 0.966). flat-size-2.0.pngFlat field — Grain Colour 0 — pure grey luminance grain, no colour fringe. Chroma std exactly 0.00. flat-colour0.pngFlat field — Grain Colour 100 — colour in the grain is soft larger-scale blotches, no fine RGB speckle. (Same bytes as flat-size-1.0.png.) flat-colour100.pngFlat field — Softness 0 — hardest fine particles. flat-soft0.pngFlat field — Softness 100PARTIAL — edges soften, but particles also look bigger/coarser, so "without changing particle size" is not cleanly met. flat-soft100.png
6 · Push / pull — Warm Portrait
Push couples contrast with colour: +2 is visibly punchier — deeper blue sky, darker hills, warmer brighter snow highlights, more saturated; −1 is flatter, paler, quieter. Grain coupling (+25% presence per stop) is in the model but not visible at fit scale. Push ratios have no reference anchor.
Push −1 (pull) — flatter, paler, quieter; opens shadows and quiets colour. push--1.pngPush 0 — baseline. (Same bytes as cropwin-full.png.) push-0.pngPush +1 — punchier. push-1.pngPush +2 — deepest blue sky, darkest hills, warmest snow highlights, most saturated. Contrast and colour move together. push-2.png
7 · XPan check — Warm Portrait on a Portra 400 frame
The Warm Portrait render keeps the frame's character and pushes it warmer/more saturated: cyan-turquoise concrete and blue sky, warm skin, orange snack accent all intact and stronger; skin stays natural, not plastic. But the source frame is already a Portra 400 print, so this is a second application of the look — directionally right, absolutely confounded. Whether one Warm Portrait profile expresses both Portra 400 and Portra 800 (800: warmer, creamier, less saturated) was not tested.
XPan original — Portra 400 frame (Hasselblad XPan): desert gas station, boots on weathered turquoise concrete, warm sun, hazy blue-grey mountains. xpan-original.pngXPan + Warm Portrait — cyan sky/concrete and warm skin coexist and are all stronger: skin tanner/oranger, sky deeper blue, concrete more saturated cyan, orange accent punchier, clouds warmer. Mean saturation 0.229 → 0.364. xpan-warm-portrait.png
8 · Crop window
Crop via the in-shader window remap. The builder's measured correlation after 2× downscale is 0.999; phase sameness was not judged by eye from these files. Straighten/rotation grain stability was not tested in the prototype (no geometry stage).
Crop window — full — full frame. (Same bytes as push-0.png.) cropwin-full.pngCrop window — cropped — cropped via the window remap. cropwin-crop.png
9 · Preview vs export grain
The direct fix for the old ~3.8× preview/export mismatch: grain is sampled in image UV, never screen pixels. Builder's measured correlation between the 100% preview crop (upscaled ×3.765) and the same crop of the full-res export is 0.991, grain std 32.27 vs 32.29. Not eye-verified — at fit, grain is invisible, and the 100% crops are export-scale only.
Preview — Warm Portrait — the preview-scale render whose 100% crop was compared against the full-res export (compare with the Warm Portrait snow crop in §3). preview-warm-portrait.png
10 · Colour charts
24-patch colour chart per profile. Six hues distinct, reds do not block up (red patch saturation 0.91 Vivid Day, 0.88 Warm Portrait, 0.84 Quiet Day). The two charts below look near-identical to the eye — the profile difference barely shows on the chart. No skin in the fixture, so the skin half of this behaviour is unproven.
Chart — Warm Portrait chart-Warm_Portrait.pngChart — Vivid Day chart-Vivid_Day.pngChart — Quiet Day chart-Quiet_Day.png
48 renders (49 were generated; format-Super_16.png was excluded from this pack because a content check refused that image). Byte-identical pairs, stated openly: flat-colour100.png = flat-size-1.0.png; format-135.png = crop100-snow-Warm_Portrait.png; push-0.png = cropwin-full.png. Captions drawn from the prototype report and the independent visual verification (11 Nov 2026). Nothing here is a device result — the physical iPhone is the final gate. Unproven by eye: Ritual match (no Ritual reference renders were in the set), presence-0, seed repeat/re-roll, tonal-balance extremes, film-contrast vs print-contrast pairs, highlight shoulder on clipped sun, night tungsten street, portrait/skin, high-ISO clean capture.