diff --git a/README.md b/README.md index e523d71..229e7c9 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,9 @@ Working: Wayland compositors with the portal should work but are untested) - VAAPI H.264 encode in GStreamer (RDNA3 confirmed; other VAAPI-capable GPUs should work) -- Audio capture of the default sink's monitor +- Audio capture of the default sink's monitor, with optional per-app + routing (`--app `) and microphone mixing (`--mic`) +- `--repair` cleanup of orphaned PipeWire state left by a crashed host - iroh QUIC bi-stream tunnel, direct-UDP and relay paths both verified - Interactive Host/View menu with clipboard auto-copy and mpv/VLC picker - Headless mode for scripts (`pixelpass `) @@ -29,9 +31,7 @@ Working: viewer cap Not yet working: -- X11 capture (stubbed, returns an error) -- Per-app audio routing (`--app ` is a flag stub) -- `--repair` (PipeWire orphan cleanup) is a stub +- X11 capture (stubbed, returns an error — Phase 2 follow-up) ## Quick start @@ -183,6 +183,24 @@ measured_at = "2026-05-21T20:41:16Z" - Skip is sticky — once you skip the test, pixelpass won't ask again unless you reconfigure. +## Audio + +By default pixelpass captures the default sink's monitor — the viewer +hears whatever the host hears. Two flags adjust this: + +- `--app ` routes only a single application's audio. pixelpass + creates a per-PID null-sink and uses libpipewire to reroute matching + `Stream/Output/Audio` nodes (by `application.name`) into it, so the + viewer hears just that app instead of the whole desktop. In the + interactive menu you can pick the app from a list of what's currently + playing. +- `--mic` mixes the default microphone source into the stream alongside + system audio. + +If a host crashes mid-session it can leave orphaned `pixelpass_capture_*` +null-sinks and their paired loopbacks loaded in PipeWire. Run +`pixelpass --repair` to unload them and exit. + ## Multi-viewer One gst capture pipeline fans out to N concurrent viewers via a