1. 为什么你需要模型共享:告别重复下载的硬盘噩梦

如果你和我一样,既是 Stable Diffusion WebUI 的忠实用户,又沉迷于 ComfyUI 那可视化、可编程的工作流带来的强大与自由,那你一定对硬盘空间告急这件事深有体会。我刚开始玩的时候,那叫一个“豪横”,两个软件各自为政,模型库都是完整的一套。结果没几个月,我那1TB的固态硬盘就亮起了红灯,光是基础的大模型(Checkpoint)就占去了近200GB,更别提那些 LoRA、VAE、ControlNet 了。每次看到硬盘里那两个几乎一模一样的 stable-diffusion-webui/models 和 ComfyUI/models 文件夹,心里都在滴血——这不仅仅是空间的浪费,更是时间和带宽的浪费。

模型共享,说白了,就是让 ComfyUI 和 WebUI 这两个“兄弟”软件共用同一套模型文件。你只需要在硬盘上保留一份模型,通过一些“魔法”让两个软件都能找到并读取它。这带来的好处是立竿见影的:直接为你节省上百GB的硬盘空间。想象一下,你新下载了一个 7GB 的炫酷大模型,如果两边都要存,就是 14GB;而共享后,永远只占 7GB。日积月累,这个数字非常可观。

更重要的是管理上的便捷。你再也不用担心两个地方的模型版本不一致了。在 WebUI 里用某个 LoRA 调出了一个绝佳的效果,想在 ComfyUI 的工作流里复现?如果模型不共享,你可能得重新找、重新下载,费时费力还可能找错版本。共享之后,两个平台访问的是同一个文件,确保了效果的一致性。对于我这种喜欢在两个界面之间反复横跳、对比测试的玩家来说,这简直是福音。所以,无论你是硬盘空间捉襟见肘的新手,还是追求高效工作流的老鸟,模型共享都是你进阶路上必须掌握的核心技能。下面,我就把自己踩过坑、验证过的最稳方案,手把手教给你。

2. 核心原理与方案选择:符号链接 vs YAML 配置

在开始动手之前,我们得先搞清楚两种主流共享方式的“内核”是什么。理解了原理,你才能在做选择时心里有底,出了问题也知道从哪儿排查。

2.1 路径映射的魔法:它们是如何工作的?

无论是符号链接还是 YAML 配置,其核心思想都是 “路径映射”。就像在地图软件里,你可以把“我家”这个标签定位到真实的经纬度坐标上。对于 AI 绘画软件来说,它需要去某个固定的“地址”(比如 ComfyUI/models/checkpoints)找模型文件。我们的工作就是告诉它:“嘿,别去那个空房子了,真正的宝贝在另一个地方(stable-diffusion-webui/models/Stable-diffusion),你去那里拿。”

  • 符号链接(Symbolic Link / Junction): 这是一种由操作系统提供的“文件系统快捷方式”。你在 ComfyUI 的模型文件夹里创建的 checkpoints 目录,看起来是个文件夹,实际上是一个指向 WebUI 模型文件夹的“指针”。当 ComfyUI 尝试读取 checkpoints 时,操作系统会透明地将请求重定向到真正的目标路径。它对软件是完全无感的,软件以为自己就是在访问一个普通文件夹。这种方式性能损耗几乎为零,因为就是一次简单的文件系统跳转。
  • YAML 配置文件: 这是 ComfyUI 软件本身提供的一种高级功能。你通过编辑一个名为 extra_model_paths.yaml 的配置文件,明确地告诉 ComfyUI:“你去 base_path 指定的那个 WebUI 根目录下面,按照我给的子路径(checkpoints: “models/Stable-diffusion”)找模型。” ComfyUI 启动时会读取这个配置,然后按照你的指示去加载模型。这是一种应用层级的配置,更灵活,但需要软件支持。

2.2 两种方案全方位对比:一张表看懂怎么选

光讲原理可能还有点抽象,我把它俩的关键差异整理成了下面这个表格,你可以根据自己的情况对号入座:

