ComfyUI的安装、远程访问与模型管理

ComfyUI安装在一台带GPU的Linux主机上,浏览器从另一台电脑访问。安装本身不复杂,容易留下问题的是远程监听:直接让ComfyUI暴露在局域网甚至公网,模型、工作流和生成结果都会跟着暴露。

最后的结构是ComfyUI只监听本机回环地址,Nginx再提供一个带认证的入口;跨网络访问时继续套SSH隧道或VPN,不直接开放ComfyUI端口。

用comfy-cli安装

官方的comfy-cli可以管理安装、启动、更新、模型和自定义节点。单独创建Python环境,避免和其他推理项目互相污染:

1
2
3
4
5
6
conda create -n comfy-env python=3.11 -y
conda activate comfy-env

python -m pip install --upgrade comfy-cli
comfy --install-completion
comfy install

ComfyUI还需要与显卡匹配的CUDA、ROCm或其他运行时。comfy install成功并不代表GPU环境一定正确,首次启动后仍要看终端里识别到的设备和PyTorch后端。

先让服务只监听回环地址:

1
2
conda activate comfy-env
comfy launch -- --listen 127.0.0.1 --port 8189

这里传给ComfyUI本身的参数放在--之后。使用回环地址监听以后,即使Nginx配置出错,8189端口也不会直接出现在其他主机上。

用Nginx增加访问入口

Basic Auth适合给内网或SSH隧道再加一道门槛,但它本身不加密密码。下面仍然只让Nginx监听回环地址:

1
2
3
sudo apt update
sudo apt install -y nginx apache2-utils
sudo htpasswd -c /etc/nginx/.comfyui_htpasswd comfyuser

创建/etc/nginx/sites-available/comfyui

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
listen 127.0.0.1:8188;
server_name localhost;

client_max_body_size 200M;

auth_basic "ComfyUI";
auth_basic_user_file /etc/nginx/.comfyui_htpasswd;

location / {
proxy_pass http://127.0.0.1:8189;
proxy_http_version 1.1;

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_read_timeout 3600;
proxy_send_timeout 3600;
}
}

ComfyUI的队列和进度更新会使用WebSocket,因此UpgradeConnection这两项不能省略。启用站点前先检查配置:

1
2
3
4
sudo ln -s /etc/nginx/sites-available/comfyui \
/etc/nginx/sites-enabled/comfyui
sudo nginx -t
sudo systemctl reload nginx

从自己的电脑建立SSH隧道:

1
ssh -L 8188:127.0.0.1:8188 user@192.0.2.10

浏览器随后访问http://127.0.0.1:8188。如果改成局域网监听,应同时用主机防火墙限制来源;需要公网访问则应配置HTTPS或放在可信VPN之后,不能只依赖明文Basic Auth。

模型放在哪里

ComfyUI会按模型用途读取不同目录,下载前要先看工作流中节点需要的类型。完整Checkpoint通常放在models/checkpoints,VAE、LoRA、文本编码器和扩散模型分别有自己的目录,不能只看扩展名全部堆到一起。

comfy-cli可以直接按URL下载到相对目录:

1
2
3
comfy model download \
--url 'https://example.com/model.safetensors' \
--relative-path models/checkpoints

从Hugging Face只取仓库里的单个文件时,hf命令更方便:

1
2
3
4
5
python -m pip install --upgrade 'huggingface_hub[cli]' hf_xet

hf download Comfy-Org/Qwen-Image_ComfyUI \
split_files/vae/qwen_image_vae.safetensors \
--local-dir ./hf-models

先下载到临时目录,再移动到对应模型目录,可以避免中途失败留下一个看起来正常、实际不完整的文件。模型来源只使用作者仓库、Hugging Face等可追溯页面,不使用带提取码的二次打包资源。

如果多个ComfyUI实例需要共享模型,不必复制几份。官方支持在ComfyUI根目录创建extra_model_paths.yaml,从外部目录增加搜索路径:

1
2
3
4
5
6
7
shared_models:
base_path: /srv/ai-models
checkpoints: checkpoints
vae: vae
loras: loras
diffusion_models: diffusion_models
text_encoders: text_encoders

路径调整后要重启ComfyUI。某个模型在节点下拉框里消失时,先检查它是否放对目录,以及YAML缩进和实际文件权限,不要立刻重新下载。

查看safetensors元数据

模型文件名经常被改过,只凭名称很难判断来源和用途。safetensors文件如果带有元数据,可以在CPU上读取,不需要把权重加载进显存:

1
2
3
4
5
6
7
8
9
10
11
from safetensors import safe_open

model_path = "./model.safetensors"

with safe_open(model_path, framework="pt", device="cpu") as model:
print(model.metadata())
keys = list(model.keys())
print("tensor count:", len(keys))
print("first keys:")
for key in keys[:20]:
print(key)

元数据可能为空,也不能单独证明文件安全或模型来源可靠;它只是在模型无法识别时多提供一条线索。

更新前留一份可回退状态

ComfyUI和自定义节点更新频繁,工作流失效往往不是主程序单独造成的。comfy-cli支持快照和更新,操作前先看当前命令帮助,记录核心版本、自定义节点和Python环境,再逐项升级。不要在同一次变更里同时更新ComfyUI、PyTorch、显卡驱动和全部节点,否则出问题后很难确认是哪一层发生变化。

参考资料