Skip to content

feat(desktop): pre-capture HUD with audio level meters + webcam preview + presenter recording #71

Description

@huntharo

Summary

Add a richer pre-capture HUD that lets the user see what's about to be captured — system-audio level (RMS), microphone level (RMS), and a live webcam preview — before committing to record. Then record the webcam stream alongside the screen as a separate, repositionable picture-in-picture track.

This is the umbrella issue. The deeper data-model work (multi-channel video tracks, per-source audio tracks) and the in-flight UX (on-screen controls + capture confirmation) are likely follow-up issues; see Notes below.

Motivation

Today the user clicks record and hopes everything's wired up. Common failure modes that bite after the recording is done and unrecoverable:

  • Mic muted at the OS level; ends up with a silent voice-over.
  • Wrong input device selected (e.g. Bluetooth headset picked instead of the built-in mic).
  • System audio toggle was off and the user didn't notice.
  • No webcam to overlay because the picker didn't match.

A pre-capture monitoring HUD turns all of these into pre-flight problems instead of post-recording disappointments.

Scope

Pre-capture HUD additions

  • System-audio RMS meter — live levels from the SCStream system-audio tap (if enabled in capabilities). Renders as a familiar VU/peak bar.
  • Microphone RMS meter — live levels from the selected AVCaptureDevice. Includes a device picker (built-in vs. external mic vs. "none").
  • Webcam preview — a small live thumbnail of the AVCaptureDevice video stream the user selected, so they can confirm framing/lighting before recording.
  • Toggle switches for each: system audio on/off, mic on/off, webcam on/off. Persisted via Settings.

Webcam recording (multi-channel video)

  • Record the webcam stream as a SECOND video track in the output container, NOT pre-composited into the screen frame.
  • Independent control of position (e.g. corners), size, opacity, and visibility (show/hide) — both pre-record (defaults) and at edit time.
  • Container: MP4 supports multi-track video. Editor needs to know about the second track and let the user move/hide it per-segment.

Required platform plumbing

  • Mic + webcam permission handling (extends the existing recording-permissions.ts flow with a webcam permission).
  • A device-enumeration command-bus handler ("list audio inputs", "list video inputs") so Settings + the pre-capture HUD share one source of truth.
  • Sampling pipeline that taps the raw audio buffers for RMS WITHOUT going through the recorder's AVAssetWriter (the recorder is for the final file; the meters are pure UI).

Notes — likely splits

  • Multi-channel video + per-source audio tracks — the AVAssetWriter setup for a second video track + storing system-audio and mic as separate tracks (rather than mixed into one) is detailed enough that it probably becomes its own issue once we start. Editor support also changes.
  • In-capture on-screen controls + confirmation — separate issue: see feat(desktop): in-recording on-screen controls + capture-is-working confirmation #72 (once filed).

Out of scope

  • AI-driven framing / virtual greenscreen / background blur for the webcam (separate, very different problem).
  • Live cloud upload during capture.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions