Shadow Rack v0.5.0

Docs/Rack IEM

The in-ear engine

The in-ears are made by a separate program that keeps playing even if Shadow Rack quits or crashes. Here's how it works and what to watch out for.

Rack IEM Written for v0.5.0 6 min read Updated 5 October 2026

The in-ear mixes aren't made inside Shadow Rack's window but by a separate background program, the in-ear engine ("Shadow IEM Engine"). That's why the musicians keep hearing their mixes while Shadow Rack restarts. The IEM layer in the app just controls it.

A program of its own#

  • It has no window and no Dock icon, and lives inside Shadow Rack's app. It loads no plugins.
  • It plays each musician's mix to their output pair, at 48 kHz, through the rack's interface with the rack's buffer – and only on outputs the rack leaves free.
  • It adds no latency of its own. Every change – a fader, a source moved, a mode switched – goes through smoothly over 10 ms, so nothing clicks.
  • While the app isn't connected to it, the IEM layer shows "STARTING SHADOW IEM...". The app reconnects by itself and starts the engine again if it has to.

When it runs#

  • With Rack FX and Rack IEM, the engine starts the first time you open the IEM layer. From then on Shadow Rack starts it at every launch, even if nobody opens the IEM layer.
  • With Rack IEM alone, it starts with the app.
  • It does not stop when Shadow Rack quits or crashes: in-ear-only sources play on, rack channels go raw, phones keep working. It runs until you log out or restart the Mac. There is no button in the app to stop it.

When Shadow Rack crashes or restarts#

The engine doesn't notice anything except that the rack's processed sound stops arriving. Every rack channel in the in-ears switches at once to its raw input (see below), so nobody loses a channel – they just hear it without its plugins for a moment. When Shadow Rack is back, usually within seconds (see crash safety), it reconnects and the channels go back to POST.

Shadow Rack reopening the last session at start-up never touches the in-ears: the engine keeps its own scene, which may be newer than the one in the session.

POST and RAW#

For every rack channel in the in-ears, Shadow Rack hands the engine the channel's sound after its plugins. The engine picks it up one buffer plus 32 samples later. If it isn't there in time – the rack is late, stopped or gone – the engine plays that channel straight from its interface input instead, delayed by the same amount so the two line up. It stays on raw for at least half a second so it doesn't flap back and forth, then fades back to the processed sound over 10 ms.

You seeWhat the musician hears
POST (green)the channel after the rack's plugins
RAW (yellow)the channel straight from the interface, without its plugins
...the state isn't known yet

The chip is on the picked source on the MIX page, and the lamp on the channel's tile on the SOURCES page.

  • Raw means no EQ, no compression, no plugin gain. A vocal that leans on its chain will sound different, and possibly at a different level.
  • Only the first 64 rack channels get a POST feed. Any more are always heard raw.
  • The raw sound is lined up with the processed one for rack latencies up to about 128 ms.

When the engine itself crashes#

A small guard starts the engine again after 100 ms, with its whole scene: in a test the in-ears were back about a quarter of a second after the engine was force-quit. If it crashes more than five times in a minute, the guard waits five seconds between tries. Phones reconnect by themselves.

After an update#

The first launch after a Shadow Rack update finds the old engine still running. The app asks it to quit and starts the new one, so the in-ears drop out for about a second, once.

What's saved where#

WhatWhereWhen
The live in-ear scene: musicians, sources, places, levels, solos, outputs, modes, ROOM, phone keys~/Library/Application Support/Shadow Rack/IEM/Scene.json1 second after every change. Written whole or not at all, so a crash never leaves half a file
A copy of the in-ears in a sessionthe session fileon Session > Save, when there is at least one musician or source
Which layer and IEM page were openthe app's settingswhen changed
A phone's key and full-screen choiceon the phoneon the phone

The same folder holds Engine.log (start, stop and crash lines; at 1 MB it moves to Engine.old.log). See files.

Sessions#

  • Session > New clears the in-ears: no musicians, no sources.
  • Session > Open replaces the in-ears with the ones saved in the session. A session saved without in-ears leaves them empty.
  • Any change you make in the in-ears marks the session edited, so New and Open ask before throwing it away. Changes the musicians make on their phones don't mark it, but they are saved with the session like everything else.

No undo#

⌘Z undoes steps on the rack only. Changes in the in-ears – yours or the musicians' from their phones – can't be undone in this version. Save the session before big changes.

The read-outs#

In the IEM layer, CPU IEM, DROPS and LATENCY in the top bar are the engine's:

  • CPU IEM – how much of its time the engine uses. In our test, 37 sources into 8 musicians in 3D took about 7 % of one core; ROOM adds a little.
  • DROPS – dropouts of the engine's output since it started. Unlike in the FX layer, a click doesn't reset this count in this version.
  • LATENCY – OUT: the buffer plus the interface's output latency. IN: from the interface's inputs.

When it won't play#

The problem shows in red in IEM OUT and on the SOURCES page:

TextWhat to do
Shadow Rack has no audio interfaceChoose one in Setup > Audio
device runs at 44.1 kHz - the in-ear mixes need 48 kHzSet the interface to 48 kHz
device can't run at 48 kHzUse an interface that can
device isn't connectedCheck the interface's cable and power

Something wrong or out of date on this page? Tell us