This document describes how screen destinations, CasparCG channel / screen consumers, Device View cabling, and OS-level display layout (xrandr) are meant to work together in HighAsCG. It is normative for product behaviour; implementation may lag until the linked work order is complete.
720p50, 1080p5000, or custom width × height × fps), and layout metadata such as position on the virtual canvas (e.g. 0,0 for the first main screen, then horizontal tiling for additional mains).<screen> consumers, channel map, etc.) so the Caspar “screen consumer” window for a bound channel matches that destination’s mode and placement inside Caspar’s coordinate system.gpu_out connector on the rear panel.mainScreenIndex / Caspar screen index) the GPU output carries, so server-side layout code can map one logical screen → one xrandr output (screen_N_system_id, e.g. HDMI-0).When Override is not enabled for that screen:
--mode (pixel resolution) should follow the bound screen destination’s effective format: standard mode tokens map to WxH (e.g. 720p50 → 1280x720), custom modes use destination width × height; refresh where applicable should align with destination fps / mode naming.--pos for that head should follow the channel / destination position used for that screen in the tandem layout (e.g. first screen at 0x0, next screen to the right of the previous head’s width so physical desktop matches logical canvas tiling).POST /api/settings/apply-os) should recompute the full horizontal plan so all bound GPU heads stay consistent after any one destination or cable change.When the physical monitor cannot or should not match the channel’s native format (operator wants 1080p on a 720p channel path, lab test, EDID mismatch, etc.):
--pos must shift).For good vsync on program screen outputs with an NVIDIA GPU:
__GL_SYNC_TO_VBLANK=0 and highascg-nvidia-x-apply.sh on install/ISO).screen_N_vsync: true / <vsync>true</vsync> in generated config).See screen-consumer-vsync-nvidia.md for rationale, verification, and operator steps.
Screen destinations ──► Caspar config (channels, screen consumers, positions)
│
│ (default) same WxH + tiling hint
▼
Device graph edge ──► screen index N ──► xrandr: output=sysId, --mode, --pos
│
│ (override on)
▼
Inspector Override + dropdown/custom ──► xrandr --mode / --rate from user choice
src/utils/os-layout-calculator.js, src/utils/os-config.js (applyX11Layout).src/api/settings-os.js (POST /api/settings/apply-os).client/components/device-view-inspector-gpu.js, device-view-bands-render.js, device-view-caspar-render.js.src/config/screen-destinations.js and persisted screenDestinations in config.| Term | Meaning |
|---|---|
| Screen destination | Logical output definition (mode, position on canvas, main index). |
GPU connector (gpu_out) |
Physical video output; bound to a screen via graph edge. |
| Override | User flag: OS xrandr mode/rate come from inspector, not from destination topology. |
Last updated: 2026-05-15 — authored for HighAsCG Device View / OS layout alignment.