Phasion Live 1.6.2
Per-output resolution + grid-preview reliability + a top-bar redesign. Each audience display now has its own publish resolution (720p / 1080p / 1440p / 4K / Custom), locked to the configured size. The "Preview: All" grid no longer leaks Output 1's stream as a backdrop behind the other tiles. And the top-bar mashup controls got cleaned up: thinner duration dropdown, a numeric mix readout, removed clutter (Speed / Auto / legacy global resolution dropdown), and a responsive layout that fits all your buttons inline at multi-col widths and reflows cleanly at narrow widths.
What's new
Per-output resolution
Each output now has its own publish + window size, settable independently from Settings → Output Windows. The Output 1 / 2 / 3 rows now show a resolution dropdown next to the display picker and the Windowed / Fullscreen toggle.
- Quick presets: 720p, 1080p, 1440p, 4K, or Custom (any WIDTH×HEIGHT down to 320×180 — supports ultrawide, portrait, square, anything).
- Window LOCKED to the configured size. Operators can no longer accidentally drag-resize an output window. The captured-via-Syphon frame matches the configured resolution 1:1 — no scaling, no aspect-ratio drift.
- Each lane is independent. Output 1 can run at 720p (for a smaller projector), Output 2 at 1080p (main stage), Output 3 at 4K (LED wall) — all simultaneously. Each Syphon server (
phasion1,phasion2,phasion3) publishes at its own lane's native resolution. - Overlays auto-scale. QR codes, scrolling text, captions, photo carousel, logos, applause emoji, trivia / poll cards — every overlay reads
canvas.widthfor its sizing math, so each lane's overlays render at the right size for that lane's resolution. A 1080p output and a 720p output running the same scene look visually identical, just at different pixel densities. - Legacy "Output Resolution" global dropdown removed from Settings — the per-output dropdown inside each Output row is now the single source of truth. No more "did this affect Output 1 or all outputs?" ambiguity.
Why per-output matters
The 1.6.0 multi-output release shipped with Output 2 and Output 3 windows being freely draggable / resizable. That looked harmless, but SCKit window-capture scales the captured frame to the configured publish dims — so dragging Output 2 down to, say, 800×600 left Syphon publishing a 1280×720 stream that was an upscaled blur of the smaller window. The lock here makes the captured frame match the rendered frame exactly.
What's fixed
Preview: All — no more Output 1 bleed-through behind the grid tiles
When "Preview: All" was active, Output 1's single-tile capture stream stayed running in the background, visible as a backdrop behind the per-lane grid tiles. Operators were toggling Preview Active → Preview All to manually clear it. Root cause was an async race between applyVisibility() (which manages the single-tile preview) and _startGridImpl (which manages the grid). Three layers of fix: 1. applyVisibility now reads a gridActive flag and forces the single-tile stream off when grid mode is showing multiple lanes. 2. _startGrid and _stopGrid proactively trigger applyVisibility so the gate evaluates the instant grid state changes (instead of waiting for the next matchMedia / tour event). 3. The async startStream() re-checks gridActive after the getDisplayMedia await resolves and abandons the in-flight stream if grid mode flipped on mid-await — preventing a zombie capture from binding to the hidden mainVid element.
Mix slider — direction unified across every blending pattern
Patterns 3 (H-Split), 4 (V-Split), 6 (Radial), and 9 (Luma key) had their slider direction inverted relative to Crossfade and Noise wipe — at slider left, the user saw preset B instead of preset A. All five patterns now share the same direction:
- Slider far LEFT → 100% preset A
- Slider far RIGHT → 100% preset B
- Slider centered → 50/50 split for the wipe patterns; centered transition threshold for the luma key.
Other fixes
- Photos Syphon status text now reads "Syphon output disabled" instead of "Not running" — consistent with the AI Visuals panel.
- Settings → Output Windows scroll now works in Settings popout windows (the multi-col
overflow: hiddenrule no longer leaks into Settings). - Column-width resize handle no longer drags adjacent columns when you adjust the column 2 / column 3 boundary at 3-col widths (CSS specificity fix on the
@media (min-width: 1100px)grid template). - Preview height resize (⋯ drag) in "Preview: All" mode now scales the entire tile row proportionally instead of clipping the bottom of the tiles.
Top-bar polish
Compact, responsive mashup controls
The Visual Mix top-bar got a layout overhaul to use space more wisely at every width:
- "Pattern" renamed to "Blending" — clearer semantic for what the dropdown controls.
- Mix slider now has a numeric readout (e.g.
0.50) on the right edge so you can tell when it's centered without eyeballing. - Duration dropdown is now compact (~42px) — was hogging too much row width.
- Speed slider + Auto-Mix button removed from the top bar — these are less-touched controls and were squeezing the Mix slider down to nothing at narrow widths. Auto-Mix is still available via the existing MIDI / OSC / phone-remote bindings.
- Multi-col widths: all 13 items (Rand A · Gen A · style · ⇄ · style · Gen B · Rand B · A+B · 🔒 · Change · Same · Fade · 3s) stay inline on a single row — no more wrapping at moderate window widths.
- Single-column widths: cleaner two-row layout —
- Row 1: per-lane preset controls (Rand A · Gen A · style · ⇄ · style · Gen B · Rand B · A+B)
- Row 2: master macros (Change · Same · Fade · 3s) sit just above the Visual Effects section, evenly distributed across the row
- Lock button auto-hides on the wrapped master row to keep it focused on the 4 macro controls; still accessible at wider widths.
Visual Effects / Setlist / Demo header alignment
- All three collapsed headers (FX, Setlist, Demo) now render at exactly the same height (~25px) with text vertically centered — was previously a few pixels off, with text looking top-aligned because of residual
padding-bottomon the collapsed.section-body. - Tightened the gap above the first primary group below the FX/Setlist stack (was 14px, now 4px) so the stack reads as a unified bank.
Hidden Syphon Position Adjust panel
The "📐 Syphon Position Adjust" sub-section in Settings → Output Windows is now hidden by default — the per-lane SCKit crop math has been stable for several releases and the manual offset sliders weren't being touched. Inputs stay in the DOM as stubs so existing handlers don't error; the section can be re-enabled by removing one style="display:none" wrapper if a future SCKit regression makes manual adjust necessary again.
Upgrading
Existing 1.6.x users pick this up automatically on the next "Check for updates". After installing, restart Phasion Live. Your existing single global resolution is preserved as Output 1's default; Outputs 2 / 3 inherit the same dims initially but can now be changed independently via Settings → Output Windows.
Behind the scenes
- New
config.laneResolutions = { "1": {w,h}, "2": {w,h}, "3": {w,h} }storage. Falls back to the legacy globaloutputWidth/Heightfor installs without per-lane entries, so existing setups continue to work without re-configuring. - New
set-lane-resolution(lane, w, h)IPC: resize window → push new resolution to renderer → restart SCKit capture at new dims. Lane 1 also routes through here for consistency, while the legacyset-viz-sizeIPC keeps working as a shortcut. - Each lane window's
did-finish-loadre-pinssetContentSize(w, h + 28)defensively so the captured frame is exactly the configured dims from the first publish (matches how Lane 1 already did it). useContentSize: true+resizable: falseon lane construction — both belt-and-suspenders against accidental drift.- Master-row layout uses CSS
flex-wrap: nowrapat multi-col widths (≥740px) + JS re-parenting at narrow widths (<740px) so the master gang lives in different DOM positions for the two layouts without duplicating any elements.