让 ComfyUI 和别的 UI 共享同一份模型目录

2026-08-09

硬盘被模型撑爆这件事,往往不是因为模型多,而是因为同一个模型在机器上躺了三份:一份在 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/vaeVAE 放这里
models/embeddingstextual inversion 概念 / embedding 放这里
models/vae_approxTAESD 高质量预览用的解码器放这里

除此之外,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\ 下对应的子目录。

五、怎么验收

改完之后按这四步检查,顺序别乱:

  1. 先看文件名ls(或 Windows 的 dir)确认目录里是 extra_model_paths.yaml,不是 extra_model_paths.yaml.example,也不是被资源管理器隐藏扩展名坑成的 extra_model_paths.yaml.txt。官方给的动作只有「改名并编辑」这一步,名字没改对,后面所有排查都是白费。
  2. 再看路径能不能落到实处。如果你用的是 --models-directory,它会在启动时校验存在与可读,起不来就直接暴露;如果你用的是 yaml 或 --extra-model-paths-config,官方文档没说会做同样的校验,所以别指望它替你报错——自己先把路径粘到文件管理器里打开一次确认。
  3. 回到界面上确认模型真的被看见了。加载器节点的模型下拉列表里能不能选到共享盘上的那些文件,是最终判据。列表没刷新时,README 的快捷键表里有一个 R(刷新图)可以先试,别急着重装。
  4. 拿一类特定文件做交叉验证。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 对一下参数还在不在。

延伸阅读


本文依据 ComfyUI 官方仓库(github.com/Comfy-Org/ComfyUI)的 README、comfy/cli_args.py、 release notes 与官方安全公告整理,核对日 2026-08-09,对应版本 v0.31.0; 文中引用的 issue 状态为该日期的快照。本文内容为官方文档与源码口径,非本机实测。 参数、默认值与功能随版本变动,请以官方文档与 python main.py --help 的实际输出为准。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。