Skip to content

Comments

Add audio source controls, microphone indicator, and camera overlay#41

Open
alfonsrv wants to merge 3 commits intoMnpn:mainfrom
alfonsrv:audio-camera-controls
Open

Add audio source controls, microphone indicator, and camera overlay#41
alfonsrv wants to merge 3 commits intoMnpn:mainfrom
alfonsrv:audio-camera-controls

Conversation

@alfonsrv
Copy link

@alfonsrv alfonsrv commented Feb 19, 2026

Summary

This PR introduces three new features: improved audio source selection (system/mic), a microphone mute indicator in the menu bar, and a Loom-style circular camera overlay. It also includes necessary entitlements and preference updates.

Changes

1. Audio Source Controls

  • Menubar: Added a "Sources" section with checkboxes for "System Audio" and "Microphone".
  • Preferences: Replaced the simple "Record microphone" toggle with a device picker.
    • Lists available input devices (including "No Microphone").
    • Falls back to the system default if the selected device is disconnected.
  • Backend: Wired kRecordSystemAudio to SCStream.capturesAudio and passed the selected microphone device ID to SCK (macOS 15+) or AVAudioEngine (legacy).

2. Microphone Mute Indicator & Shortcut

  • Menubar: Displays a mic.slash icon when the microphone is disabled (muted), visible in both idle and recording states.
  • Shortcut: Added a configurable "Toggle microphone" keyboard shortcut in Preferences.
    • Toggles recording state in real-time.
    • Updates the menu bar icon immediately.
    • Auto-selects the system default mic if none was previously chosen.

3. Circular Camera Overlay

  • Overlay: Implemented a floating, draggable, circular camera preview (NSPanel with AVCaptureVideoPreviewLayer).
    • Stays on top of other windows.
    • Captured as part of the screen recording (unless Azayaka itself is excluded).
    • Disabled window tiling/docking behaviors.
  • Preferences: Added a new "Camera" tab.
    • Device picker (supports Continuity Camera).
    • Size slider (80px - 300px) with live updates via NotificationCenter.
  • Menubar: Added a "Camera" checkbox to toggle the overlay.
  • Permissions: Added NSCameraUsageDescription and com.apple.security.device.camera entitlement.
    • Requests permission on first use; shows an alert if denied.

Notes

  • NSCameraUsageDescription added to Info.plist (required for camera access).
  • When "Exclude Azayaka itself" is checked, the camera overlay is not captured since it belongs to the Azayaka process.
  • This is entirely vibe-coded. But it seems to work fine on my machine heh ✨ Mainly wanted to have those features myself, but have no Swift experience

Add toggleable system audio and microphone checkboxes to the menubar
dropdown under a new 'Sources' section. Replace the simple 'Record
microphone' toggle in Preferences with a device picker that lists
available audio input devices alongside a 'No Microphone' option.

When a previously selected microphone is disconnected, the app falls
back to the system default input device. The recording pipeline now
respects the kRecordSystemAudio preference for SCStream's capturesAudio,
and the selected microphone device ID is passed to SCK on macOS 15+.
Show a mic.slash icon in the menu bar when the microphone is disabled,
visible both when idle and during recording.

Add a configurable 'Toggle microphone' keyboard shortcut (accessible in
Preferences → Shortcuts) that toggles recording on/off in real-time
and immediately updates the menu bar indicator. When enabling via the
shortcut, the system default microphone is auto-selected if none was
previously chosen.
Introduce a Loom-style floating circular camera preview that can be
freely positioned on screen. Uses a borderless NSPanel with an
AVCaptureVideoPreviewLayer clipped to a circle. The overlay stays on
top of all windows and is captured as part of screen recordings.

New Camera tab in Preferences with a device picker (including
Continuity Camera for iPhone Sidecar) and a size slider that updates
the overlay in real-time via NotificationCenter. A Camera checkbox in
the menubar dropdown toggles visibility on the fly.

The overlay state persists across app restarts. Camera permissions are
requested on first use with a dialog pointing to System Settings if
denied. Window tiling/docking helpers are disabled on the panel.

Note: when 'Exclude Azayaka itself' is checked in Preferences, the
camera overlay will not appear in the recording since it belongs to
the Azayaka process.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant