wlr-pip
A floating, always-on-top live picture-in-picture mirror of a single
wlroots window. Keep an eye on a build log, a video, or a dashboard while it
sits on another workspace or behind other windows — the mirror updates in real
time, using the same zero-copy GPU capture as wlr-chooser.
Part of the wlr-utils workspace.
Why
- Mirrors any window, even occluded or on another workspace, via the
compositor's native toplevel capture (
ext-image-copy-capture-v1) — not a screen-region grab. - Live and cheap: on the GPU path (default) the dma-buf is imported straight as a texture (no read-back), and repaints are driven by capture damage, so a static window costs almost nothing.
- Stays out of the way: a normal
xdg-toplevelyou can move, resize, make translucent, or shrink to an icon badge that pops back open when its window changes.
Requirements
- A wlroots compositor exposing
ext-image-copy-capture-v1,ext-image-capture-source-v1andext-foreign-toplevel-list-v1(Sway ≥ 1.12 / wlroots ≥ 0.20). - For the GPU path (default): a working EGL/GLES driver and
libgbm(ships with Mesa). Falls back to CPU shm automatically. wlr-chooseronPATHif you launchwlr-pipwith no argument (it shells out to it to pick a window).
Install
# crates.io
# from the workspace
&&
Prebuilt binaries and a .deb are attached to each
release.
Usage
wlr-pip is a normal xdg-toplevel, so the compositor manages stacking. Add a
couple of Sway rules to make it behave like a PiP (floating, on every workspace,
above others), and optionally a keybind:
for_window [app_id="wlr-pip"] floating enable, sticky enable
bindsym $mod+p exec wlr-pip
Mirror several windows at once by launching wlr-pip more than once; only one
mirror per window is allowed (a second launch for the same window is a no-op).
Controls
In the tile: drag the body to move it, drag the bottom-right grip to resize (the source aspect ratio is kept), and hover to reveal the collapse (to an icon badge) and close buttons. Collapsed, the tile pops back open the moment its window changes — a lightweight "tell me when this changes" watcher.
Keyboard shortcuts (the tile must have focus — click it first):
| Key | Action |
|---|---|
Esc / q |
Close |
Space |
Freeze / unfreeze the live feed |
c |
Collapse to / from the icon badge |
+ / - (or scroll wheel) |
More / less opaque |
r |
Re-pick another window (opens the chooser) |
License
Licensed under either of Apache-2.0 or MIT at your option.