Software / BomsAI Visualizer / Guide

BomsAI Visualizer — User Guide

Everything the app does, in the order you are likely to want it. The second half — changing a visual, editing its own code, swapping its pictures for ones that move, laying your own over the top, putting two on screen at once with a fader between them — is the part worth reading even if you have been using it for a while.

Download this guide as a PDF — same words, same pictures, clickable contents.

First run — presets and textures

The app ships with no presets and no textures, on purpose: they are the work of hundreds of artists who released them under their own terms. It shows its own opening screen until you give it a folder.

  1. Right-click anywhere in the window for the menu.
  2. Get presets… downloads a curated pack, unpacks it and points the app at it. One button, and you are done.
  3. Already have a pack? Settings… → Preset directory. Point it at the top folder of the pack; nested folders are read as they come.
  4. Set Texture directory as well. Presets that sample picture files are the best-looking ones there are, and they are exactly the ones that fall back to a plain waveform when the pictures cannot be found.
The opening screen, a gold tree logo drawn by the app’s own preset Linux
The same opening screen in a window on Windows Windows
Before you have chosen a folder, this is what plays — the app’s own preset, not a still image. It is the only one that ships with it.
The Get Presets dialog offering the Cream of the Crop pack and the MegaPack
Get presets… fetches the curated pack and points the app at it. The larger pack is a browser download because Google Drive will not hand several gigabytes to an app.

There is nothing to sign in to and nothing is uploaded. Ratings and settings are files on your own disk.

Watching

One window, and a right-click menu. Presets rotate on a timer with a random extra so the rhythm never becomes predictable; the arrow keys move by hand, Space cuts straight to the next one with no blend, and R jumps somewhere random.

The right-click menu open over a violet preset, with the Record clip submenu showing
The whole interface is this menu. Nothing is more than two clicks away.

F or a double-click goes fullscreen; B drops the window border. With more than one screen connected, the menu’s Display submenu decides which one fullscreen uses. Land on something you want to keep? Scroll Lock locks it and the rotation leaves it alone.

Keeping score

A ten-thousand-preset folder has maybe forty in it you would choose. This is how you find them without a tagging session.

The preset browser sorted by rating, thumbnails beside the highest-scoring names
Sorted by rating. The thumbnails are frames from presets that were actually watched — there is no batch render.

Collections

A rating says how good a preset is. A collection says what it is for — “chill”, “party”, “the ones that look good behind the icons”. The two are kept apart and neither is rebuilt from the other.

  1. Right-click → Collections → Add this visual to → New collection… and name it.
  2. Everything already in that collection is greyed out in the list, so you can see at a glance whether the one on screen is in it.
  3. Pick a collection at the top of the same menu and the whole rotation narrows to it. All presets puts it back.
The Collections submenu listing All presets, Chill, Party and Wallpaper
Named sets, and the one being played is ticked.

Finding one again

The preset browser is on the menu, or on whichever key you have bound to it. It lists the whole playlist with the current preset highlighted and its rating beside every name; double-click any row to jump there.

The preset browser filtered to presets whose names contain the word crystal
Type part of a name and ten thousand presets become the handful you meant.

Changing a visual you nearly like

Open the preset browser and press the 🎛 button in its toolbar. The Tweak tab holds ten sliders that act on the preset playing right now, and the picture changes as you drag.

The tweak panel open in the preset browser, showing ten labelled sliders
Ten sliders over whatever is playing.
SliderWhat it does
ZoomHow far the picture pushes into or pulls away from itself each frame. Just above 1 tunnels inwards; just below, outwards. The single most dramatic control here.
RotationSpin per frame. Tiny numbers — a tenth is already a fairground ride.
WarpHow much the frame is distorted as it is fed back. Zero is clean, high is liquid.
Drift across / downNudges the whole picture sideways or down a fraction each frame. Small values turn a static pattern into a flow.
Trail lengthHow much of the last frame survives into this one. Low wipes the screen clean, high smears everything into ribbons.
BrightnessGamma over the finished frame. Useful for rescuing a preset that is nearly black, or calming one that is blinding.
EchoHow strongly a scaled copy of the frame is blended back over itself.
Wave sizeThe scale of the waveform the preset draws from the music.
Wave opacityHow solid that waveform is. Zero hides it entirely, which some presets look better without.

Greyed sliders. Roughly half of all presets drive their own zoom, frame by frame, from their own code. A slider that quietly loses every argument with the preset is worse than no slider, so the ones the preset animates for itself come up greyed with a note saying why.

Nothing is written to your preset file. The edit goes straight to the renderer. Revert puts it back; Save as… writes your version beside the original under a name you choose, and it joins the library as a preset of its own.