特性维度符号链接 (Symbolic Link)YAML 配置文件 (extra_model_paths.yaml)
实现原理操作系统级文件系统“快捷方式”应用层配置文件路径重定向
操作难度简单,几条命令即可中等,需编辑配置文件,注意格式
存储节省100%,零冗余存储100%,零冗余存储
性能影响零损耗,与直接访问无异几乎为零,仅启动时多一次路径解析
适用场景单硬盘用户首选,路径简单直接多硬盘/多版本隔离用户,灵活性极高
跨平台Windows (mklink)、Mac/Linux (ln -s) 命令不同配置文件通用,路径格式需适配系统
管理灵活性较低,链接创建后路径固定极高,可配置多个基础路径,精细化管理子目录
风险提示删除源文件会导致链接失效(断链)配置文件格式错误(缩进、冒号)会导致读取失败

我个人的实战建议是:对于绝大多数单硬盘、只想简单快速实现共享的用户,优先选择符号链接。它更接近“系统原生”支持,稳定不出错,一劳永逸。而 YAML 配置方案则是为高阶场景准备的,比如你的 WebUI 装在 D 盘,ComfyUI 装在 E 盘;或者你希望将 SD 1.5 的模型和 SDXL 的模型从 WebUI 的不同子目录分别映射过来,这时候 YAML 的灵活性就发挥出来了。

3. 实战手册:符号链接方案(单硬盘终极选择)

好了,理论讲完,咱们直接上手。这里以最普遍的 Windows 系统为例,Mac 和 Linux 用户我会给出对应命令。假设你的 WebUI 安装在 D:\stable-diffusion-webui,ComfyUI 安装在 D:\ComfyUI。请务必以管理员身份打开命令提示符(CMD)或 PowerShell,这是成功的关键。

3.1 一步一步创建链接

我们的目标是让 ComfyUI 的各个模型子文件夹,都变成指向 WebUI 对应文件夹的“快捷方式”。

  1. 打开管理员终端:在 Windows 搜索框输入 cmd,右键点击“命令提示符”,选择“以管理员身份运行”。
  2. 创建主模型(Checkpoints)链接:这是占用空间最大的部分。执行以下命令:
    mklink /J "D:\ComfyUI\models\checkpoints" "D:\stable-diffusion-webui\models\Stable-diffusion"
    
    成功后会显示 为 D:\ComfyUI\models\checkpoints <<===>> D:\stable-diffusion-webui\models\Stable-diffusion 创建的联接。这里的 /J 参数表示创建“目录联接”(Junction),适用于 NTFS 文件系统。
  3. 创建 LoRA 模型链接:
    mklink /J "D:\ComfyUI\models\loras" "D:\stable-diffusion-webui\models\Lora"
    
  4. 创建 VAE 模型链接:
    mklink /J "D:\ComfyUI\models\vae" "D:\stable-diffusion-webui\models\VAE"
    
  5. 创建 ControlNet 模型链接(如果你的 WebUI 安装了 controlnet 扩展):
    mklink /J "D:\ComfyUI\models\controlnet" "D:\stable-diffusion-webui\extensions\sd-webui-controlnet\models"
    

对于 MacOS 或 Linux 用户,命令更统一,在终端中使用 ln -s 命令即可,但不需要管理员权限(通常):

# 创建 checkpoints 链接
ln -s ~/stable-diffusion-webui/models/Stable-diffusion ~/ComfyUI/models/checkpoints
# 创建 loras 链接
ln -s ~/stable-diffusion-webui/models/Lora ~/ComfyUI/models/loras
# 以此类推

3.2 验证与目录结构

创建完成后,如何验证是否成功呢?

  • 在文件资源管理器中查看:进入 D:\ComfyUI\models 文件夹,你会看到 checkpoints、loras 等文件夹的图标上可能有一个小小的快捷方式箭头(Windows 11 可能默认不显示)。更可靠的方法是看属性。
  • 在终端中验证:在 D:\ComfyUI\models 目录下执行 dir(Windows)或 ls -l(Mac/Linux)。你会看到类似这样的输出:
    ... checkpoints [JUNCTION] ...
    
    或者
    lrwxr-xr-x  1 user  staff    64B Jan 1 12:00 checkpoints -> /Users/xxx/stable-diffusion-webui/models/Stable-diffusion
    
    这明确表示它是一个链接(Junction/Symbolic Link)。

