59 Commits
Author SHA1 Message Date
严浪 93eb3f553b 功能修改 2024-05-28 17:04:42 +08:00
严浪 3f8651fea2 BUG修改,功能优化 2024-05-19 22:28:27 +08:00
严浪 9bc0f3d23d 宽高自适应 2024-05-17 09:35:28 +08:00
严浪 a59c79abe7 功能优化,姿态编辑提交提示词输入 2024-05-15 17:37:48 +08:00
严浪 802b8011b9 功能优化 2024-05-10 11:39:09 +08:00
严浪 e80cee4af3 说明修改 2024-05-05 14:58:54 +08:00
严浪 4084513f72 插件功能优化 2024-05-03 21:48:31 +08:00
严浪 e3b06e9863 新增多IPAdapter多参考图遮罩功能节点 2024-04-24 22:11:32 +08:00
严浪 c514485fd1 名称修改 2024-04-23 14:24:38 +08:00
严浪 3d23917893 功能优化 2024-04-22 16:42:54 +08:00
严浪 838ca7bed3 添加备注 2024-04-22 15:01:41 +08:00
严浪 8fcc318dc0 微信公众号应用开发,和网页支持 2024-04-21 17:26:34 +08:00
严浪 5121da825f 功能优化 2024-04-16 15:21:12 +08:00
严浪 dceb8dd644 功能修改,节点增加 2024-04-13 13:14:46 +08:00
严浪 c21efaea1f BUG修改 2024-04-08 15:01:17 +08:00
严浪 b2f6d1adf6 修改execution.py说明 2024-04-08 09:32:22 +08:00
严浪 74250a52fb 循环插件修改,风格节点优化 2024-04-08 09:16:47 +08:00
严浪 ec0c82eb87 添加姿态编辑配套节点,修改BUG 2024-04-06 22:20:18 +08:00
严浪 7ebde46f36 Merge branch 'master' of https://gitee.com/yanlang0123/ComfyUI_Lam 2024-04-04 14:35:54 +08:00
严浪 824a646e31 删除多余按钮 2024-04-04 14:35:46 +08:00
yanlang0123 0413b82422 删除文件 tags/十八禁.yml 2024-04-01 05:51:38 +00:00
严浪 1035574185 BUG修改 2024-04-01 13:45:56 +08:00
严浪 3c149ca288 新增手控制功能 2024-04-01 13:33:02 +08:00
严浪 3ec9764a9d 功能优化 2024-03-29 16:16:01 +08:00
严浪 c7ea1838f1 功能优化 2024-03-29 14:56:25 +08:00
严浪 99b767a327 多脸部识别,骨骼编辑器 2024-03-22 11:12:13 +08:00
严浪 6f2cf07334 插件升级 2024-03-09 21:22:18 +08:00
严浪 d2ece1b381 感谢:吴嘚嘚 添加了提示词选择改成可操作权重 2024-03-07 17:33:07 +08:00
严浪 834c3cdf6c 添加使用说明 2024-03-07 17:18:23 +08:00
严浪 cda5e5e28a 添加内循环插件,及几个辅助插件 2024-03-06 18:18:06 +08:00
严浪 f7349fc5c8 文字修改 2024-03-04 15:08:06 +08:00
严浪 adea2994a3 功能优化 2024-03-04 14:43:23 +08:00
严浪 7b8a070e5c 多GLIGEN文本框应用 2024-02-26 11:18:33 +08:00
严浪 c991b8d843 BUG修改 2024-01-26 22:17:58 +08:00
严浪 ab1b16382d 优化 2024-01-19 15:24:20 +08:00
严浪 99eceaa88d 插件优化 2024-01-19 13:31:54 +08:00
严浪 64ce553c1c 插件升级,添加百度翻译插件,添加本地翻译插件 2024-01-18 22:25:45 +08:00
严浪 d0891eb04e 风格选择器增加效果示例查询效果 2024-01-15 09:18:54 +08:00
严浪 87033271e5 风格选择器添加选择项展示效果 2024-01-02 15:22:47 +08:00
严浪 d05de84198 风格选择器添加选择项展示效果 2024-01-02 15:20:46 +08:00
严浪 85d2102cfd 说明 2023-12-23 16:18:53 +08:00
严浪 fca6e09d0d 中文搜索实现 2023-12-23 15:42:13 +08:00
严浪 6359d87d47 功能优化 2023-12-16 23:06:15 +08:00
严浪 3d705ef3e8 功能优化 2023-12-15 20:36:32 +08:00
严浪 dc659c88da 组节点保存功能开发 2023-12-15 15:46:20 +08:00
严浪 ed50d5bd92 功能优化 2023-12-08 22:04:08 +08:00
严浪 1c74cda9e3 部分json缺少prompt导致报错修改 2023-12-07 22:13:31 +08:00
严浪 085bf665dd ss 2023-12-01 21:41:31 +08:00
严浪 7f40c1b21d 优化插件 2023-11-30 21:53:53 +08:00
严浪 d348d1f4a7 修改 2023-11-29 13:15:26 +08:00
严浪 78b75e9944 样式修改 2023-11-29 13:14:43 +08:00
严浪 3b64627b01 Merge branch 'master' of https://gitee.com/yanlang0123/ComfyUI_Lam 2023-11-29 12:19:30 +08:00
严浪 255c521f3e 新增风格选择节点,宽高比节点 2023-11-29 12:19:26 +08:00
yanlang0123 030fb2b5bb 删除文件 py/__pycache__ 2023-11-29 04:18:03 +00:00
严浪 889dfc0a91 修改目录,添加提示词选择插件 2023-11-26 22:19:36 +08:00
yanlang0123 4712045dbd 删除文件 py/__pycache__ 2023-11-23 00:46:45 +00:00
严浪 d6de1498a1 添加依赖 2023-11-22 10:47:07 +08:00
严浪 8b816f0877 修改说明 2023-11-22 10:37:20 +08:00
yanlang0123 0443d70bda update 使用说明.txt.
Signed-off-by: yanlang0123 <yanlang0123@gmail.com>
2023-11-22 02:17:38 +00:00
710 changed files with 297788 additions and 392 deletions
+161 -24
View File
@@ -1,36 +1,173 @@
# ComfyUI_Lam
#### Description
{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
### Introduction
A plugin developed based on comfyUI.
#### Software Architecture
Software architecture description
#### Usage Instructions
Download and place in the plugin directory of comfyUI, as shown below:
#### Installation
![Alt text](解压存放路径及名称.png)
1. xxxx
2. xxxx
3. xxxx
##### Special Note for this version, execute the latest version "ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z" with cu118 inside, the address is as follows:
https://github.com/comfyanonymous/ComfyUI/releases/download/latest/ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z
#### Instructions
1. Unzip according to the image to the specified plugin directory and name. Extract insightface.rar to the directory ..\ComfyUI_windows_portable\python_embeded\Lib\site-packages. Extract venv.rar to the directory ..\ComfyUI_windows_portable\python_embeded\Lib\site-packages. Then run the install.bat file, and if there are no errors, it's ready.
1. xxxx
2. xxxx
3. xxxx
2. Model addresses and storage paths:
Lama model:
https://huggingface.co/lllyasviel/Annotators/resolve/main/ControlNetLama.pth ..\ComfyUI\models\lama\ControlNetLama.pth
SadTalker models:
https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/mapping_00109-model.pth.tar ..\ComfyUI\models\SadTalker\mapping_00109-model.pth.tar
https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/mapping_00229-model.pth.tar ..\ComfyUI\models\SadTalker\mapping_00229-model.pth.tar
https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/SadTalker_V0.0.2_256.safetensors ..\ComfyUI\models\SadTalker\SadTalker_V0.0.2_256.safetensors
https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/SadTalker_V0.0.2_512.safetensors ..\ComfyUI\models\SadTalker\SadTalker_V0.0.2_512.safetensors
#### Contribution
3. Gfpgan is based on the startup directory, follow the prompts accordingly.
https://github.com/xinntao/facexlib/releases/download/v0.1.0/alignment_WFLW_4HG.pth ..\ComfyUI_windows_portable\gfpgan\weights\alignment_WFLW_4HG.pth
https://github.com/xinntao/facexlib/releases/download/v0.1.0/detection_Resnet50_Final.pth ..\ComfyUI_windows_portable\gfpgan\weights\detection_Resnet50_Final.pth
https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth ..\ComfyUI_windows_portable\gfpgan\weights\GFPGANv1.4.pth
https://github.com/xinntao/facexlib/releases/download/v0.2.2/parsing_parsenet.pth ..\ComfyUI_windows_portable\gfpgan\weights\parsing_parsenet.pth
1. Fork the repository
2. Create Feat_xxx branch
3. Commit your code
4. Create Pull Request
4. Image-face-fusion model (Face swapping model)
Link: https://pan.baidu.com/s/19DOgJQ_RHNAjfNrzSr2uTQ?pwd=gf0p
Extraction Code: gf0p
Extract to the directory ..\ComfyUI\models\image-face-fusion
5. Roop-face-swap model (Face swapping model)
Link: https://pan.baidu.com/s/1cJeRtqgdeNW21Hljwuv-tA?pwd=b4yy
Extraction Code: b4yy
Extract to the directory ..\ComfyUI\models\roop-face-swap
#### Gitee Feature
6. Modify the execution.py file in the comfyUI root directory.
搜索 “def recursive_execute”
位置参考图如下:
![Alt text](修改位置.png)
新增内容:
```python
#循环添加代码----------开始----------
def get_del_keys(key, prompt,uniqueIds):
keys=[]
for k,v in prompt.items():
if k in uniqueIds :
continue
for k1,v1 in v['inputs'].items():
if type(v1)==list and v1[0]==key:
keys.append(k)
keys=keys+get_del_keys(k,prompt,uniqueIds)
return keys
#循环添加代码-----------结束---------
```
```python
#循环添加代码----------开始----------
startNum=None
startData={}
delKeys=[]
backhaul={}
clTypes=['ForInnerEnd','IfInnerExecute','DoWhileEnd']
oldPrompt=None
if class_type in clTypes:
oldPrompt=copy.deepcopy(prompt)
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
4. The most valuable open source project [GVP](https://gitee.com/gvp)
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
if class_type=='ForInnerEnd':
startNum=prompt[unique_id]['inputs']['total'][0]
inputNum=prompt[unique_id]['inputs']['obj'][0]
maxKeyStr=sorted(list(prompt.keys()), key=lambda x: int(x.split(':')[0]))[-1]
maxKey = int(maxKeyStr.split(':')[0])
delKeys=list(set(get_del_keys(startNum,prompt,[startNum,unique_id])))
delKeys.append(startNum)
delKeys = list(filter(lambda x: x != inputNum, delKeys))
for key in delKeys:
outputs.pop(key, None)
startInput=prompt[startNum]['inputs']
if isinstance(startInput['total'],list) or isinstance(startInput['stop'],list) or isinstance(startInput['i'],list):
result = recursive_execute(server, prompt, outputs, startNum, extra_data, executed, prompt_id, outputs_ui, object_storage)
if result[0] is not True:
return result
for x in startInput:
input_data = startInput[x]
if isinstance(input_data, list):
startData[x]=outputs[input_data[0]][input_data[1]][0]
else:
startData[x]=input_data
for i in range(startData['i']+1,startData['total'],startData['stop']):
prompt[str(maxKey+i)]=prompt[inputNum]
prompt[unique_id]['inputs']['obj'+str(i)]=[str(maxKey+i),prompt[unique_id]['inputs']['obj'][-1]]
if i==startInput['i']+1:
backhaul['obj'+str(i)]=prompt[unique_id]['inputs']['obj']
else:
backhaul['obj'+str(i)]=[str(maxKey+i-startInput['stop']),prompt[unique_id]['inputs']['obj'][-1]]
elif class_type=='DoWhileEnd':
startNum=prompt[unique_id]['inputs']['start'][0]
inputNum=prompt[unique_id]['inputs']['ANY'][0]
delKeys=list(set(get_del_keys(startNum,prompt,[startNum,unique_id])))
delKeys.append(startNum)
delKeys.append(inputNum)
#循环添加代码-----------结束---------
```
```python
#循环添加代码----------开始----------
if class_type=='ForInnerEnd' and x !='obj' and x.startswith('obj'):
if startNum!=None:
if isinstance(prompt[startNum]['inputs']['i'],list):
prompt[startNum]['inputs']['i']=startData['i']+startData['stop']
else:
prompt[startNum]['inputs']['i']=prompt[startNum]['inputs']['i']+startData['stop']
prompt[startNum]['inputs']['obj']=backhaul[x]
for key in delKeys:
outputs.pop(key, None)
#循环添加代码-----------结束---------
```
```python
#判断选择添加代码-----------开始---------
if class_type=='DoWhileEnd' and x == 'ANY':
any=outputs[inputNum][prompt[unique_id]['inputs']['ANY'][1]][0]
i=0
while any:
for key in delKeys:
outputs.pop(key, None)
i=i+1
outputs['i']=[[i]]
prompt[startNum]['inputs']['i']=['i',0]
result = recursive_execute(server, prompt, outputs, input_unique_id, extra_data, executed, prompt_id, outputs_ui, object_storage)
if result[0] is not True:
return result
any=outputs[inputNum][prompt[unique_id]['inputs']['ANY'][1]][0]
if class_type=='IfInnerExecute' and x=='ANY':
if outputs[input_unique_id][output_index][0]:
inputs['IF_FALSE']=oldPrompt[unique_id]['inputs']['IF_TRUE']
else:
inputs['IF_TRUE']=oldPrompt[unique_id]['inputs']['IF_FALSE']
#判断选择添加代码-----------结束---------
```
```python
#循环添加代码----------开始----------
if class_type=='ForInnerEnd' or class_type=='DoWhileEnd':
prompt[startNum]['inputs']=oldPrompt[startNum]['inputs']
prompt[unique_id]['inputs']=oldPrompt[unique_id]['inputs']
outputs.pop(startNum, None)
result = recursive_execute(server, prompt, outputs, startNum, extra_data, executed, prompt_id, outputs_ui, object_storage)
if result[0] is not True:
return result
if class_type=='IfInnerExecute':
prompt[unique_id]['inputs']=oldPrompt[unique_id]['inputs']
#循环添加代码-----------结束---------
```
搜索 “def validate_prompt
```python
'''优化输出开始'''
inputKeys=[]
for k,v in prompt.items():
for k1,v1 in v['inputs'].items():
if type(v1)==list and len(v1)==2:
inputKeys.append(v1[0])
for x in prompt:
class_ = nodes.NODE_CLASS_MAPPINGS[prompt[x]['class_type']]
if hasattr(class_, 'OUTPUT_NODE') and class_.OUTPUT_NODE == True and x not in inputKeys:
outputs.add(x)
'''优化输出结束'''
```
+167 -29
View File
@@ -1,39 +1,177 @@
# ComfyUI_Lam
#### 介绍
{**以下是 Gitee 平台说明,您可以替换此简介**
Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台
无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)}
#### 软件架构
软件架构说明
#### 安装教程
1. xxxx
2. xxxx
3. xxxx
### 介绍
基于comfyUI开发的插件
#### 使用说明
下载放到comfyUI的插件目录,如下:
1. xxxx
2. xxxx
3. xxxx
![Alt text](解压存放路径及名称.png)
#### 参与贡献
##### 特别说明该版本执行最新版“ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z” 里面带cu118的版本地址如下:
https://github.com/comfyanonymous/ComfyUI/releases/download/latest/ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
1. 根据图片解压到指定插件目录及名称,
将insightface.rar解压到..\ComfyUI_windows_portable\python_embeded\Lib\site-packages目录
将venv.rar解压到..\ComfyUI_windows_portable\python_embeded\Lib\site-packages目录
然后运行install.bat文件,未报错后就可以了,
2. 模型地址,及存放路径:
lama模型:
https://huggingface.co/lllyasviel/Annotators/resolve/main/ControlNetLama.pth ..\ComfyUI\models\lama\ControlNetLama.pth
SadTalker模型:
https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/mapping_00109-model.pth.tar ..\ComfyUI\models\SadTalker\mapping_00109-model.pth.tar
https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/mapping_00229-model.pth.tar ..\ComfyUI\models\SadTalker\mapping_00229-model.pth.tar
https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/SadTalker_V0.0.2_256.safetensors ..\ComfyUI\models\SadTalker\SadTalker_V0.0.2_256.safetensors
https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/SadTalker_V0.0.2_512.safetensors ..\ComfyUI\models\SadTalker\SadTalker_V0.0.2_512.safetensors
3. gfpgan是根据启动目录来的,根据提示对应
https://github.com/xinntao/facexlib/releases/download/v0.1.0/alignment_WFLW_4HG.pth ..\ComfyUI_windows_portable\gfpgan\weights\alignment_WFLW_4HG.pth
https://github.com/xinntao/facexlib/releases/download/v0.1.0/detection_Resnet50_Final.pth ..\ComfyUI_windows_portable\gfpgan\weights\detection_Resnet50_Final.pth
https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth ..\ComfyUI_windows_portable\gfpgan\weights\GFPGANv1.4.pth
https://github.com/xinntao/facexlib/releases/download/v0.2.2/parsing_parsenet.pth ..\ComfyUI_windows_portable\gfpgan\weights\parsing_parsenet.pth
4. image-face-fusion模型换脸模型
链接:https://pan.baidu.com/s/19DOgJQ_RHNAjfNrzSr2uTQ?pwd=gf0p
提取码:gf0p
解压到 ..\ComfyUI\models\image-face-fusion 目录
5. roop-face-swap模型换脸模型
链接:https://pan.baidu.com/s/1cJeRtqgdeNW21Hljwuv-tA?pwd=b4yy
提取码:b4yy
解压到 ..\ComfyUI\models\roop-face-swap 目录
#### 特技
6. 修改comfyUI根目录下的execution.py文件,修改内容
搜索 “def recursive_execute”
位置参考图如下:
![Alt text](修改位置.png)
新增内容:
```python
#循环添加代码----------开始----------
def get_del_keys(key, prompt,uniqueIds):
keys=[]
for k,v in prompt.items():
if k in uniqueIds :
continue
for k1,v1 in v['inputs'].items():
if type(v1)==list and v1[0]==key:
keys.append(k)
keys=keys+get_del_keys(k,prompt,uniqueIds)
return keys
#循环添加代码-----------结束---------
```
```python
#循环添加代码----------开始----------
startNum=None
startData={}
delKeys=[]
backhaul={}
clTypes=['ForInnerEnd','IfInnerExecute','DoWhileEnd']
oldPrompt=None
if class_type in clTypes:
oldPrompt=copy.deepcopy(prompt)
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
if class_type=='ForInnerEnd':
startNum=prompt[unique_id]['inputs']['total'][0]
inputNum=prompt[unique_id]['inputs']['obj'][0]
maxKeyStr=sorted(list(prompt.keys()), key=lambda x: int(x.split(':')[0]))[-1]
maxKey = int(maxKeyStr.split(':')[0])
delKeys=list(set(get_del_keys(startNum,prompt,[startNum,unique_id])))
delKeys.append(startNum)
delKeys = list(filter(lambda x: x != inputNum, delKeys))
for key in delKeys:
outputs.pop(key, None)
startInput=prompt[startNum]['inputs']
if isinstance(startInput['total'],list) or isinstance(startInput['stop'],list) or isinstance(startInput['i'],list):
result = recursive_execute(server, prompt, outputs, startNum, extra_data, executed, prompt_id, outputs_ui, object_storage)
if result[0] is not True:
return result
for x in startInput:
input_data = startInput[x]
if isinstance(input_data, list):
startData[x]=outputs[input_data[0]][input_data[1]][0]
else:
startData[x]=input_data
for i in range(startData['i']+1,startData['total'],startData['stop']):
prompt[str(maxKey+i)]=prompt[inputNum]
prompt[unique_id]['inputs']['obj'+str(i)]=[str(maxKey+i),prompt[unique_id]['inputs']['obj'][-1]]
if i==startInput['i']+1:
backhaul['obj'+str(i)]=prompt[unique_id]['inputs']['obj']
else:
backhaul['obj'+str(i)]=[str(maxKey+i-startInput['stop']),prompt[unique_id]['inputs']['obj'][-1]]
elif class_type=='DoWhileEnd':
startNum=prompt[unique_id]['inputs']['start'][0]
inputNum=prompt[unique_id]['inputs']['ANY'][0]
delKeys=list(set(get_del_keys(startNum,prompt,[startNum,unique_id])))
delKeys.append(startNum)
delKeys.append(inputNum)
#循环添加代码-----------结束---------
```
```python
#循环添加代码----------开始----------
if class_type=='ForInnerEnd' and x !='obj' and x.startswith('obj'):
if startNum!=None:
if isinstance(prompt[startNum]['inputs']['i'],list):
prompt[startNum]['inputs']['i']=startData['i']+startData['stop']
else:
prompt[startNum]['inputs']['i']=prompt[startNum]['inputs']['i']+startData['stop']
prompt[startNum]['inputs']['obj']=backhaul[x]
for key in delKeys:
outputs.pop(key, None)
#循环添加代码-----------结束---------
```
```python
#判断选择添加代码-----------开始---------
if class_type=='DoWhileEnd' and x == 'ANY':
any=outputs[inputNum][prompt[unique_id]['inputs']['ANY'][1]][0]
i=0
while any:
for key in delKeys:
outputs.pop(key, None)
i=i+1
outputs['i']=[[i]]
prompt[startNum]['inputs']['i']=['i',0]
result = recursive_execute(server, prompt, outputs, input_unique_id, extra_data, executed, prompt_id, outputs_ui, object_storage)
if result[0] is not True:
return result
any=outputs[inputNum][prompt[unique_id]['inputs']['ANY'][1]][0]
if class_type=='IfInnerExecute' and x=='ANY':
if outputs[input_unique_id][output_index][0]:
inputs['IF_FALSE']=oldPrompt[unique_id]['inputs']['IF_TRUE']
else:
inputs['IF_TRUE']=oldPrompt[unique_id]['inputs']['IF_FALSE']
#判断选择添加代码-----------结束---------
```
```python
#循环添加代码----------开始----------
if class_type=='ForInnerEnd' or class_type=='DoWhileEnd':
prompt[startNum]['inputs']=oldPrompt[startNum]['inputs']
prompt[unique_id]['inputs']=oldPrompt[unique_id]['inputs']
outputs.pop(startNum, None)
result = recursive_execute(server, prompt, outputs, startNum, extra_data, executed, prompt_id, outputs_ui, object_storage)
if result[0] is not True:
return result
if class_type=='IfInnerExecute':
prompt[unique_id]['inputs']=oldPrompt[unique_id]['inputs']
#循环添加代码-----------结束---------
```
搜索 “def validate_prompt
```python
'''优化输出开始'''
inputKeys=[]
for k,v in prompt.items():
for k1,v1 in v['inputs'].items():
if type(v1)==list and len(v1)==2:
inputKeys.append(v1[0])
for x in prompt:
class_ = nodes.NODE_CLASS_MAPPINGS[prompt[x]['class_type']]
if hasattr(class_, 'OUTPUT_NODE') and class_.OUTPUT_NODE == True and x not in inputKeys:
outputs.add(x)
'''优化输出结束'''
```
+12 -11
View File
@@ -4,21 +4,22 @@ import os
import sys
from .lam import init, get_ext_dir
repo_dir = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, repo_dir)
original_modules = sys.modules.copy()
NODE_CLASS_MAPPINGS = {}
NODE_DISPLAY_NAME_MAPPINGS = {}
if init():
py = get_ext_dir("py")
files = glob.glob("*.py", root_dir=py, recursive=False)
files = os.listdir(py)
for file in files:
if not file.endswith(".py"):
continue
name = os.path.splitext(file)[0]
spec = importlib.util.spec_from_file_location(name, os.path.join(py, file))
module = importlib.util.module_from_spec(spec)
sys.modules[name] = module
spec.loader.exec_module(module)
if hasattr(module, "NODE_CLASS_MAPPINGS") and getattr(module, "NODE_CLASS_MAPPINGS") is not None:
NODE_CLASS_MAPPINGS.update(module.NODE_CLASS_MAPPINGS)
if hasattr(module, "NODE_DISPLAY_NAME_MAPPINGS") and getattr(module, "NODE_DISPLAY_NAME_MAPPINGS") is not None:
NODE_DISPLAY_NAME_MAPPINGS.update(module.NODE_DISPLAY_NAME_MAPPINGS)
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"]
imported_module = importlib.import_module(".py.{}".format(name), __name__)
NODE_CLASS_MAPPINGS = {**NODE_CLASS_MAPPINGS, **imported_module.NODE_CLASS_MAPPINGS}
NODE_DISPLAY_NAME_MAPPINGS = {**NODE_DISPLAY_NAME_MAPPINGS, **imported_module.NODE_DISPLAY_NAME_MAPPINGS}
WEB_DIRECTORY = "./js"
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS","WEB_DIRECTORY"]
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1
View File
@@ -0,0 +1 @@
{}
File diff suppressed because it is too large Load Diff
+116
View File
@@ -0,0 +1,116 @@
wechat:
appid: wx1c2b19f7af1d6241 #公众号appid
secret: 915d587b5ae4e148e100429e11ca4d60 #公众号秘钥
serverAddress: http://139.9.53.208/ #服务器地址 微信公众配置地址的前缀
freeSize: 3 #免费使用次数
isEnterprise: false #是否为企业微信
adminNo: b0pOVFM2dnRsZkdLeWl2Zlk2bG9MTFNjUTNGUQ== #管理员微信编号启动会后可发送我的编号获取
adminWeChat: yanlang123456 #管理员微信号
access_token: '' #不用填系统用于保存临时值
access_token_expires_at: 0 #默认0
commands: #功能列表
图生视频:
filename: img2video.json #功能流程图json文件
params: #参数列表
image: #参数名称(几个固定参数名称必须如下:图片:image 随机种子:seed 正向提示词:prompt 反向提示词:negative)
isRequired: true #是否必填
keys: #参数对应json中对应的key
- '38'
- inputs
- image_path
zhName: 图片 #参数中文名称
motion_bucket:
default: 127
isRequired: true
keys:
- '12'
- inputs
- motion_bucket_id
max: 200
min: 0
type: number
zhName: 运动量
seed:
default: -1
isRequired: true
keys:
- '3'
- inputs
- seed
type: text
zhName: 随机种子
replyText: 请发送您的图片发送“ok”开始任务,如:“ok” #指令说明回复
文生图:
filename: text2img.json
params:
ckpt:
isRequired: false
keys:
- '4'
- inputs
- ckpt_name
options: #选项参数
冷却混合料SD1.5: chilloutmix_NiPrunedFp32Fix.safetensors #中文名称:英文名称
卡通动画片SD1.5: yamer_Cartoon_xenoArcadiaCD.safetensors
无法控制的SDXL: juggernautXL_version6Rundiffusion.safetensors
梦想塑造者SD1.5: dreamshaper_8.safetensors
zhName: 基础模型
height:
default: 512 #默认值
isRequired: false
keys:
- '14'
- inputs
- height
max: 1024 #最大值
min: 512 #最小值
type: number #类型(输入型参数目前只支持 number/text)
zhName: 高度
lora:
isRequired: false
keys:
- '10'
- inputs
- lora_name
options:
SD1.5-LCM加速: lcm-lora-sdv1-5.safetensors
SDXL-LCM加速: lcm-lora-sdxl.safetensors
zhName: LoRA
negative:
isRequired: false
keys:
- '7'
- inputs
- text
zhName: 反向提示词
prompt:
isRequired: true
keys:
- '20'
- inputs
- text_trans
zhName: 正向提示词
seed:
default: -1
isRequired: true
keys:
- '3'
- inputs
- seed
type: text
zhName: 随机种子
width:
default: 512
isRequired: false
keys:
- '14'
- inputs
- width
max: 1024
min: 512
type: number
zhName: 宽度
replyText: 请发送您的中文或英文提示词用“ok”结束,如:“一只小狗ok”
query_commands: #查询指令(固定)
- 查询排队情况
- 我的编号
+284
View File
@@ -0,0 +1,284 @@
wechat:
appid: wxa50ed345b253964d #公众号appid
secret: 327ac9ba06d214d2fcfe2e9ed0520684 #公众号秘钥
serverAddress: http://119.123.205.233/ #服务器地址 微信公众配置地址的前缀
freeSize: 3 #免费使用次数
isEnterprise: true #是否为企业微信
adminNo: b0pOVFM2dnRsZkdLeWl2Zlk2bG9MTFNjUTNGUQ== #管理员微信编号启动会后可发送我的编号获取
adminWeChat: yanlang123456 #管理员微信号
access_token: '' #不用填系统用于保存临时值
access_token_expires_at: 0 #默认0
commands: #功能列表
简笔画:
filename: line2drawing.json
type: paint-board
params:
ckpt:
isRequired: false
keys:
- '1'
- inputs
- ckpt_name
options: #选项参数
卡通动画片SD1.5: yamer_Cartoon_xenoArcadiaCD.safetensors
冷却混合料SD1.5: chilloutmix_NiPrunedFp32Fix.safetensors #中文名称:英文名称
梦想塑造者SD1.5: dreamshaper_8.safetensors
zhName: 基础模型
prompt:
isRequired: false
keys:
- '17'
- inputs
- text_trans
zhName: 正向提示词
seed:
default: -1
isRequired: true
keys:
- '8'
- inputs
- seed
type: text
zhName: 随机种子
image:
isRequired: true
keys:
- '15'
- inputs
- image
type: text
zhName: 输入图片
水彩画:
filename: color2painting.json
type: paint-board
params:
ckpt:
isRequired: false
keys:
- '4'
- inputs
- ckpt_name
options: #选项参数
卡通动画片SD1.5: yamer_Cartoon_xenoArcadiaCD.safetensors
冷却混合料SD1.5: chilloutmix_NiPrunedFp32Fix.safetensors #中文名称:英文名称
梦想塑造者SD1.5: dreamshaper_8.safetensors
zhName: 基础模型
prompt:
isRequired: false
keys:
- '27'
- inputs
- text_trans
zhName: 正向提示词
seed:
default: -1
isRequired: true
keys:
- '3'
- inputs
- seed
type: text
zhName: 随机种子
denoise:
default: 0.65 #默认值
isRequired: false
keys:
- '3'
- inputs
- denoise
max: 100 #最大值
min: 0 #最小值
original: 1 #原始最大值(用来换算滑块比例)
type: number #类型(输入型参数目前只支持 number/text)
zhName: 重绘幅度
image:
isRequired: true
keys:
- '25'
- inputs
- image
type: text
zhName: 输入图片
图片修改:
filename: imageEdit.json
params:
image:
isRequired: true
keys:
- '48'
- inputs
- image_path
zhName: 图片
prompt:
isRequired: true
keys:
- '47'
- inputs
- text_trans
zhName: 正向提示词
seed:
default: -1
isRequired: true
keys:
- '37:1'
- inputs
- noise_seed
type: text
zhName: 随机种子
replyText: 请发送您的图片发送正向提示词用“ok”结尾开始任务,如:“漫画风格ok”
风格转绘:
filename: img2imgStyle.json
replyText: 请上传需转绘的图片和参考风格图发送“ok”开始任务,如:“ok” #指令说明回复
params:
image: #参数名称(几个固定参数名称必须如下:图片:image 随机种子:seed 正向提示词:prompt 反向提示词:negative)
isRequired: true #是否必填
keys: #参数对应json中对应的key
- '110'
- inputs
- image_path
zhName: 待转绘图
type: image
styleImage: #参数名称(几个固定参数名称必须如下:图片:image 随机种子:seed 正向提示词:prompt 反向提示词:negative)
isRequired: true #是否必填
keys: #参数对应json中对应的key
- '111'
- inputs
- image_path
zhName: 风格参考图
type: image
default: 发送图片
文生二维码:
filename: text2qrcode.json
replyText: 请发送二维码内容,和提示词发送“ok”开始任务,如:“花朵ok” #指令说明回复
params:
prompt:
isRequired: true
keys:
- '75'
- inputs
- text_trans
zhName: 正向提示词
seed:
default: -1
isRequired: true
keys:
- '3'
- inputs
- seed
type: text
zhName: 随机种子
qrText:
default: "https://u.wechat.com/EEy4mPvfXdYO-MvStE4S2m0"
isRequired: true
keys:
- '16'
- inputs
- text
type: text
zhName: 二维码内容
图生视频:
filename: img2video.json #功能流程图json文件
params: #参数列表
image: #参数名称(几个固定参数名称必须如下:图片:image 随机种子:seed 正向提示词:prompt 反向提示词:negative)
isRequired: true #是否必填
keys: #参数对应json中对应的key
- '38'
- inputs
- image_path
zhName: 图片 #参数中文名称
motion_bucket:
default: 127
isRequired: true
keys:
- '12'
- inputs
- motion_bucket_id
max: 200
min: 0
type: number
zhName: 运动量
seed:
default: -1
isRequired: true
keys:
- '3'
- inputs
- seed
type: text
zhName: 随机种子
replyText: 请发送您的图片发送“ok”开始任务,如:“ok” #指令说明回复
文生图:
filename: text2img.json
params:
ckpt:
isRequired: false
keys:
- '4'
- inputs
- ckpt_name
options: #选项参数
冷却混合料SD1.5: chilloutmix_NiPrunedFp32Fix.safetensors #中文名称:英文名称
卡通动画片SD1.5: yamer_Cartoon_xenoArcadiaCD.safetensors
无法控制的SDXL: juggernautXL_version6Rundiffusion.safetensors
梦想塑造者SD1.5: dreamshaper_8.safetensors
zhName: 基础模型
height:
default: 512 #默认值
isRequired: false
keys:
- '14'
- inputs
- height
max: 1024 #最大值
min: 512 #最小值
type: number #类型(输入型参数目前只支持 number/text)
zhName: 高度
lora:
isRequired: false
keys:
- '10'
- inputs
- lora_name
options:
SD1.5-LCM加速: lcm-lora-sdv1-5.safetensors
SDXL-LCM加速: lcm-lora-sdxl.safetensors
zhName: LoRA
negative:
isRequired: false
keys:
- '7'
- inputs
- text
zhName: 反向提示词
prompt:
isRequired: true
keys:
- '20'
- inputs
- text_trans
zhName: 正向提示词
seed:
default: -1
isRequired: true
keys:
- '3'
- inputs
- seed
type: text
zhName: 随机种子
width:
default: 512
isRequired: false
keys:
- '14'
- inputs
- width
max: 1024
min: 512
type: number
zhName: 宽度
replyText: 请发送您的中文或英文提示词用“ok”结束,如:“一只小狗ok”
query_commands: #查询指令(固定)
- 查询排队情况
- 我的编号
+192
View File
@@ -0,0 +1,192 @@
{
"3": {
"inputs": {
"seed": 611578276912800,
"steps": 8,
"cfg": 1,
"sampler_name": "euler_ancestral",
"scheduler": "normal",
"denoise": 0.65,
"model": [
"21",
0
],
"positive": [
"6",
0
],
"negative": [
"7",
0
],
"latent_image": [
"19",
0
]
},
"class_type": "KSampler",
"_meta": {
"title": "K采样器"
}
},
"4": {
"inputs": {
"ckpt_name": "yamer_Cartoon_xenoArcadiaCD.safetensors"
},
"class_type": "CheckpointLoaderSimple",
"_meta": {
"title": "Checkpoint加载器(简易)"
}
},
"6": {
"inputs": {
"text": [
"27",
0
],
"clip": [
"21",
1
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP文本编码器"
}
},
"7": {
"inputs": {
"text": [
"28",
0
],
"clip": [
"4",
1
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP文本编码器"
}
},
"8": {
"inputs": {
"samples": [
"3",
0
],
"vae": [
"4",
2
]
},
"class_type": "VAEDecode",
"_meta": {
"title": "VAE解码"
}
},
"9": {
"inputs": {
"filename_prefix": "ComfyUI",
"images": [
"8",
0
]
},
"class_type": "SaveImage",
"_meta": {
"title": "保存图像"
}
},
"10": {
"inputs": {
"lora_name": "lcm-lora-sdv1-5.safetensors",
"strength_model": 1,
"strength_clip": 1,
"model": [
"4",
0
],
"clip": [
"4",
1
]
},
"class_type": "LoraLoader",
"_meta": {
"title": "LoRA加载器"
}
},
"19": {
"inputs": {
"pixels": [
"25",
0
],
"vae": [
"23",
0
]
},
"class_type": "VAEEncode",
"_meta": {
"title": "VAE编码"
}
},
"21": {
"inputs": {
"lora_name": "可爱少女厚涂风.safetensors",
"strength_model": 0,
"strength_clip": 1,
"model": [
"10",
0
],
"clip": [
"10",
1
]
},
"class_type": "LoraLoader",
"_meta": {
"title": "LoRA加载器"
}
},
"23": {
"inputs": {
"vae_name": "clearvae_v23.safetensors"
},
"class_type": "VAELoader",
"_meta": {
"title": "VAE加载器"
}
},
"25": {
"inputs": {
"image": ""
},
"class_type": "ETN_LoadImageBase64",
"_meta": {
"title": "Load Image (Base64)"
}
},
"27": {
"inputs": {
"text_trans": ""
},
"class_type": "ZhPromptTranslator",
"_meta": {
"title": "正向提示词"
}
},
"28": {
"inputs": {
"text_trans": ""
},
"class_type": "ZhPromptTranslator",
"_meta": {
"title": "反向提示词"
}
}
}
+262
View File
@@ -0,0 +1,262 @@
{
"4": {
"inputs": {
"ckpt_name": "cosxl_edit.safetensors"
},
"class_type": "CheckpointLoaderSimple",
"_meta": {
"title": "Checkpoint加载器(简易)"
}
},
"6": {
"inputs": {
"text": [
"47",
0
],
"clip": [
"4",
1
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP文本编码器"
}
},
"7": {
"inputs": {
"text": "",
"clip": [
"4",
1
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP文本编码器"
}
},
"8": {
"inputs": {
"samples": [
"37:8",
0
],
"vae": [
"4",
2
]
},
"class_type": "VAEDecode",
"_meta": {
"title": "VAE解码"
}
},
"9": {
"inputs": {
"filename_prefix": "ComfyUI",
"images": [
"8",
0
]
},
"class_type": "SaveImage",
"_meta": {
"title": "保存图像"
}
},
"41": {
"inputs": {
"width": 960,
"height": 0,
"interpolation": "nearest",
"keep_proportion": true,
"condition": "always",
"image": [
"48",
0
]
},
"class_type": "ImageResize+",
"_meta": {
"title": "图像缩放"
}
},
"42": {
"inputs": {
"image": [
"48",
0
]
},
"class_type": "GetImage_(Width&Height) _O",
"_meta": {
"title": "GetImage_(Width&Height) _O"
}
},
"44": {
"inputs": {
"expression": "p0>960",
"p0": [
"42",
0
]
},
"class_type": "MultiParamFormula",
"_meta": {
"title": "多参代码表达式"
}
},
"46": {
"inputs": {
"ANY": [
"44",
0
],
"IF_TRUE": [
"41",
0
],
"IF_FALSE": [
"48",
0
]
},
"class_type": "IfInnerExecute",
"_meta": {
"title": "判断选择"
}
},
"47": {
"inputs": {
"text_trans": "秋天"
},
"class_type": "ZhPromptTranslator",
"_meta": {
"title": "中文翻译"
}
},
"48": {
"inputs": {
"image_path": "./ComfyUI/input/example.png",
"RGBA": "false",
"filename_text_extension": "true"
},
"class_type": "LamLoadPathImage",
"_meta": {
"title": "加载网络图片或本地图片"
}
},
"37:0": {
"inputs": {
"sampler_name": "euler"
},
"class_type": "KSamplerSelect",
"_meta": {
"title": "K采样器选择"
}
},
"37:1": {
"inputs": {
"noise_seed": 173148692406184
},
"class_type": "RandomNoise",
"_meta": {
"title": "随机噪波"
}
},
"37:3": {
"inputs": {
"scheduler": "normal",
"steps": 20,
"denoise": 1,
"model": [
"4",
0
]
},
"class_type": "BasicScheduler",
"_meta": {
"title": "基础调度器"
}
},
"37:6": {
"inputs": {
"positive": [
"6",
0
],
"negative": [
"7",
0
],
"vae": [
"4",
2
],
"pixels": [
"46",
0
]
},
"class_type": "InstructPixToPixConditioning",
"_meta": {
"title": "InstructPixToPix条件"
}
},
"37:7": {
"inputs": {
"cfg_conds": 5,
"cfg_cond2_negative": 1.5,
"model": [
"4",
0
],
"cond1": [
"37:6",
0
],
"cond2": [
"37:6",
1
],
"negative": [
"7",
0
]
},
"class_type": "DualCFGGuider",
"_meta": {
"title": "双CFG引导"
}
},
"37:8": {
"inputs": {
"noise": [
"37:1",
0
],
"guider": [
"37:7",
0
],
"sampler": [
"37:0",
0
],
"sigmas": [
"37:3",
0
],
"latent_image": [
"37:6",
2
]
},
"class_type": "SamplerCustomAdvanced",
"_meta": {
"title": "自定义采样器(高级)"
}
}
}
+651
View File
@@ -0,0 +1,651 @@
{
"3": {
"inputs": {
"seed": 20,
"steps": 25,
"cfg": 6,
"sampler_name": "dpmpp_2m",
"scheduler": "karras",
"denoise": 0.9,
"model": [
"105",
0
],
"positive": [
"64",
0
],
"negative": [
"64",
1
],
"latent_image": [
"64",
2
]
},
"class_type": "KSampler",
"_meta": {
"title": "K采样器"
}
},
"4": {
"inputs": {
"ckpt_name": "dreamshaper_8.safetensors"
},
"class_type": "CheckpointLoaderSimple",
"_meta": {
"title": "Checkpoint加载器(简易)"
}
},
"6": {
"inputs": {
"text": [
"72",
0
],
"clip": [
"4",
1
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP文本编码器"
}
},
"7": {
"inputs": {
"text": "blurry, noisy, messy, glitch, distorted, malformed, ill, horror, naked, nipples",
"clip": [
"4",
1
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP文本编码器"
}
},
"8": {
"inputs": {
"samples": [
"3",
0
],
"vae": [
"4",
2
]
},
"class_type": "VAEDecode",
"_meta": {
"title": "VAE解码"
}
},
"29": {
"inputs": {
"width": 960,
"height": 0,
"interpolation": "nearest",
"keep_proportion": true,
"condition": "always",
"multiple_of": 0,
"image": [
"110",
0
]
},
"class_type": "ImageResize+",
"_meta": {
"title": "图像缩放"
}
},
"48": {
"inputs": {
"preset": "STANDARD (medium strength)",
"model": [
"4",
0
]
},
"class_type": "IPAdapterUnifiedLoader",
"_meta": {
"title": "IPAdapter加载器"
}
},
"50": {
"inputs": {
"interpolation": "LANCZOS",
"crop_position": "pad",
"sharpening": 0,
"image": [
"111",
0
]
},
"class_type": "PrepImageForClipVision",
"_meta": {
"title": "CLIP视觉图像处理"
}
},
"51": {
"inputs": {
"strength": 0.55,
"start_percent": 0,
"end_percent": 0.75,
"positive": [
"6",
0
],
"negative": [
"7",
0
],
"control_net": [
"52",
0
],
"image": [
"83",
0
]
},
"class_type": "ControlNetApplyAdvanced",
"_meta": {
"title": "ControlNet应用(高级)"
}
},
"52": {
"inputs": {
"control_net_name": "control_v11p_sd15_lineart.pth"
},
"class_type": "ControlNetLoader",
"_meta": {
"title": "ControlNet加载器"
}
},
"55": {
"inputs": {
"strength": 1,
"start_percent": 0,
"end_percent": 0.3,
"positive": [
"51",
0
],
"negative": [
"51",
1
],
"control_net": [
"56",
0
],
"image": [
"57",
0
]
},
"class_type": "ControlNetApplyAdvanced",
"_meta": {
"title": "ControlNet应用(高级)"
}
},
"56": {
"inputs": {
"control_net_name": "control_v11f1p_sd15_depth.pth"
},
"class_type": "ControlNetLoader",
"_meta": {
"title": "ControlNet加载器"
}
},
"57": {
"inputs": {
"ckpt_name": "depth_anything_vits14.pth",
"resolution": 960,
"image": [
"71",
0
]
},
"class_type": "DepthAnythingPreprocessor",
"_meta": {
"title": "DA深度预处理器"
}
},
"63": {
"inputs": {
"interpolation": "LANCZOS",
"crop_position": "pad",
"sharpening": 0,
"image": [
"71",
0
]
},
"class_type": "PrepImageForClipVision",
"_meta": {
"title": "CLIP视觉图像处理"
}
},
"64": {
"inputs": {
"positive": [
"55",
0
],
"negative": [
"55",
1
],
"vae": [
"4",
2
],
"pixels": [
"71",
0
]
},
"class_type": "InstructPixToPixConditioning",
"_meta": {
"title": "InstructPixToPix条件"
}
},
"69": {
"inputs": {
"image": [
"110",
0
]
},
"class_type": "GetImage_(Width&Height) _O",
"_meta": {
"title": "GetImage_(Width&Height) _O"
}
},
"70": {
"inputs": {
"expression": "p0>960",
"p0": [
"69",
0
]
},
"class_type": "MultiParamFormula",
"_meta": {
"title": "多参代码表达式"
}
},
"71": {
"inputs": {
"ANY": [
"70",
0
],
"IF_TRUE": [
"29",
0
],
"IF_FALSE": [
"110",
0
]
},
"class_type": "IfInnerExecute",
"_meta": {
"title": "判断选择"
}
},
"72": {
"inputs": {
"model": "wd-v1-4-moat-tagger-v2",
"threshold": 0.35,
"character_threshold": 1,
"exclude_tags": "",
"image": [
"71",
0
]
},
"class_type": "WD14Tagger|pysssss",
"_meta": {
"title": "WD14反推提示词"
}
},
"76": {
"inputs": {
"preset": "PLUS FACE (portraits)",
"model": [
"103",
0
]
},
"class_type": "IPAdapterUnifiedLoader",
"_meta": {
"title": "IPAdapter加载器"
}
},
"83": {
"inputs": {
"coarse": "disable",
"image": [
"71",
0
]
},
"class_type": "LineArtPreprocessor",
"_meta": {
"title": "LineArt艺术线预处理器"
}
},
"86": {
"inputs": {
"filename_prefix": "ComfyUI",
"images": [
"8",
0
]
},
"class_type": "SaveImage",
"_meta": {
"title": "保存图像"
}
},
"88": {
"inputs": {
"expression": "p0[p1:p1+1]",
"p0": [
"108",
0
],
"p1": [
"89",
1
]
},
"class_type": "MultiParamFormula",
"_meta": {
"title": "多参代码表达式"
}
},
"89": {
"inputs": {
"total": [
"90",
0
],
"stop": 1,
"i": 0
},
"class_type": "ForInnerStart",
"_meta": {
"title": "计次内循环首"
}
},
"90": {
"inputs": {
"expression": "len(p0)",
"p0": [
"108",
1
]
},
"class_type": "MultiParamFormula",
"_meta": {
"title": "多参代码表达式"
}
},
"91": {
"inputs": {
"expression": "p0[p1]",
"p0": [
"108",
1
],
"p1": [
"89",
1
]
},
"class_type": "MultiParamFormula",
"_meta": {
"title": "多参代码表达式"
}
},
"92": {
"inputs": {
"total": [
"89",
0
],
"obj": [
"97",
0
]
},
"class_type": "ForInnerEnd",
"_meta": {
"title": "计次内循环尾"
}
},
"94": {
"inputs": {
"ANY": [
"95",
0
],
"IF_TRUE": [
"96",
0
],
"IF_FALSE": [
"89",
3
]
},
"class_type": "IfInnerExecute",
"_meta": {
"title": "判断选择"
}
},
"95": {
"inputs": {
"expression": "p0==0",
"p0": [
"89",
1
]
},
"class_type": "MultiParamFormula",
"_meta": {
"title": "多参代码表达式"
}
},
"96": {
"inputs": {
"preset": "FACEID PLUS V2",
"lora_strength": 0.39,
"provider": "CPU",
"model": [
"76",
0
],
"ipadapter": [
"76",
1
]
},
"class_type": "IPAdapterUnifiedLoaderFaceID",
"_meta": {
"title": "IPAdapterFaceID加载器"
}
},
"97": {
"inputs": {
"weight": 1,
"weight_faceidv2": 2,
"weight_type": "linear",
"combine_embeds": "concat",
"start_at": 0,
"end_at": 1,
"embeds_scaling": "V only",
"model": [
"94",
0
],
"ipadapter": [
"96",
1
],
"image": [
"88",
0
],
"attn_mask": [
"91",
0
]
},
"class_type": "IPAdapterFaceID",
"_meta": {
"title": "应用IPAdapterFaceID"
}
},
"102": {
"inputs": {
"weight": 1,
"weight_type": "style transfer",
"combine_embeds": "concat",
"start_at": 0,
"end_at": 1,
"embeds_scaling": "V only",
"model": [
"48",
0
],
"ipadapter": [
"48",
1
],
"image": [
"50",
0
]
},
"class_type": "IPAdapterAdvanced",
"_meta": {
"title": "应用IPAdapter(高级)"
}
},
"103": {
"inputs": {
"weight": 1,
"weight_type": "composition",
"combine_embeds": "concat",
"start_at": 0,
"end_at": 1,
"embeds_scaling": "V only",
"model": [
"102",
0
],
"ipadapter": [
"48",
1
],
"image": [
"63",
0
]
},
"class_type": "IPAdapterAdvanced",
"_meta": {
"title": "应用IPAdapter(高级)"
}
},
"104": {
"inputs": {
"expression": "len(p0)>0",
"p0": [
"108",
1
]
},
"class_type": "MultiParamFormula",
"_meta": {
"title": "多参代码表达式"
}
},
"105": {
"inputs": {
"ANY": [
"104",
0
],
"IF_TRUE": [
"92",
1
],
"IF_FALSE": [
"103",
0
]
},
"class_type": "IfInnerExecute",
"_meta": {
"title": "判断选择"
}
},
"108": {
"inputs": {
"crop_padding_factor": 0.25,
"analysis_models": [
"109",
0
],
"image": [
"71",
0
]
},
"class_type": "ImageCropFaces",
"_meta": {
"title": "多人面部裁剪"
}
},
"109": {
"inputs": {
"library": "insightface",
"provider": "CPU"
},
"class_type": "FaceAnalysisModels",
"_meta": {
"title": "面部分析模型"
}
},
"110": {
"inputs": {
"image_path": "./ComfyUI/input/example.png",
"RGBA": "false",
"filename_text_extension": "true"
},
"class_type": "LamLoadPathImage",
"_meta": {
"title": "需转绘的图"
}
},
"111": {
"inputs": {
"image_path": "./ComfyUI/input/example.png",
"RGBA": "false",
"filename_text_extension": "true"
},
"class_type": "LamLoadPathImage",
"_meta": {
"title": "风格参考图片"
}
}
}
+142
View File
@@ -0,0 +1,142 @@
{
"3": {
"inputs": {
"seed": 801899397770458,
"steps": 4,
"cfg": 1,
"sampler_name": "lcm",
"scheduler": "karras",
"denoise": 1,
"model": [
"14",
0
],
"positive": [
"12",
0
],
"negative": [
"12",
1
],
"latent_image": [
"12",
2
]
},
"class_type": "KSampler"
},
"8": {
"inputs": {
"samples": [
"3",
0
],
"vae": [
"15",
2
]
},
"class_type": "VAEDecode"
},
"12": {
"inputs": {
"width": [
"30",
0
],
"height": [
"30",
1
],
"video_frames": 25,
"motion_bucket_id": 127,
"fps": 6,
"augmentation_level": 0,
"clip_vision": [
"15",
1
],
"init_image": [
"38",
0
],
"vae": [
"15",
2
]
},
"class_type": "SVD_img2vid_Conditioning"
},
"14": {
"inputs": {
"min_cfg": 1,
"model": [
"33",
0
]
},
"class_type": "VideoLinearCFGGuidance"
},
"15": {
"inputs": {
"ckpt_name": "AnimateLCM-SVD-xt-1-1_fp16_comfy.safetensors"
},
"class_type": "ImageOnlyCheckpointLoader"
},
"25": {
"inputs": {
"frame_rate": 8,
"loop_count": 0,
"filename_prefix": "AnimateDiff",
"format": "video/h265-mp4",
"pingpong": false,
"save_image": true,
"Sync playback": null,
"images": [
"8",
0
]
},
"class_type": "VHS_VideoCombine"
},
"30": {
"inputs": {
"image": [
"31",
0
]
},
"class_type": "Get image size"
},
"31": {
"inputs": {
"upscale_method": "nearest-exact",
"scale_by": 0.7000000000000001,
"image": [
"38",
0
]
},
"class_type": "ImageScaleBy"
},
"33": {
"inputs": {
"lora_name": "lcm-lora-sdv1-5.safetensors",
"strength_model": 1,
"model": [
"15",
0
]
},
"class_type": "LoraLoaderModelOnly"
},
"38": {
"inputs": {
"image_path": "http://127.0.0.1:8188/view?filename=ComfyUI_00402_.png&type=input&subfolder=&rand=0.9232966295130483",
"RGBA": "false",
"filename_text_extension": "true"
},
"class_type": "LamLoadPathImage"
}
}
+239
View File
@@ -0,0 +1,239 @@
{
"1": {
"inputs": {
"ckpt_name": "yamer_Cartoon_xenoArcadiaCD.safetensors"
},
"class_type": "CheckpointLoaderSimple",
"_meta": {
"title": "Checkpoint加载器(简易)"
}
},
"2": {
"inputs": {
"width": [
"16",
0
],
"height": [
"16",
1
],
"batch_size": 1
},
"class_type": "EmptyLatentImage",
"_meta": {
"title": "空Latent"
}
},
"3": {
"inputs": {
"text": [
"17",
0
],
"clip": [
"1",
1
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP文本编码器"
}
},
"4": {
"inputs": {
"text": [
"18",
0
],
"clip": [
"1",
1
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP文本编码器"
}
},
"6": {
"inputs": {
"control_net_name": "control_v11p_sd15_lineart.pth"
},
"class_type": "ControlNetLoader",
"_meta": {
"title": "ControlNet加载器"
}
},
"7": {
"inputs": {
"strength": 1,
"conditioning": [
"3",
0
],
"control_net": [
"6",
0
],
"image": [
"22",
0
]
},
"class_type": "ControlNetApply",
"_meta": {
"title": "ControlNet应用"
}
},
"8": {
"inputs": {
"seed": 275540587861329,
"steps": 8,
"cfg": 1,
"sampler_name": "lcm",
"scheduler": "karras",
"denoise": 1,
"model": [
"14",
0
],
"positive": [
"7",
0
],
"negative": [
"4",
0
],
"latent_image": [
"2",
0
]
},
"class_type": "KSampler",
"_meta": {
"title": "K采样器"
}
},
"9": {
"inputs": {
"samples": [
"8",
0
],
"vae": [
"1",
2
]
},
"class_type": "VAEDecode",
"_meta": {
"title": "VAE解码"
}
},
"14": {
"inputs": {
"lora_name": "lcm-lora-sdv1-5.safetensors",
"strength_model": 1,
"model": [
"1",
0
]
},
"class_type": "LoraLoaderModelOnly",
"_meta": {
"title": "LoRA加载器(仅模型)"
}
},
"15": {
"inputs": {
"image": ""
},
"class_type": "ETN_LoadImageBase64",
"_meta": {
"title": "Load Image (Base64)"
}
},
"16": {
"inputs": {
"image": [
"22",
0
]
},
"class_type": "GetImage_(Width&Height) _O",
"_meta": {
"title": "GetImage_(Width&Height) _O"
}
},
"17": {
"inputs": {
"text_trans": ""
},
"class_type": "ZhPromptTranslator",
"_meta": {
"title": "正向提示词"
}
},
"18": {
"inputs": {
"text_trans": ""
},
"class_type": "ZhPromptTranslator",
"_meta": {
"title": "反向提示词"
}
},
"19": {
"inputs": {
"filename_prefix": "ComfyUI",
"images": [
"9",
0
]
},
"class_type": "SaveImage",
"_meta": {
"title": "保存图像"
}
},
"20": {
"inputs": {
"channel": "red",
"image": [
"15",
0
]
},
"class_type": "ImageToMask",
"_meta": {
"title": "图像到遮罩"
}
},
"21": {
"inputs": {
"mask": [
"20",
0
]
},
"class_type": "InvertMask",
"_meta": {
"title": "遮罩反转"
}
},
"22": {
"inputs": {
"mask": [
"21",
0
]
},
"class_type": "MaskToImage",
"_meta": {
"title": "遮罩到图像"
}
}
}
+125
View File
@@ -0,0 +1,125 @@
{
"3": {
"inputs": {
"seed": 1068764177227380,
"steps": 5,
"cfg": 1,
"sampler_name": "lcm",
"scheduler": "normal",
"denoise": 1,
"model": [
"10",
0
],
"positive": [
"6",
0
],
"negative": [
"7",
0
],
"latent_image": [
"5",
0
]
},
"class_type": "KSampler"
},
"4": {
"inputs": {
"ckpt_name": "dreamshaper_8.safetensors"
},
"class_type": "CheckpointLoaderSimple"
},
"5": {
"inputs": {
"width": [
"14",
0
],
"height": [
"14",
1
],
"batch_size": 1
},
"class_type": "EmptyLatentImage"
},
"6": {
"inputs": {
"text": [
"20",
0
],
"clip": [
"10",
1
]
},
"class_type": "CLIPTextEncode"
},
"7": {
"inputs": {
"text": "undefined",
"clip": [
"4",
1
]
},
"class_type": "CLIPTextEncode"
},
"8": {
"inputs": {
"samples": [
"3",
0
],
"vae": [
"4",
2
]
},
"class_type": "VAEDecode"
},
"9": {
"inputs": {
"filename_prefix": "ComfyUI",
"images": [
"8",
0
]
},
"class_type": "SaveImage"
},
"10": {
"inputs": {
"lora_name": "lcm-lora-sdv1-5.safetensors",
"strength_model": 1,
"strength_clip": 1,
"model": [
"4",
0
],
"clip": [
"4",
1
]
},
"class_type": "LoraLoader"
},
"14": {
"inputs": {
"aspect_ratio": "1152×896 ∣ 9:7",
"width": 512,
"height": 512
},
"class_type": "AspectRatio"
},
"20": {
"inputs": {
"text_trans": "一只小狗"
},
"class_type": "ZhPromptTranslator"
}
}
+235
View File
@@ -0,0 +1,235 @@
{
"3": {
"inputs": {
"seed": 1092890374757226,
"steps": 8,
"cfg": 1,
"sampler_name": "lcm",
"scheduler": "normal",
"denoise": 1,
"model": [
"74",
0
],
"positive": [
"73",
0
],
"negative": [
"73",
1
],
"latent_image": [
"42",
0
]
},
"class_type": "KSampler",
"_meta": {
"title": "K采样器"
}
},
"4": {
"inputs": {
"ckpt_name": "dreamshaper_8.safetensors"
},
"class_type": "CheckpointLoaderSimple",
"_meta": {
"title": "Checkpoint加载器(简易)"
}
},
"6": {
"inputs": {
"text": [
"75",
0
],
"clip": [
"4",
1
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP文本编码器"
}
},
"7": {
"inputs": {
"text": "",
"clip": [
"4",
1
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP文本编码器"
}
},
"8": {
"inputs": {
"samples": [
"3",
0
],
"vae": [
"4",
2
]
},
"class_type": "VAEDecode",
"_meta": {
"title": "VAE解码"
}
},
"9": {
"inputs": {
"filename_prefix": "ComfyUI",
"images": [
"8",
0
]
},
"class_type": "SaveImage",
"_meta": {
"title": "保存图像"
}
},
"16": {
"inputs": {
"text": "https://u.wechat.com/EEy4mPvfXdYO-MvStE4S2m0",
"version": 2,
"box_size": 30,
"border": 5
},
"class_type": "QRCode",
"_meta": {
"title": "二维码生成"
}
},
"35": {
"inputs": {
"image": [
"16",
0
]
},
"class_type": "GetImage_(Width&Height) _O",
"_meta": {
"title": "GetImage_(Width&Height) _O"
}
},
"41": {
"inputs": {
"control_net_name": "明暗控制controlNet.safetensors"
},
"class_type": "ControlNetLoader",
"_meta": {
"title": "ControlNet加载器"
}
},
"42": {
"inputs": {
"width": [
"35",
0
],
"height": [
"35",
1
],
"batch_size": 1
},
"class_type": "EmptyLatentImage",
"_meta": {
"title": "空Latent"
}
},
"47": {
"inputs": {
"control_net_name": "control_v1p_sd15_qrcode_monster_v2.safetensors"
},
"class_type": "ControlNetLoader",
"_meta": {
"title": "ControlNet加载器"
}
},
"72": {
"inputs": {
"strength": 0.3,
"start_percent": 0,
"end_percent": 1,
"positive": [
"6",
0
],
"negative": [
"7",
0
],
"control_net": [
"47",
0
],
"image": [
"16",
0
]
},
"class_type": "ControlNetApplyAdvanced",
"_meta": {
"title": "ControlNet应用(高级)"
}
},
"73": {
"inputs": {
"strength": 0.3,
"start_percent": 0.1,
"end_percent": 0.9,
"positive": [
"72",
0
],
"negative": [
"72",
1
],
"control_net": [
"41",
0
],
"image": [
"16",
0
]
},
"class_type": "ControlNetApplyAdvanced",
"_meta": {
"title": "ControlNet应用(高级)"
}
},
"74": {
"inputs": {
"lora_name": "lcm-lora-sdv1-5.safetensors",
"strength_model": 1,
"model": [
"4",
0
]
},
"class_type": "LoraLoaderModelOnly",
"_meta": {
"title": "LoRA加载器(仅模型)"
}
},
"75": {
"inputs": {
"text_trans": "汽车修理店,车轮"
},
"class_type": "ZhPromptTranslator",
"_meta": {
"title": "中文翻译"
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Some files were not shown because too many files have changed in this diff Show More