File size: 5,223 Bytes
e174bd3
 
 
 
 
c332cc2
 
 
 
 
 
 
 
6e59ca4
 
 
 
 
 
 
 
 
 
73d1186
 
 
 
 
e174bd3
c332cc2
e174bd3
c332cc2
 
139a78d
c332cc2
 
e174bd3
 
c332cc2
 
 
 
 
 
 
 
 
e174bd3
 
 
73d1186
e174bd3
6e59ca4
 
 
 
 
e174bd3
6e59ca4
 
 
e174bd3
 
 
c332cc2
 
 
 
 
 
6e59ca4
 
 
 
73d1186
 
 
 
6e59ca4
73d1186
 
 
 
e174bd3
 
139a78d
c332cc2
e174bd3
 
73d1186
 
e174bd3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# plx1029/comfyui-qwen β€” prebaked ComfyUI image (H100 / RunPod)

Everything from the manual setup is baked in β€” **no reinstalling on new pods**:

- Base: `runpod/pytorch:1.0.2-cu1281-torch280-ubuntu2404` (torch 2.8.0+cu128, Python 3.12)
- **v3: everything lives in `/workspace`:**
  - ComfyUI @ `35c1470935044be5610a81d46e57922a8a598c6c` at **`/workspace/ComfyUI`**
  - workflows at **`/workspace/workflows/`** (`qwen-loras-very-good-nsfw.json`,
    `qwen-edit-nsfw.json`, `head-swap-flux-klein.json`) β€” also baked into the
    ComfyUI workflow browser
  - **`/workspace/download_missing_models.sh`** β€” pick workflows, it fetches their
    missing models from `hf.co/aleph65/ComfyUI` into place (prompts for HF token
    or reads `$HF_TOKEN`); still on PATH via symlink
- **v4: ComfyUI does NOT auto-start** (was the default in v3). Run `comfy` in a
  terminal, or set `COMFY_AUTOSTART=true` in the pod env to re-enable
  (port **7865**, log `/workspace/comfyui.log`, auto-restart loop).
- **v5: fresh workflows + downloader on every boot** β€” `refresh-workspace.sh`
  re-pulls `workflows/` (mirrored, deletions included),
  `download_missing_models.sh`, and `README.md` from `hf.co/aleph65/ComfyUI` at
  startup, using `HUGGING_FACE_ACCESS_TOKEN`/`HF_TOKEN` if set. On any failure
  the existing copies stay. Set `WORKSPACE_REFRESH=false` to disable.
- **v5: `claude` alias** β€” in interactive shells `claude` runs
  `IS_SANDBOX=1 claude --dangerously-skip-permissions` (via `/root/.bash_aliases`).
- **v6: launcher scripts in `/workspace`** β€” `start_comfy` (frees port 7865 then
  runs `cd /workspace/ComfyUI && python main.py --listen 0.0.0.0 --port 7865
  --enable-manager`) and `claude_start.sh` (`IS_SANDBOX=1 claude
  --dangerously-skip-permissions`). Both are re-pulled from
  `hf.co/aleph65/ComfyUI` on every boot by `refresh-workspace.sh`.
- rgthree-comfy @ `27b4f4c` in `custom_nodes/`
- comfyui-manager 4.2.2 + all pip deps preinstalled system-wide
- Manager config baked: `security_level = weak`, `network_mode = personal_cloud`
- `huggingface_hub` + `hf_transfer` preinstalled for fast model downloads
- [Claude Code](https://claude.com/claude-code) CLI preinstalled (`claude`), on PATH,
  with `bypassPermissions` as the default permission mode
- The old image-root `/ComfyUI` copy is **removed** (whiteout) β€” `/workspace` is
  the single source of truth.

Models are NOT in the image (keep them on the network volume, as before).
No secrets are baked in either (the image is public).

## Network volumes

If a network volume is mounted at `/workspace` it shadows the baked-in files.
On boot, `seed-workspace.sh` restores whatever is missing (`ComfyUI/`,
`workflows/`, `download_missing_models.sh`) from a compressed seed at
`/opt/workspace-seed.tar.gz` β€” **never overwriting existing files**, so models
and outputs already on the volume are untouched.

## Using it on RunPod

1. Create a template with container image `plx1029/comfyui-qwen:v6`.
2. Expose HTTP port **7865** (plus 8888/22 as usual).
3. Set `HUGGING_FACE_ACCESS_TOKEN` in the template env (used for the boot-time
   workflow/script refresh and by `download_missing_models.sh`).
4. (Optional) attach your network volume at `/workspace`.
5. In a terminal: `download_missing_models.sh` to fetch models for your
   workflows, then `comfy` to start ComfyUI (or set `COMFY_AUTOSTART=true`).

`COMFY_PORT` overrides the port. `COMFY_AUTOSTART=true` enables auto-start
(otherwise run `comfy` manually). `WORKSPACE_REFRESH=false` skips the boot
refresh.

## How the image was built

No Docker daemon exists on RunPod pods (or the build sandbox), so images are
assembled daemonlessly: v1 with [`crane`](https://github.com/google/go-containerregistry)
(pip-delta + git clones appended as one OCI layer); v2 with `skopeo` + `umoci`;
**v3 with `crane append`** β€” a single layer holding `/workspace` (ComfyUI +
workflows + downloader), the seed tarball, the new startup scripts, and a
whiteout of the old `/ComfyUI`, appended on top of v2 (the ~11 GB base is never
re-uploaded); **v4 with `crane append` on top of v3** (no-auto-start
`start-comfy.sh`, boot refresh of the downloader, updated seed tarball);
**v5 with `crane append` on top of v4** β€” a small layer holding
`refresh-workspace.sh`, the updated `start-comfy.sh`, `/root/.bash_aliases`,
and current `workflows/` + `download_missing_models.sh` copies;
**v6 with `crane append` on top of v5** β€” a small layer holding the two
launcher scripts (`/workspace/start_comfy`, `/workspace/claude_start.sh`) and
an updated `refresh-workspace.sh` that also re-pulls them at boot.

Note: `/opt/workspace-seed.tar.gz` inside v6 still holds the v4-era workflows
and does not include `start_comfy`/`claude_start.sh` β€” that's fine, the boot
refresh fetches them from the HF repo on the next start (only relevant when a
network volume shadows the baked-in `/workspace`).

`Dockerfile` in this directory is the reproducible equivalent for rebuilding on
any machine with real Docker (build from the repo root β€” the context needs
`download_missing_models.sh` and `workflows/`):

```bash
docker build -t plx1029/comfyui-qwen:v6 -f docker/Dockerfile .
docker push plx1029/comfyui-qwen:v6
```