HydraIssues

Rupelmonde stream delivers audio but the wrong video: Unreal app renders on physical display, Sunshine captures virtual desktop
open bug Project: hydrabody Reporter: 22 Apr 2026 18:56

Description

Symptom

Streaming rupelmonde-castle-viewer from boom-pickle-38 (tvl-hydra-007, Windows, Sunshine host, LAN 10.110.0.51 / WG 10.10.100.7) to peppy-dumpling-32 at Rupelmonde now connects cleanly since the v6.1.19 client fixes landed. The visitor hears the Rupelmonde Unreal app (menu music, ambience) but sees the wrong frames — a black / empty / purple display surface rather than the actual game.

This is body-side, orthogonal to the kiosk and overlay work. The Moonlight stream is delivering whatever Sunshine's capturing; Sunshine is capturing the wrong surface.

Evidence from earlier Sunshine log (in-stream debug overlay captured during a 2026-04-22 screenshot):

Offset        : 0x0
Virtual Desktop : 5760x1080
Desktop resolution : 1920x1080
Desktop format : DXGI_FORMAT_B8G8R8A8_UNORM
Creating encoder [h264_nvenc]
NvEnc: created encoder H.264 P1 async two-pass rfi

So Sunshine is in display-duplication mode, sees a 5760×1080 virtual desktop (three 1920×1080 tiles) and is encoding a 1920×1080 region — likely the wrong tile, because the Rupelmonde Unreal app is launching with -ResX=1920 -ResY=1080 -windowed -ForceRes and rendering onto the primary physical desktop rather than onto whatever display Sunshine is capturing.

What was set up today on the client side (unrelated to this bug)

  • hydraheadflatscreen v2.0.27/2.0.28: --absolute-mouse, --display-mode borderless, goroutine that shows the kiosk immediately when stream exits.
  • hydra-experiencenet v6.1.19: floating Qt exit overlay that follows all Spaces; fullscreen Space kiosk; NSWindowCollectionBehaviorCanJoinAllSpaces on the overlay.

Client-side streaming works end-to-end. This is purely a Sunshine/body configuration problem.

Expected fix avenues

  1. Point Sunshine at the physical display the Unreal app renders to via its encoder/output setting (Sunshine web UI at https://10.110.0.51:47990 → Configuration → Video → Output name / display).
  2. Pin the Unreal app to the captured display via the app's prep-cmd in Sunshine's apps.json — e.g. move the window to the captured display's top-left using -WinX=... -WinY=... or Windows' SetWindowPos before the experience starts.
  3. Switch Sunshine to Windows.Graphics.Capture (wgc) mode which captures a specific window rather than a display, and name the Rupelmonde window explicitly in the app config.
  4. Make the Unreal app launch borderless-fullscreen on the Sunshine-captured display index rather than windowed on the primary.

Affected nodes

  • Body: boom-pickle-38 (node-74f9fbf2), Sunshine at https://10.110.0.51:47990, credentials sunshine/sunshine.
  • Experience: rupelmonde-castle-viewer, launches C:\experiences\rupelmonde-castle-viewer\Windows\Rupelmonde.exe -ResX=1920 -ResY=1080 -windowed -ForceRes.
  • Same Sunshine instance also hosts mercator-talks — worth verifying whether that experience is affected by the same display-capture misrouting.

How to verify the fix

  1. On the body: configure / change whatever setting you pick.
  2. On peppy (kiosk): stop any running stream (pkill -9 -f 'HydraExperienceNet stream' via hydracluster exec), trigger a fresh one via POST http://127.0.0.1:9740/api/v1/stream/start {"experience":"rupelmonde-castle-viewer"}.
  3. Take a screenshot of the kiosk — should show the actual Rupelmonde castle scene, not black / empty virtual-desktop space.

Related prior context

  • project_rupelmonde_stream_issue.md in the agent's auto-memory describes this class of issue from an earlier encounter (purple virtual display / game on wrong display).
  • First Sunshine-capture misconfiguration we've hit on a Rupelmonde deployment; Cloud Seven's cosmic-pretzel-98 did not exhibit it when we streamed the same experience from that body earlier.