
如果你下载了模型放进 ComfyUI 却看不到它大概率不是模型坏了而是放进了一个它不知道的文件夹。ComfyUI 不像某些工具那么“随和”它给模型文件划好了各自的格子checkpoints、vae、loras、controlnet 各归各的位置放错一个地方加载列表里就永远找不到。这篇文章不打算只丢一张目录树给你而是从根目录讲到 models 内部再讲清楚外置路径、迁移和踩坑看完你能彻底搞懂 ComfyUI 每个文件夹是干嘛的以及模型到底该放哪儿。1. 顶层目录从根目录说起哪些文件夹是命根子1.1 官方解压后的标准目录长什么样ComfyUI 官方包Windows 便携版解压之后本质上就是一个主程序目录加一套便携 Python 环境。打开根目录你会看到 main.py、requirements.txt后面跟着 models、custom_nodes、input、output、temp、user、web 这一批文件夹。很多人第一眼只盯着 models 看但真正需要理解的是每个文件夹在运行链路里的角色。main.py 是服务端入口双击启动脚本之后系统会跑这个文件把后端服务和前端页面一起拉起来。web 文件夹装的是前端资源界面上那些节点菜单、画布交互、设置面板静态资源基本都在这里。custom_nodes 是第三方插件目录你在社区里下载的插件节点都装在这。user 目录存用户配置和工作流input 管输入图片output 管输出结果temp 是中间过程文件。这套结构和 SD WebUI 那种“一个 models 打天下”的思路完全不一样。ComfyUI 的核心理念是模块化所以目录划分也特别细。你不需要记住每一个文件夹的作用但至少要能区分“程序文件”和“数据文件”程序文件乱动会导致启动失败数据文件放错位置最多就是加载不到不会把软件搞崩。1.2 哪些文件别乱动哪些目录可以随便删我把经验总结成三句话。第一根目录里的核心代码文件不要碰除非你明确知道自己在改什么。第二temp 目录可以放心清理ComfyUI 启动时会自动重建。第三output 目录会保存你所有生成结果想清可以清但重要输出建议先备份。temp 这个目录被很多人忽视但跑起来之后它是最容易膨胀的。你生成一张大尺寸图片如果步数又高中间过程会写大量临时文件到 temp。一些用户跑了几个月temp 能膨胀到几十 GB磁盘莫名其妙的满了查来查去最后发现是这个目录在作祟。定期清理 temp 不会影响任何已保存的图片因为它只存“还在生成过程中”的中间数据。还有一点千万不要把模型文件放在 web 目录或者程序根目录下。我见过有人为了方便直接把下载的模型丢在 main.py 旁边结果界面加载列表里无论如何都看不到。ComfyUI 只会扫描指定目录不会去全盘搜索模型所以遵守目录约定是最基本的一步。1.3 input 目录图生图和参考图的入口input 目录看着不起眼但它是图生图、局部重绘和 ControlNet 参考图的基础。在 LoadImage 节点上你可以点上传按钮选择图片也可以直接把图片拖到画布上ComfyUI 会自动把图片拷贝进 input 目录然后在节点里填上相对路径。批量处理素材时input 目录特别有用。你把一批图片按命名规则丢进 input然后在 LoadImage 节点里选择对应文件名就行不用一张张手动上传。要注意的是input 只适合放“这次工作流要用的输入图”不适合当图片仓库。跑完任务之后及时清理不然多项目混在一起找图会非常痛苦。2. models 模型目录每个子文件夹都是给谁准备的2.1 checkpoints、diffusion_models、unet大模型的三副面孔models 目录底下才是重头戏。先从最常用的 checkpoints 说起。SD1.5 和 SDXL 时代的完整模型safetensors 格式或 ckpt 格式都放在这里Load Checkpoint 节点加载的就是这些文件。一个 checkpoint 文件就是一个“全家桶”去噪网络、文本编码器、VAE 全都在里面。你下载的任何 Animate、Anything、RealVisXL 这类大模型直接扔进 checkpoints 就完事。到了 SD3 和 Flux 时代情况变了。模型发布方不再把完整模型打包成一个文件而是拆成扩散模型主体、文本编码器、VAE 三部分。扩散模型主体放在 diffusion_models 目录文本编码器放在 text_encodersVAE 放在 vae。如果你下载的是 flux1-dev.safetensors 这类文件要用 Load Diffusion Model 节点加载而不是 Load Checkpoint。最常见的困惑就在这很多人把 Flux 的拆分包误放进 checkpoints然后在 Load Checkpoint 节点里看不到就以为下载坏了。其实模型没坏只是加载器不对。diffusion_models 目录在官方包自带的 models 文件夹里可能没有需要你手动新建ComfyUI 会自动识别。同理unet 目录留给那些只想要去噪网络部分的用户比如从完整模型里抽出 UNet 做融合或者使用社区转换的 UNet-only 文件。新手大概率用不到 unet 目录但看到别人工作流里的 Load UNet 节点时要能反应过来模型应该去哪个文件夹找。2.2 vae、clip、text_encoders拼图里的其他关键件vae 文件夹存放独立 VAE 文件。为什么要单独用 VAE因为有些 checkpoint 自带的 VAE 效果一般换一个更好的 VAE比如常见的 vae-ft-mse-840000能让写实风格的细节纹理肉眼可见地提升。在 VAE Loader 节点里挂上独立 VAE再连接到 VAE Encode/Decode 节点替换默认 VAE 即可。有个很隐蔽的坑如果你把 VAE 文件放进了 checkpoints 目录而不是 vae 目录VAE Loader 的选择列表里就不会出现它。因为 ComfyUI 的模型扫描是按目录严格匹配的不会出现“你在别处也能看到”的好事。clip 和 text_encoders 这两个目录看着像双胞胎实际有时代差异。旧模型的 CLIP 文本编码器放在 clip 目录用于配合 Load CLIP 节点SD3/Flux 系列的新编码器则放在 text_encoders 目录。以 Flux 为例你通常需要下载三个文件clip_l.safetensors 和 t5xxl_fp8_e4m3fn.safetensors 放到 text_encodersae.safetensors也就是 VAE放到 vae。加载时用 CLIPLoader 节点设置 type 为对应类型文件选择器从 text_encoders 里挑。放错目录的直接后果是选择列表空掉或者加载时报 “CLIP model not found”。2.3 loras、controlnet、embeddings、upscale_models 这些小分类继续往下数这些目录每个都有明确用途目录用途对应加载节点lorasLoRA 微调模型几十 MB 到几百 MBLoraLoadercontrolnetControlNet 模型注意 SD1.5 和 SDXL 版本不能混用ControlNetLoaderembeddings文本反转 embedding如 easynegative在 CLIPTextEncode 里直接输入名称upscale_models放大模型如 4x-UltraSharp、RealESRGANUpscaleModelLoadergligenGLIGEN 模型用于布局/区域控制GLIGENLoaderhypernetworks超网络文件目前使用频率较低HypernetworkLoaderstyle_models风格模型如 T2I-AdapterStyleModelLoaderphotomakerPhotoMaker 模型用于人像生成PhotoMakerLoader这里重点说两个容易被坑的目录。第一个是 loras它可以再建子文件夹分类但子文件夹名和文件名的中文命名在某些节点里可能有兼容问题我自己都是用英文或拼音。第二个是 controlnetSD1.5 的 ControlNet 和 SDXL 的 ControlNet 文件绝对不能混用你拿 SD1.5 的 ControlNet 去配 SDXL 底模控制效果直接失效或者报错。下载时一定要看清文件说明里写的是哪个版本。embeddings 目录使用方式不太一样。下载的 easynegative.safetensors 放进 embeddings 之后在正向提示词或负向提示词的 CLIPTextEncode 节点文本框里直接输入 easynegative 就能生效。不需要额外加载器也不占用加载节点这就是 text inversion 的工作方式。2.4 模型文件命名和整理的好习惯模型文件整理这件事讲究一点都不比技术配置少。我踩过最大的坑就是“文件名随意化”从各种渠道下载的 LoRA文件名五花八门什么“1111.safetensors”“latest_v2.safetensors”过三个月再想找对应触发词根本对不上号。现在我给自己定了一套规则文件命名包含模型名、类型、版本三个要素例如detailed_eyes_lora_v1.safetensors同时建同名 txt 说明文件里面写清楚底模版本、触发词、来源链接、实测效果。如果是带预览图的模型把预览图命名为模型同名 png 放在同目录加载时鼠标悬停就能看到缩略图。这套习惯一开始执行觉得繁琐但模型量超过 100 个之后真能帮你省下大把时间。3. 模型放对位置还是不显示从刷新到加载报错逐个排查3.1 最常见的情况放进去但没刷新很多人把模型放进文件夹回到 ComfyUI 界面发现下拉列表里还是老样子第一反应是“坏了是不是要重启”。其实大部分时候只需要点一下模型文件名下拉框旁边的刷新按钮。ComfyUI 不会自动监听文件夹变化模型列表是在加载节点时读一次目录生成的文件放进去之后不手动刷新列表自然不会更新。如果点了刷新还没出现就把整个浏览器页面刷新一次。浏览器端缓存也可能导致下拉列表停留在旧状态特别是你长时间挂着一个 ComfyUI 页面不关闭的情况下。刷新页面不会影响当前工作流画布放心的刷。3.2 刷新背后的机制模型列表是“读一次存一次”模型列表的加载机制其实很“笨”节点渲染时扫一遍目录生成下拉选项然后把选项缓存住。你放文件进去但没触发重新扫描缓存还是旧的如果是在跑生成任务的过程中放文件也不能立即看到。所以要养成的习惯是先放文件再点刷新再选择模型。如果你用的是整合包有些版本还开了多工作流缓存或模型列表缓存改完目录后最好重启一下 ComfyUI 主进程再测试。这不是玄学是缓存机制决定的。3.3 下载不完整、格式不对、版本错配三个隐藏深坑排除刷新问题之后模型还是看不到或加载不了就要考虑下面几个情况。下载不完整是最常见的问题。浏览器下载中途断网会生成 .part 或 .crdownload 临时文件或者文件显示有完整大小但校验不通过。一个只有几 KB 的 safetensors 文件几乎可以断定是没下完。建议用支持断点续传的下载工具比如 IDM、迅雷或者大的模型直接用 aria2 多线程下载。下载完看一眼文件大小是否和页面标注一致能避免大部分问题。格式不对也是一个原因。ckpt 是老格式现在很多模型发布方已经转向 safetensors。safetensors 格式更安全加载速度更快优先选择。如果遇到 .bin 或者 .pth 后缀的文件要看清楚节点是否支持某些节点只认 safetensors只认 safetensors 的场合用 ckpt 就会直接报错。版本错配则更隐蔽。ControlNet 的 SD1.5 和 SDXL 版本不能混用LoRA 的底模版本不对也会导致出图异常甚至报错。看到加载器报错时先把模型文件从哪个模型版本下载的确认一遍通常能解决一半问题。报错现象常见原因排查思路下拉列表里找不到文件放错目录/没刷新/文件未下载完成检查目录、点刷新、核对文件大小文件能看到但加载报错格式不支持/模型文件损坏换 safetensors 格式、重新下载ControlNet 加载后无效SD1.5 与 SDXL 版本混用核对底模版本对应的 ControlNetVAE 加载器里没有文件误放到 checkpoints移到 vae 目录4. 官方版与整合包的差异以及外置模型的正确配置4.1 秋叶整合包的目录和官方版有什么不一样秋叶整合包本质上是把官方版和一套便携 Python 环境、启动器打包在一起核心目录结构没有变但顶层会多出启动器和管理工具。很多用户搞混的是启动器和 ComfyUI 主程序的位置整合包的模型目录依然在 ComfyUI\models 里不是包根目录。启动器负责管理 Python 环境、自动更新和目录配置你在启动器界面上改的模型路径最终会写进 extra_model_paths 相关配置。整合包和官方版在 models 目录内部基本一致所以这篇文章讲的目录规则在两种版本下都适用。差异主要在于“你是否方便修改配置文件”官方版需要自己手动处理 extra_model_paths.yaml整合包一般会在启动器界面上帮你配置。4.2 用 extra_model_paths.yaml 把模型放到任意盘符如果你不想把所有模型都复制进 ComfyUI 的 models 目录或者你的模型库存放在独立硬盘里可以用 extra_model_paths.yaml 挂载外部路径。官方版第一次运行后会在根目录生成 extra_model_paths.yaml.example把它复制一份重命名为 extra_model_paths.yaml然后按下面的格式编辑other_models: base_path: E:/AI-Models checkpoints: StableDiffusion loras: Lora vae: VAE controlnet: ControlNet upscale_models: Upscale embeddings: Embeddingsbase_path 指向你存放模型的根目录下面的键名对应 ComfyUI 约定目录名。比如 E:/AI-Models/StableDiffusion 目录里的模型ComfyUI 会把它当成 checkpoints 目录的内容来扫描。这样你不用修改 ComfyUI 本体目录也能在一个外部目录下自由组织模型库。改完配置一定要重启 ComfyUI而且不同版本对配置项的解析有细微差异。如果你修改后发现某个子目录没被识别检查一下是不是目录名和键名对应错了。保留一份配置备份是好习惯因为某些整合包在“一键更新”之后可能会重写覆盖 yaml 文件。4.3 符号链接方案要不要用 mklink如果你用的是整合包启动器可能在每次启动时覆盖 extra_model_paths.yaml或者你只是想给某个子目录单独换个位置这时候可以用目录符号链接也就是 mklink。在管理员权限的命令行里执行mklink /D D:\ComfyUI\models\loras\my_lora E:\models\loras\my_lora注意目标位置不能已存在同名文件夹链接成功后ComfyUI 里看到的就是一个普通目录底层文件实际在另一个盘符。这个方案的好处是“零配置”不用改 yaml对整合包特别友好。缺点是迁移时不熟悉符号链接的用户容易把源文件删掉导致链接失效。所以基本上我只推荐给已经理解符号链接原理的人。日常使用的话extra_model_paths 方案更透明、更可维护。5. 目录迁移与空间整理给 ComfyUI“搬家”的实战经验5.1 换盘前的准备工作与迁移步骤模型目录动辄几十 GB换盘或者给 ComfyUI 换位置最忌讳的是直接剪切整个目录然后启动报错。我迁移过三次总结出一套比较稳的流程。第一步停止 ComfyUI 和启动器进程确认没有 Python 进程占用模型文件否则复制过程中文件可能是损坏的。第二步用复制而不是剪切目标磁盘空间要提前确认够用复制失败可以重试。第三步大文件校验大的 safetensors 文件要核对哈希值或者至少确认文件大小一致。第四步通过 extra_model_paths 或符号链接把新路径指到旧地址不要直接改掉原来的目录结构。第五步启动后逐个节点测试加载不要一次加载一堆模型然后报错不好定位。全部确认正常之后再删除旧文件。5.2 输出、临时文件、日志的定期清理磁盘空间不够时先看三个地方output、temp、更新备份。output 目录是生成图片的仓库时间久了能堆好几个 GB建议定期归档。temp 目录前面说过是中间过程文件可以直接清空。更新备份主要是整合包一键更新时自动备份的旧版本文件确认不需要回滚后也能删。清理 output 和 temp 可以写个简单的定时脚本。Windows 下用 forfiles 命令可以按修改日期批量移动文件forfiles /p D:\ComfyUI\output /s /m *.png /d -30 /c cmd /c move path D:\Backup\AI_Output\这条命令把 output 目录下 30 天之前的 png 文件移到备份目录。配合 Windows 任务计划程序每个月自动执行一次就基本不用手动操心磁盘爆满的问题。注意路径不要带空格或者中文不然 forfiles 的转义会让人头大。5.3 磁盘空间规划与模型版本管理我的个人规划是系统盘只放 ComfyUI 程序本体和必要的临时文件所有模型外置到独立的数据盘按底模版本建立一级目录比如 SD15、SDXL、Flux、ControlNet、LoRA。每个一级目录下再按模型系列分子目录。版本管理上我强烈建议不要轻易覆盖旧模型文件。底模更新后之前调的 LoRA 可能在新版本上效果不理想你想回退到旧底模却发现文件已经被覆盖了那种感觉真的很崩溃。下载模型时顺手在文件名里标注版本号配合说明 txt能避免 90% 的版本混乱问题。6. custom_nodes 和 user 目录两块容易被忽视的“模型区”6.1 插件目录模型藏在“别人的文件夹”里custom_nodes 目录下每个子文件夹就是一个第三方插件。你在社区里下载的插件一般通过 git clone 或者手动解压装到这里。安装之后基本都需要重启 ComfyUI 才能生效部分插件还会在启动时自动从网上下载模型到自己的子目录里。这也是很多人找不到模型的一个重要原因有些自定义节点的模型文件并不在 models 全局目录而在插件自己的子目录里。比如某个 ControlNet 辅助插件、某个修复插件它们各自有独立的模型文件夹。当你在全局 models 里找不到某个模型时记得去对应插件的目录下翻一翻。插件装多了之后冲突问题也容易出现。出现启动报错时可以先把 custom_nodes 下可疑的插件临时改名移出目录再重启看是否恢复。如果恢复就说明是这个插件的问题。别急着删先看更新日志很多时候升级一下插件版本就解决了。6.2 user 目录与工作流管理的建议user\default 目录下主要存用户配置、快捷键设置、默认工作流等。界面布局或设置丢失时多半是这里的配置损坏或被还原。我自己一般会把常用工作流文件另存到工作区目录user 目录只留默认设置这样即使配置重置也不会丢失辛苦搭好的工作流。如果你有多台设备可以把这个目录里的核心配置文件备份到云盘或 Git 仓库。换机之后直接放回去能少调很多界面设置。这里额外提醒一句不要在工作流文件里写死绝对路径除非你确定所有设备都保持同样的目录结构否则换机器之后路径必然失效。说到底ComfyUI 的目录管理就是一套“整理癖”修行。我现在遇到模型不显示第一反应永远是按顺序排查放对目录没有、刷新没有、文件格式对不对、有没有中文路径和特殊字符。这套顺序比看任何报错都管用。最后分享一个我自己的小技巧每次下载模型时顺手写一个说明 txt内容就五行——模型来源、底模版本、触发词、测试参数、下载日期。写完之后放到模型同目录。别嫌麻烦等你模型积累到几百个的时候这个习惯能帮你省出的时间比当时下载模型的时间还多。