spriteforge/docs/pull-relay.md

76 lines
2.4 KiB
Markdown
Raw Normal View History

# Pull relay: no VPN and no inbound GPU port
The relay topology is:
```text
SpriteForge Studio --short outbound HTTPS--> public relay
GPU worker --short outbound HTTPS--> public relay
GPU worker --localhost HTTP--------> ComfyUI
```
There is no Tailscale, port forwarding, direct connection between the two PCs,
WebSocket or permanently open request. The worker performs a short poll when it
is idle. During generation it periodically sends a short heartbeat so a crashed
worker's lease can be recovered.
The relay needs a small public host because two NATed computers cannot discover
each other without an intermediary. It does not need a GPU. SQLite and a Docker
volume are sufficient. Inputs, workflows and outputs are content-addressed by
SHA-256 and expired completed jobs are eligible for cleanup after 72 hours.
## Deploy the relay on a VPS
Copy the SpriteForge repository to a server with Docker and a DNS name pointing
to it. In `deploy/relay`, create `.env`:
```dotenv
RELAY_DOMAIN=sprite-relay.example.com
SF_RELAY_CLIENT_TOKEN=long-random-client-secret
SF_RELAY_WORKER_TOKEN=different-long-random-worker-secret
```
Generate secrets locally with `python -c "import secrets; print(secrets.token_urlsafe(48))"`.
Start it:
```bash
docker compose up -d --build
curl https://sprite-relay.example.com/health
```
Caddy obtains and renews TLS automatically. Never reuse the client token as the
worker token, commit `.env`, or expose the relay over plaintext Internet HTTP.
## Start the GPU computer
ComfyUI remains local and should show `http://127.0.0.1:8188`. On the GPU PC,
install SpriteForge (a checkout or wheel), then:
```powershell
$env:SF_RELAY_WORKER_TOKEN = "worker secret"
sf relay worker `
--url https://sprite-relay.example.com `
--comfy-url http://127.0.0.1:8188
```
The terminal may stay minimized. It creates no listening port. `--once` leases
at most one job and exits, which is useful for diagnostics or Task Scheduler.
## Connect Studio
On the development PC:
```powershell
$env:SF_RELAY_CLIENT_TOKEN = "client secret"
sf gpu add renderbox `
--kind relay `
--url https://sprite-relay.example.com `
--workflow C:\Users\uuu\Documents\spriteforge\examples\comfyui\txt2img_api.json `
--token-env SF_RELAY_CLIENT_TOKEN `
--timeout 1800
sf gpu test renderbox
sf studio C:\art\my_game --gpu-profile renderbox
```
`gpu test` checks only the relay. A real Pipeline/Generate job verifies the GPU
worker and local ComfyUI.