ComfyUI 0.36.0 runs in a locally built Docker image on VM210: Python base pinned by digest, sources pinned by commit, dependencies locked with their hashes (wheels downloaded then installed offline). Validated environment: Python 3.12.14, PyTorch 2.11.0, CUDA 13.0. Container and cache-fix details on the Docker page.
Alternative actually explored: an earlier Windows POC (VM260) had tried out ComfyUI via Docker Desktop with SDXL / Flux workflows. This Linux deployment (VM210) is distinct from it and has not yet confirmed Flux usage; only RealVisXL was used and measured here. Since the RTX 5090 is exclusive, VM210 and VM260 do not use it at the same time.
Hardening choices made: unprivileged execution, read-only root filesystem, models mounted read-only, custom and API nodes disabled (without blocking outbound network in general), interface published on loopback only (access via SSH tunnel, no Internet publication).
Account, host and path names replaced with examples. No secret is required. Container and API verification (docker inspect/logs, ollama ps, curl) detailed on the Docker page; GPU telemetry and checkpoint SHA-256 verification on the AI & LLM page.
$SshTarget = '<compte>@<hote-gpu>' ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:8188:127.0.0.1:8188 $SshTarget
Then open http://127.0.0.1:8188/ on that machine. Terminal silence after authentication is normal: -N opens the tunnel without a remote session. Ctrl+C closes the tunnel but does not stop ComfyUI; an unreachable interface after closing the terminal is therefore not necessarily a server failure.
Symptom: a graph mixing the RealVisXL checkpoint with SD3/AuraFlow nodes was built then discarded (graph incompatibility). A generation cancellation then got stuck, without an exact cause being established; a targeted restart of the container was needed to return to a healthy state. Solution adopted: back to an adapted SDXL graph (consistent with RealVisXL), which then worked normally.
A second incident, described on the Docker page, affected container startup (getpass.getuser() failing for lack of a known UID); it was fixed with environment variables without rebuilding the image.
| Trial | Observation | Scope |
|---|---|---|
| 512×512 portrait, 8 steps | 8.03 s (including initial load) | Functional validation, not a quality test |
| 1,024×1,024 portrait, 30 steps | Image obtained (DPM++ SDE Karras) | Duration not reliably attributed in the log |
- Hardening a ComfyUI container (unprivileged, read-only root FS)
- Checkpoint integrity verification via SHA-256 hash
- Sharing an exclusive GPU between LLM inference and image generation
- Diagnosing ComfyUI graph incompatibility and recovering from a stuck state
- Secure remote access via SSH tunnel, no Internet publication
Limitations and open work
- Automatic request sharing between ComfyUI and Ollama still needs to be built (manual switching for now)
- Anatomical realism, poses and quality at scale remain to be evaluated
- Use of Flux on this Linux target is not confirmed — only RealVisXL was measured here
- Agentic/n8n integrations, shared request admission and the restart-after-reboot policy remain open work
- RealVisXL V5.0 is released under the Open RAIL++ license: available weights do not mean the absence of license restrictions