MILES GERMER · TECHNICAL ARTIST · CINEMATIC SYSTEMS · AI-AUGMENTED PRODUCTION
← All work

Media Player — Beat-Synced Images, Video & Music

A desktop media player that turns folders of images, video, and music into a beat-synced show: music-driven cuts, a stack of live visual effects, and cyclable look and timing presets. ~9,500 lines, built one planned feature at a time.

01 · Problem

I wanted a player that treats a folder of images, videos, and songs like a music video: media crossfading, effects firing on the beat, cadence shifting with the music, and every knob tunable and swappable while it runs. Off-the-shelf viewers do none of that. So I started building my own in October 2025 and have grown it one small feature at a time, most taking about an hour, each with a written plan before any code.

02 · What I did

I direct the architecture, decide every feature, and review every addition. It is a single-file Python and PySide6 desktop app for Windows 11 with touchscreen support, about 9,500 lines as of this month. It plays images and video in one timeline, driven by real-time music analysis, with a full stack of beat-synced and always-on visual effects and a composable config layer so look and cadence can be authored, swapped, and cycled independently.

The app is organized as six tabs, each doing real work:

  • Media: multi-folder and multi-file sources, images-plus-videos in one show, fit and anchor modes, EXIF rotation, per-video start and end behavior, an overlay-clips folder, shuffle.
  • Music: folder shuffle, live "currently playing" state, and an audio-delay control to line the beat up with a TV that runs the sound ahead of the picture.
  • Timing: music-sync versus timer, image beats (1/2/4), video beat-duration and playback-speed multipliers, and a weighted-random timing system.
  • FX: beat-fired effects (brightness pump, strobe, bass glow, bass vignette, beat pause, black-and-white) and always-on effects (amplitude zoom, desaturate, pan drift), plus a gradient-map color grade, per-FX weights, and an FX playlist that swaps looks on a chosen beat interval.
  • Test: an audio/video calibration metronome, play a click, watch the flash, drag until they align, apply the offset.
  • Shortcuts: full keyboard control for slides, music, display, and FX.
FX tab listing beat-fired and always-on visual effects
FX tab: beat-fired & always-on effects
Timing tab with music-sync versus timer and beat-duration controls
Timing tab: music sync vs timer
FX tab showing per-effect weight sliders and the FX playlist cycler
FX weights & playlist cycler
Audio/video calibration metronome for aligning beat to flash
Audio/video calibration
03 · Credits
Direction, architecture, feature design, review, real-world useMiles Germer
Language and UI toolkitPython and PySide6
All in-editor code and test authoring, every featureClaude (via Perplexity, and others)
04 · AI's role

The AI wrote every line of code and every test. I set the workflow: a markdown plan per feature, my approval, then the model implements, writes smoke tests, and delivers. I decide the architecture, name every file format, choose which bugs to fix and in what order, answer the model's clarifying questions before it writes, and catch regressions in real use. A recent config-layer refactor is typical: I said "settings should store paths, not values," answered three questions about load order and empty-pointer behavior, and the model produced the refactor, caught its own regression via smoke tests, and shipped. The newest feature's test suite runs 57 checks and passes.

05 · Result

A stable media player, built one reviewable feature at a time. Look and cadence are separately authorable and cyclable, and the whole thing runs from music analysis to on-beat effects in real time. See the demo video above.

06 · What I learned

Small features with a written plan and a smoke test are cheap to build and easy to verify. When I have already decided the architecture, the model delivers a working feature in about an hour, every time. When it has to guess, that hour stretches.