- streamer/windows: vash-broadcast.exe (setup/login/start/stop/status/doctor) with per-instance OBS, tosu and FFmpeg, a supervised worker, OCR room selection and OBS scene reconciliation; built and tested on Linux only - streamer/relay.ts shared with Vash TV; Cloudflare Access proxy for dev/staging - worker status validation and live score helpers for the site - STREAMING_HANDOFF.md and streamer/ALPHA_TEST.md record what is unverified Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6.0 KiB
Test a match from Windows 11 + WSL Ubuntu
Use Ubuntu for the repository, builds, and optional Docker relay. Run osu!tourney, tosu, OBS, and the compiled Windows agent on Windows. This uses OBS's native AMD encoder on an RX 7900 XT. The Vash web server and its IRC host stay on the existing server; this PC only runs the broadcast tools.
WSL can launch Windows executables directly. Using vash-streamer.exe means its 127.0.0.1 addresses refer to Windows, where OBS and tosu are running.
1. Clone and build in Ubuntu
If Ubuntu is not installed yet, run wsl --install -d Ubuntu in an administrator PowerShell window, restart if prompted, and finish Ubuntu's first-run setup. Open Ubuntu with wsl -d Ubuntu.
Inside Ubuntu:
sudo apt update
sudo apt install -y git curl unzip
curl -fsSL https://bun.com/install | bash
source ~/.bashrc
mkdir -p ~/dev
cd ~/dev
git clone --branch dev https://git.stanrunge.dev/stan/esports.git
cd esports
bun install --frozen-lockfile
bun run streamer:build
The build produces dist/vash-streamer.exe and dist/vash-streamer. Use the .exe for this setup. A streaming-only clone needs no server .env, database, or bun run dev.
2. Prepare the Windows programs
-
Make a separate osu! stable installation for osu!tourney and follow the official setup guide. Sign in with an account you are allowed to operate that has osu!supporter. The spectating account must differ from the account playing the match.
-
Put this
tournament.cfgnext to that installation'sosu!.exefor a 1v1 test, then launch it:TeamSize = 1 acronym = VASH -
Start the Windows build of tosu. Its WebSocket should be available at
ws://127.0.0.1:24050/websocket/v2. -
Start OBS. Enable Tools → WebSocket Server Settings → Enable WebSocket server, keep port 4455, and copy its password. Set a 1920×1080 canvas and choose the AMD H.264 encoder for streaming/recording.
3. Connect a broadcast channel
On https://esports-dev.vash.software/broadcast, create a channel using Over osu! gameplay. Choose One match for a specific test, or the automatic mode while setting up. Copy the channel ID and its agent token. The Agent token button on the Broadcast list generates a new token and invalidates the old one; use the same current token for this agent and the optional relay.
In Ubuntu, from the repository root, replace the three placeholders:
./dist/vash-streamer.exe \
--server https://esports-dev.vash.software \
--channel 'CHANNEL_ID' --token 'AGENT_TOKEN' \
--obs-password 'OBS_WEBSOCKET_PASSWORD' --setup-obs
This creates a Vash scene, an osu! capture source, and the overlay. In OBS, open the capture source's properties and select the osu!tourney window. Arrange the gameplay beneath the overlay. The setup command exits; now start the agent and leave it running:
./dist/vash-streamer.exe \
--server https://esports-dev.vash.software \
--channel 'CHANNEL_ID' --token 'AGENT_TOKEN' \
--obs-password 'OBS_WEBSOCKET_PASSWORD'
4. Test one match
- Create one real-lobby match in Vash's simulation lab. The match page should show a lobby link and move from opening to waiting for players.
- Point the broadcast channel at that match. Join the lobby with your playing account. In osu!tourney's lower control panel, select the matching
VASH: (Red) vs (Blue)room. Windows room selection is manual. - For password/referee access, configure
OSU_TOURNEY_ACCOUNTon the Vash server to the spectating username before creating the lobby. The host grants it referee access during setup. - Start with OBS Start Recording or its preview. Play a map and check the overlay, agent connection, and live score on the match page. A simulated opponent exists inside Vash and has no real gameplay window to spectate.
- To stream directly, configure the destination in OBS and press Start Streaming. OBS controls this stream; the site's Go live button controls the optional relay/container.
If the agent gets an HTTP login page or WebSocket 403 instead of connecting, check any access proxy in front of the dev site. Browser login cookies are not inherited by the standalone agent.
5. Optional: site playback, recording, and multistream
Install Docker Desktop on Windows. Enable Use the WSL 2 based engine and Settings → Resources → WSL Integration → Ubuntu (Docker instructions). Then, in Ubuntu:
docker version
docker build -f streamer/tv/Dockerfile -t vash-tv streamer
docker run -d --name vash-relay --restart unless-stopped \
-p 127.0.0.1:1935:1935 \
-e VASH_SERVER=https://esports-dev.vash.software \
-e VASH_CHANNEL='CHANNEL_ID' -e VASH_TOKEN='AGENT_TOKEN' \
-e INGEST_KEY='CHOOSE_A_PRIVATE_KEY' vash-tv
docker ps --filter name=vash-relay
docker logs -f vash-relay
In OBS, choose Settings → Stream → Custom:
- Server:
rtmp://127.0.0.1:1935/live - Stream key: the
INGEST_KEYvalue above
Configure destinations on the channel's Stream page, press Go live, then Start Streaming in OBS. The relay forwards OBS's encoded stream and uploads the recording when server storage is configured. It does not require GPU access. Stop OBS and press End stream when finished; docker stop vash-relay stops the relay. Use docker start vash-relay next time.
Running the entire tourney container in WSL
The Wine/container setup can also be built and launched from WSL's Docker CLI, but it still needs osu! installation, login, and a real gameplay test on that host. The current image uses Xvfb and CPU encoding; it has no configured AMD GPU path. Docker Desktop's documented GPU support is NVIDIA GPU-PV. Windows OBS is the recommended first test for this AMD machine.