Files
vh 89a020a3cc fix(comfyui): native allocator + fp8 text-enc to stop FLUX.2 phantom-OOM
ComfyUI's default cudaMallocAsync allocator phantom-OOMs ('allocation
would exceed allowed memory', 0 bytes allocated) when the A6000 is
shared with the pinned TTS services (~22 GB used). --disable-cuda-malloc
switches to PyTorch's native allocator. --fp8_e4m3fn-text-enc loads the
FLUX.2 Qwen3-8B text encoder as fp8 (~8.7 GB) instead of upcasting the
fp8 file to fp16 (~16 GB), matching the box's Ampere-fp8 posture.

Applied via COMFY_CMDLINE_EXTRA in the canonical compose; verified the
allocator flipped to 'native' and both flags are on the live cmdline.
2026-06-05 01:43:28 -07:00
..

ComfyUI

Node-based Stable Diffusion / Flux inference UI.

Server: irv-ml1 (Irvine, WireGuard-only) Port: 8188 (configurable via .env) GPUs: both (RTX 3090 + RTX A6000 both exposed; select per-workflow) Image: mmartial/comfyui-nvidia-docker Native coexistence: runs independently of /opt/ComfyUI (the existing native install). Migrate models by copy or move — no cross-binding.

Path layout

All user state lives under a single host tree on /worktank, owned by lkraven:lkraven (UID/GID 1000) so external tooling can read and write workflow files directly. ComfyUI-Manager puts downloaded weights into the same tree, so everything is visible on the host.

Host path Container path Purpose Restic?
/worktank/comfyui/basedir/models/ /basedir/models/ Checkpoints, loras, vae, unet, controlnet, upscale, etc. excluded (bulk, regenerable)
/worktank/comfyui/basedir/user/default/workflows/ /basedir/user/default/workflows/ Workflow JSON files — external tools edit here included
/worktank/comfyui/basedir/custom_nodes/ /basedir/custom_nodes/ ComfyUI-Manager-installed nodes included
/worktank/comfyui/basedir/input/ /basedir/input/ Uploaded source images included
/worktank/comfyui/basedir/output/ /basedir/output/ Generated images excluded (regenerable)
/worktank/comfyui/run/ /comfy/mnt ComfyUI source + venv + pip cache (~5 GB) excluded (disposable)

Standard ComfyUI model subdirs the image creates under models/: checkpoints, clip, clip_vision, configs, controlnet, diffusers, embeddings, gligen, hypernetworks, loras, photomaker, style_models, unet, upscale_models, vae, vae_approx.

First-time deploy on irv-ml1

# 1. Push compose + env template from workstation
scripts/deploy-stack.sh irv-ml1 comfyui

# 2. Create basedir + run on the host (the image expects both to exist
#    as the target UID/GID before first up; it refuses to chown
#    mounted paths). One-time sudo because /worktank is root-owned.
ssh -t irv-ml1 'sudo mkdir -p /worktank/comfyui/{basedir,run} && \
                sudo chown -R lkraven:lkraven /worktank/comfyui'

# 3. Create .env and bring up. First `up` takes several minutes —
#    the image installs ~5 GB of Python packages on first boot.
ssh irv-ml1 '
  cd /opt/docker/compose/comfyui && \
  cp -n .env.example .env && \
  docker compose config >/dev/null && \
  docker compose up -d && \
  docker compose logs -f --tail=30
'

Once the logs settle on "Starting server" / "To see the GUI go to …", the UI is reachable at http://10.100.79.3:8188 (from the WG-tunnel side). The homepage hub on ana-docker auto-discovers it via the Dozzle agent + the homepage Docker socket integration already wired on irv-ml1.

Populate models

Native install lives at /opt/ComfyUI/models/ (owned llmuser). Copy or move into the container's tree — paths match 1:1:

# Example: copy one subdir at a time, preserving timestamps
ssh -t irv-ml1 'sudo -u lkraven rsync -av \
  /opt/ComfyUI/models/checkpoints/ \
  /worktank/comfyui/basedir/models/checkpoints/'

Repeat per subdir. rsync -av --remove-source-files if you want a true move (then clean up empty source dirs). The native install will continue to work with whatever remains under /opt/ComfyUI/models/.

Editing workflows from outside the container

Workflows live as JSON under /worktank/comfyui/basedir/user/default/workflows/ on the host, owned lkraven:lkraven. External tools running as lkraven can read and write them without coordination — ComfyUI picks up file changes on the next workflow load (no container restart needed).

Deploy updates

# After editing compose.yaml or .env.example here
scripts/deploy-stack.sh irv-ml1 comfyui
ssh irv-ml1 'cd /opt/docker/compose/comfyui && docker compose up -d'

Image version bump

# Pick a new tag from
# https://hub.docker.com/r/mmartial/comfyui-nvidia-docker/tags
ssh -t irv-ml1 '
  cd /opt/docker/compose/comfyui && \
  sed -i "s/^COMFYUI_VERSION=.*/COMFYUI_VERSION=<new-tag>/" .env && \
  docker compose pull && \
  docker compose up -d
'

Runtime lives at /worktank/comfyui/run/. For a fresh bootstrap (force venv + pip cache rebuild against the new image):

ssh irv-ml1 '
  cd /opt/docker/compose/comfyui && \
  docker compose down && \
  rm -rf /worktank/comfyui/run/* && \
  docker compose pull && \
  docker compose up -d
'

User state under /worktank/comfyui/basedir/ is untouched by either pattern.