-
Notifications
You must be signed in to change notification settings - Fork 0
First Run
The first thing AudioHub shows on macOS is not the main window. It is a full-window Permissions screen that has to be cleared before anything else appears. This page explains what it asks for, what each button does, and why one of the rows never turns green no matter what you do.
On Windows there is no gate — see Windows at the bottom.
The gate is shown when a required permission is both knowable and not granted. In practice exactly one row can satisfy that: Microphone. Local Network is never knowable (macOS offers no query API for it) and System Audio is not required, so neither of them can raise the gate on its own.
Two consequences that are easy to mistake for bugs:
- Nothing is remembered. There is no "you have seen this" flag on disk. The gate is re-probed on every launch, so if you revoke the microphone grant in System Settings, the gate comes back next time you start AudioHub.
- It does not close itself. Once the gate is up it stays up until you press Continue or Skip for now, even after the last grant lands. That is deliberate: pulling the screen away the instant you granted something would leave no chance to look at the optional rows.
The gate also waits for the local service. While the service is offline the connection overlay is shown instead — permissions cannot be probed without it — and the gate returns once the service is up.
Keyboard shortcuts are not active while the gate is on screen.
| Row | Required? | What AudioHub uses it for | Can AudioHub prompt for it? |
|---|---|---|---|
| Microphone | Required | Sharing this Mac's microphone with a paired host | Yes — a real macOS dialog |
| Local Network | Required | Finding other AudioHub hosts and streaming to them | No — see below |
| System Audio | Optional | Mode A's "send this machine's audio to the peer" direction | Yes — creating the audio tap is the prompt |
Each row carries a Required or Optional tag, a status tag (Granted /
Denied / Undetermined / Restricted / Unknown), and one action button. Optional
rows additionally get a Later button, which hides that row's buttons for the
rest of the session and marks the status … · Later. Required rows never get
Later — it would contradict the fact that they are holding the door shut.
Note that Microphone is required even if you never intend to share this machine's microphone. The gate does not know which mode you will pick.
| Button | What it does |
|---|---|
| Grant all | Walks the required rows that AudioHub can actually prompt for and requests each in turn. In this build that set is only ever the Microphone: Local Network cannot be requested and System Audio is not required. Greyed out when that set is empty. |
| Recheck | Re-probes every row without prompting for anything. Use it after changing something in System Settings. |
| Continue | Enters the app. Disabled while a required row is still blocking. |
| Skip for now | Enters the app anyway. Only visible while something is blocking. |
Grant all does not fail silently. When it finishes it reports either "All required permissions granted" or "Required permissions still missing: n (names)". A single row failing does not abort the rest of the walk.
Skip for now is not remembered either. The line under the button spells out what will break, the toast repeats it, and the gate is back on the next launch.
While a system dialog is open the hint line reads "Waiting for the system permission dialog… Select 'Allow' in the window that appears." The request can sit there for as long as you leave the dialog up; that is not a hang.
The Local Network row shows Unknown with the note "Status unavailable · macOS asks on first use; enable manually if denied", and its button says Check Settings rather than Grant. That is the normal reading, and it is not a defect in AudioHub.
macOS publishes no API to query the local-network grant and none to request it. There is nothing to read and nothing to ask, so AudioHub infers the only thing it can: it sends one mDNS query and watches for an answer. An answer proves the grant is in place, and the row then reads Granted for the rest of this run of the service.
Two things follow. The probe that fills the gate does not send that query, so the row starts at Unknown every time. And an answer requires something else on the network to be advertising — on a segment where nothing is, the row stays Unknown even though the grant is fine.
Because the status can be genuinely unknowable, the gate is built so this row can never block you — treating an unknowable row as a door latch would lock every user out permanently.
So the row is informational. macOS itself raises the local-network dialog the first time AudioHub actually touches the LAN, which happens after you are already in the app.
What it costs when the grant is missing is covered in Platform Notes — and the failure does not look like a permission error, which is why it is worth reading before you go hunting.
macOS asks once. If you answer Don't Allow, the application can never raise that dialog again — this is a system rule, not an AudioHub choice.
The row reacts accordingly: the status turns Denied, the note becomes "Denied. macOS will not show the prompt again, so enable it manually at: …", and the button changes from Grant to Open Settings. Pressing it opens the matching System Settings pane by deep link. Because a deep link can fail to open depending on the system and the webview, the written path is also shown in a toast, so you are never left without a route:
| Row | Path shown by the app |
|---|---|
| Microphone | System Settings → Privacy & Security → Microphone → Enable AudioHub |
| Local Network | System Settings → Privacy & Security → Local Network → Enable AudioHub |
| System Audio | System Settings → Privacy & Security → System Audio Recording → Enable AudioHub |
After flipping the switch in System Settings, come back and press Recheck.
A fourth status, Restricted, means a system policy — a configuration profile or Screen Time — is blocking the grant. AudioHub cannot request it and neither can you, from inside the app.
The System Audio row is about the Core Audio process tap, which needs macOS 14.2 or later. On 13.0–14.1 that tap does not exist, so:
- the row sits at Unknown and pressing Grant does not move it — there is no tap to create, so there is nothing to consent to;
- Mode A's system-audio capture still works on those versions, because AudioHub falls back to the ScreenCaptureKit backend;
- that backend is gated on the Screen Recording permission, not on system audio recording. It is a broader grant, and macOS re-asks for it periodically.
The Screen Recording prompt is not raised by the gate. It appears later, the first time you actually start sending this machine's audio to a peer in Mode A. Below macOS 13.0 there is no system-audio backend at all.
Which backend a Mac resolves to, and how to pick one by hand, is in Platform Notes.
Getting past the gate does not mean every row is green — Local Network and System Audio can never block it. So the first time you land in the main window, AudioHub opens the Permissions sheet once, showing the same rows with the same buttons, plus the line "Missing access disables the features that need it."
It opens automatically only when all of the following hold: you are in the desktop app (not the browser Web UI), the service is online and probed, the gate is not on screen, at least one row is not granted, and the set of not-granted rows differs from the set you last dismissed.
That last condition matters. AudioHub stores a signature of the not-granted set, not a "don't show again" flag. Closing the sheet records the current set as seen; if a permission is later revoked or a new one appears, the signature stops matching and the sheet comes back — which is exactly when it should.
You can open it at any time from Settings › General → Permissions → Open.
The row next to it summarises the count as n · m pending.
The sheet never opens by itself in the browser Web UI. Pressing Grant there would raise a system dialog on the machine running the service, and whoever clicked is usually not sitting at it.
There is no permission gate on Windows. The local service reports all three rows as granted with no authorisation needed, so nothing ever blocks and the Permissions sheet never opens by itself. The rows are still listed under Settings › General → Permissions.
What does stand between a fresh Windows install and working audio is elsewhere:
- SmartScreen, which blocks the unsigned installer — see Installation.
- The firewall rule, which the installer adds for Domain and Private networks only. A network Windows has classified as Public will not accept inbound connections from a peer.
- The driver, which the installer copies but deliberately does not install. Mode B stays opt-in — see Virtual Driver.
- Installation — getting past Gatekeeper and SmartScreen first
- Platform Notes — what each permission actually gates
- Virtual Driver — the separate, explicit driver install
- Discovery and Pairing — the next step after this one
- Troubleshooting — when a grant is present but audio is not
Start here
Using AudioHub
- Window and tray
- Operating Modes
- Virtual Driver
- Discovery and Pairing
- Peer detail page
- Share Protocols (Sharing tab)
- Web Access
How it behaves
Reference
- Settings Reference
- Platform Notes
- Firewall and network
- CLI Reference
- Versions and Compatibility
- Glossary
- Licenses and Attribution
Troubleshooting and removal
This wiki describes AudioHub 1.0.0.