Skip to content

Multi-display: add a capture mode (active / all / selected) — secondary screens are never captured #82

@ManmohanBuildsProducts

Description

@ManmohanBuildsProducts

Summary. On multi-monitor setups, capture only follows the active display (the one with the focused window / cursor) — one screen per tick, switching as you move. Content on secondary displays is never captured while you're working on another screen. For a "memory of what I was doing" tool this is a real recall gap, since the second monitor is often exactly where the context lives (a spec, dashboard, Slack, logs you're reading while working on the main screen). Passive reading on a non-focused screen never triggers a focus change, so it's invisible.

Current behavior (verified). The recorder enumerates screen.getAllDisplays() but captures a single targetDisplay / cursorDisplayId (falling back to primary). Captured stills are never simultaneous across displays — confirmed by frame timestamps (no two captures in the same second) and by the resolution of each frame tracking whichever display is active.

Why this isn't just a default to flip. Capturing all live screens has real costs:

  • Storage/CPU scale ~N× with monitor count (the pipeline already downscales aggressively for cost).
  • A static doc on a secondary screen re-captured every few seconds produces heavy near-duplicate frames (related: Perceptual frame deduplication to eliminate redundant I/O #10, perceptual frame dedup).
  • Privacy: active-only means idle/secondary content stays uncaptured, which some users will want.

Proposal: make it configurable, default to active-only.

  • active — current behavior (cheap, private).
  • all — capture every live display each tick (full multi-monitor recall).
  • selected — capture a chosen subset (e.g. monitors 1 and 2, exclude a TV/3rd screen).

This gives multi-monitor power users completeness without forcing the cost/privacy hit on everyone. Pairs naturally with the dedup work in #10 so an all mode doesn't drown in redundant frames.

Environment: macOS 26 (Tahoe), Familiar v0.0.70, Apple Silicon, dual-display.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions