Repository navigation
Watercolor Smudge Setup + shader player image channel (#164) - #167
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…164) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oom empties (#164) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e sketch (#164) Look check against the approved sketch found the smear far weaker: a walking limb jumps further between 10 Hz camera frames than its own width, so easing cross-faded it rather than sliding it. Soften the Body (BODY_SOFT), measure extremity on the same eased Body, and retune the flow regulariser and dead zone. New test pins smear coverage of a path. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Canvas paint floors at 1/512 so black paint at the centre isn't mistaken for a cleared buffer (which reset the canvas every frame). - Images keep enough pixels to cover the window, not fit inside it, since the Setup cover-fits them; capped at GL_MAX_TEXTURE_SIZE. - Images are turned upright per EXIF orientation. - Pin the known limitation that an arm reaching along its own axis doesn't smear (the balance gate reads it as appearing). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…isplay N) Fullscreen sized the window from the first display's desktop, so on a second monitor with a different resolution only part of the picture showed. Size it from the chosen display's own desktop and open there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…timate (#164) FLOW_EPS 4.0 dominated |∇B|² in v = −dB/dt · ∇B / (|∇B|² + eps), so limb speed was underestimated several-fold and smears read as faint on camera. Measured on the test sweep: path coverage ~33 % → ~70–75 %. - FLOW_EPS 4.0 → 0.25, SMEAR_STRENGTH 0.63 → 1.5, MIX_MOVE 0.35 → 0.5 - Wet trail more visible: WET_DARKEN 0.07 → 0.15, WET_DECAY 0.35 → 0.2 Flicker and moving-torso guards still pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Conflicts: shader_app.py (main split it into open_display / ShaderStage / start_camera for the playlist player), shaders/setups.json, ADR-0021. - --display / shader_app.display now go through the shared open_display. - The per-Setup image bags move out of Rotation into SetupImages so the playlist player can share them. - The image-channel ADR becomes ADR-0024: main took 0023 for the self-learning depth background. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EiZFhwnAeRgXxtUydwrLsQ
- playlist_app.Playlist hands each Setup load the next image from its bag, as shader_app.Rotation does, so watercolor_smudge paints over its pictures in the show player too. Added to playlist.json. - playlist_app honours --display / shader_app.display. - requirements-dev.txt gains Pillow: the image-decode tests failed in CI with ModuleNotFoundError. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EiZFhwnAeRgXxtUydwrLsQ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #164.
Not ready to merge until the rig test passes. The real depth-camera test on the Ultra 9 is the sign-off. The checklist is below.
Summary
There are two parts: a player change and a new Setup.
The player gains an
"image"channel source (ADR-0023, which amends ADR-0021). Each load takes the next image from the Setup'simages/folder, in shuffled order:The new Setup,
shaders/watercolor_smudge/, shows a watercolor painting. The thin, moving parts of a visitor's silhouette smear it, and it heals once the room empties:All tuning values are named constants at the top of
common.glsl. The design is indocs/superpowers/specs/2026-11-07-watercolor-smudge-design.md, with the approved playable sketch beside it. The build plan is indocs/superpowers/plans/2026-11-07-watercolor-smudge.md.Also:
shader_app.pycan now go fullscreen on a chosen display. Useshader_app.displayincaptcha-settings.json, or--display Nto override it. The window is sized from that display's own desktop, so a 1600×1200 projector beside a 3072×1920 main monitor gets the whole picture. Before this, the window took the main monitor's size and you only saw part of it.Evidence
"image"source:load_setupraises "unknown source(s) ['image']".After: 377 pass (
.venv/bin/python -m pytest -qinShowControl/FundingCAPTCHA/). The new behaviour tests render through real GL:test_still_flickering_person_leaves_paint_alone: a still limb with 1-camera-px rim flicker and edge dropout at 10 Hz → max canvas change < 0.02test_moving_limb_smears_most_of_its_path→ over 30 % of the path smeared. It was 7 % before the softening fix that came out of the look check.test_moving_torso_does_not_smear→ < 0.03test_heal_waits_for_delay_then_heals_in_heal_time,test_heal_pauses_when_someone_returnstest_image_covers_screen_keeping_aspect,test_image_stays_sharp_outside_smear,test_black_paint_at_centre_still_smearstest_rotation_shuffles_images_per_load,test_rotation_skips_corrupt_image,test_rotation_with_only_corrupt_images_binds_nothing,test_decode_image_applies_exif_orientationKnown limitation, pinned by
test_reaching_arm_along_its_axis_does_not_smear_yet:BALANCE_LO/BALANCE_HIif reaching matters more than flicker.Rig checklist: run
python3 shader_app.py --camera --setup watercolor_smudge, and press R to reload after edits.To tune, adjust these constants:
THIN,RING_R1/RING_R2SMEAR_STRENGTH,BODY_SOFTMIN_FLOW,BODY_EASE_SHEAL_TIME_SMerge Danger
Door: two-way. The new code is additive: a new channel source, a new Setup folder, and one line added to
setups.json. Reverting removes it cleanly.Blast Radius: rotation.
watercolor_smudgejoins the shader rotation for every event that runsshader_app.py.Rotation._loadnow decodes images for any Setup that binds"image". No existing Setup does, so their behaviour is unchanged.Deferred minors from the final review:
PRESENT_HEALoverstates what it does in 16-bit.T_CLAMPis unused.stepshadows the GLSL built-in.🤖 Generated with Claude Code