让 ComfyUI 和别的 UI 共享同一份模型目录
硬盘被模型撑爆这件事,往往不是因为模型多,而是因为同一个模型在机器上躺了三份:一份在 ComfyUI 的 models/checkpoints,一份在另一个 UI 自己的目录里,还有一份是当初下载完忘了删的原始文件。真要省,就得让几个程序去读同一份文件,而不是各自复制。
ComfyUI 在这件事上给的官方入口只有一个,而且写得很克制。本文所有事实来自 ComfyUI 官方仓库 README 与 comfy/cli_args.py(v0.31.0,核对日 2026-08-09),不是本机实测;参数与默认值会随版本变,最终以 python main.py --help 的实际输出为准。
一、官方入口:一个需要你手动改名的示例文件
README 的说法很直白:仓库里带了一个 extra_model_paths.yaml.example,把它改名为 extra_model_paths.yaml 并编辑,就能设置模型搜索路径、与其它 UI 共享模型。README 在 Features 章节也重复了同一件事——用 extra_model_paths.yaml 配置额外的模型位置。
它默认是 .example 结尾而不是直接生效,这个设计其实挺反直觉的:新装完 ComfyUI,目录里明明躺着这个文件,你不动它就永远不起作用。很多人以为自己「配置没生效」,实际是文件名还带着 .example 后缀。
改名命令,Linux / macOS:
cd <你的 ComfyUI 目录>
mv extra_model_paths.yaml.example extra_model_paths.yaml
Windows(命令提示符):
cd <你的 ComfyUI 目录>
ren extra_model_paths.yaml.example extra_model_paths.yaml
用 standalone windows 构建(也就是官方的 Windows Portable 包)的话,README 明确交代了位置:这个文件就在 ComfyUI 目录下。portable 包是解压即用的(README 说用 7-Zip 或较新版本 Windows 的资源管理器解压就能跑),解压后别在外层乱翻,认准那个能执行 python main.py、里面有 models\ 的 ComfyUI 目录。
至于这个 YAML 文件里面怎么写——README 只说了「改名并编辑」,没有在文档里列出它的字段结构,所以本文不猜它的键名和层级。正确做法是先把 .example 那份原样打开看一遍,它本身就是官方给的示例,照着里面已有的段落改路径最稳,比照抄任何第三方教程都可靠。
二、不想改名:--extra-model-paths-config 可以重复给
如果你不想动 ComfyUI 目录里的文件(比如 portable 包想保持干净、或者配置文件要跟着你的 dotfiles 走),comfy/cli_args.py(v0.31.0)里有对应参数:
| 参数 | 含义 |
|---|---|
--extra-model-paths-config PATH [PATH ...] | 加载一个或多个 extra_model_paths.yaml 文件,可重复 append |
「可重复 append」这四个字是关键,它意味着两种写法都成立:
python main.py --extra-model-paths-config D:/shared/paths-a.yaml D:/shared/paths-b.yaml
python main.py --extra-model-paths-config D:/shared/paths-a.yaml --extra-model-paths-config D:/shared/paths-b.yaml
这带来一个很实用的组织方式:把「团队共用的模型盘」和「我自己临时下载的实验模型」拆成两个 yaml,前者放版本库里全组共享,后者留在本地。要临时关掉实验模型,删掉命令行里那一段就行,不用回头编辑文件。
顺带说一句,--extra-model-paths-config 加载的是额外的搜索路径配置,它和下一节那两个参数不是一回事,先别混着用。
三、--models-directory 与 --base-directory:这两个不是「共享」,是「搬家」
新手最容易在这里走错路:想共享模型,结果搜到了 --base-directory,一加上去发现连输出图片都跑到别的地方去了。看一下 comfy/cli_args.py(v0.31.0)里这组参数的分工:
| 参数 | 说明 |
|---|---|
--base-directory | 一次性设置 models、custom_nodes、input、output、temp、user 六类目录的基准目录 |
--models-directory | 设置 models 目录,覆盖 --base-directory 里的 models 文件夹 |
--output-directory / --input-directory / --temp-directory / --user-directory | 各自设置对应目录,help 里都写了 Overrides --base-directory |
读这张表有两个要点。
第一,--base-directory 是「一把抓」,它一口气挪走六类目录,其中只有 models 是你想动的,另外五类是顺带的。单纯为了共享模型而上 --base-directory,属于用大炮打蚊子,而且会让你后面找不到自己的输出。
第二,几个单项参数是「精确覆盖」:两者同时给的时候,单项赢。所以「基准目录搬到 D 盘、但模型走网络共享盘」这种组合是官方参数语义支持的:
python main.py --base-directory D:/comfy-data --models-directory Z:/shared/models
以上为按官方参数语义组合的示例,未逐项实测,以官方文档与 --help 输出为准。
还有一处差别值得记住:--user-directory 和 --models-directory 会在启动时校验路径——必须已存在、是目录、可读;而 --base-directory 的校验路径不同(源码里没走 is_valid_directory)。换句话说,--models-directory 指到一个不存在的盘符时,启动阶段就会因为校验不过而暴露问题,这反而是好事:错得早比错得晚强。
那么共享模型到底该用哪个?判断很简单:
- 只是想多加几处模型搜索位置、原来的
models/还继续用 → 走extra_model_paths.yaml或--extra-model-paths-config。 - 想把 models 目录整个换到别处(比如从系统盘搬到大容量盘)→ 用
--models-directory。 - 想把整个工作数据区(含 output、user 等)都搬走 → 才轮到
--base-directory。
四、哪些子目录名是有依据的,哪些本文不猜
共享目录时最想要的一张表,就是「哪个模型该放哪个子目录」。这里必须说清楚我们的依据边界。
README 里明确点过名的目录只有这几个:
| 目录 | README 里的说法 |
|---|---|
models/checkpoints | 小模型(单个 ckpt / safetensors)放这里 |
models/vae | VAE 放这里 |
models/embeddings | textual inversion 概念 / embedding 放这里 |
models/vae_approx | TAESD 高质量预览用的解码器放这里 |
除此之外,README 对「很多大模型有多个文件」的处理只给了一句话:按各模型自己的说明,放进 ComfyUI\models\ 下对应的子目录——它没有列出这些子目录的名字。所以本文不猜任何其它子目录名。你在别处看到的那些目录名可能是对的,但它们不在我们这次核对的官方文档口径里;真要确认,以你本地那份 extra_model_paths.yaml.example 里已有的条目和各模型自己的发布说明为准。
这条边界在共享场景下尤其要守住:你写进 yaml 的键名如果和 ComfyUI 实际认的对不上,表现就是「配置写了、模型还是看不见」,而且不会有人告诉你哪一行错了。
所以配好之后,共享盘那一侧「长什么样」是有依据可对的——只对上面这四个有出处的目录:
Z:/shared/models/
├── checkpoints/ # 单文件的 ckpt / safetensors
├── vae/ # VAE
├── embeddings/ # textual inversion / embedding
└── vae_approx/ # TAESD 预览解码器(taesd_decoder.pth 等)
其余子目录不是不能有,而是名字得来自你本地 .example 文件里已有的条目或模型自己的发布说明,不该来自一篇文章的想象。多文件的大模型尤其如此:README 的原话就是按各模型说明放进 ComfyUI\models\ 下对应的子目录。
五、怎么验收
改完之后按这四步检查,顺序别乱:
- 先看文件名。
ls(或 Windows 的dir)确认目录里是extra_model_paths.yaml,不是extra_model_paths.yaml.example,也不是被资源管理器隐藏扩展名坑成的extra_model_paths.yaml.txt。官方给的动作只有「改名并编辑」这一步,名字没改对,后面所有排查都是白费。 - 再看路径能不能落到实处。如果你用的是
--models-directory,它会在启动时校验存在与可读,起不来就直接暴露;如果你用的是 yaml 或--extra-model-paths-config,官方文档没说会做同样的校验,所以别指望它替你报错——自己先把路径粘到文件管理器里打开一次确认。 - 回到界面上确认模型真的被看见了。加载器节点的模型下拉列表里能不能选到共享盘上的那些文件,是最终判据。列表没刷新时,README 的快捷键表里有一个
R(刷新图)可以先试,别急着重装。 - 拿一类特定文件做交叉验证。embedding 是最好验的:README 说把 embedding 放进
models/embeddings后,在CLIPTextEncode节点里用embedding:embedding_filename.pt引用(扩展名可省略)。共享目录如果配对了,这种写法就能取到文件;配错了,你会立刻知道。同理,models/vae_approx里的 TAESD 解码器要配合--preview-method taesd并重启才生效。
最容易翻车的一步不是写配置,而是改完配置忘了重启。启动参数和配置文件都是在进程启动时读取的,页面上刷新几次不会让它们重新生效。
六、什么情况别这么干
- 多个程序同时写同一个目录时要谨慎。 共享是让 ComfyUI 多一处「读」的位置;至于另一个 UI 会不会往那里下载、改名、清理文件,ComfyUI 管不着,官方文档也没有对这种并发场景的任何承诺。共享盘最好只放你自己搬进去的成品文件。
- 别指望共享目录能触发自动下载。 README 说得很清楚,核心不会下载任何东西,除非你要求(还专门给了
--disable-api-nodes强制离线)。路径写错的结果就是「找不到」,不会有人替你补齐。 - 网络盘、权限受限目录要先过校验这一关。
--models-directory要求路径已存在、是目录且可读,网络盘没挂上或没权限时,问题会在启动阶段出现,这时候该修的是挂载和权限,不是配置文件。 - 换 portable 包目录时记得把配置带走。 README 对 portable 包的定位是「拿到最新 commit + 完全便携」,它的下载地址指向 releases 的最新包;只要你换了一份新解压的目录,自己改名生成的
extra_model_paths.yaml就不会跟着过去(README 里带的仍然是.example那份)。这时候的表现是「昨天还好好的,今天模型全没了」,实际只是配置没搬。顺带一提,README 对普通用户其实并不推荐 portable,明写的是 It is not recommended for regular users,常规用户走桌面应用即可。 - 想彻底整理磁盘布局的,别用共享凑合。 如果本意是「系统盘满了」,那问题的正解是
--models-directory把 models 整体挪走,而不是靠叠一堆额外搜索路径把摊子铺得更散。半年后你自己也说不清哪个模型来自哪条路径。
最后提醒一句版本口径:上面所有参数以 v0.31.0 的 comfy/cli_args.py 为准。ComfyUI 迭代很快,参数名和默认值都可能变,配置文件的字段结构同理,升级后如果共享突然失灵,先跑一次 python main.py --help 对一下参数还在不在。
延伸阅读
- 四个 portable 包别下错:ComfyUI Windows 便携版的选包与落地流程
- ComfyUI 的 Python 与 PyTorch 版本怎么定:照 README 版本矩阵倒推一条安装命令
- 让 ComfyUI 完全离线跑:
--disable-api-nodes之外还要关掉哪些出网路径
本文依据 ComfyUI 官方仓库(github.com/Comfy-Org/ComfyUI)的 README、comfy/cli_args.py、
release notes 与官方安全公告整理,核对日 2026-08-09,对应版本 v0.31.0;
文中引用的 issue 状态为该日期的快照。本文内容为官方文档与源码口径,非本机实测。
参数、默认值与功能随版本变动,请以官方文档与 python main.py --help 的实际输出为准。