---
title: Beat-Synced Visuals for a Whole DJ Library
description: "Beat-synced visuals for every track in a DJ library: phrase-matched loops, a six-figure estimate, a $363.70 uncapped run and the $30 cap after it."
---

[Writing — Will Curran](https://willcurran.com/blog)

# [Beat-Synced Visuals for a Whole DJ Library](https://willcurran.com/blog/beat-synced-visuals)

 Written by [Will Curran](https://willcurran.com/blog/author/will-curran) | Apr 4, 2026, 4:00:00 PM

I wanted a visual for every track in my DJ library, cut to the shape of each song and locked to its beat. Priced out across a few thousand tracks at what my early runs cost, it came out in six figures. One test run with no spending cap cost $363.70 on its own. The version I ended up with is estimated at about $8 a song. It has not played a real set yet.

## Visuals that know the song

I spent years in live events, and I DJ. Both jobs teach you the same thing about screens: a room reads the music through what it sees. When the drop lands and the screen behind the booth lands with it, the whole floor feels it. When the screen keeps drifting through the same pretty loop while the track goes from a breakdown into a drop, the visuals turn into wallpaper.

Most VJ content is generic on purpose, because it has to work under any track. I wanted every song in the library to get its own set of visuals, and those visuals would change where the song changes: holding back through the build and hitting on the drop, all of it in tempo with the track, with no one standing at a laptop triggering clips by hand.

## How it works

The build listens to the song first, then makes pictures for what it heard.

- **Phrases.** It detects the tempo, the beats and the phrases, so it knows where the intro ends, where the builds and drops are, and where the breakdown sits.
- **Stems.** It splits the audio into four stems: drums, bass, synths and vocals. That lets the visuals follow one part of the mix separately from the others.
- **Mood.** It places the track among five moods on a map of how positive and how energetic it feels. Mood and genre steer the look, and there are 45 genre tweaks, so a house track and a heavier bass track don't come out looking the same.
- **Loop banks.** For each type of phrase, it makes one still image and one short loop, two to four bars long at the song's tempo. That loop repeats to fill every section of that type.
- **Beat flashes.** After the video comes back, a pass adds a brightness flash on every beat and a zoom pulse on every bar.
- **Playback.** The output is encoded in DXV, a codec the graphics card decodes, which keeps the playback computer free for everything else on the night. In Resolume, each deck gets its own layer, and each clip is matched to a track by its title.

The timeline above shows the idea. The two drops share the same loop. When the second drop arrives, the room would see it come back, the same way it hears it come back.

## What the runs cost

The video is generated by hosted AI video models, which charge by the clip or by the second. The first design treated each song like a short film: about 24 ten-second clips per four-minute song, each starting from its own still image. At list prices that's about $19 a song. The target I set was under $2 a track.

Real runs showed how fast it could go wrong. One run on Veo 2, at $0.50 a second, generated 727 seconds of video with no limit on how much one song could spend. That run cost $363.70. A single song on Veo 2 alone cost $172.04, for 32 segments.

The uncapped run is why the build now has a hard default cap of $30 a song. Before it generates anything, it estimates what the song will cost. If the estimate goes over the cap, it steps down through a list of 14 video models until the song fits. Veo 2 is blocked for full songs entirely. The runs in April used Kling v1, and the measured costs were $25.00 for 50 segments, $14.50 for 25, and $5.08 on another run.

## Short loops won on paper

I had built a short-film maker when what a dance floor wants is a loop bank. Professional VJ sets are built from short loops that repeat cleanly and hit in time.

Long clips drifted. Over a long section the picture wandered away from where it started, and it never looped cleanly. Short loops are built to avoid both, and the beat flashes on top keep them in time.

Switching to the loop bank brought the estimate from about $19 a song to about $8. That's 58% cheaper on paper. It's an estimate from list prices.

## The parts that were not magic

**The balance ran out mid-batch.** The prepaid credit on the video service hit zero partway through a batch. Nothing in that batch succeeded.

**The credit check cost money.** To show whether the account still had credit, the dashboard asked a paid image model for a picture every 60 seconds. That came to $4.32 a day. Fixing it saved $129.60 a month.

**The deck link was never finished.** The piece that would listen to the decks live and react to track changes and tempo is a framework and no more. The clip-by-title matching is in place. The live listener is not.

**It hasn't played a set.** Only a handful of real songs went all the way through, plus one synthetic test track. The build has 1,191 tests, and none of them is a Saturday night. I don't know yet whether these drops hit the way I picture them, and only a room can tell me.

**Hosted video is the wrong long-term bill.** Even the cheap version charges per clip, forever, for every new track I add. That pushed the next version toward running the video models on a local GPU, where the cost is the card and the power rather than a meter.

## Where I was the bottleneck

The cap came after the bill. This build ran without a per-song limit until the $363.70 run, and that is what it cost to learn the lesson.

The build is also still waiting on me. Finishing the deck link and playing a real set with it are both mine to do, and the set is the only test that counts.

## If you are about to try this

- **Put a spending cap on every job before the first run.** Estimate first, and have a cheaper fallback ready when the estimate is too high.
- **Generate per phrase type, not per second.** A drop that comes back twice can reuse its loop.
- **Do the beat sync yourself.** Video models don't keep time. Add the beat flashes after generation, from the song's own beat grid.
- **Price the whole library before the first song.** One song's cost times the library size is the number that decides the design.

## Build it yourself

What it does: takes a track, finds its structure, and builds a small bank of beat-synced visual loops for it. The parts:

- **Audio analysis:** tempo, beat and phrase detection, Demucs for stem separation, and Essentia for mood.
- **Keyframes:** an image model such as Imagen 3, Flux or DALL-E 3, one image per phrase type.
- **Loops:** an image-to-video model such as Kling v1, run through a hosted service like fal.ai, one short loop per phrase type.
- **Post-processing:** a pass that loops each clip to fill its sections, adds the beat flash and bar pulse, and encodes to DXV.
- **Resolume:** one layer per deck, each clip tied to its track by title.

How the pieces fit: analysis produces a timeline of phrases with their tempo and mood. The planner groups phrases by type, estimates the cost against the cap, and picks the model. Generation makes one keyframe and one loop per type. Post-processing builds the finished visual for each song. Rough cost: about $8 a song on hosted models, by estimate, or the price of a GPU if you run the models yourself. The build ran from March 27 to April 4.

Give this to your AIHelp me build a tool that makes beat-synced visuals for each track in my DJ library. For each audio file: detect the tempo, beats and phrases (intro, build, drop, breakdown, outro), split stems for drums, bass, synths and vocals, and estimate mood. Group the phrases by type. For each phrase type, generate one keyframe image from a prompt built from genre and mood, then one image-to-video loop of 2 to 4 bars at the track's tempo. Loop each clip to fill every section of its type. After generation, add a brightness flash on every beat and a zoom pulse on every bar from the track's beat grid. Encode to DXV for Resolume, with one layer per deck and each clip linked to its track by title. Before generating anything, estimate the song's cost; enforce a per-song cap, and if the estimate is over it, step down to a cheaper video model. Log the cost of every call. Never poll a paid API to check the account balance.

If you DJ with visuals and have opinions about what a screen should do on a drop, I'd like to hear them. I am easy to reach.

NoteWritten October 2026, about work from March and April 2026.

[View full post](https://willcurran.com/blog/beat-synced-visuals)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Will Curran"
  },
  "dateModified" : "2026-10-21T21:42:13.874Z",
  "datePublished" : "2026-04-04T16:00:00Z",
  "headline" : "Beat-Synced Visuals for a Whole DJ Library",
  "image" : {
    "@type" : "ImageObject",
    "height" : 900,
    "url" : "https://willcurran.com/hubfs/will-curran-brand/beat-synced-visuals-featured.png",
    "width" : 1600
  },
  "mainEntityOfPage" : "https://willcurran.com/blog/beat-synced-visuals",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60,
      "url" : "/hs/hsstatic/content_shared_assets/static-1.4092/img/default-amp-logo.png",
      "width" : 60
    },
    "name" : "Writing"
  }
}
```