From 59cdb26e93047b0187722ae35d769c2961b28dab Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Fri, 6 Nov 2026 17:01:28 -0800 Subject: [PATCH 1/4] chore(quest): claim quest/m0/app-macos.md Quest-Claim: 53dab5bdac72e75f From d9ac03fe0ae8d378c6498f252521ce3982c803d4 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Fri, 6 Nov 2026 17:47:13 -0800 Subject: [PATCH 2/4] quest(m0/app-macos): record what the Mac capture run found and waits on Co-Authored-By: Claude Opus 5.5 --- quest/m0/app-macos.md | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/quest/m0/app-macos.md b/quest/m0/app-macos.md index 38a83ee5..3c7dcdd4 100644 --- a/quest/m0/app-macos.md +++ b/quest/m0/app-macos.md @@ -8,16 +8,31 @@ system audio sources reaching preview, program, and the published broadcast, and the Devices panel listing and adding each. The build, `just ci`, the window, compositing on Metal, and publishing through -VideoToolbox already run on an Apple Silicon Mac. Capture has not. +VideoToolbox already run on an Apple Silicon Mac. So does the microphone: its +sound reaches the published broadcast (2026-11-06, MacBook Air). ## Plan - The studio is not an app bundle, so the prompts and grants belong to the app - that launched it. Granted 2026-11-06 (maintainer, /quest-unblock): T3 Code - holds Camera, Microphone, and Screen & System Audio Recording, so an agent - it launches captures without a prompt. A run that still meets a permission - error stops and asks the maintainer rather than working around it. + that launched it: T3 Code holds Camera, Microphone, and Screen & System Audio + Recording. A run that still meets a permission error stops and asks the + maintainer rather than working around it. +- Check a run from the broadcast, not only the window: record it from a local + relay with `moq export mp4` and pull frames and loudness with ffmpeg. +- The built-in camera fails in the studio with `cannot download pixel format + 0x32767579; expected NV12`: AVFoundation capture never asks for NV12, so the + camera delivers its native `2vuy`, which the Metal import refuses and the CPU + download cannot read. Asking the output for NV12 (`videoSettings` with + `kCVPixelBufferPixelFormatTypeKey`) brings the camera to program and the + broadcast. That fix belongs in moq-video. +- With that fix, a camera source's track logs groups of about 3 s against its + declared 2 s join interval. AVFoundation reports no frame rate, so the track + assumes 30 fps and keyframes every 60 frames, which a dim room's 20 fps + stretches. Likely a moq-video follow-up as well (report the device's rate, or + keyframe by time). -## Related +## Waiting -- [Hardware validation](https://github.com/moq-dev/moq/blob/main/quest/m5/video-hardware.md) - capture paths not yet run on real machines +- Maintainer: quit and reopen T3 Code. Its Screen & System Audio Recording grant (2026-11-06) postdates the running instance (started 2026-11-04), so the system still refuses it: display sources fail with `capture permission denied: screen recording access`, system audio with `The user declined TCCs for application, window, display capture`, and `screencapture` from an agent shell prints `could not create image from display`. Check with `screencapture -x .tmp/check.png` from an agent's shell. +- Maintainer: grant T3 Code Accessibility, so an agent can click the Devices panel's Refresh and add buttons; without it the window can be watched but not driven (`CGPreflightPostEventAccess` is false). The alternative is clicking through the panel by hand while an agent watches the log. Recommended: grant it. +- moq-dev/moq: AVFoundation camera capture asks its output for NV12, so a camera whose native format is `2vuy` reaches the renderer; then bump the `moq` gitlink. Check that `rs/moq-video/src/capture/avfoundation.rs` sets `videoSettings` on moq's `main`. From af64a45d1b2d2180217be72e267f23e7ea6f9fb0 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Sun, 8 Nov 2026 22:43:31 -0800 Subject: [PATCH 3/4] quest(m0/app-macos): finish the Mac capture run Display, window, and system audio reach preview, program, and the broadcast; the microphone did in the earlier run; the Devices panel lists and adds each. The camera's remaining fix is moq's (quest/m1/camera-nv12-macos.md). Co-Authored-By: Claude Opus 5.5 --- quest/m0/README.md | 1 - quest/m0/app-macos.md | 38 -------------------------------------- quest/m0/browser-source.md | 4 ---- quest/m0/packaging.md | 1 - quest/m0/vcam/macos.md | 1 - 5 files changed, 45 deletions(-) delete mode 100644 quest/m0/app-macos.md diff --git a/quest/m0/README.md b/quest/m0/README.md index 4aac5003..44256238 100644 --- a/quest/m0/README.md +++ b/quest/m0/README.md @@ -88,7 +88,6 @@ repository. ## Required -- [Studio on macOS with capture granted](/quest/m0/app-macos.md) - camera, screen, and audio capture run on a Mac, not only Linux - [nixos2 boots Windows for agents](/quest/m0/windows-host.md) - a Windows machine agents reach over ssh, with a camera and microphone - [Studio on Windows](/quest/m0/app-windows.md) - the studio runs on Windows, not only Linux - [Wayland display and window sources](/quest/m0/wayland-sources.md) - portal-picked sources that reopen without the picker diff --git a/quest/m0/app-macos.md b/quest/m0/app-macos.md deleted file mode 100644 index 3c7dcdd4..00000000 --- a/quest/m0/app-macos.md +++ /dev/null @@ -1,38 +0,0 @@ -# [S] Studio on macOS with capture granted - -## Goal - -On the maintainer's Mac, an agent runs `moq-studio --features capture` and -fixes whatever only shows up there: camera, display, window, microphone, and -system audio sources reaching preview, program, and the published broadcast, -and the Devices panel listing and adding each. - -The build, `just ci`, the window, compositing on Metal, and publishing through -VideoToolbox already run on an Apple Silicon Mac. So does the microphone: its -sound reaches the published broadcast (2026-11-06, MacBook Air). - -## Plan - -- The studio is not an app bundle, so the prompts and grants belong to the app - that launched it: T3 Code holds Camera, Microphone, and Screen & System Audio - Recording. A run that still meets a permission error stops and asks the - maintainer rather than working around it. -- Check a run from the broadcast, not only the window: record it from a local - relay with `moq export mp4` and pull frames and loudness with ffmpeg. -- The built-in camera fails in the studio with `cannot download pixel format - 0x32767579; expected NV12`: AVFoundation capture never asks for NV12, so the - camera delivers its native `2vuy`, which the Metal import refuses and the CPU - download cannot read. Asking the output for NV12 (`videoSettings` with - `kCVPixelBufferPixelFormatTypeKey`) brings the camera to program and the - broadcast. That fix belongs in moq-video. -- With that fix, a camera source's track logs groups of about 3 s against its - declared 2 s join interval. AVFoundation reports no frame rate, so the track - assumes 30 fps and keyframes every 60 frames, which a dim room's 20 fps - stretches. Likely a moq-video follow-up as well (report the device's rate, or - keyframe by time). - -## Waiting - -- Maintainer: quit and reopen T3 Code. Its Screen & System Audio Recording grant (2026-11-06) postdates the running instance (started 2026-11-04), so the system still refuses it: display sources fail with `capture permission denied: screen recording access`, system audio with `The user declined TCCs for application, window, display capture`, and `screencapture` from an agent shell prints `could not create image from display`. Check with `screencapture -x .tmp/check.png` from an agent's shell. -- Maintainer: grant T3 Code Accessibility, so an agent can click the Devices panel's Refresh and add buttons; without it the window can be watched but not driven (`CGPreflightPostEventAccess` is false). The alternative is clicking through the panel by hand while an agent watches the log. Recommended: grant it. -- moq-dev/moq: AVFoundation camera capture asks its output for NV12, so a camera whose native format is `2vuy` reaches the renderer; then bump the `moq` gitlink. Check that `rs/moq-video/src/capture/avfoundation.rs` sets `videoSettings` on moq's `main`. diff --git a/quest/m0/browser-source.md b/quest/m0/browser-source.md index 7d6578da..d7221dd8 100644 --- a/quest/m0/browser-source.md +++ b/quest/m0/browser-source.md @@ -39,7 +39,3 @@ directory instead. What the other platforms need on top: ## Required - [Studio on Windows](/quest/m0/app-windows.md) - the studio runs there at all; it already runs on macOS - -## Related - -- [Studio on macOS with capture granted](/quest/m0/app-macos.md) - the rest of the macOS app, which pages do not need diff --git a/quest/m0/packaging.md b/quest/m0/packaging.md index f8d6703f..6ed084c1 100644 --- a/quest/m0/packaging.md +++ b/quest/m0/packaging.md @@ -26,7 +26,6 @@ until a release needs SmartScreen reputation; see ## Required - [The Apple signing identity is available](/quest/m0/signing.md) - the credentials macOS signing needs -- [Studio on macOS with capture granted](/quest/m0/app-macos.md) - camera, screen, and audio capture run on a Mac - [Studio on Windows](/quest/m0/app-windows.md) - the studio running on Windows ## Related diff --git a/quest/m0/vcam/macos.md b/quest/m0/vcam/macos.md index 4cd89fa1..8c4f02ef 100644 --- a/quest/m0/vcam/macos.md +++ b/quest/m0/vcam/macos.md @@ -9,4 +9,3 @@ update installs the new extension without a reboot. ## Required - [The Apple signing identity is available](/quest/m0/signing.md) - system extensions only load when signed -- [Studio on macOS with capture granted](/quest/m0/app-macos.md) - camera, screen, and audio capture run on a Mac From 1e74a6c73e8eee275d11bf32404907df42ab103d Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Mon, 9 Nov 2026 22:52:21 -0800 Subject: [PATCH 4/4] quest(m0/packaging): wait on moq's Mac camera fix before release Co-Authored-By: Claude Opus 5.5 --- quest/m0/packaging.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/quest/m0/packaging.md b/quest/m0/packaging.md index 6ed084c1..34439695 100644 --- a/quest/m0/packaging.md +++ b/quest/m0/packaging.md @@ -23,6 +23,10 @@ Decided 2026-11-06 (maintainer, /quest-unblock): Windows ships unsigned until a release needs SmartScreen reputation; see [signing](/quest/m0/signing.md). +## Waiting + +- moq-dev/moq: a Mac camera renders only once AVFoundation asks for NV12 instead of `2vuy`, in review as [moq-dev/moq#8251](https://github.com/moq-dev/moq/pull/8251); done when it merges, `just upgrade-moq` bumps the gitlink here, and a Mac camera shows its picture in program + ## Required - [The Apple signing identity is available](/quest/m0/signing.md) - the credentials macOS signing needs