Lock and rate without leaving the panel. The three buttons at the right of the tab row — 🔒, ★− and ★+ — lock the visual so the rotation leaves it alone, and move its rating down or up. They do exactly what the keys do; they are there because while you are reading the list the keys are the thing you have to remember.

Start with Zoom and Trail length. Between them they change a preset more than the other eight put together.

Editing the preset itself

The Code tab is the preset’s own file — the equations and both shaders, as written. Apply recompiles it while it is on screen; anything that will not compile says so underneath, quoting the line the compiler objected to, instead of dropping you to a blank frame. Revert puts the file back and Save as… writes your version beside it.

The code tab showing a preset’s source, with a slider created for its fDecay value underneath
A slider on fDecay, made by putting the cursor in the number and pressing one button.

Mash up is the fastest route to something nobody has seen. It is also the fastest route to a black screen — Revert costs one click, so press it often and without regret.

Swapping a preset’s pictures

The Textures tab lists the picture files the preset that is playing samples. Swap any of them for a photograph of your own and the preset renders through it — the same preset, made out of your holiday snap.

Your own picture over the top

The Overlay tab lays a picture of your own over the visuals. The presets keep changing underneath it and it stays where you put it — including the next time you open the app.

A gold tree logo laid over a soft blue and green preset
A logo over the render. The preset drew the dark ring around it by itself.
  1. Add a picture… and choose a file. It is copied into the app’s own folder, so moving or deleting the original later changes nothing.
  2. Pick a Movement: still, spinning, drifting slowly around the frame, pulsing to the beat, or spinning and pulsing at once.
  3. Pick a Blending — this is the one that decides whether it looks right, see below.
  4. Set Size and Opacity.
The overlay tab of the preset browser with one picture listed and its movement, blending, size and opacity controls
Up to sixteen pictures at once, each with its own movement and blending.

Which blending to use

A picture with a black background laid on with Normal shows as a black box, because that is genuinely what the file contains. Either use Additive, or save the picture as a PNG with a transparent background.

Pictures that move

Anything the Textures tab accepts, this accepts too — so the overlay can be a .gif, a .webp or a video, and it plays while it sits there, spinning or pulsing to the beat like any other overlay.

An animated iridescent sphere spinning over a vivid green and magenta preset
An animated GIF over the render, spinning. It is playing, not a still frame.

Burning one in instead

The top half of the same tab does something different with the same kind of file. Choose… a picture or a video there and it goes into the preset rather than on top of it, which means the preset’s own warp, drift and decay take hold of it: it smears, echoes and travels with the visuals instead of sitting still over them.

Burnt in, a logo comes out smeared and moving rather than crisp. That is the effect, not a limitation — if you want it crisp and still, lay it over the top instead.

Pictures live in the app’s own sprites folder, which is searched after everything else and given a spr_ prefix, so an overlay called cells.png can never be picked up as the cells texture a preset asked for.

Two visuals, and a fader between them

2 puts a second preset on screen beside the first, and 1 switches the first one off again — a switch each, rather than one visual with another added on top. Both react to the same music, both keep advancing on their own, and the two are never the same pair twice. One of the two always stays on: turning off the last one would leave you looking at a black window.

Two presets on screen at once — a fine white and blue radial spray with a green and magenta coral structure showing through it
Two presets, screened into each other. Neither of them looks like this on its own.

Recording a clip

F9 starts recording what is on screen and stops it again, or use Record clip in the menu. MP4 for a video, GIF for something to post.

Wallpaper and screen saver

Wallpaper mode on Linux

It asks the window manager to treat the visualiser as the desktop and put it at the bottom of the stack, which is a thing X11 has a name for and Wayland does not. What you get depends on the desktop:

The Windows desktop with the visuals playing behind the icons
Wallpaper mode on Windows. Your icons stay where they are; the picture behind them is live and still following the sound. It looks the same on an Xorg Linux desktop.

Every setting, explained

