A collection of AI demo apps that run web UIs on Barney and dispatch GPU inference jobs to Render GPU. The GPU inference demos use lazy auto-deploy for their model pipelines — interact with the UI and the system handles GPU provisioning automatically.
| Demo | Control Plane | Inference Server | Description |
|---|---|---|---|
| Text-to-Image | render-image-gen/ | render-image-gen-inference/ | Generate images from text prompts (SDXL-Turbo, FLUX.1-schnell, Kolors, SD 3.5 Large Turbo) |
| Text-to-Music | render-music-gen/ | render-music-gen-inference/ | Generate music from text prompts with lyrics support (ACE-Step, DiffRhythm2) |
| Hum-to-Music | render-hum-music-gen/ | render-hum-music-gen-inference/ | Transform humming/singing into full music tracks (MusicGen Melody) |
| Voice Clone | render-voice-clone/ | render-voice-clone-inference/ | Clone a voice from a reference clip and generate lip-synced video (XTTS-v2 + MuseTalk) |
| Dashboard | render-dashboard/ | — | Multi-account Render Network metrics and monitoring |
All demos (except the dashboard) follow the same two-service architecture:
┌─────────────────────┐ ┌──────────────────────┐
│ Control Plane │ │ Render Compute API │
│ (Barney) │────────▶│ api.compute.x.io │
│ │ HMAC │ │
│ FastAPI + Web UI │ auth │ GPU job lifecycle │
└────────┬────────────┘ └──────────────────────┘
│
│ HTTP proxy (per-model routing)
▼
┌─────────────────────┐ ┌─────────────────────┐
│ Inference Server │ │ Inference Server │
│ (Model A) │ │ (Model B) │
│ GPU + Docker │ │ GPU + Docker │
│ (weights baked in) │ │ (weights baked in) │
└─────────────────────┘ └─────────────────────┘
/generate and /health endpoints. Model weights are baked into each Docker image.Each demo has its own README with detailed install and build instructions. Here's the general pattern:
# Required for all control planes
export RENDER_API_KEY="your-render-public-key"
export RENDER_SECRET_KEY="your-render-secret-key"
# Model configuration (JSON map — one image per model)
export RENDER_INFERENCE_MODELS='{
"ModelName": {
"image": "your-registry/inference-image:tag",
"min_vram_gb": 8
}
}'
cd render-image-gen # or any control plane folder
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000
cd render-image-gen-inference # or any inference folder
# Download model weights (one-time) — see each inference folder's README
# for the exact command (some use AUDIOCRAFT_CACHE_DIR or --output-dir)
HF_HOME=./model-cache python3 download_model.py <model_id>
# Build and push (build.sh pushes automatically)
./build.sh <model_id> <image_tag>
Requires an NVIDIA GPU with CUDA:
cd render-image-gen-inference
pip install -r requirements.txt
MODEL_ID=stabilityai/sdxl-turbo uvicorn main:app --host 0.0.0.0 --port 8000
See each folder's README for demo-specific details.
manifest-render-demo/
├── render-image-gen/ # Text-to-image control plane
├── render-image-gen-inference/ # Text-to-image inference (diffusers)
├── render-music-gen/ # Text-to-music control plane
├── render-music-gen-inference/ # Text-to-music inference (ACE-Step, DiffRhythm2)
├── render-hum-music-gen/ # Hum-to-music control plane
├── render-hum-music-gen-inference/ # Hum-to-music inference (MusicGen Melody)
├── render-voice-clone/ # Voice clone control plane
├── render-voice-clone-inference/ # Voice clone inference (XTTS-v2 + MuseTalk)
├── render-dashboard/ # Render Network metrics dashboard
├── DEVELOPMENT.md # Architecture deep-dive and developer guide
└── SECURITY.md # Security model and trust boundaries
All GPU demo control planes share the same core environment variables (the dashboard has its own configuration — see its README):
| Variable | Required | Default | Description |
|---|---|---|---|
RENDER_API_KEY | Yes | — | Render Compute API public key |
RENDER_SECRET_KEY | Yes | — | Render Compute API secret key |
RENDER_INFERENCE_MODELS | Yes* | {} | JSON map of model configs |
RENDER_INFERENCE_IMAGE | No* | — | Fallback: single inference image |
RENDER_INFERENCE_PORT | No | 8000 | Container port the inference server listens on |
RENDER_INFERENCE_TIMEOUT | No | 120* | Timeout (seconds) for proxied generation requests |
RENDER_IDLE_SHUTDOWN_MINUTES | No | 43200 | Minutes of inactivity before auto-stopping a model's job (30 days) |
RENDER_DEPLOY_TIMEOUT_MINUTES | No | 150 | Minutes to wait for GPU before cancelling a stuck deploy |
RENDER_SSH_PUBKEY | No | — | SSH public key; enables SSH access to inference containers |
INFERENCE_SECRET | No | random | Shared secret for inference auth; also enables TLS when explicitly set |
*One of RENDER_INFERENCE_MODELS or RENDER_INFERENCE_IMAGE is required. RENDER_INFERENCE_TIMEOUT default varies by demo: 120s for image-gen, 300s for music demos, 600s for voice clone. See each folder's README for the exact default.
All inference servers share these environment variables (MODEL_ID does not apply to voice-clone-inference, which uses a fixed pipeline):
| Variable | Required | Default | Description |
|---|---|---|---|
MODEL_ID | No | varies per demo | Model identifier; must have a registered profile |
INFERENCE_SECRET | No | — | Shared secret injected by the control plane at deploy time |
INFERENCE_TLS | No | — | Set to 1 by the control plane when TLS is enabled |
INFERENCE_PORT | No | 8000 | Port uvicorn listens on |
HF_HOME | No | varies | Model cache directory (set in each Dockerfile; see per-demo README) |
MAX_QUEUED_REQUESTS | No | 10 | Backpressure limit — excess requests get 503 |
| Document | Audience | Description |
|---|---|---|
| DEVELOPMENT.md | Developers | Architecture deep-dive, adding models, adapting for new domains |
| SECURITY.md | Developers, Ops | Security model, TLS, auth, trust boundaries |
| render-image-gen-inference/API.md | API consumers | Image generation inference API reference |
Each service folder also has its own README with install, build, and run instructions.
INFERENCE_SECRET.RENDER_DEPLOY_TIMEOUT_MINUTES (default 150) are auto-cancelled.description field in node_urls (container port), not the port field (external port).INFERENCE_SECRET is explicitly set, both sides derive a deterministic Ed25519 TLS certificate from the secret. See SECURITY.md for details.Python
62.0%
JavaScript
22.4%
HTML
9.6%
Shell
3.0%
Dockerfile
3.0%
A collection of AI demo apps that run web UIs on Barney and dispatch GPU inference jobs to Render GPU. The GPU inference demos use lazy auto-deploy for their model pipelines — interact with the UI and the system handles GPU provisioning automatically.
| Demo | Control Plane | Inference Server | Description |
|---|---|---|---|
| Text-to-Image | render-image-gen/ | render-image-gen-inference/ | Generate images from text prompts (SDXL-Turbo, FLUX.1-schnell, Kolors, SD 3.5 Large Turbo) |
| Text-to-Music | render-music-gen/ | render-music-gen-inference/ | Generate music from text prompts with lyrics support (ACE-Step, DiffRhythm2) |
| Hum-to-Music | render-hum-music-gen/ | render-hum-music-gen-inference/ | Transform humming/singing into full music tracks (MusicGen Melody) |
| Voice Clone | render-voice-clone/ | render-voice-clone-inference/ | Clone a voice from a reference clip and generate lip-synced video (XTTS-v2 + MuseTalk) |
| Dashboard | render-dashboard/ | — | Multi-account Render Network metrics and monitoring |
All demos (except the dashboard) follow the same two-service architecture:
┌─────────────────────┐ ┌──────────────────────┐
│ Control Plane │ │ Render Compute API │
│ (Barney) │────────▶│ api.compute.x.io │
│ │ HMAC │ │
│ FastAPI + Web UI │ auth │ GPU job lifecycle │
└────────┬────────────┘ └──────────────────────┘
│
│ HTTP proxy (per-model routing)
▼
┌─────────────────────┐ ┌─────────────────────┐
│ Inference Server │ │ Inference Server │
│ (Model A) │ │ (Model B) │
│ GPU + Docker │ │ GPU + Docker │
│ (weights baked in) │ │ (weights baked in) │
└─────────────────────┘ └─────────────────────┘
/generate and /health endpoints. Model weights are baked into each Docker image.Each demo has its own README with detailed install and build instructions. Here's the general pattern:
# Required for all control planes
export RENDER_API_KEY="your-render-public-key"
export RENDER_SECRET_KEY="your-render-secret-key"
# Model configuration (JSON map — one image per model)
export RENDER_INFERENCE_MODELS='{
"ModelName": {
"image": "your-registry/inference-image:tag",
"min_vram_gb": 8
}
}'
cd render-image-gen # or any control plane folder
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000
cd render-image-gen-inference # or any inference folder
# Download model weights (one-time) — see each inference folder's README
# for the exact command (some use AUDIOCRAFT_CACHE_DIR or --output-dir)
HF_HOME=./model-cache python3 download_model.py <model_id>
# Build and push (build.sh pushes automatically)
./build.sh <model_id> <image_tag>
Requires an NVIDIA GPU with CUDA:
cd render-image-gen-inference
pip install -r requirements.txt
MODEL_ID=stabilityai/sdxl-turbo uvicorn main:app --host 0.0.0.0 --port 8000
See each folder's README for demo-specific details.
manifest-render-demo/
├── render-image-gen/ # Text-to-image control plane
├── render-image-gen-inference/ # Text-to-image inference (diffusers)
├── render-music-gen/ # Text-to-music control plane
├── render-music-gen-inference/ # Text-to-music inference (ACE-Step, DiffRhythm2)
├── render-hum-music-gen/ # Hum-to-music control plane
├── render-hum-music-gen-inference/ # Hum-to-music inference (MusicGen Melody)
├── render-voice-clone/ # Voice clone control plane
├── render-voice-clone-inference/ # Voice clone inference (XTTS-v2 + MuseTalk)
├── render-dashboard/ # Render Network metrics dashboard
├── DEVELOPMENT.md # Architecture deep-dive and developer guide
└── SECURITY.md # Security model and trust boundaries
All GPU demo control planes share the same core environment variables (the dashboard has its own configuration — see its README):
| Variable | Required | Default | Description |
|---|---|---|---|
RENDER_API_KEY | Yes | — | Render Compute API public key |
RENDER_SECRET_KEY | Yes | — | Render Compute API secret key |
RENDER_INFERENCE_MODELS | Yes* | {} | JSON map of model configs |
RENDER_INFERENCE_IMAGE | No* | — | Fallback: single inference image |
RENDER_INFERENCE_PORT | No | 8000 | Container port the inference server listens on |
RENDER_INFERENCE_TIMEOUT | No | 120* | Timeout (seconds) for proxied generation requests |
RENDER_IDLE_SHUTDOWN_MINUTES | No | 43200 | Minutes of inactivity before auto-stopping a model's job (30 days) |
RENDER_DEPLOY_TIMEOUT_MINUTES | No | 150 | Minutes to wait for GPU before cancelling a stuck deploy |
RENDER_SSH_PUBKEY | No | — | SSH public key; enables SSH access to inference containers |
INFERENCE_SECRET | No | random | Shared secret for inference auth; also enables TLS when explicitly set |
*One of RENDER_INFERENCE_MODELS or RENDER_INFERENCE_IMAGE is required. RENDER_INFERENCE_TIMEOUT default varies by demo: 120s for image-gen, 300s for music demos, 600s for voice clone. See each folder's README for the exact default.
All inference servers share these environment variables (MODEL_ID does not apply to voice-clone-inference, which uses a fixed pipeline):
| Variable | Required | Default | Description |
|---|---|---|---|
MODEL_ID | No | varies per demo | Model identifier; must have a registered profile |
INFERENCE_SECRET | No | — | Shared secret injected by the control plane at deploy time |
INFERENCE_TLS | No | — | Set to 1 by the control plane when TLS is enabled |
INFERENCE_PORT | No | 8000 | Port uvicorn listens on |
HF_HOME | No | varies | Model cache directory (set in each Dockerfile; see per-demo README) |
MAX_QUEUED_REQUESTS | No | 10 | Backpressure limit — excess requests get 503 |
| Document | Audience | Description |
|---|---|---|
| DEVELOPMENT.md | Developers | Architecture deep-dive, adding models, adapting for new domains |
| SECURITY.md | Developers, Ops | Security model, TLS, auth, trust boundaries |
| render-image-gen-inference/API.md | API consumers | Image generation inference API reference |
Each service folder also has its own README with install, build, and run instructions.
INFERENCE_SECRET.RENDER_DEPLOY_TIMEOUT_MINUTES (default 150) are auto-cancelled.description field in node_urls (container port), not the port field (external port).INFERENCE_SECRET is explicitly set, both sides derive a deterministic Ed25519 TLS certificate from the secret. See SECURITY.md for details.Python
62.0%
JavaScript
22.4%
HTML
9.6%
Shell
3.0%
Dockerfile
3.0%