💡 Concepts (why it's built this way)
A quick look at why VJam works this way 💡 Understanding the setup makes you faster at using it.
🎥 Dual engines (two visual engines)
VJam runs two visual engines:
- MilkDrop (~945) 👉 flashy WebGL visuals that react beautifully to sound — the classic music visualizer
- p5.js (~378) 👉 free-form visuals drawn by code (shapes, particles, 3D, shaders)
Why two? 👉 MilkDrop creates the swirling base, and p5 adds effects on top. So it's not one flat image — it's a visual that builds up live. Together, that's 1,300+ presets 🎨
The controls match that setup 👉 tap = add a p5 on top / swipe = swap the MilkDrop base. So you can change things up mid-set without blowing up the whole look (→ 🎨 Presets chapter).
🎱 Decks are independent
- Deck A and B each have their own engine (changing one doesn't affect the other)
- The crossfade is an opacity blend (overlaying and mixing the two)
- That's what lets you cue something up in the background and bring it in with the fader, DJ-style (→ 🎱 Deck chapter)
🫧 Visuals you can feel — designing the sound reaction
- VJam's visuals aren't meters and numbers — they're built for reactions you can feel instantly: bursts on the beat, pulsing, shifting color
- So you can tell at a glance that it's locked to the music
- (To write your own presets, see the "p5 preset authoring guide")
🎚️ Modulation (drive parameters with sound)
- You can tie a preset's parameters (size, speed, color, etc.) to the sound automatically
- In the Cockpit parameter panel, tap a purple chip (Mod) to bind a source 👇
bass / mid / treble / rms / strength / beatPulse / bpm - Example: bind "particle size" to bass → the particles pop bigger on the kick 🥁
- That replaces static visuals with ones that breathe with the music