# DroidDeck boot animation This source accompanies the single Steam startup movie bundled by the app: `app/src/main/assets/steam-startup/droiddeck-startup.webm` (1280×720 at 30 fps, pitch black background, VP8 video with Opus audio). `droiddeck-boot.html` is the editable animation; the scripts and WAV below render the animation at the bundled playback profile. No alternate MP4 or WebM exports are kept in the repository. From the repository root, render the movie with: python3 artwork/boot-animation-source/render.py 1280 720 30 app/src/main/assets/steam-startup/droiddeck-startup.webm dark The bundled profile reduces decoded pixels per second by 78% compared with 1080p/60. VP8 also lowers software decode cost while Steam is starting. Keep the bundled movie at 720p/30; higher-resolution exports are intended for sharing. The app stages that file into Steam's `config/uioverrides/movies` folder before each session. If Steam still has its built-in startup movie selected, DroidDeck sets this movie as the device's startup default before Steam starts. A custom startup movie the user selected later is preserved. To regenerate the soundtrack, run these commands from this directory: python3 events.py python3 sound.py The animation and audio are both procedurally generated; the included WAV is the soundtrack used for the bundled render. `droiddeck-boot.html` holds the whole animation. Every frame is a pure function of time, so the preview page and the video render draw exactly the same thing. Open it in a browser to scrub, slow it down or step frame by frame (arrow keys). ## Re-render the video pip install playwright && playwright install chromium # ffmpeg with libvpx also required python3 render.py 1280 720 30 droiddeck-boot-1280x720.webm python3 render.py 1920 1080 60 droiddeck-boot-1920x1080.mp4 # .mp4 = H.264 for sharing python3 render.py 1280 720 30 droiddeck-boot-dark-1280x720.webm dark # dark version Each frame gets real motion blur (180° shutter, adaptive sub-frames). Output is VP8 for .webm or H.264 for .mp4, both BT.709, so the orb stays #1A9FFF after compression. ## Sound Every sound is synthesized in `sound.py` (no samples) and placed on the exact physics events the animation reports, so hits stay frame-accurate even after you change the timing. Key: D major. python3 events.py # export impact times, rocking, piece speeds from the animation python3 sound.py # -> droiddeck-boot-sound.wav (-18 LUFS, -1 dBFS peak) python3 embed_sound.py # put it in the preview page python3 render.py ... # muxes the wav in automatically (Opus in .webm, AAC in .mp4) The soundtrack is built from the final chord. Each piece lands on one of its notes as a soft, muted tone (legs D, ball A with a quieter echo, bowl F#), the wobble and jump play in silence, and the lock lands with the same soft voice and plays all the notes together. Tweak the cue sheet in `sound.py`: the `tock(...)` calls under `# 1. the stack`, the chord list under `# 4. lock`, and the room reverb mix (`.14 * wet`). ## Where to tweak - Timing of the drops: `archDrop`, `ballDrop`, `domeDrop` (start time, height, bounciness `e`). - The balancing act: `SWAY` keyframes (time, lean). Bigger values = bigger wobble. The bowl leads, the ball chases it (`sway(t - .12)`), the legs follow (`sway(t - .10)`). - The catch-hop on the big wobble: `HOP` (start time, duration, sideways distance, height). - Crouch before the jump: `crouchA/B/D`. - Jump and lock-in: `FL` (rise time, apex height, lock time, how far pieces spread). - Colors for each version (pieces, background, shadows, lock glow): `THEMES` (light, dark). - Total length: `DUR`. ## Install as the Steam startup movie Put the .webm in `~/.steam/root/config/uioverrides/movies/`, then pick it in Steam > Settings > Customization > Startup Movie.