组保留的标签 余下为需要删除的标签
unset($oldtag[$key]);
}
}
}
if (!empty($oldtag)) {
$tagids = array();
foreach ($oldtag as $tagid => $tagname) {
$tagids[] = $tagid;
}
well_oldtag_delete($tagids, $tid);
}
$r = well_tag_process($tid, $fid, $create_tag, $tagarr);
return $r;
}
// 删除标签和绑定的主题
function well_oldtag_delete($tagids, $tid)
{
$pagesize = count($tagids);
$arrlist = well_tag_find_by_tagids($tagids, 1, $pagesize);
$delete_tagids = array(); // 删除
$tagids = array();
$n = 0;
foreach ($arrlist as $val) {
++$n;
if (1 == $val['count']) {
// 只有一个主题
$delete_tagids[] = $val['tagid'];
} else {
$tagids[] = $val['tagid'];
}
}
!empty($delete_tagids) and well_tag_delete($delete_tagids);
$arlist = well_tag_thread_find_by_tid($tid, 1, $n);
if ($arlist) {
$ids = array();
foreach ($arlist as $val) $ids[] = $val['id'];
well_tag_thread_delete($ids);
}
!empty($tagids) and well_tag_update($tagids, array('count-' => 1));
}
// 标签数据处理 $arr=新提交的数组 $tagarr=保留的旧标签
function well_tag_process($tid, $fid, $new_tags = array(), $tagarr = array())
{
if (empty($tid)) return '';
// 新标签处理入库
if ($new_tags) {
$threadarr = array();
$tagids = array();
$i = 0;
$size = 5;
$n = count($tagarr);
$n = $n > $size ? $size : $size - $n;
foreach ($new_tags as $name) {
++$i;
$name = trim($name);
$name = stripslashes($name);
$name = strip_tags($name);
$name = str_replace(array(' ', '#', "@", "$", "%", "^", '&', '·', '<', '>', ';', '`', '~', '!', '¥', '……', ';', '?', '?', '-', '—', '_', '=', '+', '.', '{', '}', '|', ':', ':', '、', '/', '。', '[', ']', '【', '】', '‘', ' ', ' ', ' ', ' ', ' '), '', $name);
$name = htmlspecialchars($name, ENT_QUOTES);
if ($name && $i <= $n) {
// 查询标签
$read = well_tag_read_name($name);
if ($read) {
// 存在 count+1
$tagids[] = $read['tagid'];
} else {
// 入库
$arr = array('name' => $name, 'count' => 1);
$tagid = well_tag_create($arr);
FALSE === $tagid and message(-1, lang('create_failed'));
$read = array('tagid' => $tagid, 'name' => $name);
}
$tag_thread = array('tagid' => $read['tagid'], 'tid' => $tid);
$threadarr[] = $tag_thread;
$tagarr[$read['tagid']] = $read['name'];
}
}
!empty($threadarr) and tag_thread_big_insert($threadarr);
!empty($tagids) and well_tag_update($tagids, array('count+' => 1));
}
$json = empty($tagarr) ? '' : xn_json_encode($tagarr);
return $json;
}
?> $v = implode(",", $v);
$temp[] = $v;
}
// 去掉重复的字符串,也就是重复的一维数组
$temp = array_unique($temp);
// 再将拆开的数组重新组装
$output = array();
foreach ($temp as $k => $v) {
if ($stkeep) $k = $starr[$k];
if ($ndformat) {
$temparr = explode(",", $v);
foreach ($temparr as $ndkey => $ndval) $output[$k][$ndarr[$ndkey]] = $ndval;
} else $output[$k] = explode(",", $v);
}
return $output;
}
// 合并二维数组 如重复 值以第一个数组值为准
function array2_merge($array1, $array2, $key = '')
{
if (empty($array1) || empty($array2)) return NULL;
$arr = array();
foreach ($array1 as $k => $v) {
isset($v[$key]) ? $arr[$v[$key]] = array_merge($v, $array2[$k]) : $arr[] = array_merge($v, $array2[$k]);
}
return $arr;
}
/*
* 对二维数组排序 两个数组必须有一个相同的键值
* $array1 需要排序数组
* $array2 按照该数组key排序
* */
function array2_sort_key($array1, $array2, $key = '')
{
if (empty($array1) || empty($array2)) return NULL;
$arr = array();
foreach ($array2 as $k => $v) {
if (isset($v[$key]) && $v[$key] == $array1[$v[$key]][$key]) {
$arr[$v[$key]] = $array1[$v[$key]];
} else {
$arr[] = $v;
}
}
return $arr;
}
?>
ComfyUI全阶段安装指南:从零基础部署到高阶插件配置(含WinMac双平台解决方案编程频道|福州电脑网
ComfyUI全阶段安装指南:从零基础部署到高阶插件配置(含WinMac双平台解决方案
编程之家1360
更新时间:2026-04-03 20:26:10
本教程专为初学者设计,详细介绍了 2025年最新版的SD ComfyUI的使用方法。通过逐步指导,让你无需任何基础,快速学会并使用这一强大的AI绘图工具。
1、什么是comfyui
从本质上讲,ComfyUI是构建在Stable Diffusion之上的基于节点的图形用户界面(GUI),而Stable Diffusion是一种最先进的深度学习模型,可以根据文本描述生成图像。
但ComfyUI真正特别之处在于,它如何让像你这样的艺术家释放创造力,将你最疯狂的想法变为现实。
想象一下有一块数字画布,你可以通过连接不同的节点来构建自己独特的图像生成工作流,每个节点代表一个特定的功能或操作。就像为你的AI生成杰作构建一个视觉食谱!
2、ComfyUI VS. WebUI
WebUI是Stable Diffusion的默认GUI。让我们对比一下ComfyUI的优缺点:
✅ 使用ComfyUI的好处:
- 轻量级: 运行速度快,效率高。
- 灵活性: 高度可配置以满足你的需求。
- 透明度: 数据流可见,易于理解。
- 易于分享: 每个文件代表一个可重现的工作流。
- 适合原型开发: 使用图形界面而不是编码来创建原型。
❌ 使用ComfyUI的缺点:
- 界面不一致: 每个工作流可能有不同的节点布局。
- 操作门槛较高:由于ComfyUI采用节点式的工作流,对于初学者来说可能需要一段时间来熟悉和掌握。
- 生态相对较小:尽管ComfyUI的基本功能齐全,但在插件和扩展工具方面,其生态可能不如webui丰富。不够现在很多插件也都是先支持ComfyUI了。这个后续的生态会不断完善,不是什么大问题
3、ComfyUI 的硬件配置要求
| 组件 | 要求 |
|---|
| GPU | 显存至少4GB以上,推荐使用 NVIDIA 显卡,建议使用 RTX3060 以上显卡 |
| 显存小于3GB的GPU可通过–lowvram选项运行,但性能可能下降。 |
| CPU | 支持在CPU上运行,但速度较慢,使用–cpu选项。 |
| 内存 | 建议系统内存至少8GB。 |
| 存储空间 | 非常建议使用固态硬盘来加快模型文件的加载运行速度,建议至少40GB以上的硬盘空间。 |
4、ComfyUI 的安装方法
新手小白这边推荐和WebUI一样使用秋叶大佬的一键整合包安装ComfyUI非常简单
这个是秋叶大佬分享的整合包下载链接
【下载链接】
这份完整版的comfyui整合包已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
下载压缩包
解压整合包文件
解压到你想要安装 ComfyUI 的本地目录。
启动 A绘图启动器
这一步主要查看 A绘图启动器 是否能正常运行,解压后的文件夹中找到 A绘图启动器.exe文件,双击即可启动秋叶的ComfyUI整合包,启动后应该会自动根据你的系统语言进行显示。
打开后是这样的
在设置中可以修改我们的语言
下载了模型的小伙伴记得把模型放在这个文件夹内
我们点击启动,能看到这个页面就是安装成功啦
老手安装方法
如果你已经有ComfyUI的基础,我更推荐你使用ComfyUI的原生包,虽然没有秋叶整合包那么直观的功能,但是原生包相比秋叶包会更自由更轻量化,没有太多的环境限制
而且不用网盘进行下载,但是需要魔法
安装方法:
我们需要到ComfyUI的Github项目主页:https://github/comfyanonymous/ComfyUI
在项目主页中有下载链接:https://github/comfyanonymous/ComfyUI/releases/latest/download/ComfyUI_windows_portable_nvidia.7z
下载好的ComfyUI压缩包直接解压就可以使用啦
安装好后我们在ComfyUI的根目录,如果你有英伟达的显卡就点击gpu运行,否者就点击cpu运行
更新版本也非常方便,我们进入update文件夹,点击下图的文件就可以更新啦
原生包启动后只有一个命令行窗口:
在这里可以看到你ComfyUI运行的状态和报错等信息
为了帮助大家更好地掌握 ComfyUI,我在去年花了几个月的时间,撰写并录制了一套ComfyUI的基础教程,共六篇。这套教程详细介绍了选择ComfyUI的理由、其优缺点、下载安装方法、模型与插件的安装、工作流节点和底层逻辑详解、遮罩修改重绘/Inpenting模块以及SDXL工作流手把手搭建。
由于篇幅原因,本文精选几个章节,详细版点击下方卡片免费领取
这份完整版的comfyui整合包已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
一、ComfyUI配置指南
二、ComfyUI基础入门
三、 ComfyUI工作流节点/底层逻辑详解
- ComfyUI 基础概念理解
- Stable diffusion 工作原理
- 工作流底层逻辑
- 必备插件补全
- …
四、ComfyUI节点技巧进阶/多模型串联
五、ComfyUI遮罩修改重绘/Inpenting模块详解
六、ComfyUI超实用SDXL工作流手把手搭建
- Refined模型
- SDXL风格化提示词
- SDXL工作流搭建
- …
这份完整版的comfyui整合包已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
本文发布于:2025-05-18,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:高阶插件解决方案阶段基础
发布评论