现在你的目录结构在逻辑上应该是这样的:

D:/
├── stable-diffusion-webui/
│   ├── models/
│   │   ├── Stable-diffusion/    (实际存放的大模型)
│   │   ├── Lora/                (实际存放的LoRA)
│   │   └── VAE/                 (实际存放的VAE)
│   └── extensions/
│       └── sd-webui-controlnet/
│           └── models/          (实际存放的ControlNet)
└── ComfyUI/
    └── models/
        ├── checkpoints -> D:/stable-diffusion-webui/models/Stable-diffusion
        ├── loras -> D:/stable-diffusion-webui/models/Lora
        ├── vae -> D:/stable-diffusion-webui/models/VAE
        └── controlnet -> D:/stable-diffusion-webui/extensions/sd-webui-controlnet/models

箭头 -> 表示符号链接指向关系。所有模型文件物理上只存在于 WebUI 的目录中,ComfyUI 通过链接“借用”。

4. 进阶指南:YAML 配置方案(多硬盘/复杂管理)

如果你遇到了更复杂的存储情况,比如软件和模型分散在不同硬盘,或者你有强烈的版本管理需求,那么 YAML 配置文件就是你的瑞士军刀。它让你能像写剧本一样,精确指挥 ComfyUI 去哪里找模型。

4.1 创建与配置 YAML 文件

首先,在 ComfyUI 的安装根目录下,找到一个名为 extra_model_paths.yaml.example 的示例文件。我们的任务就是复制并修改它。

  1. 复制并重命名文件:将 extra_model_paths.yaml.example 复制一份,并重命名为 extra_model_paths.yaml(注意:一定要去掉 .example 后缀)。这个文件就是 ComfyUI 会主动读取的配置文件。
  2. 使用文本编辑器打开:用 VS Code、Notepad++ 甚至系统自带的记事本(保存时注意编码)打开这个 extra_model_paths.yaml 文件。
  3. 编写配置内容:文件内部原本有很多注释,你可以清空,然后填入如下配置。这里假设你的 WebUI 在 D 盘,ComfyUI 在 E 盘,这是一个典型的多盘符场景:
    a111:
      base_path: "D:/stable-diffusion-webui"
      checkpoints: "models/Stable-diffusion"
      configs: "models/Stable-diffusion"
      vae: "models/VAE"
      loras: "models/Lora"
      embeddings: "embeddings"
      hypernetworks: "models/hypernetworks"
      controlnet: "extensions/sd-webui-controlnet/models"
    
    配置解析与避坑指南:
    • a111: 这是一个配置组的名字,你可以随意起,比如叫 webui 也行,但后面要保持一致。
    • base_path: 这是最关键的一行,指定了 WebUI 的绝对根路径。
    • 下面的 checkpoints:、loras: 等,都是相对于 base_path 的子路径。
    • 路径格式:请使用 正斜杠 /,并且不要在路径末尾加斜杠。这是 YAML 和跨平台兼容性的要求。
    • 缩进:YAML 依赖缩进来定义结构。请务必使用空格(建议2个或4个)进行缩进,切勿使用 Tab 键。base_path 和下面的子项属于同一层级,缩进量必须相同。
    • 引号:路径字符串建议用双引号 " 包裹,避免路径中有空格时出错。

4.2 高级配置:模型版本隔离

YAML 的强大之处在于可以精细映射。比如,你在 WebUI 里把 SD 1.5 模型和 SDXL 模型分别放在 models/Stable-diffusion/v1.5 和 models/Stable-diffusion/sdxl 两个子文件夹里管理,希望在 ComfyUI 中也区分开。你可以这样配置:

a111:
  base_path: "D:/stable-diffusion-webui"
  checkpoints:
    base_path: "D:/stable-diffusion-webui"
    sdxl: "models/Stable-diffusion/sdxl"
    v1_5: "models/Stable-diffusion/v1.5"
  loras: "models/Lora"
  vae: "models/VAE"

