← Latest releases

Older releases.

1.6.0

2026-09-19 · build 1123

Added

  • A Fade to Black button in the Program monitor's bottom-right corner, matching the frame-rate chip opposite it. It fades Program's picture, overlays included, and Master audio to black and silence over the Show's Fade duration, and holds there until you press it again, which fades back up to the same source. Preview and what is in Program don't change, so you can line up the next source while black. It can be mapped to a hotkey or Stream Deck key ("Fade Program to black, or back up"), and its key lights while Program is black. Hardware sends on Bus A and B keep playing.

  • A Dip transition beside Fade 1 and Fade 2 on the deck, with its own duration box: Program fades to black and then Preview comes up out of it, picture and Program-following sound together. The duration is saved with the Show (1000 ms to start with) and used by a hotkey, Stream Deck key or rule mapped to "Dip Preview to Program through black".

  • The Audio Mixer, the Replay panel and the live inputs (the input cards) can each be moved into a window of their own, for a second display, say, with the arrow button beside their titles; the same button in the window puts them back. Closing the mixer's or Replay's window puts it away; closing the live inputs' window puts them back. Which are out is saved with the Show, and where each window sits is remembered on each Mac. The toolbar buttons read Mixer window and Replay window while those are out and bring them to the front.

  • With the mixer out, the input cards take the whole row and Replay can open freely. With Replay out, the mixer and Replay can be open together.

  • With the live inputs out, the Audio Mixer opens by itself and takes the whole row, its strips gathered at the left, and Replay can open beside it. Put the live inputs back and the mixer returns to how you had it. With both the live inputs and the mixer out, Preview and Program take the height they leave.

  • A new X-Large card size for the input cards, above Large.

Changed

  • The input cards now sit under a Live inputs headline in the mixer's style, which holds the button that moves them into a window and the Card size control (moved down from the row of buttons above; the window has both).

  • The Audio Mixer has a titled header of its own, level with the live inputs' headline, so its strips are a little shorter than before.

  • The row of buttons above the input cards (Add Input, Input Rec, AutoDirector, Animations and the panel buttons) now sits on a slightly lighter strip.

  • A running Dip is reported as "Dip active" rather than "Fade active" in the Program renderer's status.

1.5.0

2026-09-18 · build 1106

Added

  • A source's zoom and position can now loop back and forth between a start and end framing, with a stopwatch icon beside the Size and position sliders: set current framing as the start or end, pick a duration, and turn the loop on. Motion eases smoothly rather than moving at a constant rate. A show-wide switch on the deck's bottom row turns every configured loop on or off at once, and dims and disables itself when no source has one set up.

  • Any Camera, Blackmagic, Media, or Image input can now use another input's audio instead of its own, from an "Audio Source" picker on the input's settings — one picker shared by every source kind, replacing the old Camera-only mechanism.

  • Blackmagic inputs can be set to None for audio, for a clean video-only feed that takes up no mixer strip.

Changed

  • The audio picker no longer offers "This Input's Own Audio" for sources that don't actually have one, such as a webcam.

  • The diagnostics settings explanation for the logging toggles no longer ends with the confusing "Kept for this Mac" fragment.

Removed

  • The old Camera-only "Paired audio" picker — audio pairing for a Camera input is now set from the same Audio Source picker every other input kind uses.

Fixed

  • Turning the show-wide Animations switch off now stops a looping source that's currently in Program, not only ones in Preview.

1.4.0

2026-09-18 · build 1076

Added

  • A T-bar between Preview and Program, for a hand-driven mix instead of a timed Fade: drag it, or hold ⌥ Option and scroll the mouse wheel, to hold anywhere between the two for a "both feeds on top of each other" effect. Nothing commits until you let go — release fully at Program to take it, fully at Preview to cancel, or anywhere between to hold that mix in place.

