The BROWSER VIEWPORT as a video source (LOCAL ONLY). Zero inputs, one video OUT whose contents are what you currently SEE in this tab — the visible canvas pane — so you can feed LOOPBACK -> RECORDERBOX to record your viewport, or -> any effect for live self-referential feedback. Mechanism: the current tab is captured via the Screen Capture API (getDisplayMedia({ video: { displaySurface: "browser" }, preferCurrentTab: true, selfBrowserSurface: "include" })), run in a hidden <video>, and the engine samples each frame into a WebGL2 texture exactly like CAMERA; a crop step then windows the tab frame down to the app viewport element's on-screen rectangle (re-measured every frame by a node-scoped pump that outlives any one card mount, and pushed to the engine as LOCAL per-viewer state — never synced) so OUT is just the active viewport, letterbox-fit into the engine frame (black bars, never cropping edges away). Because the preview shows the tab it is captured from, the live preview is intentionally recursive (a video-feedback tunnel). Params: gain (0..2 RGB multiplier), crop (viewport vs whole-tab, ON by default). STARTING A CAPTURE ALWAYS TAKES A CLICK — getDisplayMedia has no already-granted state, so unlike CAMERA nothing can resume a capture automatically: every capture needs a fresh user gesture and a fresh trip through the picker. That gesture is START CAPTURE on the faceplate under the default shell, or the card's Start capture button under ?shell=legacy. A capture ends with STOP or from the browser's own share bar (the module returns to idle with a re-capture button); getDisplayMedia is feature-detected, degrading to a disabled unsupported state with the reason where the API is missing.
LOOPBACK turns the BROWSER VIEWPORT into a video source: its single output carries what you currently SEE in this tab — the visible canvas pane — so you can feed it into RECORDERBOX to record your viewport, or into any video effect for live self-referential feedback. Capture is acquired with the Screen Capture API (getDisplayMedia with preferCurrentTab + self-capture allowed), the captured tab runs in a hidden <video>, and the engine samples each frame into a GPU texture (exactly like CAMERA). A crop step then windows that tab frame down to the app viewport element's on-screen rectangle so the output is just the active viewport, not the surrounding browser/app chrome; the cropped region is letterbox-fit into the engine frame (black bars rather than cropping edges away) so the WHOLE viewport is preserved. Because the preview shows the tab it is captured from, a live preview is intentionally recursive (a video-feedback tunnel) — that is expected, not a bug. STARTING A CAPTURE ALWAYS TAKES A CLICK, and that is a browser rule rather than a design choice: getDisplayMedia has no already-granted state, so unlike CAMERA there is no path that can resume a capture automatically — every capture, every time, needs a fresh gesture and a fresh trip through the picker. Under the default shell that gesture is START CAPTURE on the faceplate (open the module's full view); under ?shell=legacy it is the Start capture button on the card. Usage: drop LOOPBACK in, press START CAPTURE and confirm the tab in the picker, then patch OUT into RECORDERBOX (record the viewport) or a mixer/effect. A capture can be ended with STOP or from the browser's own share bar (the module returns to idle with a re-capture button); where the Screen Capture API is unavailable the surface shows a disabled unsupported state with the reason.
the faceplate
0 inputs · 1 outputs · 2 params
outputs
id
cable
what it does
out
video
Video output carrying the captured browser viewport: cropped to the visible pane (or the whole tab when Crop is off), letterbox-fit into the engine frame, and RGB gain-multiplied. Patch into RECORDERBOX to record the viewport, or into any downstream video module.
RGB video stream
params
id
label
range
default
curve
gain
Gain
0..2
—
linear
crop
Crop
0..1
—
discrete
controls
control
what it does
Crop
Crop (discrete 0/1, default 1 = on). ON crops the captured tab down to the visible canvas pane's on-screen rectangle, so OUT is just the active viewport; OFF passes the WHOLE captured tab. The rectangle is re-measured EVERY FRAME (pan, zoom, resize and opening the dock all move it) by a node-scoped pump that outlives any one card mount, so collapsing or docking the module cannot freeze the crop under a running capture. The crop is per-viewer local render state (each collaborator's viewport differs) and never distorts the source aspect — it letterbox-fits, preserving the full region.
Gain
Gain (linear, 0 to 2, default 1). RGB multiplier applied to the captured frame in the shader (src.rgb * gain, unclamped): 0 = black, 1 = unity, 2 = doubled/clipped. Handy to brighten a dim viewport before recording.