A River Becoming: bitcube

Status, plan and log for the show machine

View the Project on GitHub gavaiken/river-bitcube

Approved by Gavin 18 Oct 15:36 (with session A review 15:45: no all-ropes white frame; lit mask from bit/inverse pairs). Progress: B.md.

Session B plan: local rain checkpoint (river-local-oct-18.toe)

Context

Plan item L. Today TD sends Art-Net to 20 ropes (18 light; ropes 9 and 17, 1-based, are dark) and HDMI to HUB75 quad 1. Rope positions are only known per pile (rope map, 14:11). The goal is a self-contained checkpoint that needs no Modal or web: a camera-space rain/river field, sampled onto every rope pixel at the point where the gallery camera sees it, plus HUB75 quad 1. Seen from the camera, the result should read as one coherent piece.

State found (14:47): TD 2025.33230 is running river.toe at 60 fps with the bridge OK. Ropes are Active, Source=black, 0 W. Panels are Source=test with the window open. The gallery cam is H.264 2880×1616 @ 40 fps. The repo is clean at 4a4f464. The room is sunny and people walk through.

Step 0: coordination (before B1)

B1: structured-light capture

TD side (td/ropes/artnet_out.py, td/build/build_ropes.py):

tools/pixelmap/graycode.py (pure): gray(n) and ungray(g), plus the pattern list: black, white, then 14 × (bit, inverse) = 30 patterns.

tools/pixelmap/capture.py (venv Python):

B2: decoder and pixel map (TDD, pytest)

tools/pixelmap/decode.py: pure functions, each written test-first against synthetic frames in tools/pixelmap/tests/.

B3: HUB75 corners

tools/pixelmap/hub75.py (pure plus TDD; capture reuses the reader in capture.py):

B4: rain/river field (built-in TOPs only, no GLSL)

/project1/river_local base COMP, field 1280×720 (camera aspect; the Non-Commercial cap is 1280):

B5: sampling

B6: show file and build script

B7: verify and tune

B8: docs and wrap-up

Files

Verification

Risks I’ll handle as they come