Is there an existing issue for this?
Is your issue described in the documentation?
Is your issue present in the latest beta/pre-release?
This issue is present in the latest pre-release
Describe the Bug
When Sunshine.app is launched as a standalone application (double-click) on macOS, audio does NOT stream to Moonlight clients, even though all permissions are granted. However, when launched from terminal (/Applications/Sunshine.app/Contents/MacOS/Sunshine), audio works perfectly.
Expected Behavior
When Sunshine.app is launched as a standalone application (double-click) on macOS, it should:
When I double-click Sunshine.app to launch it, I expect Sunshine to automatically pop up a system dialog requesting microphone permission (just like it does for screen recording permission). After I click Allow, audio should stream to Moonlight clients normally, exactly the same way it does when I launch Sunshine from the terminal.
Additional Context
Environment:
macOS Version: 14.5 (23F79) - also reproducible on 15.0
Architecture: ARM64 (Apple Silicon M1 Pro)
BlackHole version: 0.6.1
Sunshine version: 2026.415.34134
What I have tried:
Granted all permissions manually in System Settings (Screen Recording, Microphone, Audio Capture) - no effect
Reinstalled BlackHole and rebooted macOS - no effect
Reinstalled Sunshine - no effect
Launched Sunshine via terminal (/Applications/Sunshine.app/Contents/MacOS/Sunshine) - audio works perfectly
Launched Sunshine by double-clicking Sunshine.app - no audio
The issue is not about missing permissions. The issue is that Sunshine.app never requests microphone permission at runtime, causing audio capture to silently fail when run as a standalone application.
Host Operating System
macOS
Operating System Version
macOS Tahoe 26.5 (25F71)
Architecture
arm64/aarch64
Package
macOS - dmg
GPU Type
Apple Silicon
GPU Model
Apple M2 Max
GPU Driver/Mesa Version
metal 4
Capture Method
AVCaptureScreen (macOS)
Apps
{
"env": {
"PATH": "$(PATH):$(HOME)/.local/bin"
},
"apps": [
{
"name": "Desktop",
"image-path": "desktop.png"
},
{
"name": "Steam Big Picture",
"detached": [
"open steam://open/bigpicture"
],
"prep-cmd": [
{
"do": "",
"undo": "open steam://close/bigpicture"
}
],
"image-path": "steam.png"
}
]
}
Log output
[2026-06-06 22:25:59.498]: Info: Sunshine version: 2026.415.34134 commit: a16c070a8feb509a55a434393690cf76447e9423
[2026-06-06 22:25:59.498]: Info: Package Publisher: LizardByte
[2026-06-06 22:25:59.498]: Info: Publisher Website: https://app.lizardbyte.dev
[2026-06-06 22:25:59.498]: Info: Get support: https://app.lizardbyte.dev/support
[2026-06-06 22:25:59.498]: Info: config: 'av1_mode' = 1
[2026-06-06 22:25:59.498]: Info: config: 'stream_audio' = true
[2026-06-06 22:25:59.498]: Info: config: 'hevc_mode' = 1
[2026-06-06 22:25:59.498]: Info: config: 'locale' = zh
[2026-06-06 22:25:59.498]: Info: config: 'encoder' = software
[2026-06-06 22:25:59.498]: Info: config: 'audio_sink' = BlackHole 2ch
[2026-06-06 22:25:59.498]: Info: config: 'address_family' = both
[2026-06-06 22:25:59.498]: Info: config: 'min_threads' = 6
[2026-06-06 22:25:59.523]: Warning: No gamepad input is available
[2026-06-06 22:25:59.523]: Info: Trying encoder [software]
[2026-06-06 22:25:59.534]: Info: Detecting displays
[2026-06-06 22:25:59.534]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:25:59.534]: Info: Configuring selected display (2) to stream
[2026-06-06 22:25:59.538]: Info: Creating encoder [libx264]
[2026-06-06 22:25:59.538]: Info: Color coding: SDR (Rec. 601)
[2026-06-06 22:25:59.538]: Info: Color depth: 8-bit
[2026-06-06 22:25:59.538]: Info: Color range: JPEG
[2026-06-06 22:25:59.538]: Info: Streaming bitrate is 1000000
[2026-06-06 22:25:59.539]: Info: [libx264 @ 0x14165f270] using cpu capabilities: ARMv8 NEON DotProd I8MM
[2026-06-06 22:25:59.539]: Info: [libx264 @ 0x14165f270] profile High, level 4.2, 4:2:0, 8-bit
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] frame I:1 Avg QP:51.00 size: 1279
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] mb I I16..4: 100.0% 0.0% 0.0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] 8x8 transform intra:0.0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] coded y,uvDC,uvAC intra: 0.0% 0.0% 0.0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] i16 v,h,dc,p: 91% 0% 9% 0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] i8c dc,h,v,p: 100% 0% 0% 0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] kb/s:613.92
[2026-06-06 22:25:59.674]: Info: Creating encoder [libx264]
[2026-06-06 22:25:59.674]: Info: Color coding: SDR (Rec. 601)
[2026-06-06 22:25:59.674]: Info: Color depth: 8-bit
[2026-06-06 22:25:59.674]: Info: Color range: JPEG
[2026-06-06 22:25:59.674]: Error: Unsupported Pixel Format.
[2026-06-06 22:25:59.674]: Info: Detecting displays
[2026-06-06 22:25:59.674]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:25:59.674]: Info: Configuring selected display (2) to stream
[2026-06-06 22:25:59.674]: Info: // Testing for available encoders, this may generate errors. You can safely ignore those errors. //
[2026-06-06 22:25:59.674]: Info:
[2026-06-06 22:25:59.674]: Info: // Ignore any errors mentioned above, they are not relevant. //
[2026-06-06 22:25:59.674]: Info:
[2026-06-06 22:25:59.674]: Info: Found H.264 encoder: libx264 [software]
[2026-06-06 22:25:59.675]: Info: Starting system tray
[2026-06-06 22:25:59.676]: Info: Configuration UI available at [https://localhost:47990]
[2026-06-06 22:25:59.704]: Info: System tray created
[2026-06-06 22:25:59.704]: Info: Starting main loop
[2026-06-06 22:26:00.391]: Info: Successfully registered DNS service.
[2026-06-06 22:26:18.659]: Info: Trying encoder [software]
[2026-06-06 22:26:18.659]: Info: Detecting displays
[2026-06-06 22:26:18.659]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:26:18.659]: Info: Configuring selected display (2) to stream
[2026-06-06 22:26:18.659]: Info: Creating encoder [libx264]
[2026-06-06 22:26:18.659]: Info: Color coding: SDR (Rec. 601)
[2026-06-06 22:26:18.659]: Info: Color depth: 8-bit
[2026-06-06 22:26:18.659]: Info: Color range: JPEG
[2026-06-06 22:26:18.659]: Info: Streaming bitrate is 1000000
[2026-06-06 22:26:18.660]: Info: [libx264 @ 0x131a06580] using cpu capabilities: ARMv8 NEON DotProd I8MM
[2026-06-06 22:26:18.661]: Info: [libx264 @ 0x131a06580] profile High, level 4.2, 4:2:0, 8-bit
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] frame I:1 Avg QP:51.00 size: 1279
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] mb I I16..4: 100.0% 0.0% 0.0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] 8x8 transform intra:0.0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] coded y,uvDC,uvAC intra: 0.0% 0.0% 0.0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] i16 v,h,dc,p: 91% 0% 9% 0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] i8c dc,h,v,p: 100% 0% 0% 0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] kb/s:613.92
[2026-06-06 22:26:18.757]: Info: Creating encoder [libx264]
[2026-06-06 22:26:18.757]: Info: Color coding: SDR (Rec. 601)
[2026-06-06 22:26:18.757]: Info: Color depth: 8-bit
[2026-06-06 22:26:18.757]: Info: Color range: JPEG
[2026-06-06 22:26:18.757]: Error: Unsupported Pixel Format.
[2026-06-06 22:26:18.757]: Info: Detecting displays
[2026-06-06 22:26:18.757]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:26:18.757]: Info: Configuring selected display (2) to stream
[2026-06-06 22:26:18.757]: Info: // Testing for available encoders, this may generate errors. You can safely ignore those errors. //
[2026-06-06 22:26:18.757]: Info:
[2026-06-06 22:26:18.757]: Info: // Ignore any errors mentioned above, they are not relevant. //
[2026-06-06 22:26:18.757]: Info:
[2026-06-06 22:26:18.757]: Info: Found H.264 encoder: libx264 [software]
[2026-06-06 22:26:18.757]: Info: Executing [Desktop]
[2026-06-06 22:26:18.835]: Info: New streaming session started [active sessions: 1]
[2026-06-06 22:26:18.835]: Info: ::ffff:192.168.11.15: Ping Timeout
[2026-06-06 22:26:18.866]: Info: CLIENT CONNECTED
[2026-06-06 22:26:18.932]: Info: Detecting displays
[2026-06-06 22:26:18.932]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:26:18.932]: Info: Configuring selected display (2) to stream
[2026-06-06 22:26:18.932]: Info: Creating encoder [libx264]
[2026-06-06 22:26:18.933]: Info: Color coding: SDR (Rec. 709)
[2026-06-06 22:26:18.933]: Info: Color depth: 8-bit
[2026-06-06 22:26:18.933]: Info: Color range: MPEG
[2026-06-06 22:26:18.933]: Info: Streaming bitrate is 30988000
[2026-06-06 22:26:18.934]: Info: [libx264 @ 0x131a05e70] using cpu capabilities: ARMv8 NEON DotProd I8MM
[2026-06-06 22:26:18.934]: Info: [libx264 @ 0x131a05e70] profile High, level 5.2, 4:2:0, 8-bit
[2026-06-06 22:26:18.943]: Info: Minimum FPS target set to ~15fps (66.6667ms)
[2026-06-06 22:26:19.309]: Warning: audio_control_t::set_sink() unimplemented: BlackHole 2ch
[2026-06-06 22:26:19.309]: Info: Using configured audio sink BlackHole 2ch for capture.
[2026-06-06 22:26:19.371]: Info: Found microphone: BlackHole 2ch
[2026-06-06 22:26:19.371]: Info: Setting up microphone: BlackHole 2ch with 48000Hz, 240 frames, 2 channels
[2026-06-06 22:26:19.610]: Info: Audio capture session started successfully
[2026-06-06 22:26:19.611]: Info: Opus initialized: 48 kHz, 2 channels, 512 kbps (total), LOWDELAY
[2026-06-06 22:27:29.607]: Info: CLIENT DISCONNECTED
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] frame I:2 Avg QP:34.49 size:178153
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] frame P:2120 Avg QP:14.79 size: 50888
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] mb I I16..4: 38.6% 53.4% 8.0%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] mb P I16..4: 1.3% 2.2% 0.7% P16..4: 12.1% 0.0% 0.0% 0.0% 0.0% skip:83.7%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] 8x8 transform intra:52.5% inter:34.2%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] coded y,uvDC,uvAC intra: 50.4% 48.1% 23.2% inter: 5.1% 4.7% 1.3%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] i16 v,h,dc,p: 44% 34% 10% 13%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 13% 26% 20% 4% 7% 5% 9% 5% 10%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 30% 15% 4% 8% 5% 7% 4% 8%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] i8c dc,h,v,p: 45% 27% 19% 9%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] Weighted P-Frames: Y:0.5% UV:0.0%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] kb/s:24483.95
[2026-06-06 22:27:29.638]: Warning: audio_control_t::set_sink() unimplemented: BlackHole 2ch
Online logs
No response
Is there an existing issue for this?
Is your issue described in the documentation?
Is your issue present in the latest beta/pre-release?
This issue is present in the latest pre-release
Describe the Bug
When Sunshine.app is launched as a standalone application (double-click) on macOS, audio does NOT stream to Moonlight clients, even though all permissions are granted. However, when launched from terminal (/Applications/Sunshine.app/Contents/MacOS/Sunshine), audio works perfectly.
Expected Behavior
When Sunshine.app is launched as a standalone application (double-click) on macOS, it should:
When I double-click Sunshine.app to launch it, I expect Sunshine to automatically pop up a system dialog requesting microphone permission (just like it does for screen recording permission). After I click Allow, audio should stream to Moonlight clients normally, exactly the same way it does when I launch Sunshine from the terminal.
Additional Context
Environment:
macOS Version: 14.5 (23F79) - also reproducible on 15.0
Architecture: ARM64 (Apple Silicon M1 Pro)
BlackHole version: 0.6.1
Sunshine version: 2026.415.34134
What I have tried:
Granted all permissions manually in System Settings (Screen Recording, Microphone, Audio Capture) - no effect
Reinstalled BlackHole and rebooted macOS - no effect
Reinstalled Sunshine - no effect
Launched Sunshine via terminal (/Applications/Sunshine.app/Contents/MacOS/Sunshine) - audio works perfectly
Launched Sunshine by double-clicking Sunshine.app - no audio
The issue is not about missing permissions. The issue is that Sunshine.app never requests microphone permission at runtime, causing audio capture to silently fail when run as a standalone application.
Host Operating System
macOS
Operating System Version
macOS Tahoe 26.5 (25F71)
Architecture
arm64/aarch64
Package
macOS - dmg
GPU Type
Apple Silicon
GPU Model
Apple M2 Max
GPU Driver/Mesa Version
metal 4
Capture Method
AVCaptureScreen (macOS)
Apps
{ "env": { "PATH": "$(PATH):$(HOME)/.local/bin" }, "apps": [ { "name": "Desktop", "image-path": "desktop.png" }, { "name": "Steam Big Picture", "detached": [ "open steam://open/bigpicture" ], "prep-cmd": [ { "do": "", "undo": "open steam://close/bigpicture" } ], "image-path": "steam.png" } ] }Log output
Online logs
No response