Repository navigation
Playlist player: shader Setups and full-screen videos, shuffled together - #169
Merged
Merged
Conversation
playlist_app.py plays one shuffle bag of Setups and videos from playlist.json. Setups play setup_duration_s (300 s) each, overriding their own duration_s; videos play to the end of their file, silent and letterboxed, decoded with PyAV on a background thread. Missing or broken items are skipped; the camera runs throughout so calibration happens once. shader_app.py's main() is split into open_display / start_camera / drain_camera / ShaderStage so both apps share them; behaviour unchanged. Video files live in the gitignored videos/ folder. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
What
ShowControl/FundingCAPTCHA/playlist_app.pyis a new app. It plays shader Setups and full-screen videos from one shuffle bag, so every item plays once before any repeats.playlist.jsondefines the list:setups(folders undershaders/),videos(files invideos/) andsetup_duration_s(300).setup_duration_s, which overrides their ownduration_s.videos/is gitignored except for its README. Video files are copied onto the show PC by hand.N/→next item,Rreload the current Setup,Escquit.Refactor
shader_app.py'smain()is split intoopen_display,start_camera,drain_cameraandShaderStage, which both apps now share.shader_app.pybehaves the same as before.Other changes
av>=12added torequirements.txt.docs/FundingCAPTCHA.md.Testing
test_playlist_app.pyadds 13 tests: the playlist file, letterbox geometry, frame pacing and end-of-file on a real encoded clip, and the rotation rules (setup duration override, video runs until done, missing videos skipped, render failure drops the Setup, retry when nothing plays).--mock-cameraand a test playlist. A 3 s video played for about 3.1 s and then a Setup took over, Setups ran at 30 fps, and the missing video was skipped.test_hunter_bird.py::test_person_has_white_fill_and_ink_outline, also fails onmainwithout this change.test_layout_tool.pywas skipped becausefastapiisn't installed on the test machine.make testwere not run (no Node on that machine).To make this the show,
deploy/captcha.servicewould needExecStartpointed atplaylist_app.py --camera. That change is not in this PR.🤖 Generated with Claude Code