# THE RAIN LISTENS — Case Study evidence & media handoff

Prepared 2026-10-09. This standalone editorial page is a Stage 6B deliverable, not an update to the deployed experience. No code, model or image is copied from a film. The visual reference informed the brief; no film still is reproduced here.

## Claim ledger

Implemented means present in source. Validated always names its scope. Experimental features are implemented optional comparisons, not initial defaults. Planned means not completed. These labels are not mutually exclusive: a study can be implemented and GPU-tested while still experimental.

| Claim used on the page | Evidence | Scope / qualification |
| --- | --- | --- |
| Independent browser art prototype | README.md; package.json | Artistic installation format; no documented physical exhibition or visitors |
| Explicit camera and sound actions | src/App.tsx; experience/permission.ts, camera.ts; sound/audio.ts | Source + controlled lifecycle tests, not all hardware/browser permission scenarios |
| Open palm / fist / repel / no hand | src/hand/gestures.ts; App.tsx; tests/recognition.test.mjs | Single-hand rules; no aggregate human accuracy figure |
| Geometric finger evidence and thumb tolerance | hand/gestures.ts; hand/analysis.ts | Joint angles, palm-normalised measurements, world landmarks with image fallback |
| Confirmation / 700 ms loss tolerance | GestureFilter in hand/gestures.ts | Raw ambiguity cannot promote a gesture; App retains action on OTHER |
| 6500 / 2600 instances | src/rain.ts | Mesh + InstancedBufferGeometry, NOT Three.InstancedMesh; all particles retained in CPU state |
| Perspective camera 52° / .1 / 60 | src/rain.ts | Camera z=12 in fixed default frame |
| Continuous depth, scale, samples | src/material/continuous.ts; scripts/rain-projection-report.mjs; docs/stage4d4-projection.json | Optional Continuous Perspective. Defaults scale1.35 / nearest5 / range32; diameter .243, distances5/21/37, 720px → 35.87/8.54/4.85 CSS px. No calibrated physical metres |
| Baseline very small far drops | README Stage4D.4; docs/stage4d-gpu-results.txt | Typical size .0165, original geometry. .28px is a specific geometric example, not every droplet |
| Frozen study clamps screen width | material/frozen.ts; README Stage4D.2 | Retained comparison; continuous branch removes compensation |
| Final analytic optics | material/final.ts; material/shader.ts; occlusion/shader.ts | Optional preset, transparent additive billboard; no true refraction/absorption, no physical water mesh |
| Speed-driven shape | material/motion.ts; shader.ts; tests/material.test.mjs | Actual velocity including lateral drift; continuous transition through zero |
| Finite ~3-second stop | motion/dynamics.ts; tests/dynamics.test.mjs | Flow2.92–3.08s; controlled simulation time, not guaranteed wall-clock latency on throttled devices |
| Mask-only person occlusion | occlusion/state.ts, mask.ts, shader.ts | Fixed world z−7 plane, not measured body depth; C+B(1−A)+F equivalent composite |
| Local two CPU Workers | hand/hand.worker.ts; segmentation/segmentation.worker.ts; tracker.ts; controller.ts | Frame/mask messages are in-browser; models/WASM same origin |
| Hand-priority segmentation | segmentation/budget.ts; App.tsx | Nominal caps8Hz/4Hz; pressure caps2Hz/1Hz; completion + delay lowers effective rate |
| Adaptive local rain audio | sound/audio.ts; sound/mapping.ts; rain.ts getSoundMotion | Filtered noise, actual motion energy, explicit enable; no subjective listening claim |
| Independent falling/rising speed | experience/SpeedControls.tsx; material/motion.ts; tests/speed.test.mjs | 12 levels each, default2.5×; artistic coordinates, no real terminal-speed calibration |
| Fixed Audience, retained Studio experiments | App.tsx studio-gated dolly/reveal; README Stage5B | Visual choices persist; camera experiments disabled in Audience |
| Camera look / brightness fix | experience/look.ts; style.css; docs/stage4d3-brightness-results.json | Default Natural. No full-camera dark filter. Synthetic screenshot diagnostics, not skin-tone validation |
| Worker/track/GPU/audio cleanup | camera.ts; lifecycle.ts; tracker.ts; controller.ts; rain.ts dispose; sound/audio.ts | Tested synthetic and idempotent lifecycle; long-duration real-device leaks not universally ruled out |
| 88 tests at release | DEPLOYMENT.md; RELEASE_CHECKLIST.md | Release snapshot; do not confuse with Stage5B historical87 |
| Three 60FPS samples | docs/stage5b-validation.txt; docs/stage5a-stack-results.txt | Short synthetic blank NO_HAND video; actual local models/audio. Not valid human contours or sustained benchmark; hardware identity not recorded |
| Deployment / 18 hashes | DEPLOYMENT.md; docs/release-assets.json | 2026-10-09 user timezone. HTTPS200 after redirects, no runtime camera acceptance implied |
| Earlier human acceptance | README Stage3.5/4A/4B user acceptance records | User-reported scope only, not a new independent verification of subsequent stages |
| AI-assisted workflow | Project conversation and iterative stage records | No invented sole authorship, working hours, user counts, awards or team size |

## Privacy wording

Own application source processes frames, landmarks and masks inside the browser; no recording/upload path was found in the release audit. Avoid “zero network traffic” or “no data ever leaves the device”: models/WASM are same-origin downloads, Google Fonts uses third-party style/font requests, and Cloudflare hosting/network reporting exists. Refer readers to the deployed privacy page. Ordinary tab hiding pauses work but may leave camera tracks active; Stop/Exit stops them.

## Media slots — Stage 6A pending

No photo or video is supplied in this case study. All generated SVGs are labelled schematic. Existing docs screenshots include synthetic/no-camera tests; they were intentionally not used as evidence of a person standing in rain.

| Slot | Suggested real capture | Caption requirements |
| --- | --- | --- |
| Hero demo | 16:9, fixed camera, natural light, palm → full freeze → fist → release | Actual preset, normal/low mode, real date, browser/device; credit/consent confirmed by author |
| FALL / SUSPEND pair | Same session, crop, light, physical scale and preset; record full transition | Actual running experience, not a concept rendering; identify optional preset |
| Hand interaction detail | Palm motion, skeleton optional in a separate Studio shot | Raw/stable diagnostics are development UI, not Audience |
| Person occlusion detail | Head/hair/shoulder/arm boundaries with background rain | Segmentation ON; limitations of binary foreground/background |
| Studio process | Baseline vs Final and depth-marker inspection | Label experimental/debug mode explicitly |

Hero slot is a non-clickable placeholder, not a fake video. To replace it, use a real `<video controls playsinline preload="metadata" poster="…">` with a self-owned local source. Do not autoplay sound. Use descriptive alt/captions and a transcript. Keep any actual-frame caption distinct from schematic captions. No deployment is performed by this page build.

## Review before publishing the case study

- Verify credits and role wording with the author; the current page makes no invented biography or employment claim.
- Capture real Stage6A material and update the media ledger honestly.
- Review online camera/hand/audio/person acceptance in target Chrome/Edge and physical devices.
- Human judgement decides photographic quality; GPU masks and pixels do not prove it.
- Publish the standalone case-study/dist only when explicitly requested. Current experience dist remains separate.
