HydraIssues

Setup new render body at 10.110.15.188 (bxl1-test venue ad6)
open unclassified Project: hydrabody Reporter: 19 May 2026 13:41

Description

## Overview

A new Windows render body is available at IP **10.110.15.188** (same subnet as fluffy-dumpling-87 at 10.110.15.197 and cheeky-cactus-86 at 10.110.15.192 — bxl1-test, venue ad6). Needs enrollment and hydrabody installation.

## Prerequisites checklist (from fluffy-dumpling-87 setup)

- [ ] Node enrolled in hydracluster with roles `["hydrabody", "hydravoice", "hydraguard-air"]`
- [ ] WireGuard connected (10.10.100.x range)
- [ ] NVIDIA GPU present and driver installed
- [ ] Sunshine installed at `C:\Sunshine\sunshine.exe` with credentials configured
- [ ] Virtual Display Driver (VDD) installed — verify exactly **one** VDD PnP device enabled (see L1 below)
- [ ] VB-Audio Virtual Cable installed
- [ ] ViGEmBus installed (Sunshine logs Fatal without it)
- [ ] HydraNode + body.yaml installed

## Installation steps

### 1. Enroll and assign roles
```
curl -X PATCH -H "Authorization: Bearer <ADMIN_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"roles": ["hydrabody", "hydravoice", "hydraguard-air"]}' \
https://hydracluster.experiencenet.com/api/v1/nodes/<NODE_ID>
```

### 2. Install hydrabody
```
New-Item -ItemType Directory -Force C:\hydrabody
Invoke-WebRequest -Uri https://releases.experiencenet.com/hydrabody/production/latest/hydrabody_windows_amd64.exe -OutFile C:\hydrabody\hydrabody.exe
C:\hydrabody\hydrabody.exe install
```

### 3. Pre-approve Windows Firewall for experiences
UE experiences show a firewall dialog on first run — pre-approve during provisioning:
```
netsh advfirewall firewall add rule name="Mercator56" dir=in action=allow program="C:\experiences\mercator-talks\Windows\Mercator56.exe" enable=yes
netsh advfirewall firewall add rule name="Mercator56-Shipping" dir=in action=allow program="C:\experiences\mercator-talks\Windows\Mercator56-Win64-Shipping.exe" enable=yes
```

## Key learnings from fluffy-dumpling-87 (apply preventively)

### L1: Duplicate VDD instances break portrait orientation

Symptom: Sunshine captures 3840x1080 virtual desktop despite `vdd_settings.xml count=1`. Root cause: VDD sometimes installs two PnP devices (ROOT\DISPLAY\0002 + ROOT\DISPLAY\0003). With two VDDs, Sunshine spans them as a wide virtual desktop and cannot switch to portrait 1080x1920.

Diagnosis:
```
Get-PnpDevice | Where-Object { $_.FriendlyName -like "*Virtual Display*" } | Select-Object InstanceId, Status
```
Expect exactly ONE Virtual Display Driver with status OK.

Fix if duplicate found:
```
Disable-PnpDevice -InstanceId "ROOT\DISPLAY\0003" -Confirm:$false
Remove-Item "$env:USERPROFILE\.hydrabody\vdd_sunshine_configured.txt" -ErrorAction SilentlyContinue
Stop-Process -Name sunshine -Force
```
After fix: Sunshine log shows `Virtual Desktop: 1920x1080`.

### L2: Stuck stream sessions when Moonlight is force-killed

If Moonlight is killed mid-session, Sunshine does not fire stream/ended. Session stays active indefinitely. Manual fix:
```
curl -X POST http://<body-wg-ip>:47991/api/v1/stream/ended \
-H "Content-Type: application/json" -d {"app":"<experience>"}
```
Tracked in issue #222 for permanent fix.

### L3: Orphan process cleanup — fixed in hydrabody v1.11.40

Orphan scanner previously used app slug as process name prefix (rupelmonde-castle-viewer), never matching the actual UE binary (Rupelmonde). Fixed in v1.11.40 — now reads exe_path from installed experience state.

### L4: Experience library district filter — fixed in hydrabody v1.11.39

Without the query filter, /api/v1/experiences/live returned all districts, causing 404 download spam for experiences not assigned to the local district. Fixed in v1.11.39.

## Reference body

Use **cosmic-pretzel-98** (node-4c2be4b0) as the reference body for this venue. Compare configs after setup using `hydrabody/docs/testbooks/body-readiness.md`.