这样配置后,在 ComfyUI 的模型加载节点中,checkpoints 目录下就会显示出 sdxl 和 v1_5 两个子分类,清晰又方便。这种灵活性是符号链接难以直接实现的。

5. 验证、排查与故障解决

配置完成后,重启 ComfyUI(如果它正在运行)。让我们来验收成果并解决可能遇到的问题。

5.1 成功验证三步曲

  1. 文件数量检查:打开终端,分别进入 WebUI 的模型目录和 ComfyUI 的链接目录,查看文件数量是否一致。
    # Windows (在各自目录下)
    dir | find /c /v ""
    # 或使用 PowerShell
    (Get-ChildItem).Count
    
    # Linux/Mac
    ls -1 | wc -l
    
    两者数量应该大致相同(可能差几个缓存文件)。
  2. 在 ComfyUI 中加载测试:这是最直接的验证。在 ComfyUI 中,添加一个 “Load Checkpoint” 节点,点击它,看看下拉列表里是否出现了你 WebUI 中所有的模型。尝试加载一个 WebUI 专属的模型(比如某个特定版本的 SDXL 模型),然后运行一个简单的工作流。如果能正常出图,恭喜你,共享成功了!
  3. 空间验证:最爽的一步。对比一下配置共享前后,ComfyUI 的 models 文件夹属性。共享前,它可能占几十 GB;共享后,它应该只占几 MB 或几十 MB(因为只有链接文件本身)。而 WebUI 的 models 文件夹大小不变。硬盘空间实实在在地省出来了。

5.2 常见故障与解决方案

  • 问题:ComfyUI 里看不到模型/列表为空。

    • 检查符号链接:确认链接是否创建成功。在 ComfyUI 的 models 文件夹里,看 checkpoints 等文件夹是否带有快捷方式图标,或者用 dir 命令查看类型是否为 [JUNCTION]。
    • 检查 YAML 配置:
      • 文件命名:确认是 extra_model_paths.yaml,不是 extra_model_paths.yaml.example。
      • 路径正确性:检查 base_path 的绝对路径是否正确,特别是盘符和文件夹名大小写(在 Windows 上通常不敏感,但最好保持一致)。
      • 格式问题:这是最常见的坑!确保缩进使用的是空格,不是 Tab。检查冒号 : 后面是否有空格(必须有)。检查引号是否是英文半角。
      • 重启 ComfyUI:修改 YAML 后必须重启 ComfyUI 才能生效。
  • 问题:能看见模型列表,但加载时报错(如 404 错误)。

    • 权限问题(尤其是符号链接):你是否使用了管理员权限创建的符号链接?如果不是,请删除旧链接(直接删除那个“快捷方式”文件夹),然后用管理员终端重新创建。
    • 源文件被移动或删除:如果 WebUI 那边的模型文件被你挪走了或者删了,链接自然会失效。检查源路径是否存在有效文件。
  • 问题:只有部分模型类型(如 ControlNet)共享失败。

    • 路径映射不完整:你可能只链接了 checkpoints,忘了 controlnet 或 loras。对照第 3.1 节的步骤,检查是否所有需要的模型类型都创建了链接或配置了路径。
    • WebUI 扩展路径不同:某些 WebUI 扩展的模型存放路径可能比较特殊。你需要手动去 WebUI 的 extensions 文件夹下找到对应扩展的模型路径,然后在 YAML 中正确配置,或为其创建单独的符号链接。

我在实际使用中,符号链接方案几乎是一步到位,非常稳定。而 YAML 配置方案则在第一次配置时,因为一个 Tab 缩进和空格缩进混用的问题调试了十几分钟。所以,再次强调:编辑 YAML 时,请使用专业的文本编辑器(如 VS Code),并开启显示空白字符的功能,它能帮你一眼看清缩进是空格还是 Tab。掌握了这两种方法,你就能根据自己复杂的硬件环境和项目需求,游刃有余地管理你的 AI 模型库了。

更多推荐