The settings dialog, showing preset and texture folders, frame rate, quality, theme, sensitivity and idle options
Settings, top to bottom.
SettingWhat it does
Preset directoryThe folder of .milk files. Packs are nested folders and it reads them recursively, so point it at the top of a pack.
Texture directoryThe folder of picture files those presets sample. Without it, texture-heavy presets fall back to a plain waveform.
Preset durationSeconds before it moves on by itself.
Random extraUp to this many extra seconds, chosen per preset, so the cadence never turns into a metronome.
FPSFrame rate cap, up to 240.
VisualsA tick for each of the two. Ticking one switches it on and points the rows below at it; unticking one points them at the other, because there is nothing to set up on a visual that is not there. One of the two always stays on.
Visual 1 / Visual 2 qualityMesh resolution for whichever visual is ticked above — the label says which one you are looking at. Low is a spare laptop, high is a card that can chew through it. Visual 2 starts at Low on purpose: a machine that runs one preset comfortably is not promised to run two. Visual 1 changes at once; visual 2 changes the next time it is switched on.
ThemeDark, light, or follow the desktop.
Blend durationSeconds of cross-fade between one preset and the next.
Hand-over“Start each visual on a black frame.” Off, a new preset inherits the last frame of the old one and warps it, which is how MilkDrop always behaved and often looks better. On, every preset starts clean.
Beat sensitivityHow strongly the audio drives the picture.
Hard cutsLet a loud enough beat cut straight to the next preset, with its own sensitivity.
Audio deviceWhich output to listen to. Auto follows the system default, including when you change it mid-song.
Input sensitivityGain on the captured audio, for material quieter or louder than the visuals expect. The level meter in the menu is how you set this without guessing.
Pause when idleNever, always, or only as wallpaper. Stops drawing after a stretch of silence, and whenever a full-screen app is in front.
Pause afterHow many seconds of silence count as idle.
At loginStart automatically when you log in, as a window or straight into wallpaper mode.
The Audio source submenu listing the outputs it can listen to, with a level meter under them Linux
The same submenu on Windows listing speakers, an HDMI output and S/PDIF Windows
Which output it listens to lives in the menu, not the settings dialog — and the level meter under it moves with the sound, so the sensitivity slider is something you watch rather than guess.

Keyboard reference

Every one of these is rebindable: Key bindings… in the menu, click the cell, press the key.

KeyAction
→Next visual
←Previous visual
SpaceNext visual, no blend — cuts straight to it
RA random visual
+ / −Rate the visual on screen up or down
XExclude this visual — sets it to 0 and moves on
Scroll LockLock the visual so the rotation leaves it alone
MShuffle on or off
HHard cuts on beats, on or off
1 · 2Visual 1 or visual 2 on or off. One of the two always stays on
[ · ]Slide the crossfader towards visual 1 or visual 2, a twentieth of the way each press
TabSwap which of the two visuals everything else is adjusting
CTake the browser’s picture of this visual again, from the frame in front of you
F · F11 · double-clickFullscreen
BBorderless window
DDesktop wallpaper mode (Windows, or Linux on Xorg)
F9Start or stop recording a clip
EscQuit
Right-clickThe menu — everything else is in it
The key bindings dialog listing each action beside the key that triggers it, down to a switch for each visual and a key each way on the crossfader
Click a cell, press a key. That is the whole editor.

Where your files live

Nothing is stored anywhere but your own disk.

WhatWindowsLinux
Settings, ratings, key bindings%APPDATA%\BomsAIVisualizer~/.config/BomsAIVisualizer
Collections, thumbnails, swapped textures, overlay pictures%LOCALAPPDATA%\BomsAIVisualizer~/.local/share/BomsAIVisualizer
Recorded clipsYour videos folder — Open clips folder in the menu goes straight there
Presets and texturesWherever you put them. The app only reads them.

Backup in the menu writes the lot — ratings, collections, settings and key bindings — to a single file you choose, and restores it on any machine. It is the one thing worth doing before you reinstall: ratings are hours of watching.

The Backup submenu with Back up ratings and collections, and Restore from a backup Linux
The same Backup submenu on Windows Windows
Two rows: write one file out, read one file back.

When something looks wrong

Presets render as a plain waveform, or solid white.
The texture folder is not set, or is pointing at the wrong place. Settings → Texture directory. Texture packs are downloaded separately from preset packs.
Some presets are just black.
A few presets in every large pack have shader code that does not compile. Rate them 0 and they leave the rotation; Delete 0★ presets… gets rid of them for good.
The picture is not reacting to the music.
Settings → Audio device. “Auto” follows the system default output; if you are playing through something else, pick it by name. The level meter beside Audio source in the menu shows whether anything is arriving at all.
It reacts, but barely.
Raise Input sensitivity, watching the level meter, and then Beat sensitivity if it still feels flat.
Recording does nothing.
ffmpeg is missing. The Record submenu says so when it cannot find it.
My overlay is a black rectangle.
The picture has a black background rather than a transparent one. Switch its blending to Additive.
It is running slowly.
Settings → Quality down a step, and FPS to 60 if it is higher. Quality is mesh resolution and costs the most.

← Back to BomsAI Visualizer