Changed

  • The command column above Preview/Program no longer shows the InterDirector logo and version number; the logo now sits at the toolbar's own leading edge instead, and the command column itself is vertically centered against the two monitors rather than pinned to the top.

  • The toolbar's Show settings button now reads "Show" next to its gear icon; the Show's name is no longer shown a second time beside it (it is already the window's own title).

  • Preview and Program now show a placeholder bar where the transport strip would go when there's nothing to show transport for, instead of empty space.

Fixed

  • A Media input's transport countdown, for a folder holding several files, now counts down the whole remaining playlist again instead of just the file currently playing.

1.3.0

2026-09-17 · build 1059

Changed

  • The Fade and Fade 2 duration boxes on the Preview/Program deck are wider, so a longer millisecond value no longer crowds the field. The first Fade button is now labelled Fade 1 to match Fade 2.

  • Cut/Fade 1/Fade 2 and the Overlay toggle/layer picker on the Preview/Program deck now sit in two clearly bordered groups instead of one long list, and the layer picker is a single 1-2-3-4 control instead of four separate buttons.

  • The Preview and Program tally now reads as a small badge in the corner of the picture instead of a bar across the top of it.

  • The playback buttons under each Preview/Program monitor look more like buttons and now line up evenly against both edges of their bar.

  • The Replay panel has a visual refresh: a real count badge on each bucket tab, clearer clip rows, and the Capture/Play Bucket/Play All/crossfade/ speed/overlay controls grouped into two labelled cards. The crossfade field is now labelled Crossfade instead of showing no label at all, and Capture is red to match Cut's "this records" color everywhere else.

  • Each Audio Mixer strip's level meter and gain fader are now one merged control instead of two separate thin elements side by side: the fader is a wider, translucent cap that sits directly on the meter and lets its color show through, replacing the old small round knob.

  • The Audio Mixer's level meters now show a yellow warning band before clipping, instead of jumping straight from green to red.

  • The Audio Mixer's strips no longer sit in individual bordered cards — just a thin separator between them — so more strips fit in the same width, and the Master/Bus strips are now the same width as the others instead of noticeably wider. The strip row is right-aligned in the panel instead of centered.

  • The Replay panel and Audio Mixer buttons now have icons, and "Replay" is now labelled "Replay panel". The auto director's rotation button is now labelled "AutoDirector" instead of "Auto".

  • The reading in the top-right of the Replay panel now shows the selected bucket's total clip duration instead of the live recording buffer's fill state (which is why it used to read a fixed "Holding 1:00" and never change). The buffer's own state is still shown in the top bar.

Fixed

  • Dragging the Preview/Program deck shorter could push its logo into the Cut/Fade controls below it. The logo is now always fully visible, and the deck can be dragged through its whole configured range again, with the Overlay card giving way before the Transition card if space runs out.

  • The deck's height divider can now be dragged while the Replay panel is open, matching how it already worked with the Audio Mixer.

1.2.0

2026-09-16 · build 1043

Added

  • A Show journal. InterDirector now keeps a running log of what a Show's inputs, switcher and outputs are doing — a source going offline or coming back, a Cut or a Fade, streaming and recording starting and stopping, automation rules firing — plus a reading of memory, CPU, GPU and thermal state every minute, for reconstructing what happened around a crash or an unexpected drop. Settings → Diagnostics → Logging → Show Journal opens the folder it writes to.

  • Input Rec. Live inputs — NDI, USB capture, Blackmagic and audio inputs — can each be recorded to a file of their own, for re-editing a show afterwards. Input Rec sits in the row that adds and sizes the source cards, beside the cards it records; arm them in the Input Recording window behind its gear, and the choice is saved with the Show. Pressing Input Rec starts them all together into one new folder, Inputs beside the Show unless you choose another. An input with a picture records a movie (HEVC or H.264) with its own sound; an input with sound alone records a WAV. Each is the input as it arrives — its own size and frame rate, before crop, colour, effects and gain — and lines up with the others in an edit. Program's Record button is unchanged. An armed input's card shows a record mark, red while recording, and the window warns when more inputs are armed than a Mac mini can encode alongside your other outputs. "Start or stop recording inputs" can be put on a key, a Stream Deck button (which lights while inputs record) or a rule. The Mac mini records two 50p camera inputs cleanly while streaming, replay and Program recording are all running.

Changed

  • A recording's button is amber only while it is still losing something. Before, one dropped frame or sound block left it amber for the rest of the show. What a recording has lost in total is in its window — for Program and for each input — and each input now says in the log the first time it loses pictures or sound.

  • Program recordings are MOV files with HEVC video and lossless audio. Sound is recorded as 24-bit PCM instead of AAC, so the recording's audio bitrate setting is gone. The picture is HEVC unless you choose H.264 in the Recording settings — choose it if your editing machine cannot open HEVC. Existing Shows keep their video bitrate and switch to HEVC. A recording cut short by a crash still plays up to its last second, as before. Audio the recorder misses for a moment is written as silence, so the sound after it stays in sync with the picture.

Fixed

  • Quitting or closing a Show while recording now finishes the recording file before it goes, and waits if you had already pressed Stop and the file was still closing. Before, the recording was left running and only played because it is written in one-second pieces.

  • Pressing Record and then Stop before any picture arrived no longer reports "The operation could not be completed" or leaves an empty file.

  • Replay video no longer lags or skips, most noticeable playing a bucket of several clips back to back, and worse on lighter hardware. Only the picture was ever affected — sound played correctly throughout. The picture and the clock that decided when to show it could drift apart under load, so a decoded frame occasionally went unshown; that is no longer possible.

  • Fixed a crash that could happen starting a replay bucket or an individual clip. InterDirector could quit unexpectedly right as playback began.

  • Adding a Replay input to a Show no longer leaves the Add button disabled. Choosing Replay in Add Input could leave Add permanently greyed out, with no way to add the input short of cancelling and starting over.

1.1.0

2026-09-15 · build 998

Added

  • Adding a new input now opens its settings and highlights its card in the multiview, so you can find and configure what you just added.

Changed

  • An NDI source connects as soon as its sender appears on the network, rather than when its next retry comes round. A source added by name alone whose sender is not on the network is now tried every two minutes instead of every thirty seconds.

  • Wording and layout are more consistent across Add Input, the Input Editor, the main window, the replay panel, outputs and Settings — clearer labels (for example "Camera" instead of "AVF"), consistent button capitalization, and correct singular/plural counts throughout.

Fixed

  • Dragging a card to reorder inputs no longer oscillates, drops one short of the first or last position, or leaves the dragged card stuck semi-transparent. The target card now shows a gradient toward whichever side the card will land on.

  • An NDI source whose sender came back on a different port connects on the first try. It used to dial the address saved in the Show every time, wait ten seconds for nobody, and try again. It now dials where NDI discovery says the sender is at the moment, and still uses the saved address when discovery cannot see the sender. The Show itself is not changed.

  • The Add Input sheet's Add button is only clickable when the screen is complete. It used to keep the previous screen's enabled state after Back — lit on the chooser, or on a form with nothing filled in, where clicking it did nothing.

1.0.4

2026-09-14 · build 974

Fixed

  • Checking for updates works again. In 1.0.3 it said "the updater failed to start". Install this version with the installer once; updates arrive by themselves again from here.

1.0.3

2026-09-14 · build 972

Changed

  • InterDirector looks for an update every time it starts, not only once a day, so a new version is offered as soon as you open it.

  • Update information is signed, and InterDirector ignores any that is not, so an update window can only ever come from Interwebbi.

1.0.2

2026-09-14 · build 968

The first version delivered through Check for Updates….

Added

  • About shows when InterDirector last checked for updates, with a Check Now button beside it.

1.0.1

2026-09-14 · build 965

The first version that updates itself. Install it with the installer; every version after it arrives through Check for Updates….

Added

  • NDI® attribution. The NDI source and output settings and Add Input carry NDI's trademark notice and a link to ndi.video, as the NDI SDK's licence asks; NDI is written NDI® where it is first named.

  • Check for Updates… in the InterDirector menu. InterDirector looks for a new version when it starts and once a day, and offers it — it never installs on its own, and it does not look while you are streaming, recording or sending NDI.

  • The Stream Deck plugin comes with InterDirector's updates. When InterDirector has a newer plugin than Stream Deck, it offers to restart Stream Deck and update it.

  • Acknowledgements in About. About now scrolls, and lists every third-party component InterDirector ships — FFmpeg, SRT, Mbed TLS, the NDI®, VST3 and Blackmagic DeckLink SDKs, and the overlay fonts — with its version, licence, website and trademark notice, and its full licence text a click away. FFmpeg, SRT and Mbed TLS also say where to download their source and how they were built.

1.0.0

2026-09-14 · build 953

The first release. Everything in it has been exercised by the operator on real shows and both machines, except where a line says otherwise.

Builds before this one carried the version 0.9. 1.0 was gated on production hardening rather than on any feature, and that hardening passed: the four-hour and sixteen-source soaks, the replay soak, the audio interface and Cam Link unplug tests, a stream server restarted mid-stream, an NDI sender's network lost and restored, and a show-length run on build 949 with streaming, recording, NDI and the external display on. Build 953 adds only a corrected log line for a camera recovering from lost signal.

Known limits, stated rather than left to be found: a VST3 plug-in that crashes takes the application with it, and one that hangs on a bus stops the mix output. Blackmagic devices are read when InterDirector starts, when Start is pressed on a Blackmagic source whose connector is missing, and on Refresh Devices — not automatically when a card is connected.

Added

  • A Show with an unfinished data source or stream destination saves. Closing Show Settings or Streaming tells you what is not finished and lets you go back to it. If a save does fail, the alert now says why.

  • A Show that breaks a rule still opens. Whatever could not be used is changed as little as possible — a value brought back into range, a device to choose again — and a list of every change, and of anything unfinished, appears as the Show opens. The file is unchanged until you save. A file that cannot be opened at all says why. Removing a data source that has anything filled in now asks first.

  • The installer says what else a Mac may need — Stream Deck first, then Blackmagic Desktop Video, the NDI HX Driver and your VST3 plug-ins, with download links — and refuses a Mac InterDirector cannot run on.

  • A missing NDI HX Driver is said where you add an NDI source, with where to get it.

  • Stream Deck installed after InterDirector gets the plugin anyway the next time InterDirector starts, with an offer to restart Stream Deck.

  • Google Sheets as a data source. Share the sheet as Anyone with the link, and paste the link as a data source's address. The first tab is read, as often as you set it to; an edit shows up within a couple of seconds.

  • Overlay images and image folders move with the show folder, so a Logo Stripe keeps its logos when the folder is copied to another place or Mac. A missing one is offered for relinking when the Show opens. A Show you already have converts when you save it once where its images are; one already moved asks for them once.

  • No blue focus rings round buttons and cards, even on a Mac set to keyboard navigation.

  • Add Input's Add button is at the top, beside Cancel, and is enabled once what you are adding has everything it needs.

  • Settings (⌘,) replaces Developer Controls. Audio has the Buffer — how long audio and video wait so live sources can arrive unevenly, 80 ms unless you change it — and the effects Rescan. Diagnostics shows, every three seconds, what the stream is doing: bitrate actually sent, frames dropped before and during encoding, audio dropped, and for each destination packets dropped by the network, reconnections and how far behind it is; plus Program and source status. How a picture of another shape sits on the canvas moved to Show Settings, under Sources.

  • InterDirector is always dark. Every window, panel, sheet and dialog is dark whatever your Mac is set to, so a Mac set to Light no longer lights up the control room. Web sources and HTML overlays are told the viewer prefers dark too: a page with its own dark style will show it, on every Mac.

  • SRT streaming destinations. Each destination now has a Protocol choice, RTMP or SRT, and shows only the fields that protocol uses, each labelled with an example of what goes in it. SRT streams from the same encoder as every other destination and holds up on a poor connection where RTMP stutters, because it resends what was lost within a latency you choose (1000 ms to start with) instead of stalling the whole stream behind it. An SRT destination has a Server (srt://server:port, or just server:port), a Stream ID — for MediaMTX that is publish: and the path — an optional Passphrase for encryption, and its Latency. Pasting a working address with ?streamid=… on the end switches the destination to SRT and moves the stream ID into its field for you. Switching the protocol back and forth while setting up loses nothing; only the chosen protocol's settings are saved. InterDirector connects out to the server; it cannot be the listener. Not yet exercised against a real server. A Show saved by this build opens only in builds that have it.

  • A custom image, or a folder of them, in an overlay. A package can declare an image parameter for one file, or an imageFolder parameter for every image in a folder, always in filename order. Pick either on the input's Settings tab, the same place every other overlay control lives — picked from your own disk, not copied into the package, so changing what is on disk changes what the overlay shows next time it is read. A folder is rescanned when the package loads or reloads, or you press the new "Refresh Images" button below the package row — it is not watched continuously. None of the built-in overlays use either yet — a logo stripe built on the folder kind is still to come — but a package you write or download can use both today.

  • An auto director. Build a rotation of sources, each with how long it stays and whether it is cut or faded to, and switch it on: it takes them in turn and loops. Beside the card-size control, with its rotation behind the icon next to it. Any take of your own turns it off, and a source with no picture loses its turn rather than going to air. An overlay you have taken stays up across every switch, so a live lower third over a rotation of cameras runs unattended.

  • Choose what an NDI input receives. The sender's full stream, its small preview stream, or sound alone — the last takes no picture at all, for a source you only want to hear. Set per input, on its Source tab. An input receiving sound only shows its meter rather than waiting for a picture that is not coming.

  • Loudness levelling for media inputs. Each file is measured once to EBU R128 and played at a fixed gain, rather than a rider guessing at it in real time. Measurements live in an InterDirector Cache folder beside the Show file; deleting the folder measures everything again.

  • Relinking. A Show is checked as it opens, and anything it cannot reach can be found again. Finding one file reconnects its whole folder. Reachable afterwards from Show settings for a file that goes during a show.

  • Duplicate Source from a card's context menu, keeping everything about the source except what must be unique — hotkeys and deck keys stay with the original.

  • Filtering in the source and action lists, in both the automation builder and Stream Deck and keyboard assignment.

  • A signed, notarised installer carrying the application and the Stream Deck plugin together.

  • Recording and replay folders paired with the Show: Recording and Replays beside the Show file, created when first needed.

  • Media paths relative to the Show's folder, so a show folder can be carried between machines and still find its media.

  • Five more colour controls — saturation, shadow level, highlight level, brightness and contrast — and a restart control on each input card.

  • Progress for the VST3 scan, naming the module being read, and a Rescan in Developer Controls that stops and restarts audio around itself.

  • Overlays that ship with InterDirector. Nine packages are built in — Lower Thirds with one, two and three lines, Fight Card Lower Thirds A and B, Scrolling Ticker, Rolling Credits, and Logo Scroller horizontal and vertical — and offered wherever a package is chosen, alongside choosing a folder of your own. A Show refers to a built-in overlay by name, so it stays portable between machines rather than pointing at one Mac's copy of the application.

Changed

  • Text fields start on the left and stay the width of their row. The Add Source sheets and several settings had text ranged right in their fields, and a long value made a field jump onto a line of its own while you typed. Now every text field fills the space beside its label and the text scrolls inside it.

  • The Add Source cards are smaller, with the name beside its icon, so every kind of source fits without scrolling.

  • Reload Package is beside Change… on an overlay's Package row.

  • Show files have InterDirector's icon in Finder. Finder may take a moment, or a restart of Finder, to replace the blank icon on files it has already shown.

  • Resize handles stay under the mouse. Dragging a corner now holds the opposite corner still and keeps the handle under the pointer, where it used to move half as far. Program updates when you let go of a drag; the preview in the editor follows as you drag.

  • Precise framing. Size & Position has a slider, a number and a reset for width, height, X, Y, rotation and each crop edge, beside the preview you can still drag in. The canvas sits inside a margin, so a layer up to about 140 % still shows its frame and corners. Width and height can be locked together with the lock between them. Program updates when you let go of a slider or a drag.

  • A source runs unless you stopped it. A source whose camera, sender or file is not there yet is tried again — a second later, then two, widening to thirty — for as long as the Show is open, and its card says it is retrying while it waits. What that ends: a heavy Show coming up with some of its overlays stopped, a newly added Composite arriving stopped, and a source left stopped after its settings were edited. Stopping one by hand is still absolute: it stays stopped, across a reload, until you start it again.

  • A misbehaving VST3 plug-in can no longer take the application down. A plug-in that throws while describing itself used to abort InterDirector outright — on startup while the catalogue was being scanned, or when one was loaded for use during a show. A plug-in that does this is now reported as an issue against that plug-in, and everything else carries on.

  • A polled data source no longer leaks a connection every time it polls. Each poll built a new URL session and dropped it, and a dropped session keeps its sockets until it is invalidated — so a feed read every few seconds left one behind every few seconds, for the length of a show. One session is now shared by every poll, which also keeps the connection to the endpoint open rather than building it again each time.

  • A stream that stops carrying sound says so. When Program audio stops reaching the stream's encoder it pads with silence — which is the right thing to do, and reports no error, so a silent stream looked exactly like a healthy one from the outside. The stream window now says silence is being sent, and the log says how much and how many blocks were refused. Nothing else is affected when this happens: the monitors, NDI output and the recording carry on, which is why it can go unnoticed.

  • A mixer strip meters what it is actually sending. It used to show the arriving level with the fader multiplied in, which meant an effect could silence a source while its strip went on showing a healthy signal — pull a plug-in's output down and the meter did not notice. It is now measured after the effects and after the fader. Input cards are unchanged: they still show what is arriving, which is the question a card answers.

  • Cameras and capture cards get the same clock correction network audio does. A card and a camera carry their own crystal, and theirs was never corrected: the slow drift between cameras and audio that a long broadcast accumulates was that, uncorrected. Their audio is now matched to this machine's clock continuously, the same way NDI's and a Core Audio device's already were.

  • No source can lose audio silently any more. A source whose timing drifts far enough is pulled back into place before the mixer would start discarding it, and says so in the log. It used to be possible for a source to sit in a band where its audio was thrown away and nothing thought anything was wrong.

  • The mix margin is yours to set, and it is remembered for this Mac. Developer Controls, top section: how far behind the moment the mix is rendered. Video is held by the same amount, so the two stay together and lowering it lowers the latency of the whole pipeline. Too low and a source crackles or falls silent — network audio needs far more of it than a card or a camera does. Kept on the machine rather than in the Show, because how much is needed depends on the machine and on what is plugged into it.

  • The mixer now renders behind the moment — 100 ms by default, which is every source's margin for arriving unevenly. Network audio arrives in bunches; cards and cameras arrive with their own small delays. That margin used to come from the mix timeline quietly sagging to meet whichever source was latest — the same behaviour that let one source silence Master — so replacing it with a stated buffer was part of the same repair. It is the latency that was already being paid, now on purpose.

  • Master's clock comes from the audio output, and from nothing else. It used to be set by whichever source happened to submit audio first, so one source whose timing had gone wrong could decide what time it was for the whole mixer — and every other source was then thrown away as late. Master fell silent with every input meter still moving, and only restarting the one offending source brought it back. A source can now lose its own audio; it cannot take anyone else's.

  • One source can no longer silence the whole mix. The mix timeline was anchored by whichever source submitted audio first, so a source whose clock had run away could anchor it ahead of the clock — where nothing was ever rendered and every other source was dropped as late against it. Master read zero while every input meter went on moving, and only restarting that one source brought it back. The timeline now recovers itself, and says in the log that it had to.

  • An NDI sender's clock is matched continuously instead of being corrected in jumps. A sender measured on a real show ran 73 parts per million slow, which is a quarter of a second an hour in one direction: enough to crackle after half an hour and to silence the input after an hour. Its audio is now stretched by the measured amount as it arrives — at most one frame in a thousand, which cannot be heard — rather than being shoved back into place every few minutes, which could: backwards it doubled the sound for an instant, forwards it left a gap.

  • An NDI input can be placed by arrival instead of by its sender's clock. On the Source tab, beside the stream choice. A source receiving sound alone now does this by default: there is no picture for the sender's timing to keep it in step with, so following that machine's clock was a risk taken for nothing. A source carrying video still follows its sender.

  • An NDI sender's clock no longer walks away from this machine's. A sender whose clock runs even slightly fast used to drift further out of place the longer it ran, until its audio crackled continuously — and, in the worst case, until Master fell silent with every input meter still moving. Stopping and starting that source was the only cure. The mapping is now pulled back whenever it has provably drifted, and each correction is logged with its rate.

  • Streaming destinations can be changed on air. Add one, remove one, or edit one that is switched off, all while streaming — so a platform falling over mid-event can be answered by pointing somewhere else rather than by going off air. A destination that is receiving still cannot be edited in place: switch it off, change it, switch it back on. One added while streaming arrives switched off, so nothing goes out before its address and key are in.

  • The version is on screen. The mark moved out of the toolbar corner, where it sat among the output controls, to between Preview and Program, with the version and build under it. Reporting a fault no longer means opening a window to find out which build is running.

  • A muted source's mixer strip fades back. Dimmed rather than hidden, so the strip that unmutes it is still where it was, but the strips actually carrying sound are the ones the eye lands on.

  • Input cards meter what is arriving, before the fader and before effects. Pulling a fader down used to make a source that was talking look like one that had gone quiet. The mixer still meters after the fader, which is the surface where that is the point.

  • A Show has one name: its file's. The header shows it, and what a recording is called and what NDI announces follow from it. Rename the file to rename the Show. There used to be a separate name inside the Show that nothing kept in step with the file, so the header and the title bar could disagree.

  • Developer Controls moved into the InterDirector menu; the operator window carries the application's mark where its button used to be.

  • Closing the Show window quits the application, and asks first.

  • One instance of the application runs at a time.

  • Text in settings fields starts on the left.

  • The startup window separates starting a Show from recovering one, and carries the full-colour lockup.

  • Stream keys travel with the Show. A Show carried to another machine can go out on it. The key is saved in the Show file, which means anyone who can open the Show can stream to those destinations — said where the key is entered. Existing Shows keep their keys from this machine's Keychain and move them into the file the next time they are saved.

  • Destinations can be switched on and off while streaming. An event's first half can go to a paywall and to YouTube and the rest of the night only to the paywall, without interrupting the destination that has to keep running. A destination that stays keeps its connection; one that arrives mid-stream gets a keyframe so its ingest can start decoding. Addresses, names and keys still need the stream stopped.

Fixed

  • Adjusting a Composite's colour no longer freezes it until the source is restarted.

  • Pressing Start on a Blackmagic source finds a card connected after the Show opened, such as an enclosure switched on late. It used to need Refresh Devices in the external output's settings.

  • The last thousands separators are gone. On a Mac set to a language that groups digits, a handful of labels still did: a source's delay range read "0–2 000 ms", the recording's canvas "1 920 × 1 080", and the stream's "sending 4 500" warning, as did dropped frames, data-source row counts, replay clip counts, audio device channels and the loudness and plug-in scan progress. They now read the same on every Mac.

  • Typing into a field no longer changes things as you type. Every field that sets something live — bitrates, names, durations, overlay text, a source's gain, position and crop, and the rest — now applies what you typed when you press Return or move to another field, and Escape puts the old value back. Before, each keystroke went live, and a half-typed number could be rejected and replaced while you were still typing it: deleting the first digits of a 5000 kbit/s bitrate to type 4500 snapped the field to its minimum. Fields with an Apply button apply only when Apply is pressed. Numbers you edit no longer show a thousands separator.

  • A rare crash when an audio device changed while an audio input or output was being torn down. Removing the device-change listener did not wait for a notification already being handled, and the state that notification reads was freed straight afterwards. Each listener now keeps that state alive for as long as it needs it.

  • Loudness matching applies from the first second. A media source set to match loudness played at its file's own level after opening a Show — or after being restarted — until a fader was moved, and only then jumped to the level it should have had. It now starts at the matched level. A file InterDirector has never measured still plays at its own level until its measurement finishes, as before.

  • The crash that took the Mini down hours into long runs. InterDirector checked for Blackmagic output hardware every ten seconds — even on a Show not using SDI output — and the source settings windows checked every time they were drawn. Each check made Blackmagic's driver open and close a connection to every connector, and every so often the system lost track of one being torn down and the application crashed, with nothing to show for it. Found by watching it happen with a debugger rather than by guessing. Devices are now read once and kept; a Refresh Devices button reads them again after you connect a card, which means a card plugged in while InterDirector is running appears when you press it rather than on its own.

  • A plug-in that crashes internally is switched off rather than restarted. An effect that failed was put back to work at the next reset whatever had gone wrong with it — including when it had crashed inside itself, which is the one case where nothing is known about the state it left behind. It is now switched off for the rest of the session, the card says which effect went, and removing and re-adding it, or reopening the Show, builds a fresh one. An effect that merely refused a moment of audio still comes back by itself, as before.

  • One bad source can no longer silence the whole mix. A source producing an impossibly large value overflowed the mix it joined, and the safeguard downstream could not tell the overflow from the healthy audio beside it, so it silenced both. Each source's contribution is now held to something a mix can hold before it is summed, so a source that goes wrong takes only itself down. Ordinary loud mixes are untouched — this is not a limiter.

  • Quitting waits for the stream to actually finish leaving. Stopping a stream reported itself done the moment it had asked its destinations to close, not when they had — and pressing Stop removed the stream from the list of things the application waits for before quitting. Quit in that gap and the sockets were still open when the process went. Both now hold until the destinations have really closed, with a two-second limit so a destination that will not close cannot hold the application open.

  • A data source refuses a runaway feed before it costs anything. The limits on how large a feed may be were checked after the expensive part had already happened: one enormous row was expanded in full before being told it was too big, a file that was nothing but a giant header row met no limit at all, and a local file was measured and then read by a separate call that ignored the measurement. All three are now bounded as the work happens, so an unreasonable feed is stopped rather than absorbed and then rejected.

  • A Blackmagic connector opens on the format it is actually receiving. The card reports the signal reaching it as capture opens, and that report was arriving fractionally before the connector considered itself started — so it was thrown away, and the connector stayed opened as 1080p50 until some later format change came along. With a camera that never changes format, none ever did. A 1080p30 source could therefore run the whole show on the wrong timing. It is now acted on whenever it arrives.

  • Changing your Mac's output device is noticed. With the audio output set to follow the system default, picking a different output in Sound Settings — or plugging in headphones — left the mix going to the device you had just stopped listening to. Nothing was watching for it: the set of devices had not changed, only which one the machine was using. It follows now, as it always said it would.

  • Removing an effect can no longer take the show down with it. Shutting a VST3 plug-in down means calling into somebody else's code, and that happened inside a destructor — the one place a fault cannot be caught, because an exception reaching a destructor ends the process outright instead of being handled. So a plug-in that misbehaved while being removed or replaced took the stream, the recording, the external picture and every healthy source with it. Shutting one down is now done somewhere the fault can be contained, and a plug-in that misbehaves on its way out is simply set aside and never used again for the rest of the session. Opening and closing a plug-in's own window is protected the same way.

  • Stopping a stream now finishes before it says it has. Stopping cancelled the timer and immediately flushed the encoder, which could overlap work still in progress — and an edit made a moment earlier could still open a connection after the stream had been declared stopped. Teardown now waits for the work in flight, and anything that arrives after a stop is ignored.

  • A copied source's effects actually run. Copying an input carried its effect chain into the Show but never built the plug-ins behind it, so the copy passed audio through dry and its effect editors reported the plug-in as unavailable. Copying is the only way to make an input that already has a chain — a new one starts empty — which is why this only ever showed up on a copy. The graph is now rebuilt when a copy is made, and handed to the mixer if audio is running.

  • Replay captures triggered by automation are bounded. The limit on how many clips could be written at once was enforced by the panel's button, so a rule firing on a burst of events started a capture for every one of them — each holding its own copy of the audio and its own writer while the show carried on. Three at a time now, whoever asks; beyond that a capture is refused and says so.

  • Your audio device comes back on its own after a failed reconnection. If reconnecting to the output device failed once — the device busy for a moment, say — nothing ever tried again, and the monitoring stayed silent until the engine was restarted, even though the stream, the recording and NDI carried on. It now keeps trying until the device is usable, and tells you once rather than every half second.

  • Plugging in an unrelated device no longer interrupts your audio. Any microphone or capture device appearing or disappearing used to silence the output until the application had checked that your chosen device was still there — a nominal half-second, longer when the interface was busy, for an event with nothing to do with audio output. It now checks whether the change could have affected your device before silencing anything, so it usually does not.

  • Fixed a crash when opening a Blackmagic source's settings. Asking whether Blackmagic hardware was present opened a fresh connection to the Desktop Video driver and closed it again, every single time — and closing the last one could pull the ground out from under the driver's own notifications, taking the application with it. This is the crash that had twice appeared during shows with nothing to explain it. One connection is now kept open for as long as the application runs.

  • Data feeds keep watching a file that is replaced or deleted. A file watched for changes was followed by name, so an editor that saves by writing a new file and renaming it over the old one left the watcher holding something nobody would ever write to again. The containing folder is watched as well now, which also means a file that does not exist yet is picked up when it appears.

  • A switch for logging what the audio is costing. Under Developer Controls: it writes how many cores' worth of work the desk is doing, how much of that is plug-ins, and the busiest single source — which is the number that predicts a dropout, since sources are processed in parallel now. Useful for deciding whether a Show's effects fit the machine. Off by default, because a line every ten seconds per source is noise during a show; the timing itself is always measured and costs nothing worth counting.

  • Effects on Master, Bus A and Bus B run at the same time. They are three independent chains and were processed one after another, so a Show using all three paid the sum of them. A Show with effects on only one — which is most — is unaffected and pays nothing for the change.

  • Audio threads now tell the system they share one deadline. Spreading the work across threads is only half of it: without this the system knows several threads are important but not that they are cooperating on the same moment, which is worst exactly when another application is competing for the machine. Every source's thread and the thread that mixes now join the audio device's own real-time group.

  • Microphone chains now run on separate cores instead of queueing behind each other. Every source's plug-in chain used to run on the one thread that also mixes and renders, so the whole desk's processing capacity was a single core however many the machine had. Measured against a real vocal chain, one microphone was using 44% of that core — two were at the edge, three saturated, and five were simply impossible, which is why a second machine running a DAW has been in the signal path. Each source now processes on its own thread. A chain that stalls costs its own microphone rather than silencing the desk.

  • A data source that returns far more than expected is refused instead of loaded. A CSV or JSON feed was read and expanded with no limit anywhere, so an endpoint answering with fifty thousand rows turned into a million values and a hundred megabytes inside the running application. Feeds are now bounded — 8 MB, 10,000 rows, 100,000 values, all far above any real scoreboard or start list — and one that exceeds a limit keeps the rows it already had and tells you why, rather than emptying itself. A file that is saved repeatedly, or a feed polled faster than it answers, no longer stacks up overlapping loads: one runs, one is remembered, and a superseded load now actually stops instead of finishing work nobody wanted.

  • Quitting no longer crashes when certain plug-ins are loaded. Some plug-in vendors crash inside their own shutdown code after the application has already closed everything down — nothing of yours is lost, but it produces a crash report every time you quit. There was already a workaround for one vendor; it is now applied to every plug-in, because the problem is third-party code with global state rather than any particular brand of it.

  • An NDI source that stops sending picture but keeps sending sound is now reported. This was invisible: the sound kept the source looking alive, so it never tried to reconnect, and its last frame simply stayed on Program looking like a camera that was working. The log now says which source has gone quiet and for how long. Audio-only NDI senders are unaffected — they are never accused of losing a picture they never had.

  • A stream that has stopped sending picture or sound now says so. The streaming status only ever noticed an encoder rejecting something. If the picture simply stopped arriving, or the audio encoder failed over and over, nothing was rejected and nothing was counted — and because either one alone keeps a destination connected, the stream stayed green while viewers had a frozen picture or silence. Both are now watched by the clock as well: several seconds with nothing encoded reads as strained, and the wording says whether the encoder is failing or nothing is reaching it, because those are different problems.

  • Stopping or re-plugging a Blackmagic input is safe while it is running. Stopping a connector cleared the handlers the card's own thread was reading at that moment, and a detected format change ran its restart from that same thread with nothing keeping it clear of a stop — either could corrupt memory and take the whole application down, from something as ordinary as removing a source. Start, stop and format restarts now happen one at a time, a restart that arrives after a stop does nothing, and a connector is quiet before its handlers are let go. A format restart that fails is also reported instead of leaving the input looking healthy with a frozen picture.

  • An image transition's picture can no longer change underneath the frame that was accepted. The same fault as the Composite one below, and the same fix seen from the other side: transitions are mixed by a GPU kernel that needs somewhere of its own to write, so that stays as working space and what gets published is a copy nobody else can rewrite.

  • A Composite's picture can no longer change underneath the frame that was accepted. A Composite published its rendered frames from a fixed set of four, reusing each one four frames later whether or not something was still reading it — so a reader held up by a busy moment could find the picture it had accepted replaced by a newer one, on air. Each frame now gets its own surface, handed back only when everything has finished with it, and if a Composite's readers have not let go it drops its own frame and says so rather than overwriting one in use. Image transitions still work the old way; that is a separate change with its own check.

  • A destination added at the moment streaming starts is no longer silently left out. Adding or removing a destination in the first instant of a broadcast could land between two steps of the encoder announcing itself, and the new destination would then sit there unopened until something else changed the configuration. It now opens exactly once whichever way the two land.

  • One stalled output can no longer freeze the picture on all the others. Every output is handed the same Program frame, and that frame only returns to the shared supply once everyone has finished with it. An output running at canvas size used to skip its own copy and pass that shared frame straight to its encoder, which holds it for as long as it likes — so one slow encoder could drain the supply and leave the stream, the recording, the external display, NDI and your own Program monitor all without a fresh picture. Outputs now always copy into their own buffer first, so an encoder that falls behind stalls only itself. The shared supply is also sized from how many outputs are actually attached rather than a fixed number chosen when there were fewer of them — with a stream, a recording, NDI, an external display, a monitor and replay all running, the old fixed size could be exceeded before any encoder held anything at all.

  • Camera and NDI delivery is no longer the lowest-priority work in the application. The threads every NDI and every camera frame arrives on told the scheduler nothing about themselves, which on Apple Silicon means they could be put on the efficiency cores while less important work ran on the fast ones. They now declare what they are. This should matter most when the machine is busy with something else.

  • Source clock correction actually runs now. Every camera, card and NDI sender has its own crystal, and none of them is at exactly 48 kHz — one measured on a real show was 73 parts per million slow, which is a quarter of a second an hour in one direction. Correcting that continuously is inaudible; letting it build until the timeline has to be yanked back is not, and that is what was happening: the correction was measuring a timeline the application had itself constructed at the nominal rate, so it always concluded the sender was perfect and never corrected anything. It now measures against this machine's own clock, and the corrected block length and the position it is placed at are decided together, so they cannot disagree. Long shows should drift less and re-anchor less.

  • Unplugging your speakers no longer takes the audio off the broadcast. When the output device changed or came back under a new identity, the whole mixer was rebuilt — and the mixer is what feeds the stream, the recording, replay and every NDI send, none of which have anything to do with the interface you monitor on. All of them lost their audio while the hardware was rebuilt, and if that rebuild failed they stayed silent indefinitely. Only the hardware is replaced now. The mix, its plug-ins and their state are left running, so a change of speaker no longer rebuilds your effect chain, and if the device cannot be opened the broadcast keeps its audio while the application waits for the device to come back. This matches the report of the stream losing its sound while the physical outputs kept playing. Needs a hardware test before it can be called confirmed.

  • A slow video encoder can no longer stop the stream's audio. The stream worker drained video until the queue was empty, and Program refills that queue from another thread as fast as it drains — so an encoder that could not keep up held the worker inside video for ever, and nothing else it does ever ran again: not audio, not the bitrate adjustment, not adding a destination, not stopping. This matches the shape of the stream that kept publishing while losing its sound. Each turn now takes only the frames that were waiting when it began, and audio is encoded between video frames rather than after all of them, so the longest a viewer can go without audio is one frame's encode. If the encoder cannot keep up, the picture sheds frames and stays current, which it already did. The recording drains the same way and had the same fault, so it is fixed with it.

  • A misbehaving plug-in reports a failure instead of ending the show. A VST3 effect that threw from its processing, its reset or while its state was being saved ended the application outright, because that kind of failure cannot be caught by the code that called it. The calls a running show makes are now guarded the way the plug-in scan already was: the effect is marked failed and bypassed, the rest of the chain carries on, and the log names what the plug-in was doing. An effect that keeps failing stays bypassed rather than being reset behind your back.

  • A corrupt media file can no longer end the application. A decoder reading a damaged header can report a playback time billions of years long. That number is finite, which was the only thing checked, and converting it to a deadline ended the application outright — taking the stream, the recording, the external picture and every healthy source with it. Timestamps that cannot be placed on the clock, and ones so distant that waiting for them would be indistinguishable from hanging, are now skipped: one frame of an already broken file is lost and the show carries on. The same checked conversion is used by replay and by the stream's own timestamps.

  • A source declaring a nonsense sample rate is refused instead of believed. The rate a source announces was taken at face value and used to reserve storage before anything could reject it, so a network source claiming a rate of 1 Hz could ask for a gigabyte and a half from a packet carrying a single sample — on the queue every other source and the mix wait on. Rates outside 8 kHz to 384 kHz are now refused where they arrive, as is a source more than six times below the Show's own rate, which is more than the mix timeline is built to hold. Ordinary content is unaffected, including older 22.05 kHz media. A Show file's own sample rate is bounded the same way.

  • A single bad sample can no longer silence a mix or end the show. Audio that is not a number — a NaN or an infinity, which a sender, a driver or a plug-in can produce — used to spread rather than stay put: added into a mix it took every healthy source in that mix silent with it, and no later stage could undo it. Sent to an SDI card it was worse, because converting it for the card ended the application outright and took the stream, the recording and the external picture with it. Such samples are now replaced with silence where they arrive, again after a source's own effects, and again after the mix effects, and the log names the inputs involved. Not yet exercised on a real show: nothing in production is known to have produced one.

  • The credits roll costs a fraction of what it did. A long roll was being re-photographed twice a second — a picture that cannot change, at eight times the size of the canvas — which took about twenty points of CPU on a Mac mini and put a regular hitch into Program, visible in recordings. A scrolling overlay is now photographed when it loads, when its text changes, and at no other time. Editing the credits still updates the picture straight away.

  • A Web input showing video plays at full rate again. A page whose motion was a background video — rather than something moving in the page itself — was photographed only about ten times a second, and jumped back to normal for as long as any animation on the page happened to run. Web inputs are now photographed on the frame rate set on the input, whatever the page is doing, and that setting is the lever if one costs more than you want to give it. The saving it used to share with Overlays now applies to Overlays alone, where the page is a package and what it does is known. A Web input showing nothing is still not photographed at all.

  • A compacted card meters whatever has sound. An NDI source carrying only audio showed nothing at all once its card was collapsed, while an audio input beside it metered normally.

  • Refreshing NDI sources finds them the first time. Each refresh used to start looking from nothing and give up after a second, so a sender that was plainly running often needed several attempts. The search now runs for as long as the application does and answers from what it has already heard.

  • Replay sound is clean. Playing a bucket crackled through every crossfade, and quieter ticks ran through the rest of it. A clip's sound is now mixed with the one it is dissolving into before either reaches the mixer, the way the picture already was, and each clip's audio is laid down exactly end to end. The clips on disk were never affected — only what you heard when they played.

  • The installer replaces the application it finds. It compared version numbers and quietly declined to go backwards, so a machine that had once been given a build claiming version 1 kept it: every installer after that reported success and installed nothing, and the Show would not open there because the application was months of work out of date.

  • A corrected camera keeps its colour inside a Composite. With two or more corrected sources layered, the one drawn first took a flat colour cast from the one above it — visible as soon as the second source started, and gone again when it stopped. Reordering the layers moved the fault rather than fixing it. Tone and grading caused it; white balance alone did not.

  • File ▸ New Show closes the Show that is open and starts an empty one. It did nothing at all. It asks first, the same way closing does — and unlike closing, it does not quit the application.

  • Development builds report their build number instead of build 1, so a development bundle installed over a signed one is obvious rather than looking like a version bug.

  • Choose Images… when adding an image input opens the file chooser. It did nothing at all; only Choose Folder… worked.

  • A source that lost signal now says when it comes back. The log recorded a capture being rebuilt but never recorded it recovering, so a source that was in fact fine after a moment read as one stuck in a restart loop. A stall also reports how long it lasted, which is what tells a cable or a hub apart from a camera.

  • The audio output no longer follows an unplugged interface to the Mac's own speaker. It waits, in silence, for the device the operator chose.

  • Overlays are captured at the rate and size something is actually watching, and a page that has not moved is not photographed at all. Measured on a six-overlay Show: roughly 320% CPU to 52%.

  • AVFoundation capture recovers by itself after a source resets its HDMI output.

  • Program no longer brightened every frame relative to the source.

Waitlist

Join the waitlist

Leave your name and email and we'll write once, when InterDirector is out.