I need to start with some disclaimers. What I’m about to describe works on a Mac M1 mini with the current release of JamKazam (as of 12 March 2022). It uses about 50% of CPU, so you’ll have to judge for yourself whether your Mac has enough oomph to get the job done. It is also impossible to know how or if JamKazam will change its video subsystem in the future. The audio-routing hack also depends on having an audio interface that makes the output of the JamKazam session available on an analog output (I use a Zoom U44).

By way of background, I do live electro-music streamcasts that are typically collaborative improvs with one or more other musicians who participate via JamKazam. The visuals that accompany these improvs are a layered mixture of live video of each performer (provided via JamKazam), music-responsive motion graphics using a visualizer like SoundSpectrum G-Force or Project MilkSyphon, and a “show reel” of somewhat arbitrary images, often strung-together excerpts from experimental films. Here’s an example.

JamKazam (JK) is fairly rude when it comes to its interactions with a Mac — no doubt the result of its need to reduce latency wherever and whenever possible. In particular, it takes over audio routing aggressively, and for some reason its video system creates windows that are not available to OBS’ window-capture capability.

If I want to run the audio from a JamKazam session to a music visualizer like ProjectMilkdrop, or for that matter to OBS itself, I have to find a way to route the audio output of the JamKazam session. No method that I’ve tried using the Mac’s own routing capabilities has worked (aggregate devices, multi-output setups, Blackhole, any of the other add-on routing solutions). It’s possible that Loopback would work — the closely-related audio-routing program Audio Hijack can route JK output to an Icecast setup, for example — but I didn’t feel like spending the hundred bucks. What I ended up doing was simple — taking the analog output from the return side of my Zoom U-44 interface and sending it back into the Mac using an inexpensive Behringer UCA-202 USB interface I had laying around. The quality is just fine for streamcasting. [ UPDATE: It turns out that Loopback does indeed work for routing JK output to other software running on the same machine]

As for capturing the video output of JamKazam… well, it’s just kinda weird. The JK video window does not appear in the list of windows available for capture in OBS (even if you check the box for anonymous windows). And if you send the JK video window to a second display, that display does not show up in OBS’ list for potential display captures, either. As it turns out, though, if you add the display capture to OBS before starting JK’s video system in your session, you can capture the display and it will work in OBS.

No idea why any of this happens, but if you want to send JK’s output to an OBS setup running on the same machine, you’re going to need a second display, an audio interface that has a stereo analog output on the return side, and a second USB interface. Honestly, it would be a lot better if JamKazam would behave itself, but we got what we got.

X