VortexGPU — Anonymous GPU Rental Platform (Production)

No-KYC, BTC-paid, browser-access GPU machines. Each tenant provisions a completely isolated ComfyUI instance on a shared physical GPU — they see a clean private machine and never know the GPU is time-shared.

Architecture

                        ┌──────────────────────────────────────────┐
   Tenant browser ────► │  VortexGPU Gateway (CT 731, .127:3000)  │
                        │  Express + Vite SPA + SQLite              │
                        │  • public SPA (login/provision/instances) │
                        │  • real BTCPay invoices + webhook settle  │
                        │  • hidden admin /admin?token=             │
                        └───────────────┬──────────────────────────┘
                                        │ LAN (poll, X-NODE-SECRET)
              ┌─────────────────────────┴─────────────────────────┐
              ▼                                                     ▼
   ┌────────────────────────┐                         ┌────────────────────────┐
   │ shadow-death (.128)    │                         │ GamingPC (.186)        │
   │ RTX 4080 SUPER 16GB    │                         │ RTX 3070               │
   │ vortex-node-agent.ps1  │                         │ vortex-node-agent.ps1  │
   │  → telemetry           │                         │  → telemetry           │
   │  → provision_comfyui   │                         │  → provision_comfyui   │
   │    (isolated port+dir) │                         │    (isolated port+dir) │
   └────────────────────────┘                         └────────────────────────┘

Isolation model (how the GPU stays hidden)

One shared ComfyUI codebase per host (C:\vortex\comfyui-base), N isolated data dirs (C:\vortex\instances\<vm_id>\{user,output,input,models}). Each instance launches with its own --port and its own --user-directory, --output-directory, --input-directory, so settings, checkpoints, and outputs never cross tenant boundaries. The tenant's ComfyUI URL is http://<node-ip>:<port> — they see a private, fresh machine. The physical RTX is shared underneath and the VRAM load is load-balanced across tenants.

BTCPay (real payments)

  • Store: B3nkkrKECSugCBTWEXrm9PtTHNsVzP9WxESryzRdrF5T
  • API key: 4367faaccfa84c9a58d8fa65190290b94e385799 (scoped: create/view invoices)
  • Webhook: 4vyiy59LW3xbrrpDAKvzoVPOST /api/btcpay/webhook
  • Flow: create USD invoice → tenant pays at checkout link → BTCPay fires InvoiceSettled webhook → gateway credits users.balance_minutes in SQLite.
  • Dust threshold: $1 minimum (below ~$1 is BTC dust). Price = $1/hr.

Endpoints

Path Auth Purpose
POST /api/session none No-KYC login → user row (120 min welcome bonus)
GET /api/me?userId= none balance + instances
POST /api/btcpay/create-invoice none real BTCPay invoice
POST /api/btcpay/webhook BTCPay settle invoice → credit balance
POST /api/vms/provision none allocate isolated ComfyUI on a GPU node
POST /api/node/register X-NODE-SECRET GPU box registers
POST /api/node/report X-NODE-SECRET nvidia-smi telemetry
GET /api/node/jobs X-NODE-SECRET poll for shell/provision/destroy jobs
GET /admin?token= token hidden admin SPA (404 without token)
GET /api/admin/* Bearer admin state, GPU jobs, credit, users

Windows GPU agent

On each GPU host: C:\vortex\vortex-node-agent.ps1 (scheduled task VortexGPUNodeAgent, ONSTART). It registers, streams telemetry every 5s, and handles provision_comfyui / destroy_instance / shell jobs.

Deploy notes

  • CT 730 = template, CT 731 = live clone @ 10.30.20.127:3000.
  • Node.js 22 (native node:sqlite), systemd vortexgpu.
  • Admin: http://10.30.20.127:3000/admin?token=<ADMIN_TOKEN> (in /opt/vortexgpu/.env).
  • Secrets: ADMIN_TOKEN, NODE_SECRET, BTCPay keys → /opt/vortexgpu/.env (600).
Description
a place to rent my nice ass gpu for free
Readme 234 KiB
Languages
TypeScript 88.3%
PowerShell 5%
Python 4.1%
HTML 2.3%
CSS 0.3%