Unofficial ComfyUI image · RunPod & local NVIDIA

ComfyUI that's checked on a real GPU before you run it.

Rebuilt automatically on every ComfyUI release. The stable tag only moves after a real render on a GPU. Custom nodes and models are pinned in the repo, and no model weights are baked into the image.

$ docker pull ghcr.io/landygg/diffusion-runtime:stable

Current stable: see the latest release

Quick start

Same image in both places. Models download to the volume on first start, not into the image.

  1. 1

    Create a pod template

    In the RunPod console, create a new pod template with these values:

    Container image
    ghcr.io/landygg/diffusion-runtime:stable
    Expose HTTP ports
    8188
    Expose TCP ports
    22 only if you use SSH
    Volume mount path
    /workspace
    Environment optional
    COMFY_MODELS_GROUPSonly some model groups, e.g. z-image-turbo
    HF_TOKENfor gated or private models
    COMFY_EXTRA_ARGSextra ComfyUI flags, e.g. --lowvram
  2. 2

    Deploy and connect

    Deploy a pod from the template and open Connect → HTTP 8188. ComfyUI is up while the models download.

    # ComfyUI, through RunPod's proxy
    https://<pod-id>-8188.proxy.runpod.net
    
    # SSH, if you exposed port 22
    ssh root@<pod-ip> -p <port>
  3. 3

    Wait for the models

    On first start they download to the volume in the background. When the log says ready, press R in ComfyUI.

    # pod log (abridged)
    [models] downloading Comfy-Org/z_image_turbo@…
    [models] verifying sha256 of ae.safetensors
    [models] ok /workspace/models/vae/ae.safetensors
    …
    [models] 6/6 model(s) ready in /workspace/models

Models and your data

Everything ComfyUI writes goes to the volume at /workspace, not into the container.

Download models from the pod

The Download buttons in ComfyUI's "Missing Models" panel save the file to your browser, not to the pod. From a pod shell (web terminal or SSH) use these instead:

# one model, from its Hugging Face link
get-model https://huggingface.co/org/repo/…/x.safetensors
get-model org/repo/style.safetensors loras

# the pinned set in models.lock.yaml
sync-models [group ...] [--verify]
  • Downloads resume if interrupted, and a file only appears once its size and sha256 match.
  • The folder is taken from the path (text_encoders, vae, loras…) or you pass it.
  • get-model prints a pinned models.lock.yaml entry: add it to the repo to get that model on every new pod.
  • Gated models: accept the license on huggingface.co, then set HF_TOKEN or run hf auth login once.

What survives stopping the pod

On RunPod the container disk is reset when the pod stops; the volume is not.

  • ✓Models models/
  • ✓Workflows and ComfyUI settings user/
  • ✓Inputs and outputs input/ output/
  • ✓ComfyUI flags comfyui_args.txt
  • ✓Hugging Face token and cache, SSH host keys
  • ✕Custom nodes installed from the Manager, and pip packages they live in the image. Pin them in nodes.lock.yaml instead.

Stop ≠ terminate. A pod volume survives a stop but is deleted when the pod is terminated. To keep your data beyond that, attach a network volume at /workspace.

Why this image

Built for people who want the same ComfyUI tomorrow that worked today.

Tracks ComfyUI releases

The build checks for a new ComfyUI tag every 6 hours and builds it automatically.

A stable channel checked on a GPU

latest moves on its own; stable moves only after a maintainer renders on real hardware.

Everything pinned

ComfyUI tag, torch/CUDA wheels, custom nodes by commit, and models by Hugging Face commit + sha256.

Models on the volume

sync-models fetches the pinned set; get-model adds any Hugging Face model from a pod shell.

Built for RunPod

CORS set for the pod proxy, key-only SSH, the container stays up if ComfyUI crashes, and flags change without a redeploy.

Licenses included

Every image ships its third-party license inventory and exact package versions.

How an image reaches stable

A CPU can't catch out-of-memory errors, driver problems or a render that changes. So there's a human gate.

01

Build

Every 6 hours and on every recipe change. Only tags that don't exist yet.

<comfyui>-<variant>-r<hash>
02

CPU smoke test

Boots ComfyUI, checks imports, required nodes, model tools and the compiler.

latest
03

GPU check

A maintainer renders on real hardware. If it fails, it simply isn't promoted.

04

Promote

Re-points stable with no rebuild and publishes a GitHub Release with the digest.

stable

Tags

For fully reproducible runs, pin by digest: ghcr.io/landygg/diffusion-runtime@sha256:…

TagMovesUse it for
stable, stable-<variant>By hand, after a GPU renderPod templates and day-to-day work
latest, <comfyui>Automatically, every buildTrying a new ComfyUI release early
<comfyui>-<variant>-r<hash>Never (immutable)Reproducible pipelines; 5 newest kept per variant
keep-<name>By handAn image to keep forever
VarianttorchHost NVIDIA driver
cu1302.14≥ 580Default (stable, latest)
cu1282.11570–579Compatibility; still covers Blackwell

Configuration variables, model tools and development notes are in the README.