├── .gitignore
├── LICENSE
├── README.md
├── README_en.md
├── __init__.py
├── config.ini
├── doc
├── assets
│ ├── Dreamina.png
│ ├── NanoBanana.png
│ ├── NanoBanana2.png
│ ├── Qwen-image.png
│ ├── addkey.png
│ ├── cloth_1.png
│ ├── cloth_2.png
│ ├── copykey.png
│ ├── kontext.png
│ ├── node.png
│ ├── qr.jpg
│ ├── redux.png
│ ├── seed.png
│ ├── seed2.png
│ ├── seedance_1.png
│ ├── seedance_2.png
│ ├── seedream_v4.png
│ ├── vidu_reference.png
│ ├── 图片翻译.png
│ └── 图片高清放大.png
└── node_list.md
├── nodes
├── base.py
├── config.py
└── node.py
├── pyproject.toml
├── requirements.txt
├── web
└── mojie.js
└── workflow
├── Dreamina(参考生图).json
├── Kontext.json
├── NanoBanana.json
├── Qwen-image.json
├── Vidu_reference.json
├── redux万物迁移.json
├── seedance.json
├── seededit.json
├── seedream_v4.json
├── 图片翻译.json
├── 图片高清放大.json
├── 服装模特生成(合集).json
└── 服装模特生成(生成组图).json
/.gitignore:
--------------------------------------------------------------------------------
1 | *.i
2 | *.ii
3 | *.gpu
4 | *.ptx
5 | *.cubin
6 | *.fatbin
7 | *.ini
8 | config.ini
9 | .idea
10 | __pycache__/
11 | *.pyc
12 | *.pyo
13 | *.ini
14 | config.ini
15 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 |
16 |
17 | ***
18 |
19 | MojieAI开发的Comfyui自定义节点工具。为了让comfyui更加普及,让本地低配置电脑也同样能顺利的运行comfyui,同时避免在comfyui中调用外部API时密钥和地址难以统一管理,以及许多更优秀模型本地算力难以支撑,本地部署耗时耗力,因此mjapi-party将许多优秀常用的API节点做整合,只需要一个API-key即可以调用全网的API接口能力,也能够通过comfyui节点式操作,保留极大的灵活性,极大的拓展了comfyui的易用性。更多API节点正逐步添加中,后续也会逐步增加对扣子和n8n的支持。
20 |
21 | ***
22 | 要使用此节点需前往 [mojieaigc.com](https://www.mojieaigc.com/) 注册账户
23 | 详细说明查看
24 | > [详细安装步骤](#安装步骤)
25 |
26 | > [安装视频教程](https://ecn0nfqh6woh.feishu.cn/wiki/NSrhwpEEQis0b8ktIdAcEbN4neh?from=from_copylink)
27 |
28 | > [摩诘AI的公开文档地址](https://ecn0nfqh6woh.feishu.cn/wiki/GITRwdanFi6gJHkYA9Nc9lDOnHd)
29 |
30 | 更多节点更新信息请关注B站'摩诘AI',
31 | [传送门](https://space.bilibili.com/483532108)
32 |
33 | ### 目前已支持的节点
34 | - [图片翻译节点](/doc/node_list.md#图片翻译节点)
35 | - [图片高清放大节点](/doc/node_list.md#图片高清放大节点)
36 | - [seedance视频生成](/doc/node_list.md#seedance视频生成)
37 | - [服装系列节点](/doc/node_list.md#服装系列节点)
38 | - [seedream-4](/doc/node_list.md#seedream-4使用说明)
39 | - [Gemini-NanoBanana](/doc/node_list.md#gemini-nanobanana使用说明)
40 | - [Qwen-image](/doc/node_list.md#qwen-image-使用说明)
41 | - [Qwen-edit-image](/doc/node_list.md#qwen-edit-image-使用说明)
42 | - [seededit3.0](/doc/node_list.md#seededit30)
43 | - [Dreamina(即梦参考生图)](/doc/node_list.md#dreamina即梦参考生图)
44 | - [Redux万物迁移](/doc/node_list.md#redux万物迁移)
45 | - [Kontext-pro&max](/doc/node_list.md#Kontext-pro&max)
46 | - [自动抠图](/doc/node_list.md#自动抠图)
47 |
48 | ### 节点使用说明
49 | 所有的节点说明文档在:
50 | > doc目录下[node_list.md](doc/node_list.md)
51 |
52 | 所有的节点示例工作流在:
53 | > workflow目录下
54 |
55 | 在comfyui节点列表中找到mjapiparty
56 | 
57 |
58 | - 251012-新增图片翻译节点和图片高清放大节点
59 | #### 图片翻译节点
60 | 该节点支持20多种语言,包括中文、英文、日文、韩文、法文、德文、西班牙文、葡萄牙文、意大利文、俄语等,可以将图片中的文字翻译成其他语言。
61 | 
62 |
63 | #### 图片高清放大节点
64 | 该节点可以将图片放大最高6倍,在保留细节的同时提高图片的清晰度。
65 | 
66 |
67 | - 250929-新增seedance视频生成节点,原有即梦视频生成已下线.
68 | #### seedance 视频生成节点使用说明
69 | 该模型语义理解与指令遵循能力强。运镜专业。支持多种视频风格,可以丝滑兼容各种风格的首图。分辨率支持480P、720P、1080P,时长支持3-10s,帧率24fps
70 | camerafixed是固定镜头开关,开启后将忽略镜头运镜提示词。
71 | duration是生成时长选项
72 | 
73 | last_image不是必须的,接入了之后就是首尾帧,没有接入就是图生视频。
74 | 
75 |
76 |
77 | - 250920-新增服装系列节点
78 | #### 服装系列节点
79 | 该节点是系列节点,也是摩诘AI首个集成工作流,因此无需复杂操作即可完成服装类的大部分工作,涵盖服装系列全流程工作流。其中有:服装模特生成,服装白底图提取,姿势更改和服装替换。详细操作教程参考工作流。工作流共有2个,1个是4功能合计,另一个是串联后的组图生成。工作流在workflow目录下,拖入comfyui即可使用.
80 | 4功能合集:
81 | 
82 | 组图生成工作流:
83 | 
84 |
85 | - 250915-新增节点
86 | #### seedream-4使用说明
87 | Seedream 4.0 原生支持文本、单图和多图输入,实现基于主体一致性的多图融合创作、图像编辑、组图生成等多样玩法,实现包括组图生成、多参考图生图等图片生成能力。支持中文输入输出,支持多照片组合输入。seedream_v4支持4k高清输出,节点中配置了预设尺寸。
88 | 也可以通过自定义宽高来控制输出尺寸。custom_size是自定义尺寸的开关。
89 | 多图组合和Nano的不一样,无需拼接,可直接组合批次输入,seedream会自动拼接。最多可支持10张图片进行组合。
90 |
91 | 
92 |
93 | - 250902-新增节点
94 | #### Gemini-NanoBanana使用说明
95 | Gemini 2.5 Flash Image Preview又名NanoBanana是一款强大的图片编辑模型。
96 | 支持中文输入,不支持中文输出,同时也自带了翻译开关is_translation默认关闭
97 | 
98 | 
99 |
100 |
101 | - 250820-新增节点
102 | #### Qwen-image
103 | Qwen-image是阿里开源的AI绘画工具,对中文的支持非常友好,能够准确的画出细节的小字和排版,支持中文输入,中文输出。
104 | prompt_extend是提示词扩写参数,默认开启,仅需简单提示词就可以出来非常不错的画面效果。
105 | #### Qwen-edit-image
106 | 和seededit功能一样能通过文字描述修改图片。各有千秋,价格便宜,支持使用中文提示词,支持输出中文。
107 |
108 | 
109 |
110 | - 250714-新增节点:
111 | seededit3.0
112 | SeedEdit 3.0 是字节跳动开发的图片编辑工具,能通过文字描述修改图片。比如你说 “把背景换成海边”。支持使用中文提示词,支持输出中文,对比kontext一致性保持更好,支持中文提示词输入和中文文本输出。效果相当不错。
113 | 
114 | 
115 |
116 | #### Kontext-pro&max
117 | 
118 | Kontext 是一个基于大模型的 AI 绘画工具,它可以通过文字描述生成图像。
119 | - 加入了翻译开关is_translation,在每个节点中都有,默认是关闭的。打开可以输入中文。
120 | - max效果更好,pro性价比更高。视频教程可以查看:
121 | > [Kontext-pro&max详细测评教程](https://www.bilibili.com/video/BV19931zAE4c/?vd_source=25d3add966daa64cbb811354319ec18d#reply268510289936)
122 | - 使用前请确保你的账户中有足够的余额
123 |
124 | ***
125 |
126 |
127 | ### 安装步骤
128 | 1. 确保你已经安装了ComfyUI。
129 | 2. 在comfyui-manager中搜索mojieapi_party直接安装本项目
130 | 3. 或者在comfyui/custom_nodes目录下
131 | ```plaintext
132 | git clone https://github.com/MoJIeAIGC/comfyui-MJAPI-party.git
133 | ```
134 | 5. mojieaigc.com网站上注册一个账户
135 | ```url
136 | https://www.mojieaigc.com
137 | ```
138 |
139 | 6. 登录后获取自己的API-KEY
140 |
141 | 
142 |
143 | 7. 修改`config.ini`文件,在项目目根目录下,内容示例如下:
144 |
145 | 
146 |
147 | ```ini
148 | [API]
149 | KEY = your_api_key
150 | BASE_URL = https://www.mojieaigc.com/v1/completions
151 | ```
152 | 请求地址不要动,填入KEY就行了。
153 | 填入密钥key后记得重启comfyui,才能生效
154 |
155 | ### 联系我们
156 | wechat:mojie_AIGC
157 | 扫描下方二维码
158 |
159 |

160 |
161 |
162 |
163 | ***
164 |
165 | ### star
166 |
171 |
--------------------------------------------------------------------------------
/README_en.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 |
16 |
17 |
18 | ***
19 |
20 | ComfyUI custom node tool developed by MojieAI. To address the challenges of managing API keys and endpoints when calling external APIs in ComfyUI, and considering that many superior models require substantial local computing power and time-consuming local deployment, mjapi-party integrates numerous excellent and commonly used API nodes. With just one API key, you can access API capabilities across the web while maintaining the flexibility of ComfyUI's node-based operations, greatly enhancing ComfyUI's usability. More API nodes are being added gradually, and support for Koishi and n8n will be added in the future.
21 |
22 | ***
23 | To use this node, please register an account at [mojieaigc.com](https://www.mojieaigc.com/)
24 | For detailed instructions, see:
25 | > [Detailed Installation Steps](#installation-steps)
26 |
27 | ### Currently Supported Nodes
28 | - [seededit3.0](/doc/node_list.md#seededit30)
29 | - [Dreamina](/doc/node_list.md#Dreamina(即梦))
30 | - [Redux Migration](/doc/node_list.md#redux万物迁移)
31 | - [Kontext-pro&max](/doc/node_list.md#Kontext-pro&max)
32 | - [Automatic Image Matting](/doc/node_list.md#自动抠图)
33 |
34 | ### Node Usage Instructions
35 | All node documentation can be found in:
36 | > [node_list.md](doc/node_list.md) in the doc directory
37 |
38 | All node example workflows are in:
39 | > workflow directory
40 |
41 | Find mjapiparty in the ComfyUI node list
42 | 
43 |
44 | - 250714-New Node:
45 | seededit3.0
46 | SeedEdit 3.0 is an image editing tool developed by ByteDance that can modify images through text descriptions. For example, you can say "change the background to a beach." It supports Chinese prompts, Chinese output, maintains better consistency compared to Kontext, and supports Chinese prompt input and Chinese text output. The results are quite impressive.
47 | 
48 | 
49 | #### Redux Migration
50 | This is a flux-redux migration integration node. Everything is configured and ready to use without downloading models.
51 | 
52 | - migrate_image and migrate_mask are required uploads for the image to be migrated and the mask for the migration area.
53 | - Product_image and Product_mask are for uploading the product image to be migrated. The mask is not mandatory.
54 | - However, adding a mask to Product_mask details can make detail restoration more accurate.
55 | - Prompts are optional as there are default prompts. You can simply describe what the item is.
56 | - Strength between 0.6-0.9 is sufficient
57 | #### Kontext-pro&max
58 | 
59 | Kontext is an AI drawing tool based on large models that can generate images through text descriptions.
60 | - Added translation switch is_translation in each node, which is off by default. When enabled, you can input Chinese.
61 | - aspect_ratio controls dimensions, default is "default" where Kontext controls the output image size. You can also enable it to select dimensions according to your needs.
62 | - max has better effects, pro offers better value for money. Video tutorial available at:
63 | > [Kontext-pro&max Detailed Review Tutorial](https://www.bilibili.com/video/BV19931zAE4c/?vd_source=25d3add966daa64cbb811354319ec18d#reply268510289936)
64 | - Please ensure you have sufficient balance in your account before use
65 | #### Dreamina
66 | 
67 | Dreamina is an AI drawing tool based on large models that supports Chinese input and output. It was specifically added to mjapiparty to fully leverage ComfyUI's flexible combination capabilities, and to avoid having to recharge in Dreamina itself. The mojie-api-party node includes two Dreamina nodes: text-to-image and image-to-image.
68 | - Dreamina text-to-image supports Chinese input and output. It has good understanding of obscure or Chinese-specific concepts.
69 | - Dreamina image-to-image has multiple reference modes in gen_mode selection:
70 | - First mode, creative, is creative mode, which can be understood as full image reference
71 | - Second mode, reference, is face reference
72 | - Third mode, reference_char, is character reference
73 | - The default cfg is 2.5, please do not modify
74 |
75 | ***
76 |
77 |
78 | ### Installation Steps
79 | 1. Make sure you have installed ComfyUI.
80 | 2. Search for mojieapi_party in comfyui-manager to install this project directly
81 | 3. Or in the comfyui/custom_nodes directory:
82 | ```plaintext
83 | git clone https://github.com/MoJIeAIGC/comfyui-MJAPI-party.git
84 | 4. Run requirements to install dependencies:
85 |
86 | pip install -r requirements.txt
87 |
88 | 6. Register an account on mojieaigc.com website
89 | 7. Log in to get your API-KEY
90 | 8. Create a config.ini file in the project root directory with the following content:
91 | ```
92 | [API]
93 | ```
94 | KEY = your_api_key
95 | BASE_URL = https://www.mojieaigc.com/v1/
96 | completions
97 | ```
98 | Do not change the request address, just fill in the KEY.
99 | Remember to restart ComfyUI after entering the key
100 |
101 | ### Contact Us
102 | WeChat: mojie_AIGC
103 | Scan the QR code below
104 |
--------------------------------------------------------------------------------
/__init__.py:
--------------------------------------------------------------------------------
1 | import importlib.util
2 | import importlib
3 | from .nodes.node import ConfigManager
4 | from server import PromptServer
5 | from aiohttp import web
6 | config_manager = ConfigManager()
7 | import os
8 | import subprocess
9 | import logging
10 | import requests
11 |
12 | routes = PromptServer.instance.routes
13 | @routes.post('/my_node/set_key')
14 | async def set_key(request):
15 | try:
16 | data = await request.json()
17 | key = data.get("api_key", "")
18 | config_manager.set_api_key(key)
19 | print(f"收到保存请求,KEY长度: {len(key)}")
20 | except Exception as e:
21 | print(f"保存KEY失败: {str(e)}")
22 | return web.json_response({"msg": f"保存失败: {e}"}, status=500)
23 | return web.json_response({"msg": "ok"})
24 |
25 | @routes.get('/my_node/get_key')
26 | async def get_key(request):
27 | oneapi_url, oneapi_token = config_manager.get_api_config()
28 | # 读取pyproject.toml中的version
29 | import toml
30 | pyproject_path = os.path.join(os.path.dirname(__file__), "pyproject.toml")
31 | with open(pyproject_path, "r", encoding="utf-8") as f:
32 | pyproject_data = toml.load(f)
33 | version = pyproject_data["project"]["version"]
34 |
35 | return web.json_response({
36 | "msg": oneapi_token,
37 | "version": version
38 | })
39 |
40 |
41 |
42 | @routes.get('/my_node/get_user')
43 | async def get_user(request):
44 | oneapi_url, oneapi_token = config_manager.get_api_config()
45 | oneapi_token = oneapi_token[3:]
46 | response = requests.get(f"https://mojieaigc.com/api/userinfoo?oneapi_token={oneapi_token}")
47 | data = response.json()
48 | print(f"用户信息响应: {data}")
49 | username = data.get("username", "未知用户")
50 | quota = data.get("quota", 0)
51 | quota = round(quota/100, 2)
52 | print(f"获取用户信息: {username}, 配额: {quota}")
53 |
54 | return web.json_response({
55 | "msg": oneapi_token,
56 | "username": username,
57 | "quota": quota
58 | })
59 |
60 |
61 | @routes.post('/my_node/update')
62 | async def update(request):
63 | try:
64 | repo_dir = os.path.dirname(__file__)
65 | logging.info(f"[update] 仓库目录: {repo_dir}")
66 | logging.info("[update] 开始执行更新逻辑")
67 |
68 | def run_ok(cmd):
69 | try:
70 | result = subprocess.run(
71 | cmd, cwd=repo_dir, text=True, capture_output=True, check=True
72 | )
73 | # 成功:仅用于调试的简洁日志;不要用输出内容当成功条件
74 | logging.info(f"[update] ✔ {' '.join(cmd)}\nstdout: {result.stdout.strip()}\nstderr: {result.stderr.strip()}")
75 | return True
76 | except subprocess.CalledProcessError as e:
77 | logging.error(f"[update] ✖ {' '.join(cmd)}\nstdout: {e.stdout.strip() if e.stdout else ''}\nstderr: {e.stderr.strip() if e.stderr else ''}")
78 | return False
79 |
80 | def ensure_remote(name, url):
81 | try:
82 | remotes = subprocess.check_output(["git", "remote"], cwd=repo_dir, text=True).splitlines()
83 | if name not in remotes:
84 | run_ok(["git", "remote", "add", name, url])
85 | logging.info(f"[update] 新增远程: {name} → {url}")
86 | else:
87 | current_url = subprocess.check_output(["git", "remote", "get-url", name], cwd=repo_dir, text=True).strip()
88 | if current_url != url:
89 | run_ok(["git", "remote", "set-url", name, url])
90 | logging.info(f"[update] 更新远程 {name} → {url}")
91 | except Exception as e:
92 | logging.error(f"[update] ensure_remote 出错: {e}")
93 |
94 | def get_remote_head_branch(remote):
95 | # 解析 "git remote show " 里的 "HEAD branch: xxx"
96 | try:
97 | info = subprocess.check_output(["git", "remote", "show", remote], cwd=repo_dir, text=True, errors="ignore")
98 | for line in info.splitlines():
99 | if "HEAD branch" in line:
100 | return line.split(":")[-1].strip()
101 | except Exception as e:
102 | logging.error(f"[update] 获取 {remote} 默认分支失败: {e}")
103 | return None
104 |
105 | GITHUB_NAME, GITHUB_URL = "github", "https://github.com/MoJIeAIGC/comfyui-MJAPI-party.git"
106 | GITEE_NAME, GITEE_URL = "gitee", "https://gitee.com/moja_1/comfyui-MJAPI-party.git"
107 |
108 | ensure_remote(GITHUB_NAME, GITHUB_URL)
109 | ensure_remote(GITEE_NAME, GITEE_URL)
110 |
111 | def hard_reset(remote):
112 | # 自动识别远程默认分支,失败则尝试 main/master
113 | branch = get_remote_head_branch(remote) or "main"
114 | logging.info(f"[update] {remote} 默认分支: {branch}")
115 |
116 | # fetch 默认分支;若失败且不是 master,则再尝试 master
117 | if not run_ok(["git", "fetch", remote, branch]):
118 | if branch != "master" and run_ok(["git", "fetch", remote, "master"]):
119 | branch = "master"
120 | else:
121 | return False
122 |
123 | # 用 checkout -B 强制把本地 指向 remote/
124 | # -B:存在则重置,不存在则创建;-f 强制切换避免工作区阻塞
125 | if not run_ok(["git", "checkout", "-f", "-B", branch, f"{remote}/{branch}"]):
126 | return False
127 |
128 | # 强制把工作区/索引对齐远程
129 | if not run_ok(["git", "reset", "--hard", f"{remote}/{branch}"]):
130 | return False
131 |
132 | # (可选)清理未跟踪文件:如需更“干净”,解除注释下一行
133 | # run_ok(["git", "clean", "-fd"])
134 |
135 | logging.info(f"[update] 已成功同步到 {remote}/{branch}")
136 | return True
137 |
138 | # 国内网络优先用 Gitee,同步失败再回退 GitHub
139 | success = hard_reset(GITHUB_NAME) or hard_reset(GITEE_NAME)
140 | if not success:
141 | logging.error("[update] GitHub 和 Gitee 同步都失败")
142 | return web.json_response({"msg": "更新失败"}, status=500)
143 |
144 | logging.info("[update] 更新完成")
145 | return web.json_response({"msg": "ok"})
146 | except Exception as e:
147 | logging.exception("[update] 发生异常")
148 | return web.json_response({"msg": f"更新失败: {e}"}, status=500)
149 |
150 | node_list = [
151 | "node",
152 | ]
153 | WEB_DIRECTORY = "./web"
154 | NODE_CLASS_MAPPINGS = {}
155 | NODE_DISPLAY_NAME_MAPPINGS = {}
156 |
157 | for module_name in node_list:
158 | imported_module = importlib.import_module(f".nodes.{module_name}", __name__)
159 | NODE_CLASS_MAPPINGS = {**NODE_CLASS_MAPPINGS, **imported_module.NODE_CLASS_MAPPINGS}
160 | NODE_DISPLAY_NAME_MAPPINGS = {**NODE_DISPLAY_NAME_MAPPINGS, **imported_module.NODE_DISPLAY_NAME_MAPPINGS}
161 |
162 |
163 | __all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"]
--------------------------------------------------------------------------------
/config.ini:
--------------------------------------------------------------------------------
1 | [API]
2 | KEY =
3 | BASE_URL = https://www.mojieaigc.com/v1/completions
4 |
--------------------------------------------------------------------------------
/doc/assets/Dreamina.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/Dreamina.png
--------------------------------------------------------------------------------
/doc/assets/NanoBanana.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/NanoBanana.png
--------------------------------------------------------------------------------
/doc/assets/NanoBanana2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/NanoBanana2.png
--------------------------------------------------------------------------------
/doc/assets/Qwen-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/Qwen-image.png
--------------------------------------------------------------------------------
/doc/assets/addkey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/addkey.png
--------------------------------------------------------------------------------
/doc/assets/cloth_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/cloth_1.png
--------------------------------------------------------------------------------
/doc/assets/cloth_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/cloth_2.png
--------------------------------------------------------------------------------
/doc/assets/copykey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/copykey.png
--------------------------------------------------------------------------------
/doc/assets/kontext.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/kontext.png
--------------------------------------------------------------------------------
/doc/assets/node.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/node.png
--------------------------------------------------------------------------------
/doc/assets/qr.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/qr.jpg
--------------------------------------------------------------------------------
/doc/assets/redux.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/redux.png
--------------------------------------------------------------------------------
/doc/assets/seed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/seed.png
--------------------------------------------------------------------------------
/doc/assets/seed2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/seed2.png
--------------------------------------------------------------------------------
/doc/assets/seedance_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/seedance_1.png
--------------------------------------------------------------------------------
/doc/assets/seedance_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/seedance_2.png
--------------------------------------------------------------------------------
/doc/assets/seedream_v4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/seedream_v4.png
--------------------------------------------------------------------------------
/doc/assets/vidu_reference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/vidu_reference.png
--------------------------------------------------------------------------------
/doc/assets/图片翻译.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/图片翻译.png
--------------------------------------------------------------------------------
/doc/assets/图片高清放大.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoJIeAIGC/comfyui-MJAPI-party/0a3f225ab3be58f382d2195ab5cc2ce644ec67b7/doc/assets/图片高清放大.png
--------------------------------------------------------------------------------
/doc/node_list.md:
--------------------------------------------------------------------------------
1 | #### 所有API节点列表
2 | 所有的节点示例工作流都可以在workflow目录下找到
3 | - [图片翻译节点](#图片翻译节点)
4 | - [图片高清放大节点](#图片高清放大节点)
5 | - [seedance 视频生成节点](#seedance-视频生成节点使用说明)
6 | - [服装系列节点](#服装系列节点)
7 | - [seedream-4.0](#seedream-4使用说明)
8 | - [Gemini-NanoBanana](#gemini-nanobanana使用说明)
9 | - [Qwen-image](#qwen-image-使用说明)
10 | - [Qwen-edit-image](#qwen-edit-image-使用说明)
11 | - [seededit3.0](#seededit30)
12 | - [Redux万物迁移](#redux万物迁移)
13 | - [Kontext-pro&max](#Kontext-pro&max)
14 | - [自动抠图](#自动抠图)
15 | - [Dreamina(即梦参考生图)](#dreamina即梦参考生图)
16 |
17 | ***
18 | #### 图片翻译节点
19 | 该节点支持20多种语言,包括中文、英文、日文、韩文、法文、德文、西班牙文、葡萄牙文、意大利文、俄语等,可以将图片中的文字翻译成其他语言。
20 | 
21 |
22 | #### 图片高清放大节点
23 | 该节点可以将图片放大最高6倍,在保留细节的同时提高图片的清晰度。
24 | 
25 |
26 | #### seedance 视频生成节点使用说明
27 | 该模型语义理解与指令遵循能力强。运镜专业。支持多种视频风格,可以丝滑兼容各种风格的首图。分辨率支持480P、720P、1080P,时长支持3-10s,帧率24fps
28 | camerafixed是固定镜头开关,开启后将忽略镜头运镜提示词。
29 | duration是生成时长选项
30 | 
31 | last_image不是必须的,接入了之后就是首尾帧,没有接入就是图生视频。
32 | 
33 | #### 服装系列节点
34 | 该节点是系列节点,涵盖服装系列全流程工作流。其中有:服装模特生成,服装白底图提取,姿势更改和服装替换。详细操作教程参考工作流。工作流共有2个,1个是4功能合计,另一个是串联后的组图生成。
35 | 4功能合集:
36 | 
37 | 组图生成工作流:
38 | 
39 |
40 | #### seedream-4使用说明
41 | Seedream 4.0 原生支持文本、单图和多图输入,实现基于主体一致性的多图融合创作、图像编辑、组图生成等多样玩法,实现包括组图生成、多参考图生图等图片生成能力。支持中文输入输出,支持多照片组合输入。seedream_v4支持4k高清输出,节点中配置了预设尺寸。
42 | 也可以通过自定义宽高来控制输出尺寸。custom_size是自定义尺寸的开关。
43 | 多图组合和Nano的不一样,无需拼接,可直接组合批次输入,seedream会自动拼接。最多可支持10张图片进行组合。
44 |
45 | 
46 |
47 | #### Gemini-NanoBanana使用说明
48 | NanoBanana又名Gemini 2.5 Flash Image Preview,是google旗下的图片编辑工具。提示词遵循强度很高。基本不需要特别的提示词格式,支持中英文输入,但是不支持中文输出,可输出英文字体。
49 | is_translation是翻译开关,如果中文输入效果不理想,可以把翻译开关打开,翻译过后再试。
50 | 
51 | 
52 |
53 | #### Qwen-image 使用说明
54 | Qwen-image是阿里开源的AI绘画工具,对中文的支持非常友好,能够准确的画出细节的小字和排版,支持中文输入,中文输出。
55 | prompt_extend是提示词扩写参数,默认开启,仅需简单提示词就可以出来非常不错的画面效果。
56 | #### Qwen-edit-image 使用说明
57 | 和seededit功能一样能通过文字描述修改图片。各有千秋,价格便宜,支持使用中文提示词,支持输出中文。具体使用方法和标准提示词可以参考seededit
58 |
59 | 
60 |
61 | #### seededit3.0 使用说明
62 | SeedEdit 3.0 是字节跳动开发的图片编辑工具,
63 | 能通过文字描述修改图片。比如你说 “把背景换成海边”。支持使用中文提示词,支持输出中文。
64 | 
65 | 
66 |
67 | 用于编辑图像的提示词 ,建议:
68 | - 建议长度 <= 120字符,prompt过长有概率出图异常或不生效
69 | - 编辑指令使用自然语言即可
70 | - 每次编辑使用单指令会更好
71 | - 局部编辑时指令描述尽量精准,尤其是画面有多个实体的时候,描述清楚对谁做什么,能获取更精准的编辑效果
72 | - 发现编辑效果不明显的时候,可以调整一下编辑强度cfg_scale,数值越大越贴近指令执行
73 | 尽量使用清晰的,分辨率高的底片.
74 | ##### 提示词参考示例:
75 | - 添加/删除实体:添加/删除xxx(删除图上的女孩/添加一道彩虹)
76 | - 修改实体:把xxx改成xxx(把手里的鸡腿变成汉堡)
77 | - 修改风格:改成xxx风格(改成漫画风格)
78 | - 修改色彩:把xxx改成xx颜色(把衣服改成粉色的)
79 | - 修改动作:修改表情动作(让他哭/笑/生气)
80 | - 修改环境背景:背景换成xxx,在xxx(背景换成海边/在星空下)
81 | ***
82 | #### Redux万物迁移
83 | 这是flux-redux的迁移整合节点,一切都配置好了,无需下载模型,只需直接使用即可。
84 | 
85 | - migrate_image和migrate_mask是必选项上传需要被迁移的图片和迁移区域的遮罩。
86 | - Product_image和Product_mask是上传迁移产品图,遮罩不是必须的。
87 | - 但是可以给Product_mask细节处添加遮罩,可以让细节还原更加准确。
88 | - 提示词可以不填,有默认提示词。或者简单形容一下这个是什么物品。
89 | - 强度在0.6-0.9即可
90 | #### Kontext-pro&max
91 | 
92 | Kontext 是一个基于大模型的 AI 绘画工具,它可以通过文字描述生成图像。
93 | - 加入了翻译开关is_translation,在每个节点中都有,默认是关闭的。打开可以输入中文。
94 | - aspect_ratio是尺寸控制,默认是default,由kontext自己控制输出图片的尺寸。也可以开启根据自己的需要选择尺寸。
95 | - max效果更好,pro性价比更高。视频教程可以查看:
96 | > [Kontext-pro&max详细测评教程](https://www.bilibili.com/video/BV19931zAE4c/?vd_source=25d3add966daa64cbb811354319ec18d#reply268510289936)
97 | - 使用前请确保你的账户中有足够的余额
98 |
99 | #### Dreamina(即梦参考生图)
100 | 加入Qwen-image后,即梦文身图就没有太多存在的意义了,完全可以平替即梦。但是即梦的参考生图还是非常不错的,在人像还原上也非常准确。
101 |
102 | 
103 |
104 | 即梦图生图有多种参考模式gen_mode选下下
105 | 第一种 creative 是创意模式,可以理解为全图参考
106 | 第二种 reference 人脸参考
107 | 第三种 reference_char 人物参考
108 | cfg默认2.5请勿修改
109 |
110 | ##### 自动抠图
111 | 图片上传最大不超过10M
112 | 用就行了,没啥参数。
113 | 带了遮罩就按遮罩范围抠图
114 |
115 |
116 |
--------------------------------------------------------------------------------
/nodes/base.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import torch
3 | from PIL import Image, ImageDraw, ImageFont, PngImagePlugin
4 | import base64
5 | from io import BytesIO
6 | import os
7 | import requests
8 | import logging
9 | from comfy_api.input_impl.video_types import VideoFromFile
10 | class ImageConverter:
11 | @staticmethod
12 | def pil2tensor(image):
13 | img_array = np.array(image).astype(np.float32) / 255.0 # (H, W, 3)
14 | img_tensor = torch.from_numpy(img_array)[None,] # (1, H, W, 3)
15 | return img_tensor
16 |
17 | @staticmethod
18 | def tensor2pil(tensor):
19 | try:
20 | # Tensor (1, H, W, 3) to PIL
21 | image = tensor.squeeze().numpy() * 255.0
22 | return Image.fromarray(image.astype(np.uint8))
23 | except Exception as e:
24 | return None
25 |
26 | @staticmethod
27 | def prepare_and_stitch_images(model_image, cloth_image):
28 | """
29 | 准备并拼接模特图和服装图
30 | 1. 模特图(右图)单边超过1280则等比缩小至1280
31 | 2. 服装图(左图)保持原尺寸
32 | 3. 合并左右图,保持等高,短边图等比拉伸
33 | """
34 | # 转换模特图为PIL
35 | model_pil = ImageConverter.tensor2pil(model_image)
36 | # 转换服装图为PIL
37 | cloth_pil = ImageConverter.tensor2pil(cloth_image)
38 |
39 | # 1. 处理模特图 - 如果单边超过1280则等比缩小
40 | max_size = 1280
41 | if max(model_pil.size) > max_size:
42 | ratio = max_size / max(model_pil.size)
43 | new_width = int(model_pil.width * ratio)
44 | new_height = int(model_pil.height * ratio)
45 | model_pil = model_pil.resize((new_width, new_height), Image.LANCZOS)
46 |
47 | # 2. 处理服装图 - 保持原尺寸
48 |
49 | # 3. 合并图片 - 保持等高
50 | # 确定目标高度(取两者中较大的高度)
51 | target_height = max(model_pil.height, cloth_pil.height)
52 |
53 | # 调整模特图高度
54 | if model_pil.height != target_height:
55 | ratio = target_height / model_pil.height
56 | new_width = int(model_pil.width * ratio)
57 | model_pil = model_pil.resize((new_width, target_height), Image.LANCZOS)
58 |
59 | # 调整服装图高度
60 | if cloth_pil.height != target_height:
61 | ratio = target_height / cloth_pil.height
62 | new_width = int(cloth_pil.width * ratio)
63 | cloth_pil = cloth_pil.resize((new_width, target_height), Image.LANCZOS)
64 |
65 | # 创建新图片(宽度为两者之和)
66 | new_img = Image.new('RGB', (cloth_pil.width + model_pil.width, target_height))
67 | new_img.paste(cloth_pil, (0, 0)) # 左图
68 | new_img.paste(model_pil, (cloth_pil.width, 0)) # 右图
69 |
70 | # 转换为base64
71 | buffered = BytesIO()
72 | new_img.save(buffered, format="JPEG")
73 | return base64.b64encode(buffered.getvalue()).decode("utf-8")
74 |
75 |
76 | @staticmethod
77 | def process_images(face_image, cloths_image, save_filename="output.jpg"):
78 | """
79 | 新逻辑:
80 | - 有脸:832x1248 白色画布,上 1/3 区域放脸,下 2/3 区域放衣服,等比缩放居中
81 | - 无脸:衣服图单独居中缩放到 832x1248,等比缩放,不强行填满
82 | - 保存到项目目录并返回 base64
83 | """
84 | canvas_width, canvas_height = 832, 1248
85 | face_area_height = canvas_height // 3 # 416
86 | cloth_area_height = canvas_height - face_area_height # 832
87 |
88 | # 创建白色背景
89 | new_img = Image.new('RGB', (canvas_width, canvas_height), (255, 255, 255))
90 |
91 | if face_image is not None:
92 | # 有脸部图
93 | face_pil = ImageConverter.tensor2pil(face_image)
94 | cloth_pil = ImageConverter.tensor2pil(cloths_image)
95 |
96 | # --- 处理脸部 (放在上方 1/3 区域,等比缩放) ---
97 | ratio = min(canvas_width / face_pil.width, face_area_height / face_pil.height, 1.0)
98 | new_width = int(face_pil.width * ratio)
99 | new_height = int(face_pil.height * ratio)
100 | face_pil = face_pil.resize((new_width, new_height), Image.LANCZOS)
101 | paste_x = (canvas_width - new_width) // 2
102 | paste_y = (face_area_height - new_height) // 2
103 | new_img.paste(face_pil, (paste_x, paste_y))
104 |
105 | # --- 处理服装 (放在下方 2/3 区域,等比缩放) ---
106 | ratio = min(canvas_width / cloth_pil.width, cloth_area_height / cloth_pil.height, 1.0)
107 | new_width = int(cloth_pil.width * ratio)
108 | new_height = int(cloth_pil.height * ratio)
109 | cloth_pil = cloth_pil.resize((new_width, new_height), Image.LANCZOS)
110 | paste_x = (canvas_width - new_width) // 2
111 | paste_y = face_area_height + (cloth_area_height - new_height) // 2
112 | new_img.paste(cloth_pil, (paste_x, paste_y))
113 |
114 | else:
115 | # 没有脸部图 → 衣服图单独居中缩放到整个画布
116 | cloth_pil = ImageConverter.tensor2pil(cloths_image)
117 | ratio = min(canvas_width / cloth_pil.width, canvas_height / cloth_pil.height, 1.0)
118 | new_width = int(cloth_pil.width * ratio)
119 | new_height = int(cloth_pil.height * ratio)
120 | cloth_pil = cloth_pil.resize((new_width, new_height), Image.LANCZOS)
121 | paste_x = (canvas_width - new_width) // 2
122 | paste_y = (canvas_height - new_height) // 2
123 | new_img.paste(cloth_pil, (paste_x, paste_y))
124 |
125 | # 保存到项目目录
126 | # save_path = os.path.join(os.getcwd(), save_filename)
127 | # new_img.save(save_path, format="JPEG")
128 |
129 | # 转 base64
130 | buffered = BytesIO()
131 | new_img.save(buffered, format="JPEG")
132 | return base64.b64encode(buffered.getvalue()).decode("utf-8")
133 |
134 | @staticmethod
135 | def tensor_to_base64(image_tensor):
136 | """
137 | 将图像张量转换为 base64 编码的字符串
138 |
139 | :param image_tensor: 输入的图像张量
140 | :return: base64 编码的字符串
141 | """
142 | pil_image = ImageConverter.tensor2pil(image_tensor)
143 | buffered = BytesIO()
144 | pil_image.save(buffered, format="JPEG")
145 | return base64.b64encode(buffered.getvalue()).decode("utf-8")
146 |
147 | @staticmethod
148 | def get_status_error_msg(response,cate=0):
149 | """
150 | 根据响应对象返回对应的错误信息
151 |
152 | :param response: requests.Response对象
153 | :return: 对应的错误信息字符串
154 | """
155 | status_code = response.status_code
156 | error_msg_map = {
157 | 400: "请求参数错误,请检查输入 (Bad request, check input)",
158 | 401: "未授权,请检查 API Token (Unauthorized, check API Token)",
159 | 403: "权限不足,请检查余额或令牌权限 (Forbidden, check balance or permissions)",
160 | 404: "请求资源不存在 (Resource not found)",
161 | 500: "服务器繁忙,请稍后再试 (Server busy, try later)",
162 | 502: "网关错误 (Bad gateway)",
163 | 503: "服务不可用 (Service unavailable)",
164 | 504: "网关超时 (Gateway timeout)"
165 | }
166 | error_msg = error_msg_map.get(status_code, f"请求失败,状态码: {status_code}")
167 | # return error_msg_map.get(status_code, f"请求失败,状态码: {status_code}")
168 |
169 | if cate == 1:
170 | try:
171 | error_data = response.json()
172 | error_msg1 = error_data.get("error", {}).get("message", "")
173 | # 尝试解析嵌套的JSON字符串
174 | import json
175 | import re
176 | try:
177 | match = re.search(r'^\{.*\}', error_msg1)
178 | if match:
179 | json_part = match.group(0)
180 | outer = json.loads(json_part)
181 | inner_str = outer['error'][2:-1] # 去掉 b' 和最后的 '
182 | inner_json = json.loads(inner_str)
183 | error_msg = inner_json['message']
184 | except:
185 | return error_msg
186 | except:
187 | pass
188 |
189 | error_data = response.json()
190 | print("Error data:", error_data) # 调试输出
191 | print("Error type:", type(error_data.get("error"))) # 调试输出
192 | if error_data.get("error") and type(error_data.get("error")) is not dict:
193 | error_msg = error_data.get("error")
194 |
195 | return error_msg
196 |
197 | @staticmethod
198 | def create_error_image(text, width=512, height=512, font_size=40):
199 | """
200 | 创建一个红色背景的错误图片,并在上面绘制指定的文字。
201 |
202 | :param text: 要显示的错误文字
203 | :param width: 图片宽度,默认为 512
204 | :param height: 图片高度,默认为 512
205 | :param font_size: 字体大小,默认为 20
206 | :return: 包含错误文字的图片对应的 tensor
207 | """
208 | error_img = Image.new("RGB", (width, height), (255, 0, 0))
209 | try:
210 | draw = ImageDraw.Draw(error_img)
211 | try:
212 | # 尝试加载常见支持中文的字体
213 | # Windows 系统
214 | font = ImageFont.truetype("simhei.ttf", font_size) # 黑体
215 | except:
216 | try:
217 | # macOS 系统
218 | font = ImageFont.truetype("PingFang.ttc", font_size) # 苹方
219 | except:
220 | try:
221 | # Linux 系统
222 | font = ImageFont.truetype("WenQuanYi Zen Hei.ttf", font_size) # 文泉驿正黑
223 | except:
224 | # 若都失败,使用默认字体
225 | font = ImageFont.load_default()
226 |
227 | # 根据图片宽度和字体大小计算每行最大字符数
228 | max_chars_per_line = width // (font_size // 2) # 根据字体大小动态计算
229 | max_chars_per_line = max(20, min(max_chars_per_line, 50)) # 限制在20-50字符之间
230 |
231 | # 将错误信息分行,避免单行过长
232 | lines = []
233 | words = text.split()
234 | current_line = ""
235 |
236 | for word in words:
237 | if len(current_line + word) <= max_chars_per_line:
238 | current_line += word + " "
239 | else:
240 | lines.append(current_line.strip())
241 | current_line = word + " "
242 | if current_line:
243 | lines.append(current_line.strip())
244 |
245 | # 在图像上逐行绘制错误信息
246 | y_text = 10
247 | line_height = font_size + 4
248 | max_lines = (height - 20) // line_height # 计算图片能容纳的最大行数
249 |
250 | for line in lines[:max_lines]: # 只显示能容纳的行数
251 | draw.text((10, y_text), line, font=font, fill=(255, 255, 255))
252 | y_text += line_height
253 |
254 | except Exception as font_error:
255 | print(f"在错误图片上绘制文字时出错: {font_error}")
256 |
257 | return ImageConverter.pil2tensor(error_img)
258 |
259 |
260 | @staticmethod
261 | def merge_image(image, mask):
262 | imageres = ImageConverter.tensor_to_base64(image)
263 | if mask is None:
264 | return imageres
265 |
266 | # 转 PIL
267 | image = ImageConverter.tensor2pil(image).convert("RGB") # 保留原图
268 | mask = ImageConverter.tensor2pil(mask).convert("L")
269 |
270 | # 确保图像和mask尺寸一致
271 | if image.size != mask.size:
272 | # 调整mask尺寸以匹配图像
273 | mask = mask.resize(image.size, Image.BILINEAR)
274 |
275 | # alpha 通道 = 255 - mask(保持透明显示)
276 | alpha = Image.eval(mask, lambda px: 255 - px)
277 |
278 | # 合成 RGBA(但不清理 RGB 内容!)
279 | rgba_image = image.copy()
280 | rgba_image.putalpha(alpha)
281 |
282 | # ---关键:额外保存一份原始 RGB 和 mask 到 PNG metadata---
283 | meta = PngImagePlugin.PngInfo()
284 |
285 | # 原始 RGB
286 | buf_rgb = BytesIO()
287 | image.save(buf_rgb, format="PNG")
288 | meta.add_text("raw_rgb_base64", base64.b64encode(buf_rgb.getvalue()).decode("utf-8"))
289 |
290 | # 原始 Mask
291 | buf_mask = BytesIO()
292 | mask.save(buf_mask, format="PNG")
293 | meta.add_text("raw_mask_base64", base64.b64encode(buf_mask.getvalue()).decode("utf-8"))
294 |
295 | # 保存 PNG
296 | buffered = BytesIO()
297 | rgba_image.save(buffered, format="PNG", pnginfo=meta)
298 |
299 | return base64.b64encode(buffered.getvalue()).decode("utf-8")
300 |
301 |
302 | @staticmethod
303 | def download_video(video_url: str, save_path: str = "temp_video.mp4") -> str:
304 | """
305 | 下载视频文件到本地
306 | :param video_url: 视频URL
307 | :param save_path: 本地保存路径
308 | :return: 本地视频文件路径
309 | """
310 | try:
311 | response = requests.get(video_url, stream=True)
312 | if response.status_code == 200:
313 | with open(save_path, 'wb') as f:
314 | for chunk in response.iter_content(chunk_size=1024):
315 | f.write(chunk)
316 | logging.info(f"视频下载完成: {save_path}")
317 | return save_path
318 | else:
319 | raise ValueError(f"下载视频失败: {response.status_code}")
320 | except Exception as e:
321 | logging.error(f"视频下载出错: {str(e)}")
322 | raise
323 |
324 | @staticmethod
325 | def convert_images_to_base64(image_list):
326 | # 转换图像为Base64编码的字符串数组
327 | base64_images = []
328 | for img in image_list:
329 | img_base64 = ImageConverter.tensor_to_base64(img)
330 | base64_images.append(img_base64)
331 | return base64_images
332 |
333 | @staticmethod
334 | def get_right_part_of_image(img):
335 | """
336 | 从输入图片中找到分割线并仅保留右边部分
337 |
338 | :param img: PIL 图像对象
339 | :return: 仅包含右边部分的 PIL 图像对象
340 | """
341 | # 简单的边缘检测找分割线,计算每列的像素差异
342 | width, height = img.size
343 | diff_values = []
344 | for x in range(1, width):
345 | diff = 0
346 | for y in range(height):
347 | left_pixel = img.getpixel((x - 1, y))
348 | right_pixel = img.getpixel((x, y))
349 | diff += sum(abs(a - b) for a, b in zip(left_pixel, right_pixel))
350 | diff_values.append(diff)
351 |
352 | # 找到差异最大的位置作为分割线
353 | split_x = diff_values.index(max(diff_values)) + 1
354 |
355 | # 只保留右边部分图片
356 | return img.crop((split_x, 0, width, height))
357 |
358 |
359 | @staticmethod
360 | def crop_white_borders(img, tolerance=30):
361 | """
362 | 判断并裁剪图片上下的白色部分
363 |
364 | :param img: PIL 图像对象
365 | :param tolerance: 颜色容差,值越大允许的色差范围越广,默认为 30
366 | :return: 裁剪后的 PIL 图像对象
367 | """
368 | width, height = img.size
369 | top = 0
370 | bottom = height
371 |
372 | def is_white(pixel, tolerance):
373 | """
374 | 判断像素是否接近白色,考虑颜色容差
375 |
376 | :param pixel: 像素值
377 | :param tolerance: 颜色容差
378 | :return: 如果接近白色返回 True,否则返回 False
379 | """
380 | if len(pixel) == 4: # 处理带透明度的图像
381 | r, g, b, a = pixel
382 | else:
383 | r, g, b = pixel
384 | return all(255 - x <= tolerance for x in (r, g, b))
385 |
386 | # 查找顶部白色区域结束位置
387 | for y in range(height):
388 | # 检查每行的第一个和最后一个像素
389 | if not is_white(img.getpixel((0, y)), tolerance) or not is_white(img.getpixel((width - 1, y)), tolerance):
390 | top = y
391 | break
392 |
393 | # 查找底部白色区域开始位置
394 | for y in range(height - 1, -1, -1):
395 | # 检查每行的第一个和最后一个像素
396 | if not is_white(img.getpixel((0, y)), tolerance) or not is_white(img.getpixel((width - 1, y)), tolerance):
397 | bottom = y + 1
398 | break
399 |
400 | # 执行裁剪
401 | return img.crop((0, top, width, bottom))
402 |
403 |
404 |
405 |
406 | @staticmethod
407 | def get_lang(lang):
408 | combined_lang_dict = {
409 | "阿拉伯语": "ar",
410 | "法语": "fr",
411 | "英语": "en",
412 | "自动": "auto",
413 | "加泰罗尼亚语": "ca",
414 | "葡萄牙语": "pt",
415 | "西班牙语": "es",
416 | "荷兰语": "nl",
417 | "德语": "de",
418 | "斯洛文尼亚语": "sl",
419 | "阿塞拜疆语": "az",
420 | "孟加拉语": "bn",
421 | "俄语": "ru",
422 | "挪威语": "no",
423 | "马来语": "ms",
424 | "中文": "zh",
425 | "中文 (繁体)": "zh_hant",
426 | "捷克语": "cs",
427 | "斯洛伐克语": "sk",
428 | "波兰语": "pl",
429 | "匈牙利语": "hu",
430 | "越南语": "vi",
431 | "丹麦语": "da",
432 | "芬兰语": "fi",
433 | "瑞典语": "sv",
434 | "印尼语": "id",
435 | "希伯来语": "he",
436 | "意大利语": "it",
437 | "日语": "ja",
438 | "韩语": "ko",
439 | "泰米尔语": "ta",
440 | "泰语": "th",
441 | "土耳其语": "tr"
442 | }
443 | return combined_lang_dict.get(lang, "auto")
444 |
--------------------------------------------------------------------------------
/nodes/config.py:
--------------------------------------------------------------------------------
1 | import configparser
2 | import os
3 |
4 | class ConfigManager:
5 | def __init__(self):
6 | self.config = configparser.ConfigParser()
7 | current_dir = os.path.dirname(os.path.abspath(__file__))
8 | config_path = os.path.join(os.path.dirname(current_dir), 'config.ini')
9 | self.config.read(config_path)
10 |
11 | def get_api_config(self):
12 | oneapi_url = self.config.get('API', 'BASE_URL')
13 | oneapi_token = self.config.get('API', 'KEY')
14 | return oneapi_url, oneapi_token
15 |
16 | def set_api_key(self, key):
17 | """设置新的API KEY并保存到配置文件"""
18 | if not self.config.has_section('API'):
19 | self.config.add_section('API')
20 | self.config.set('API', 'KEY', key)
21 |
22 | current_dir = os.path.dirname(os.path.abspath(__file__))
23 | config_path = os.path.join(os.path.dirname(current_dir), 'config.ini')
24 | with open(config_path, 'w') as configfile:
25 | self.config.write(configfile)
--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------
1 | [project]
2 | name = "Mojie-API-Party"
3 | description = "A node that aggregates many powerful API features,Easier integration into workflows"
4 | version = "1.9.6"
5 | license = {file = "LICENSE"}
6 | dependencies = []
7 | classifiers = ["Operating System :: OS Independent"]
8 |
9 | [project.urls]
10 | Repository = "https://github.com/MoJIeAIGC/comfyui-MJAPI-party"
11 | "Request url" = "https://www.mojieaigc.com"
12 | # Used by Comfy Registry https://registry.comfy.org
13 |
14 | [tool.comfy]
15 | PublisherId = "mojieaigc"
16 | DisplayName = "Mojie-API-Party"
17 | Icon = "https://mojieaigc.com/stat/logo.png"
18 | includes = []
19 |
20 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | numpy
2 | torch
3 | requests>=2.32.3
4 | pillow>=10.4.0
5 | aiohttp>=3.11.13
6 | toml
7 |
--------------------------------------------------------------------------------
/web/mojie.js:
--------------------------------------------------------------------------------
1 | import { app } from "../../scripts/app.js";
2 | import { api } from "../../scripts/api.js";
3 |
4 | app.registerExtension({
5 | name: "ComfyUI.Mjapi",
6 | async setup() {
7 |
8 | app.ui.settings.addSetting({
9 | id: "Mjapi.version",
10 | name: "当前版本",
11 | type: () => {
12 | const container = document.createElement("div");
13 |
14 | const versionText = document.createElement("span");
15 | versionText.className = "comfy-text";
16 | versionText.style.fontWeight = "bold";
17 |
18 | // 获取版本信息
19 | api.fetchApi("/my_node/get_key").then(async (resp) => {
20 | const data = await resp.json();
21 | console.log(data);
22 | versionText.textContent = `v${data.version}`; // 显示版本号
23 | });
24 |
25 | container.appendChild(versionText);
26 |
27 | return container; // ✅ 注意这里,不要 return
28 | },
29 | });
30 |
31 | app.ui.settings.addSetting({
32 | id: "Mjapi.api_key",
33 | name: "Mojie API Key (重启生效)",
34 | type: () => {
35 | const container = document.createElement("div");
36 |
37 | const input = document.createElement("input");
38 | input.type = "text";
39 | input.className = "comfy-input";
40 | input.style.width = "360px";
41 |
42 | // 默认值
43 | api.fetchApi("/my_node/get_key").then(async (resp) => {
44 | const data = await resp.json();
45 | console.log(data);
46 | input.value = data.msg || "";
47 | });
48 |
49 | const button = document.createElement("button");
50 | button.className = "comfy-btn";
51 | button.innerText = "更新";
52 | button.onclick = async () => {
53 | const resp = await api.fetchApi("/my_node/set_key", {
54 | method: "POST",
55 | body: JSON.stringify({ api_key: input.value })
56 | });
57 | const data = await resp.json();
58 | alert("保存结果: " + data.msg);
59 | };
60 |
61 | container.appendChild(input);
62 | container.appendChild(button);
63 |
64 | return container; // ✅ 注意这里,不要 return
65 | },
66 | // category: ["API KEY"]
67 | });
68 |
69 |
70 | // 更新按钮(git pull)
71 | app.ui.settings.addSetting({
72 | id: "Mjapi.node_update",
73 | name: "更新节点 (重启生效)",
74 | type: () => {
75 | const row = document.createElement("tr");
76 | const cell = document.createElement("td");
77 | const button = document.createElement("button");
78 | button.className = "comfy-btn";
79 | button.innerText = "立即更新";
80 | button.onclick = async () => {
81 | const resp = await api.fetchApi("/my_node/update", { method: "POST" });
82 | const data = await resp.json();
83 | alert("更新结果: " + data.msg);
84 | };
85 | cell.appendChild(button);
86 | row.appendChild(cell);
87 | return row;
88 | },
89 | // category: ["Custom Nodes"]
90 | });
91 |
92 | // 账户充值入口
93 | app.ui.settings.addSetting({
94 | id: "Mjapi.recharge",
95 | name: "账户充值请前往:",
96 | type: () => {
97 | const container = document.createElement("div");
98 |
99 | const link = document.createElement("a");
100 | link.href = "https://mojieaigc.com";
101 | link.innerText = "https://mojieaigc.com";
102 | link.target = "_blank"; // ✅ 新窗口打开
103 | link.className = "comfy-text";
104 | link.style.color = "#00aaff";
105 | link.style.fontWeight = "bold";
106 | link.style.textDecoration = "underline";
107 | link.style.cursor = "pointer";
108 |
109 | container.appendChild(link);
110 | return container;
111 | },
112 | });
113 |
114 | // 用户信息
115 | app.ui.settings.addSetting({
116 | id: "Mjapi.userinfo",
117 | name: "账户信息",
118 | type: () => {
119 | const container = document.createElement("div");
120 | container.style.display = "flex";
121 | container.style.flexDirection = "column";
122 | container.style.gap = "6px"; // 每行间距
123 | container.style.fontSize = "14px";
124 | container.style.padding = "4px 0";
125 |
126 | // 第1行:用户名
127 | const userRow = document.createElement("div");
128 | userRow.style.display = "flex";
129 | userRow.style.justifyContent = "space-between";
130 | userRow.style.alignItems = "center";
131 |
132 | const userLabel = document.createElement("span");
133 | userLabel.textContent = "当前账户:";
134 | userLabel.style.color = "#888";
135 |
136 | const userValue = document.createElement("span");
137 | userValue.className = "comfy-text";
138 | userValue.style.fontWeight = "bold";
139 | userValue.style.color = "#00aaff";
140 |
141 | userRow.appendChild(userLabel);
142 | userRow.appendChild(userValue);
143 |
144 | // 第2行:余额
145 | const quotaRow = document.createElement("div");
146 | quotaRow.style.display = "flex";
147 | quotaRow.style.justifyContent = "space-between";
148 | quotaRow.style.alignItems = "center";
149 |
150 | const quotaLabel = document.createElement("span");
151 | quotaLabel.textContent = "当前余额:";
152 | quotaLabel.style.color = "#888";
153 |
154 | const quotaValue = document.createElement("span");
155 | quotaValue.className = "comfy-text";
156 | quotaValue.style.fontWeight = "bold";
157 | quotaValue.style.color = "#00cc66";
158 |
159 | quotaRow.appendChild(quotaLabel);
160 | quotaRow.appendChild(quotaValue);
161 |
162 | // 加入容器
163 | container.appendChild(userRow);
164 | container.appendChild(quotaRow);
165 |
166 | // 获取用户信息
167 | api.fetchApi("/my_node/get_user").then(async (resp) => {
168 | const data = await resp.json();
169 | console.log(data);
170 | userValue.textContent = data.username || "未知";
171 | quotaValue.textContent = data.quota !== undefined ? data.quota : "—";
172 | }).catch((err) => {
173 | userValue.textContent = "加载失败";
174 | quotaValue.textContent = "—";
175 | });
176 |
177 | return container;
178 | },
179 | });
180 |
181 |
182 | }
183 | });
184 |
--------------------------------------------------------------------------------
/workflow/Dreamina(参考生图).json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "dbf43daf-a6f8-467a-a5fd-d8c19c2a3b8b",
3 | "revision": 0,
4 | "last_node_id": 10,
5 | "last_link_id": 7,
6 | "nodes": [
7 | {
8 | "id": 8,
9 | "type": "LoadImage",
10 | "pos": [
11 | 579.6439208984375,
12 | -166.67135620117188
13 | ],
14 | "size": [
15 | 270,
16 | 314.0000305175781
17 | ],
18 | "flags": {},
19 | "order": 0,
20 | "mode": 0,
21 | "inputs": [],
22 | "outputs": [
23 | {
24 | "name": "IMAGE",
25 | "type": "IMAGE",
26 | "links": [
27 | 6
28 | ]
29 | },
30 | {
31 | "name": "MASK",
32 | "type": "MASK",
33 | "links": null
34 | }
35 | ],
36 | "properties": {
37 | "cnr_id": "comfy-core",
38 | "ver": "0.3.50",
39 | "Node name for S&R": "LoadImage"
40 | },
41 | "widgets_values": [
42 | "pasted/image.png",
43 | "image"
44 | ]
45 | },
46 | {
47 | "id": 1,
48 | "type": "DreaminaI2INode",
49 | "pos": [
50 | 939.6441040039062,
51 | -376.6712646484375
52 | ],
53 | "size": [
54 | 400,
55 | 304
56 | ],
57 | "flags": {},
58 | "order": 3,
59 | "mode": 0,
60 | "inputs": [
61 | {
62 | "name": "image",
63 | "type": "IMAGE",
64 | "link": 6
65 | },
66 | {
67 | "name": "prompt",
68 | "type": "STRING",
69 | "widget": {
70 | "name": "prompt"
71 | },
72 | "link": 4
73 | }
74 | ],
75 | "outputs": [
76 | {
77 | "name": "output",
78 | "type": "IMAGE",
79 | "links": [
80 | 7
81 | ]
82 | }
83 | ],
84 | "properties": {
85 | "cnr_id": "Mojie-API-Party",
86 | "ver": "5c2fff706e89118c32c8847569e46fe0fac3a173",
87 | "Node name for S&R": "DreaminaI2INode"
88 | },
89 | "widgets_values": [
90 | "",
91 | 1024,
92 | 1280,
93 | 0.4,
94 | 0.3,
95 | 0,
96 | "reference",
97 | 1271,
98 | "randomize",
99 | 1
100 | ]
101 | },
102 | {
103 | "id": 10,
104 | "type": "MarkdownNote",
105 | "pos": [
106 | -3.6082472801208496,
107 | -441.4598083496094
108 | ],
109 | "size": [
110 | 422.8641662597656,
111 | 645.0458984375
112 | ],
113 | "flags": {},
114 | "order": 1,
115 | "mode": 0,
116 | "inputs": [],
117 | "outputs": [],
118 | "properties": {},
119 | "widgets_values": [
120 | "#### Dreamina(即梦)\n- 即梦文生图支持中文输入,中文输出。对一些偏僻或中文概念理解很好。\n- 即梦图生图有多种参考模式gen_mode选下下\n - 第一种 creative 是创意模式,可以理解为全图参考\n - 第二种 reference 人脸参考\n - 第三种 reference_char 人物参考\n- cfg默认2.5请勿修改\n\n"
121 | ],
122 | "color": "#432",
123 | "bgcolor": "#653"
124 | },
125 | {
126 | "id": 6,
127 | "type": "PrimitiveStringMultiline",
128 | "pos": [
129 | 477.23297119140625,
130 | -365.1534423828125
131 | ],
132 | "size": [
133 | 417.6236267089844,
134 | 155.42262268066406
135 | ],
136 | "flags": {},
137 | "order": 2,
138 | "mode": 0,
139 | "inputs": [],
140 | "outputs": [
141 | {
142 | "name": "STRING",
143 | "type": "STRING",
144 | "links": [
145 | 4
146 | ]
147 | }
148 | ],
149 | "properties": {
150 | "cnr_id": "comfy-core",
151 | "ver": "0.3.50",
152 | "Node name for S&R": "PrimitiveStringMultiline"
153 | },
154 | "widgets_values": [
155 | "生成一张女孩的全身摄影照片,赛博朋克风格,背景是赛博城市,无数霓虹灯光,她穿着短裙,站在城市的楼顶,俯瞰整个城市。图片上用书法写着几个大字:\"赛博city\""
156 | ]
157 | },
158 | {
159 | "id": 9,
160 | "type": "PreviewImage",
161 | "pos": [
162 | 1378.3546142578125,
163 | -396.77655029296875
164 | ],
165 | "size": [
166 | 419.276611328125,
167 | 581.517578125
168 | ],
169 | "flags": {},
170 | "order": 4,
171 | "mode": 0,
172 | "inputs": [
173 | {
174 | "name": "images",
175 | "type": "IMAGE",
176 | "link": 7
177 | }
178 | ],
179 | "outputs": [],
180 | "properties": {
181 | "cnr_id": "comfy-core",
182 | "ver": "0.3.50",
183 | "Node name for S&R": "PreviewImage"
184 | },
185 | "widgets_values": []
186 | }
187 | ],
188 | "links": [
189 | [
190 | 4,
191 | 6,
192 | 0,
193 | 1,
194 | 1,
195 | "STRING"
196 | ],
197 | [
198 | 6,
199 | 8,
200 | 0,
201 | 1,
202 | 0,
203 | "IMAGE"
204 | ],
205 | [
206 | 7,
207 | 1,
208 | 0,
209 | 9,
210 | 0,
211 | "IMAGE"
212 | ]
213 | ],
214 | "groups": [
215 | {
216 | "id": 2,
217 | "title": "即梦参考生图",
218 | "bounding": [
219 | 467.23297119140625,
220 | -470.3765869140625,
221 | 1340.398193359375,
222 | 665.1176147460938
223 | ],
224 | "color": "#b06634",
225 | "font_size": 24,
226 | "flags": {}
227 | }
228 | ],
229 | "config": {},
230 | "extra": {
231 | "ds": {
232 | "scale": 0.7247295000000082,
233 | "offset": [
234 | 79.7713557800686,
235 | 658.6247125795362
236 | ]
237 | },
238 | "frontendVersion": "1.23.4"
239 | },
240 | "version": 0.4
241 | }
--------------------------------------------------------------------------------
/workflow/Kontext.json:
--------------------------------------------------------------------------------
1 | {"id":"90e73179-a28b-49be-b656-c5c30f9556f3","revision":0,"last_node_id":36,"last_link_id":25,"nodes":[{"id":18,"type":"LoadImage","pos":[46.56498718261719,725.2905883789062],"size":[270,314.00006103515625],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"图像","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"选择文件上传","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[16]},{"localized_name":"遮罩","name":"MASK","type":"MASK","links":null}],"properties":{"Node name for S&R":"LoadImage"},"widgets_values":["ComfyUI_temp_kopcc_00003_.png","image"]},{"id":21,"type":"LoadImage","pos":[1540.9090576171875,-203.93939208984375],"size":[270,314],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"图像","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"选择文件上传","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[18]},{"localized_name":"遮罩","name":"MASK","type":"MASK","links":null}],"properties":{"Node name for S&R":"LoadImage"},"widgets_values":["volcengine_20250703190926.png","image"]},{"id":17,"type":"ImageStitch","pos":[365.5914611816406,334.824462890625],"size":[270,150],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"image1","name":"image1","type":"IMAGE","link":15},{"localized_name":"image2","name":"image2","shape":7,"type":"IMAGE","link":16},{"localized_name":"direction","name":"direction","type":"COMBO","widget":{"name":"direction"},"link":null},{"localized_name":"match_image_size","name":"match_image_size","type":"BOOLEAN","widget":{"name":"match_image_size"},"link":null},{"localized_name":"spacing_width","name":"spacing_width","type":"INT","widget":{"name":"spacing_width"},"link":null},{"localized_name":"spacing_color","name":"spacing_color","type":"COMBO","widget":{"name":"spacing_color"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[14,17]}],"properties":{"Node name for S&R":"ImageStitch"},"widgets_values":["right",true,0,"white"]},{"id":19,"type":"PreviewImage","pos":[376.99505615234375,542.160888671875],"size":[263.36529541015625,246],"flags":{},"order":15,"mode":0,"inputs":[{"localized_name":"图像","name":"images","type":"IMAGE","link":17}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":33,"type":"LoadImage","pos":[1522.190673828125,725.9595947265625],"size":[270,314.00006103515625],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"图像","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"选择文件上传","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[24]},{"localized_name":"遮罩","name":"MASK","type":"MASK","links":null}],"properties":{"Node name for S&R":"LoadImage"},"widgets_values":["ComfyUI_temp_kopcc_00003_.png","image"]},{"id":32,"type":"LoadImage","pos":[1522.190673828125,335.9595947265625],"size":[270,314.0000305175781],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"图像","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"选择文件上传","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[23]},{"localized_name":"遮罩","name":"MASK","type":"MASK","links":null}],"properties":{"Node name for S&R":"LoadImage"},"widgets_values":["1024 (2).png","image"]},{"id":34,"type":"PreviewImage","pos":[1852.190673828125,545.9595947265625],"size":[263.36529541015625,246],"flags":{},"order":12,"mode":0,"inputs":[{"localized_name":"图像","name":"images","type":"IMAGE","link":22}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":14,"type":"LoadImage","pos":[40.912532806396484,335.68121337890625],"size":[270,314.0000305175781],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"图像","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"选择文件上传","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[15]},{"localized_name":"遮罩","name":"MASK","type":"MASK","links":null}],"properties":{"Node name for S&R":"LoadImage"},"widgets_values":["1024 (2).png","image"]},{"id":35,"type":"ImageStitch","pos":[1842.190673828125,335.9595947265625],"size":[270,150],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"image1","name":"image1","type":"IMAGE","link":23},{"localized_name":"image2","name":"image2","shape":7,"type":"IMAGE","link":24},{"localized_name":"direction","name":"direction","type":"COMBO","widget":{"name":"direction"},"link":null},{"localized_name":"match_image_size","name":"match_image_size","type":"BOOLEAN","widget":{"name":"match_image_size"},"link":null},{"localized_name":"spacing_width","name":"spacing_width","type":"INT","widget":{"name":"spacing_width"},"link":null},{"localized_name":"spacing_color","name":"spacing_color","type":"COMBO","widget":{"name":"spacing_color"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[22,25]}],"properties":{"Node name for S&R":"ImageStitch"},"widgets_values":["right",true,0,"white"]},{"id":12,"type":"LoadImage","pos":[45.11850357055664,-214.39471435546875],"size":[270,314],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"图像","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"选择文件上传","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[10]},{"localized_name":"遮罩","name":"MASK","type":"MASK","links":null}],"properties":{"Node name for S&R":"LoadImage"},"widgets_values":["volcengine_20250703190926.png","image"]},{"id":20,"type":"FluxMaxNode","pos":[1840.9090576171875,-213.93939208984375],"size":[400,208],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"image_input","name":"image_input","shape":7,"type":"IMAGE","link":18},{"localized_name":"prompt","name":"prompt","type":"STRING","widget":{"name":"prompt"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"is_translation","name":"is_translation","type":"BOOLEAN","widget":{"name":"is_translation"},"link":null},{"localized_name":"aspect_ratio","name":"aspect_ratio","type":"COMBO","widget":{"name":"aspect_ratio"},"link":null},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"output","name":"output","type":"IMAGE","links":[19]}],"properties":{"Node name for S&R":"FluxMaxNode"},"widgets_values":["remove this text",1291,"randomize",false,"3:4",1]},{"id":29,"type":"FluxMaxNode","pos":[2142.1904296875,335.9595947265625],"size":[400,208],"flags":{},"order":13,"mode":0,"inputs":[{"localized_name":"image_input","name":"image_input","shape":7,"type":"IMAGE","link":25},{"localized_name":"prompt","name":"prompt","type":"STRING","widget":{"name":"prompt"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"is_translation","name":"is_translation","type":"BOOLEAN","widget":{"name":"is_translation"},"link":null},{"localized_name":"aspect_ratio","name":"aspect_ratio","type":"COMBO","widget":{"name":"aspect_ratio"},"link":null},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"output","name":"output","type":"IMAGE","links":[20]}],"properties":{"Node name for S&R":"FluxMaxNode"},"widgets_values":["The woman in this image is holding this bag.",77,"randomize",false,"3:4",1]},{"id":15,"type":"FluxProNode","pos":[668.005859375,326.9068603515625],"size":[400,208],"flags":{},"order":14,"mode":0,"inputs":[{"localized_name":"image_input","name":"image_input","shape":7,"type":"IMAGE","link":14},{"localized_name":"prompt","name":"prompt","type":"STRING","widget":{"name":"prompt"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"is_translation","name":"is_translation","type":"BOOLEAN","widget":{"name":"is_translation"},"link":null},{"localized_name":"aspect_ratio","name":"aspect_ratio","type":"COMBO","widget":{"name":"aspect_ratio"},"link":null},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"output","name":"output","type":"IMAGE","links":[13]}],"properties":{"Node name for S&R":"FluxProNode"},"widgets_values":["this woman is holding this handbag.",1892,"randomize",false,"3:4",1]},{"id":13,"type":"PreviewImage","pos":[765.1184692382812,-224.39471435546875],"size":[361.59991455078125,411.5231628417969],"flags":{},"order":16,"mode":0,"inputs":[{"localized_name":"图像","name":"images","type":"IMAGE","link":11}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":22,"type":"PreviewImage","pos":[2270.9091796875,-213.93939208984375],"size":[398.0273132324219,397.8628845214844],"flags":{},"order":11,"mode":0,"inputs":[{"localized_name":"图像","name":"images","type":"IMAGE","link":19}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":28,"type":"PreviewImage","pos":[2572.1904296875,345.9595947265625],"size":[398.0273132324219,397.8628845214844],"flags":{},"order":17,"mode":0,"inputs":[{"localized_name":"图像","name":"images","type":"IMAGE","link":20}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":16,"type":"PreviewImage","pos":[1086.99560546875,334.62615966796875],"size":[379.8135986328125,517.7697143554688],"flags":{},"order":18,"mode":0,"inputs":[{"localized_name":"图像","name":"images","type":"IMAGE","link":13}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":10,"type":"FluxProNode","pos":[335.1183776855469,-214.39471435546875],"size":[400,208],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"image_input","name":"image_input","shape":7,"type":"IMAGE","link":10},{"localized_name":"prompt","name":"prompt","type":"STRING","widget":{"name":"prompt"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"is_translation","name":"is_translation","type":"BOOLEAN","widget":{"name":"is_translation"},"link":null},{"localized_name":"aspect_ratio","name":"aspect_ratio","type":"COMBO","widget":{"name":"aspect_ratio"},"link":null},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"output","name":"output","type":"IMAGE","links":[11]}],"properties":{"Node name for S&R":"FluxProNode"},"widgets_values":["去除文字",1680,"randomize",true,"3:4",1]},{"id":36,"type":"MarkdownNote","pos":[-452.6477355957031,-259.70172119140625],"size":[440.6380920410156,717.257080078125],"flags":{},"order":6,"mode":0,"inputs":[],"outputs":[],"properties":{},"widgets_values":["##### Kontext-pro&max 使用说明\n- 加入了翻译开关is_translation,在每个节点中都有,默认是关闭的。打开可以输入中文。\n- aspect_ratio是尺寸控制,默认是default,由kontext自己控制输出图片的尺寸。也可以开启根据自己的需要选择尺寸。\n- max效果更好,pro性价比更高。视频教程可以查看:https://www.bilibili.com/video/BV19931zAE4c/?vd_source=25d3add966daa64cbb811354319ec18d#reply268510289936\n- 使用前请确保你的账户中有足够的余额\n\n\n"],"color":"#432","bgcolor":"#653"}],"links":[[10,12,0,10,0,"IMAGE"],[11,10,0,13,0,"IMAGE"],[13,15,0,16,0,"IMAGE"],[14,17,0,15,0,"IMAGE"],[15,14,0,17,0,"IMAGE"],[16,18,0,17,1,"IMAGE"],[17,17,0,19,0,"IMAGE"],[18,21,0,20,0,"IMAGE"],[19,20,0,22,0,"IMAGE"],[20,29,0,28,0,"IMAGE"],[22,35,0,34,0,"IMAGE"],[23,32,0,35,0,"IMAGE"],[24,33,0,35,1,"IMAGE"],[25,35,0,29,0,"IMAGE"]],"groups":[{"id":1,"title":"Kontext-pro 单图","bounding":[35.118499755859375,-297.9947204589844,1439.656982421875,530.9985961914062],"color":"#3f789e","font_size":24,"flags":{}},{"id":2,"title":"Kontext-pro 双图","bounding":[30.91252899169922,253.30685424804688,1445.896728515625,795.9837646484375],"color":"#3f789e","font_size":24,"flags":{}},{"id":3,"title":"kontext-max-单图","bounding":[1497.8531494140625,-289.6174621582031,1478.37548828125,520.4207153320312],"color":"#b58b2a","font_size":24,"flags":{}},{"id":4,"title":"kontext-max-多图","bounding":[1500.0872802734375,252.73590087890625,1481.7147216796875,793.4318237304688],"color":"#b58b2a","font_size":24,"flags":{}}],"config":{},"extra":{"ds":{"scale":1.1671841070450135,"offset":[659.7022036530732,312.4543080471589]},"ue_links":[]},"version":0.4}
--------------------------------------------------------------------------------
/workflow/NanoBanana.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "9595610a-a68a-4922-a51e-a8ce7e616335",
3 | "revision": 0,
4 | "last_node_id": 45,
5 | "last_link_id": 35,
6 | "nodes": [
7 | {
8 | "id": 25,
9 | "type": "LoadImage",
10 | "pos": [
11 | -984.1687622070312,
12 | -403.6693115234375
13 | ],
14 | "size": [
15 | 371.6400146484375,
16 | 502.760009765625
17 | ],
18 | "flags": {},
19 | "order": 0,
20 | "mode": 0,
21 | "inputs": [],
22 | "outputs": [
23 | {
24 | "name": "IMAGE",
25 | "type": "IMAGE",
26 | "links": [
27 | 32
28 | ]
29 | },
30 | {
31 | "name": "MASK",
32 | "type": "MASK",
33 | "links": null
34 | }
35 | ],
36 | "properties": {
37 | "cnr_id": "comfy-core",
38 | "ver": "0.3.51",
39 | "Node name for S&R": "LoadImage"
40 | },
41 | "widgets_values": [
42 | "ComfyUI_temp_rssbm_00003_.png",
43 | "image"
44 | ]
45 | },
46 | {
47 | "id": 26,
48 | "type": "SaveImage",
49 | "pos": [
50 | -160.75445556640625,
51 | -413.05987548828125
52 | ],
53 | "size": [
54 | 452.3577575683594,
55 | 619.1365356445312
56 | ],
57 | "flags": {},
58 | "order": 10,
59 | "mode": 0,
60 | "inputs": [
61 | {
62 | "name": "images",
63 | "type": "IMAGE",
64 | "link": 33
65 | }
66 | ],
67 | "outputs": [],
68 | "properties": {
69 | "cnr_id": "comfy-core",
70 | "ver": "0.3.51"
71 | },
72 | "widgets_values": [
73 | "ComfyUI"
74 | ]
75 | },
76 | {
77 | "id": 31,
78 | "type": "LoadImage",
79 | "pos": [
80 | -1041.4859619140625,
81 | 925.402099609375
82 | ],
83 | "size": [
84 | 350.5255126953125,
85 | 450.8933410644531
86 | ],
87 | "flags": {},
88 | "order": 1,
89 | "mode": 0,
90 | "inputs": [],
91 | "outputs": [
92 | {
93 | "name": "IMAGE",
94 | "type": "IMAGE",
95 | "links": [
96 | 20
97 | ]
98 | },
99 | {
100 | "name": "MASK",
101 | "type": "MASK",
102 | "links": null
103 | }
104 | ],
105 | "properties": {
106 | "cnr_id": "comfy-core",
107 | "ver": "0.3.51",
108 | "Node name for S&R": "LoadImage"
109 | },
110 | "widgets_values": [
111 | "152838377312388750868885_x.jpg",
112 | "image"
113 | ]
114 | },
115 | {
116 | "id": 28,
117 | "type": "LoadImage",
118 | "pos": [
119 | -1044.3997802734375,
120 | 368.9452209472656
121 | ],
122 | "size": [
123 | 371.6400146484375,
124 | 502.760009765625
125 | ],
126 | "flags": {},
127 | "order": 2,
128 | "mode": 0,
129 | "inputs": [],
130 | "outputs": [
131 | {
132 | "name": "IMAGE",
133 | "type": "IMAGE",
134 | "links": [
135 | 19
136 | ]
137 | },
138 | {
139 | "name": "MASK",
140 | "type": "MASK",
141 | "links": null
142 | }
143 | ],
144 | "properties": {
145 | "cnr_id": "comfy-core",
146 | "ver": "0.3.51",
147 | "Node name for S&R": "LoadImage"
148 | },
149 | "widgets_values": [
150 | "p (1).jpeg",
151 | "image"
152 | ]
153 | },
154 | {
155 | "id": 32,
156 | "type": "PreviewImage",
157 | "pos": [
158 | -641.9852905273438,
159 | 701.002197265625
160 | ],
161 | "size": [
162 | 336.8999938964844,
163 | 258
164 | ],
165 | "flags": {},
166 | "order": 11,
167 | "mode": 0,
168 | "inputs": [
169 | {
170 | "name": "images",
171 | "type": "IMAGE",
172 | "link": 22
173 | }
174 | ],
175 | "outputs": [],
176 | "properties": {
177 | "cnr_id": "comfy-core",
178 | "ver": "0.3.51",
179 | "Node name for S&R": "PreviewImage"
180 | },
181 | "widgets_values": []
182 | },
183 | {
184 | "id": 30,
185 | "type": "ImageStitch",
186 | "pos": [
187 | -629.2853393554688,
188 | 450.20208740234375
189 | ],
190 | "size": [
191 | 270,
192 | 150
193 | ],
194 | "flags": {},
195 | "order": 8,
196 | "mode": 0,
197 | "inputs": [
198 | {
199 | "name": "image1",
200 | "type": "IMAGE",
201 | "link": 19
202 | },
203 | {
204 | "name": "image2",
205 | "shape": 7,
206 | "type": "IMAGE",
207 | "link": 20
208 | }
209 | ],
210 | "outputs": [
211 | {
212 | "name": "IMAGE",
213 | "type": "IMAGE",
214 | "links": [
215 | 22,
216 | 34
217 | ]
218 | }
219 | ],
220 | "properties": {
221 | "cnr_id": "comfy-core",
222 | "ver": "0.3.51",
223 | "Node name for S&R": "ImageStitch"
224 | },
225 | "widgets_values": [
226 | "right",
227 | true,
228 | 0,
229 | "white"
230 | ]
231 | },
232 | {
233 | "id": 29,
234 | "type": "SaveImage",
235 | "pos": [
236 | 132.9143829345703,
237 | 436.4742736816406
238 | ],
239 | "size": [
240 | 571.8168334960938,
241 | 411.7736511230469
242 | ],
243 | "flags": {},
244 | "order": 14,
245 | "mode": 0,
246 | "inputs": [
247 | {
248 | "name": "images",
249 | "type": "IMAGE",
250 | "link": 35
251 | }
252 | ],
253 | "outputs": [],
254 | "properties": {
255 | "cnr_id": "comfy-core",
256 | "ver": "0.3.51"
257 | },
258 | "widgets_values": [
259 | "ComfyUI"
260 | ]
261 | },
262 | {
263 | "id": 35,
264 | "type": "LoadImage",
265 | "pos": [
266 | -1046.1812744140625,
267 | 1493.1412353515625
268 | ],
269 | "size": [
270 | 371.6400146484375,
271 | 502.760009765625
272 | ],
273 | "flags": {},
274 | "order": 3,
275 | "mode": 0,
276 | "inputs": [],
277 | "outputs": [
278 | {
279 | "name": "IMAGE",
280 | "type": "IMAGE",
281 | "links": [
282 | 24
283 | ]
284 | },
285 | {
286 | "name": "MASK",
287 | "type": "MASK",
288 | "links": null
289 | }
290 | ],
291 | "properties": {
292 | "cnr_id": "comfy-core",
293 | "ver": "0.3.51",
294 | "Node name for S&R": "LoadImage"
295 | },
296 | "widgets_values": [
297 | "pasted/image.png",
298 | "image"
299 | ]
300 | },
301 | {
302 | "id": 38,
303 | "type": "GeminiEditNode",
304 | "pos": [
305 | -272.70831298828125,
306 | 1498.960205078125
307 | ],
308 | "size": [
309 | 400,
310 | 200
311 | ],
312 | "flags": {},
313 | "order": 15,
314 | "mode": 0,
315 | "inputs": [
316 | {
317 | "name": "image_input",
318 | "shape": 7,
319 | "type": "IMAGE",
320 | "link": 30
321 | }
322 | ],
323 | "outputs": [
324 | {
325 | "name": "output",
326 | "type": "IMAGE",
327 | "links": [
328 | 27
329 | ]
330 | }
331 | ],
332 | "properties": {
333 | "cnr_id": "Mojie-API-Party",
334 | "ver": "9118360ad066d1f9e6ea7db6c2bac0507d22098b",
335 | "Node name for S&R": "GeminiEditNode"
336 | },
337 | "widgets_values": [
338 | "这个女孩带着这个耳机,穿着这件衣服",
339 | false,
340 | 1769,
341 | "randomize",
342 | "randomize"
343 | ]
344 | },
345 | {
346 | "id": 41,
347 | "type": "LoadImage",
348 | "pos": [
349 | -649.0196533203125,
350 | 2037.23291015625
351 | ],
352 | "size": [
353 | 363.1700134277344,
354 | 455.08599853515625
355 | ],
356 | "flags": {},
357 | "order": 4,
358 | "mode": 0,
359 | "inputs": [],
360 | "outputs": [
361 | {
362 | "name": "IMAGE",
363 | "type": "IMAGE",
364 | "links": [
365 | 29
366 | ]
367 | },
368 | {
369 | "name": "MASK",
370 | "type": "MASK",
371 | "links": null
372 | }
373 | ],
374 | "properties": {
375 | "cnr_id": "comfy-core",
376 | "ver": "0.3.51",
377 | "Node name for S&R": "LoadImage"
378 | },
379 | "widgets_values": [
380 | "p (1).jpeg",
381 | "image"
382 | ]
383 | },
384 | {
385 | "id": 34,
386 | "type": "LoadImage",
387 | "pos": [
388 | -1030.9698486328125,
389 | 2055.444580078125
390 | ],
391 | "size": [
392 | 350.5255126953125,
393 | 450.8933410644531
394 | ],
395 | "flags": {},
396 | "order": 5,
397 | "mode": 0,
398 | "inputs": [],
399 | "outputs": [
400 | {
401 | "name": "IMAGE",
402 | "type": "IMAGE",
403 | "links": [
404 | 25
405 | ]
406 | },
407 | {
408 | "name": "MASK",
409 | "type": "MASK",
410 | "links": null
411 | }
412 | ],
413 | "properties": {
414 | "cnr_id": "comfy-core",
415 | "ver": "0.3.51",
416 | "Node name for S&R": "LoadImage"
417 | },
418 | "widgets_values": [
419 | "152838377312388750868885_x.jpg",
420 | "image"
421 | ]
422 | },
423 | {
424 | "id": 37,
425 | "type": "ImageStitch",
426 | "pos": [
427 | -652.7366943359375,
428 | 1507.744873046875
429 | ],
430 | "size": [
431 | 270,
432 | 150
433 | ],
434 | "flags": {},
435 | "order": 9,
436 | "mode": 0,
437 | "inputs": [
438 | {
439 | "name": "image1",
440 | "type": "IMAGE",
441 | "link": 24
442 | },
443 | {
444 | "name": "image2",
445 | "shape": 7,
446 | "type": "IMAGE",
447 | "link": 25
448 | }
449 | ],
450 | "outputs": [
451 | {
452 | "name": "IMAGE",
453 | "type": "IMAGE",
454 | "links": [
455 | 28
456 | ]
457 | }
458 | ],
459 | "properties": {
460 | "cnr_id": "comfy-core",
461 | "ver": "0.3.51",
462 | "Node name for S&R": "ImageStitch"
463 | },
464 | "widgets_values": [
465 | "down",
466 | true,
467 | 0,
468 | "white"
469 | ]
470 | },
471 | {
472 | "id": 40,
473 | "type": "ImageStitch",
474 | "pos": [
475 | -611.266845703125,
476 | 1731.5614013671875
477 | ],
478 | "size": [
479 | 270,
480 | 150
481 | ],
482 | "flags": {},
483 | "order": 13,
484 | "mode": 0,
485 | "inputs": [
486 | {
487 | "name": "image1",
488 | "type": "IMAGE",
489 | "link": 28
490 | },
491 | {
492 | "name": "image2",
493 | "shape": 7,
494 | "type": "IMAGE",
495 | "link": 29
496 | }
497 | ],
498 | "outputs": [
499 | {
500 | "name": "IMAGE",
501 | "type": "IMAGE",
502 | "links": [
503 | 30,
504 | 31
505 | ]
506 | }
507 | ],
508 | "properties": {
509 | "cnr_id": "comfy-core",
510 | "ver": "0.3.51",
511 | "Node name for S&R": "ImageStitch"
512 | },
513 | "widgets_values": [
514 | "right",
515 | true,
516 | 0,
517 | "white"
518 | ]
519 | },
520 | {
521 | "id": 39,
522 | "type": "SaveImage",
523 | "pos": [
524 | 152.65048217773438,
525 | 1494.816650390625
526 | ],
527 | "size": [
528 | 673.4568481445312,
529 | 625.9436645507812
530 | ],
531 | "flags": {},
532 | "order": 17,
533 | "mode": 0,
534 | "inputs": [
535 | {
536 | "name": "images",
537 | "type": "IMAGE",
538 | "link": 27
539 | }
540 | ],
541 | "outputs": [],
542 | "properties": {
543 | "cnr_id": "comfy-core",
544 | "ver": "0.3.51"
545 | },
546 | "widgets_values": [
547 | "ComfyUI"
548 | ]
549 | },
550 | {
551 | "id": 42,
552 | "type": "PreviewImage",
553 | "pos": [
554 | -271.36492919921875,
555 | 1772.440185546875
556 | ],
557 | "size": [
558 | 385.9687805175781,
559 | 359.8147888183594
560 | ],
561 | "flags": {},
562 | "order": 16,
563 | "mode": 0,
564 | "inputs": [
565 | {
566 | "name": "images",
567 | "type": "IMAGE",
568 | "link": 31
569 | }
570 | ],
571 | "outputs": [],
572 | "properties": {
573 | "cnr_id": "comfy-core",
574 | "ver": "0.3.51",
575 | "Node name for S&R": "PreviewImage"
576 | },
577 | "widgets_values": []
578 | },
579 | {
580 | "id": 43,
581 | "type": "MarkdownNote",
582 | "pos": [
583 | -1561.463623046875,
584 | -468.43707275390625
585 | ],
586 | "size": [
587 | 457.3439025878906,
588 | 860.368408203125
589 | ],
590 | "flags": {},
591 | "order": 6,
592 | "mode": 0,
593 | "inputs": [],
594 | "outputs": [],
595 | "title": "使用说明",
596 | "properties": {},
597 | "widgets_values": [
598 | "### NanoBanana 使用说明\n\nNanoBanana又名Gemini 2.5 Flash Image Preview,是google旗下的图片编辑工具。提示词遵循强度很高。基本不需要特别的提示词格式,支持中英文输入,但是不支持中文输出,可输出英文字体。\nis_translation是翻译开关,如果中文输入效果不理想,可以把翻译开关打开,翻译过后再试。\n\n\n- 单图编辑没什么好讲的。\n- 多图编辑据说最高可组合12种元素(还没亲测过)。需要使用image Stitch节点把元素组合起来形成单图。请勿直接发送多图。\n\n以下列了三种使用方式,单图,双图组合,三图组合。更多图组合请自行搭建。\n所有工作流放一起会同时运行,因此你需要将3种工作流自行拆开复制到其他空白工作流上。或者框选后使用ctrl+B,使其暂时忽略。\n\n工作流如果加载不成功请升级comfyui\n\n有问题加微信:mojieaigc"
599 | ],
600 | "color": "#432",
601 | "bgcolor": "#653"
602 | },
603 | {
604 | "id": 44,
605 | "type": "GeminiEditNode",
606 | "pos": [
607 | -592.409423828125,
608 | -403.9662170410156
609 | ],
610 | "size": [
611 | 400,
612 | 200
613 | ],
614 | "flags": {},
615 | "order": 7,
616 | "mode": 0,
617 | "inputs": [
618 | {
619 | "name": "image_input",
620 | "shape": 7,
621 | "type": "IMAGE",
622 | "link": 32
623 | }
624 | ],
625 | "outputs": [
626 | {
627 | "name": "output",
628 | "type": "IMAGE",
629 | "links": [
630 | 33
631 | ]
632 | }
633 | ],
634 | "properties": {
635 | "cnr_id": "Mojie-API-Party",
636 | "ver": "c70bad3ddedc3e766eff04b7e666661e51a70c01",
637 | "Node name for S&R": "GeminiEditNode"
638 | },
639 | "widgets_values": [
640 | "制作一个图中角色的商业化1/7比例手办,风格写实,环境逼真。手办放置在电脑桌上,配有一个圆形透明亚克力底座,底座上没有文字。电脑屏幕上显示着手办的Zbrush建模过程。电脑屏幕旁边是一个万代风格的玩具盒,上面印有原始画作。",
641 | false,
642 | "3:4",
643 | 2048,
644 | "randomize"
645 | ]
646 | },
647 | {
648 | "id": 45,
649 | "type": "GeminiEditNode",
650 | "pos": [
651 | -314.78411865234375,
652 | 447.8040466308594
653 | ],
654 | "size": [
655 | 400,
656 | 200
657 | ],
658 | "flags": {},
659 | "order": 12,
660 | "mode": 0,
661 | "inputs": [
662 | {
663 | "name": "image_input",
664 | "shape": 7,
665 | "type": "IMAGE",
666 | "link": 34
667 | }
668 | ],
669 | "outputs": [
670 | {
671 | "name": "output",
672 | "type": "IMAGE",
673 | "links": [
674 | 35
675 | ]
676 | }
677 | ],
678 | "properties": {
679 | "cnr_id": "Mojie-API-Party",
680 | "ver": "c70bad3ddedc3e766eff04b7e666661e51a70c01",
681 | "Node name for S&R": "GeminiEditNode"
682 | },
683 | "widgets_values": [
684 | "这个女孩带着这个耳机",
685 | false,
686 | "3:4",
687 | 2048,
688 | "randomize"
689 | ]
690 | }
691 | ],
692 | "links": [
693 | [
694 | 19,
695 | 28,
696 | 0,
697 | 30,
698 | 0,
699 | "IMAGE"
700 | ],
701 | [
702 | 20,
703 | 31,
704 | 0,
705 | 30,
706 | 1,
707 | "IMAGE"
708 | ],
709 | [
710 | 22,
711 | 30,
712 | 0,
713 | 32,
714 | 0,
715 | "IMAGE"
716 | ],
717 | [
718 | 24,
719 | 35,
720 | 0,
721 | 37,
722 | 0,
723 | "IMAGE"
724 | ],
725 | [
726 | 25,
727 | 34,
728 | 0,
729 | 37,
730 | 1,
731 | "IMAGE"
732 | ],
733 | [
734 | 27,
735 | 38,
736 | 0,
737 | 39,
738 | 0,
739 | "IMAGE"
740 | ],
741 | [
742 | 28,
743 | 37,
744 | 0,
745 | 40,
746 | 0,
747 | "IMAGE"
748 | ],
749 | [
750 | 29,
751 | 41,
752 | 0,
753 | 40,
754 | 1,
755 | "IMAGE"
756 | ],
757 | [
758 | 30,
759 | 40,
760 | 0,
761 | 38,
762 | 0,
763 | "IMAGE"
764 | ],
765 | [
766 | 31,
767 | 40,
768 | 0,
769 | 42,
770 | 0,
771 | "IMAGE"
772 | ],
773 | [
774 | 32,
775 | 25,
776 | 0,
777 | 44,
778 | 0,
779 | "IMAGE"
780 | ],
781 | [
782 | 33,
783 | 44,
784 | 0,
785 | 26,
786 | 0,
787 | "IMAGE"
788 | ],
789 | [
790 | 34,
791 | 30,
792 | 0,
793 | 45,
794 | 0,
795 | "IMAGE"
796 | ],
797 | [
798 | 35,
799 | 45,
800 | 0,
801 | 29,
802 | 0,
803 | "IMAGE"
804 | ]
805 | ],
806 | "groups": [
807 | {
808 | "id": 2,
809 | "title": "NanoBanana双图编辑",
810 | "bounding": [
811 | -1054.3997802734375,
812 | 295.34521484375,
813 | 1769.130615234375,
814 | 1090.9501953125
815 | ],
816 | "color": "#a1309b",
817 | "font_size": 24,
818 | "flags": {}
819 | },
820 | {
821 | "id": 1,
822 | "title": "NanoBanana单图编辑",
823 | "bounding": [
824 | -1061.2711181640625,
825 | -502.7919921875,
826 | 1406.0999755859375,
827 | 767.5
828 | ],
829 | "color": "#3f789e",
830 | "font_size": 24,
831 | "flags": {}
832 | },
833 | {
834 | "id": 3,
835 | "title": "NanoBanana多图编辑",
836 | "bounding": [
837 | -1056.1812744140625,
838 | 1419.541259765625,
839 | 1900.758544921875,
840 | 1096.796630859375
841 | ],
842 | "color": "#3f789e",
843 | "font_size": 24,
844 | "flags": {}
845 | }
846 | ],
847 | "config": {},
848 | "extra": {
849 | "ds": {
850 | "scale": 0.7513148009015777,
851 | "offset": [
852 | 1802.1746020001362,
853 | 594.4376267157138
854 | ]
855 | },
856 | "frontendVersion": "1.25.9",
857 | "groupNodes": {}
858 | },
859 | "version": 0.4
860 | }
--------------------------------------------------------------------------------
/workflow/Qwen-image.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "822d8cab-28fd-4020-a7ca-2129b92cc0fc",
3 | "revision": 0,
4 | "last_node_id": 22,
5 | "last_link_id": 14,
6 | "nodes": [
7 | {
8 | "id": 22,
9 | "type": "PreviewImage",
10 | "pos": [
11 | 953.3901977539062,
12 | 588.851318359375
13 | ],
14 | "size": [
15 | 564.9520263671875,
16 | 493.5439453125
17 | ],
18 | "flags": {},
19 | "order": 5,
20 | "mode": 0,
21 | "inputs": [
22 | {
23 | "name": "images",
24 | "type": "IMAGE",
25 | "link": 14
26 | }
27 | ],
28 | "outputs": [],
29 | "properties": {
30 | "cnr_id": "comfy-core",
31 | "ver": "0.3.50",
32 | "Node name for S&R": "PreviewImage"
33 | },
34 | "widgets_values": []
35 | },
36 | {
37 | "id": 21,
38 | "type": "LoadImage",
39 | "pos": [
40 | 178.706298828125,
41 | 574.1728515625
42 | ],
43 | "size": [
44 | 310.1808166503906,
45 | 443.0143737792969
46 | ],
47 | "flags": {},
48 | "order": 0,
49 | "mode": 0,
50 | "inputs": [],
51 | "outputs": [
52 | {
53 | "name": "IMAGE",
54 | "type": "IMAGE",
55 | "links": [
56 | 13
57 | ]
58 | },
59 | {
60 | "name": "MASK",
61 | "type": "MASK",
62 | "links": null
63 | }
64 | ],
65 | "properties": {
66 | "cnr_id": "comfy-core",
67 | "ver": "0.3.50",
68 | "Node name for S&R": "LoadImage"
69 | },
70 | "widgets_values": [
71 | "148b7e274c5a45dc8f607306173346da.jpeg",
72 | "image"
73 | ]
74 | },
75 | {
76 | "id": 20,
77 | "type": "QwenImageEditNode",
78 | "pos": [
79 | 509.2024841308594,
80 | 584.165283203125
81 | ],
82 | "size": [
83 | 400,
84 | 200
85 | ],
86 | "flags": {},
87 | "order": 3,
88 | "mode": 0,
89 | "inputs": [
90 | {
91 | "name": "image",
92 | "type": "IMAGE",
93 | "link": 13
94 | }
95 | ],
96 | "outputs": [
97 | {
98 | "name": "output",
99 | "type": "IMAGE",
100 | "links": [
101 | 14
102 | ]
103 | }
104 | ],
105 | "properties": {
106 | "cnr_id": "Mojie-API-Party",
107 | "ver": "5c2fff706e89118c32c8847569e46fe0fac3a173",
108 | "Node name for S&R": "QwenImageEditNode"
109 | },
110 | "widgets_values": [
111 | "将人物的衣服改成白色裙子",
112 | 1,
113 | 58,
114 | "randomize"
115 | ]
116 | },
117 | {
118 | "id": 19,
119 | "type": "MarkdownNote",
120 | "pos": [
121 | -249.8396759033203,
122 | -129.8044891357422
123 | ],
124 | "size": [
125 | 343.3768310546875,
126 | 511.4752197265625
127 | ],
128 | "flags": {},
129 | "order": 1,
130 | "mode": 0,
131 | "inputs": [],
132 | "outputs": [],
133 | "properties": {},
134 | "widgets_values": [
135 | "#### Qwen-image\n- Qwen-image文生图支持中文输入,中文输出。对一些偏僻或中文概念理解很好,支持全文中文小字。\n- prompt_extend是提示词扩写,默认是开启的。\n\n#### Qwen-image-edit(图片编辑)\n- 一句话的图片编辑工具"
136 | ],
137 | "color": "#432",
138 | "bgcolor": "#653"
139 | },
140 | {
141 | "id": 15,
142 | "type": "QwenImageNode",
143 | "pos": [
144 | 187.6018829345703,
145 | -129.96339416503906
146 | ],
147 | "size": [
148 | 404.3713073730469,
149 | 267.01239013671875
150 | ],
151 | "flags": {},
152 | "order": 2,
153 | "mode": 0,
154 | "inputs": [],
155 | "outputs": [
156 | {
157 | "name": "output",
158 | "type": "IMAGE",
159 | "links": [
160 | 12
161 | ]
162 | }
163 | ],
164 | "properties": {
165 | "cnr_id": "Mojie-API-Party",
166 | "ver": "5c2fff706e89118c32c8847569e46fe0fac3a173",
167 | "Node name for S&R": "QwenImageNode"
168 | },
169 | "widgets_values": [
170 | "《长安的荔枝》影视化视觉,海报上用书法写着大字:“长安的荔枝”,画风融合新中式美学,以细腻笔触绘荔枝,色彩温润和谐,红粉渐变显果实饱满。以大面积红色为背景简化干扰,巨大荔枝滚落在赤红山峦,有一个唐朝蓝色朝服官员正在上面策马奔腾,跋涉山路,金粉飞溅,云雾缭绕的山峰做背景。构图简洁,突出主题,既有传统工笔的精致,又融入现代插画的清新感,传递出东方诗意与雅致,借荔枝这一传统意象,展现独特的东方视觉审美 。史诗感的构图,画风柔美,细节丰富,电影海报级叙事感。",
171 | "928*1664",
172 | 1,
173 | true,
174 | 1984,
175 | "randomize"
176 | ]
177 | },
178 | {
179 | "id": 16,
180 | "type": "PreviewImage",
181 | "pos": [
182 | 623.0210571289062,
183 | -162.7117156982422
184 | ],
185 | "size": [
186 | 425.4918518066406,
187 | 560.9678955078125
188 | ],
189 | "flags": {},
190 | "order": 4,
191 | "mode": 0,
192 | "inputs": [
193 | {
194 | "name": "images",
195 | "type": "IMAGE",
196 | "link": 12
197 | }
198 | ],
199 | "outputs": [],
200 | "properties": {
201 | "cnr_id": "comfy-core",
202 | "ver": "0.3.50",
203 | "Node name for S&R": "PreviewImage"
204 | },
205 | "widgets_values": []
206 | }
207 | ],
208 | "links": [
209 | [
210 | 12,
211 | 15,
212 | 0,
213 | 16,
214 | 0,
215 | "IMAGE"
216 | ],
217 | [
218 | 13,
219 | 21,
220 | 0,
221 | 20,
222 | 0,
223 | "IMAGE"
224 | ],
225 | [
226 | 14,
227 | 20,
228 | 0,
229 | 22,
230 | 0,
231 | "IMAGE"
232 | ]
233 | ],
234 | "groups": [
235 | {
236 | "id": 1,
237 | "title": "Qwen文生图",
238 | "bounding": [
239 | 123.96365356445312,
240 | -236.20985412597656,
241 | 1480.6800537109375,
242 | 667.5759887695312
243 | ],
244 | "color": "#3f789e",
245 | "font_size": 24,
246 | "flags": {}
247 | },
248 | {
249 | "id": 2,
250 | "title": "Qwen-图片编辑",
251 | "bounding": [
252 | 124.6403579711914,
253 | 450.195068359375,
254 | 1468.879150390625,
255 | 650.45703125
256 | ],
257 | "color": "#b06634",
258 | "font_size": 24,
259 | "flags": {}
260 | }
261 | ],
262 | "config": {},
263 | "extra": {
264 | "ds": {
265 | "scale": 0.7513148009015778,
266 | "offset": [
267 | 476.5498516747296,
268 | 148.3243514178751
269 | ]
270 | },
271 | "frontendVersion": "1.23.4"
272 | },
273 | "version": 0.4
274 | }
--------------------------------------------------------------------------------
/workflow/Vidu_reference.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "c0a62eda-2b6b-41d2-aa23-86b9e179c55c",
3 | "revision": 0,
4 | "last_node_id": 5,
5 | "last_link_id": 5,
6 | "nodes": [
7 | {
8 | "id": 2,
9 | "type": "LoadImage",
10 | "pos": [
11 | -1327.947509765625,
12 | -140.50660705566406
13 | ],
14 | "size": [
15 | 270,
16 | 314
17 | ],
18 | "flags": {},
19 | "order": 0,
20 | "mode": 0,
21 | "inputs": [],
22 | "outputs": [
23 | {
24 | "name": "IMAGE",
25 | "type": "IMAGE",
26 | "links": [
27 | 4
28 | ]
29 | },
30 | {
31 | "name": "MASK",
32 | "type": "MASK",
33 | "links": null
34 | }
35 | ],
36 | "properties": {
37 | "cnr_id": "comfy-core",
38 | "ver": "0.3.51",
39 | "Node name for S&R": "LoadImage"
40 | },
41 | "widgets_values": [
42 | "pasted/image (2).png",
43 | "image"
44 | ]
45 | },
46 | {
47 | "id": 5,
48 | "type": "ImageBatch",
49 | "pos": [
50 | -1021.850341796875,
51 | -464.0459289550781
52 | ],
53 | "size": [
54 | 140,
55 | 46
56 | ],
57 | "flags": {},
58 | "order": 2,
59 | "mode": 0,
60 | "inputs": [
61 | {
62 | "name": "image1",
63 | "type": "IMAGE",
64 | "link": 3
65 | },
66 | {
67 | "name": "image2",
68 | "type": "IMAGE",
69 | "link": 4
70 | }
71 | ],
72 | "outputs": [
73 | {
74 | "name": "IMAGE",
75 | "type": "IMAGE",
76 | "links": [
77 | 5
78 | ]
79 | }
80 | ],
81 | "properties": {
82 | "cnr_id": "comfy-core",
83 | "ver": "0.3.51",
84 | "Node name for S&R": "ImageBatch"
85 | },
86 | "widgets_values": []
87 | },
88 | {
89 | "id": 1,
90 | "type": "ViduNode",
91 | "pos": [
92 | -846.1627807617188,
93 | -456.4686584472656
94 | ],
95 | "size": [
96 | 400,
97 | 200
98 | ],
99 | "flags": {},
100 | "order": 3,
101 | "mode": 0,
102 | "inputs": [
103 | {
104 | "name": "images",
105 | "type": "IMAGE",
106 | "link": 5
107 | }
108 | ],
109 | "outputs": [
110 | {
111 | "name": "video",
112 | "type": "VIDEO",
113 | "links": [
114 | 2
115 | ]
116 | }
117 | ],
118 | "properties": {
119 | "cnr_id": "Mojie-API-Party",
120 | "ver": "5d0a8a5f0c0e000f8a9b17ed06e8d4636f27ac4c",
121 | "Node name for S&R": "ViduNode"
122 | },
123 | "widgets_values": [
124 | "这个女孩戴上这个耳机,闭着眼睛,沉浸在音乐中,在房间里坐在沙发上。",
125 | "viduq1",
126 | "9:16",
127 | 587,
128 | "randomize"
129 | ]
130 | },
131 | {
132 | "id": 4,
133 | "type": "LoadImage",
134 | "pos": [
135 | -1333.2869873046875,
136 | -508.5839538574219
137 | ],
138 | "size": [
139 | 270,
140 | 314
141 | ],
142 | "flags": {},
143 | "order": 1,
144 | "mode": 0,
145 | "inputs": [],
146 | "outputs": [
147 | {
148 | "name": "IMAGE",
149 | "type": "IMAGE",
150 | "links": [
151 | 3
152 | ]
153 | },
154 | {
155 | "name": "MASK",
156 | "type": "MASK",
157 | "links": null
158 | }
159 | ],
160 | "properties": {
161 | "cnr_id": "comfy-core",
162 | "ver": "0.3.51",
163 | "Node name for S&R": "LoadImage"
164 | },
165 | "widgets_values": [
166 | "152838377312388750868885_x.jpg",
167 | "image"
168 | ]
169 | },
170 | {
171 | "id": 3,
172 | "type": "SaveVideo",
173 | "pos": [
174 | -402.5278625488281,
175 | -513.2578735351562
176 | ],
177 | "size": [
178 | 467.9143371582031,
179 | 929.8477172851562
180 | ],
181 | "flags": {},
182 | "order": 4,
183 | "mode": 0,
184 | "inputs": [
185 | {
186 | "name": "video",
187 | "type": "VIDEO",
188 | "link": 2
189 | }
190 | ],
191 | "outputs": [],
192 | "properties": {
193 | "cnr_id": "comfy-core",
194 | "ver": "0.3.51",
195 | "Node name for S&R": "SaveVideo"
196 | },
197 | "widgets_values": [
198 | "video/ComfyUI",
199 | "auto",
200 | "auto"
201 | ]
202 | }
203 | ],
204 | "links": [
205 | [
206 | 2,
207 | 1,
208 | 0,
209 | 3,
210 | 0,
211 | "VIDEO"
212 | ],
213 | [
214 | 3,
215 | 4,
216 | 0,
217 | 5,
218 | 0,
219 | "IMAGE"
220 | ],
221 | [
222 | 4,
223 | 2,
224 | 0,
225 | 5,
226 | 1,
227 | "IMAGE"
228 | ],
229 | [
230 | 5,
231 | 5,
232 | 0,
233 | 1,
234 | 0,
235 | "IMAGE"
236 | ]
237 | ],
238 | "groups": [
239 | {
240 | "id": 1,
241 | "title": "VIdu参考生视频",
242 | "bounding": [
243 | -1399.397216796875,
244 | -596.628173828125,
245 | 1505.6217041015625,
246 | 1037.406494140625
247 | ],
248 | "color": "#3f789e",
249 | "font_size": 24,
250 | "flags": {}
251 | }
252 | ],
253 | "config": {},
254 | "extra": {
255 | "ds": {
256 | "scale": 0.7513148009015777,
257 | "offset": [
258 | 1671.0346116145324,
259 | 630.6342062520574
260 | ]
261 | },
262 | "frontendVersion": "1.25.9"
263 | },
264 | "version": 0.4
265 | }
--------------------------------------------------------------------------------
/workflow/redux万物迁移.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "c1aeb4e3-6d51-429d-9b7c-b1ec2c7ccdea",
3 | "revision": 0,
4 | "last_node_id": 9,
5 | "last_link_id": 10,
6 | "nodes": [
7 | {
8 | "id": 4,
9 | "type": "PreviewImage",
10 | "pos": [
11 | 4470,
12 | 70
13 | ],
14 | "size": [
15 | 448.9315490722656,
16 | 524.64453125
17 | ],
18 | "flags": {},
19 | "order": 4,
20 | "mode": 0,
21 | "inputs": [
22 | {
23 | "name": "images",
24 | "type": "IMAGE",
25 | "link": 5
26 | }
27 | ],
28 | "outputs": [],
29 | "properties": {
30 | "cnr_id": "comfy-core",
31 | "ver": "0.3.50",
32 | "Node name for S&R": "PreviewImage"
33 | },
34 | "widgets_values": []
35 | },
36 | {
37 | "id": 1,
38 | "type": "ReplaceNode",
39 | "pos": [
40 | 4020,
41 | 80
42 | ],
43 | "size": [
44 | 400,
45 | 220
46 | ],
47 | "flags": {},
48 | "order": 3,
49 | "mode": 0,
50 | "inputs": [
51 | {
52 | "name": "migrate_image",
53 | "type": "IMAGE",
54 | "link": 3
55 | },
56 | {
57 | "name": "migrate_mask",
58 | "type": "MASK",
59 | "link": 4
60 | },
61 | {
62 | "name": "Product_image",
63 | "type": "IMAGE",
64 | "link": 1
65 | },
66 | {
67 | "name": "Product_mask",
68 | "shape": 7,
69 | "type": "MASK",
70 | "link": 10
71 | }
72 | ],
73 | "outputs": [
74 | {
75 | "name": "output",
76 | "type": "IMAGE",
77 | "links": [
78 | 5
79 | ]
80 | }
81 | ],
82 | "properties": {
83 | "cnr_id": "Mojie-API-Party",
84 | "ver": "5c2fff706e89118c32c8847569e46fe0fac3a173",
85 | "Node name for S&R": "ReplaceNode"
86 | },
87 | "widgets_values": [
88 | "this a headset",
89 | 0.6,
90 | 2004,
91 | "randomize"
92 | ]
93 | },
94 | {
95 | "id": 3,
96 | "type": "LoadImage",
97 | "pos": [
98 | 3492.45703125,
99 | 56.578956604003906
100 | ],
101 | "size": [
102 | 445.9106140136719,
103 | 528.3062133789062
104 | ],
105 | "flags": {},
106 | "order": 0,
107 | "mode": 0,
108 | "inputs": [],
109 | "outputs": [
110 | {
111 | "name": "IMAGE",
112 | "type": "IMAGE",
113 | "links": [
114 | 3
115 | ]
116 | },
117 | {
118 | "name": "MASK",
119 | "type": "MASK",
120 | "links": [
121 | 4
122 | ]
123 | }
124 | ],
125 | "properties": {
126 | "cnr_id": "comfy-core",
127 | "ver": "0.3.50",
128 | "Node name for S&R": "LoadImage"
129 | },
130 | "widgets_values": [
131 | "clipspace/clipspace-mask-664798.3000000007.png [input]",
132 | "image"
133 | ]
134 | },
135 | {
136 | "id": 2,
137 | "type": "LoadImage",
138 | "pos": [
139 | 3562.4326171875,
140 | 718.2939453125
141 | ],
142 | "size": [
143 | 305.8754577636719,
144 | 362.29388427734375
145 | ],
146 | "flags": {},
147 | "order": 1,
148 | "mode": 0,
149 | "inputs": [],
150 | "outputs": [
151 | {
152 | "name": "IMAGE",
153 | "type": "IMAGE",
154 | "links": [
155 | 1
156 | ]
157 | },
158 | {
159 | "name": "MASK",
160 | "type": "MASK",
161 | "links": [
162 | 10
163 | ]
164 | }
165 | ],
166 | "properties": {
167 | "cnr_id": "comfy-core",
168 | "ver": "0.3.50",
169 | "Node name for S&R": "LoadImage"
170 | },
171 | "widgets_values": [
172 | "clipspace/clipspace-mask-824608.4000000004.png [input]",
173 | "image"
174 | ]
175 | },
176 | {
177 | "id": 9,
178 | "type": "MarkdownNote",
179 | "pos": [
180 | 3010.423095703125,
181 | 13.214137077331543
182 | ],
183 | "size": [
184 | 415.0225830078125,
185 | 251.47604370117188
186 | ],
187 | "flags": {},
188 | "order": 2,
189 | "mode": 0,
190 | "inputs": [],
191 | "outputs": [],
192 | "properties": {},
193 | "widgets_values": [
194 | "##### Redux万物迁移\n- migrate_image和migrate_mask是必选项上传需要被迁移的图片和迁移区域的遮罩。\n\n- Product_image和Product_mask是上传迁移产品图,遮罩不是必须的。\n\n- 但是可以给Product_mask细节处添加遮罩,可以让细节还原更加准确。\n\n- 提示词可以不填,有默认提示词。或者简单形容一下这个是什么物品。\n\n- 强度在0.6-0.9即可\n"
195 | ],
196 | "color": "#432",
197 | "bgcolor": "#653"
198 | }
199 | ],
200 | "links": [
201 | [
202 | 1,
203 | 2,
204 | 0,
205 | 1,
206 | 2,
207 | "IMAGE"
208 | ],
209 | [
210 | 3,
211 | 3,
212 | 0,
213 | 1,
214 | 0,
215 | "IMAGE"
216 | ],
217 | [
218 | 4,
219 | 3,
220 | 1,
221 | 1,
222 | 1,
223 | "MASK"
224 | ],
225 | [
226 | 5,
227 | 1,
228 | 0,
229 | 4,
230 | 0,
231 | "IMAGE"
232 | ],
233 | [
234 | 10,
235 | 2,
236 | 1,
237 | 1,
238 | 3,
239 | "MASK"
240 | ]
241 | ],
242 | "groups": [
243 | {
244 | "id": 1,
245 | "title": "Group",
246 | "bounding": [
247 | 3975.079345703125,
248 | -19.518848419189453,
249 | 959.3125610351562,
250 | 697.1681518554688
251 | ],
252 | "color": "#3f789e",
253 | "font_size": 24,
254 | "flags": {}
255 | },
256 | {
257 | "id": 2,
258 | "title": "迁移图片",
259 | "bounding": [
260 | 3482.45703125,
261 | -17.021055221557617,
262 | 465.91064453125,
263 | 611.9061889648438
264 | ],
265 | "color": "#8A8",
266 | "font_size": 24,
267 | "flags": {}
268 | },
269 | {
270 | "id": 3,
271 | "title": "产品图片",
272 | "bounding": [
273 | 3485.08349609375,
274 | 614.8181762695312,
275 | 464.2589111328125,
276 | 514.6448974609375
277 | ],
278 | "color": "#a1309b",
279 | "font_size": 24,
280 | "flags": {}
281 | }
282 | ],
283 | "config": {},
284 | "extra": {
285 | "ds": {
286 | "scale": 0.7247295000000094,
287 | "offset": [
288 | -2958.0481791875213,
289 | 178.87438348398422
290 | ]
291 | },
292 | "groupNodes": {},
293 | "frontendVersion": "1.23.4"
294 | },
295 | "version": 0.4
296 | }
--------------------------------------------------------------------------------
/workflow/seedance.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "0da707c8-8042-48af-8b05-9aa1e5904a27",
3 | "revision": 0,
4 | "last_node_id": 16,
5 | "last_link_id": 11,
6 | "nodes": [
7 | {
8 | "id": 7,
9 | "type": "PrimitiveStringMultiline",
10 | "pos": [
11 | -56.63548278808594,
12 | 282.9696350097656
13 | ],
14 | "size": [
15 | 326.8748779296875,
16 | 256.6977844238281
17 | ],
18 | "flags": {},
19 | "order": 0,
20 | "mode": 0,
21 | "inputs": [],
22 | "outputs": [
23 | {
24 | "name": "STRING",
25 | "type": "STRING",
26 | "links": [
27 | 5
28 | ]
29 | }
30 | ],
31 | "properties": {
32 | "cnr_id": "comfy-core",
33 | "ver": "0.3.51",
34 | "Node name for S&R": "PrimitiveStringMultiline"
35 | },
36 | "widgets_values": [
37 | "细雨如丝的江南小巷,一位身着浅绿色 旗袍我江南女子,撑着一把油纸伞缓缓走来。上绣着淡雅的兰花,用淡蓝色丝线勾勒出花瓣的轮廓,裙摆上的雨渍晕染开来,仿佛一幅水墨画。佳人的秀发盘起,插着一支兰花形状的玉簪,眉眼间透着淡淡的忧愁。雨滴打在伞面上,溅起晶莹的水花,与她身上散发的幽兰气质相得益彰。"
38 | ]
39 | },
40 | {
41 | "id": 2,
42 | "type": "LoadImage",
43 | "pos": [
44 | 298.6058654785156,
45 | 289.0398254394531
46 | ],
47 | "size": [
48 | 266,
49 | 497.0000305175781
50 | ],
51 | "flags": {},
52 | "order": 1,
53 | "mode": 0,
54 | "inputs": [],
55 | "outputs": [
56 | {
57 | "name": "IMAGE",
58 | "type": "IMAGE",
59 | "links": [
60 | 1
61 | ]
62 | },
63 | {
64 | "name": "MASK",
65 | "type": "MASK",
66 | "links": null
67 | }
68 | ],
69 | "properties": {
70 | "cnr_id": "comfy-core",
71 | "ver": "0.3.51",
72 | "Node name for S&R": "LoadImage"
73 | },
74 | "widgets_values": [
75 | "ComfyUI_00023_.png",
76 | "image"
77 | ]
78 | },
79 | {
80 | "id": 5,
81 | "type": "SaveVideo",
82 | "pos": [
83 | 840,
84 | -260
85 | ],
86 | "size": [
87 | 494.8576354980469,
88 | 396.8342590332031
89 | ],
90 | "flags": {},
91 | "order": 11,
92 | "mode": 0,
93 | "inputs": [
94 | {
95 | "name": "video",
96 | "type": "VIDEO",
97 | "link": 3
98 | }
99 | ],
100 | "outputs": [],
101 | "properties": {
102 | "cnr_id": "comfy-core",
103 | "ver": "0.3.51",
104 | "Node name for S&R": "SaveVideo"
105 | },
106 | "widgets_values": [
107 | "video/ComfyUI",
108 | "auto",
109 | "auto"
110 | ]
111 | },
112 | {
113 | "id": 4,
114 | "type": "PrimitiveStringMultiline",
115 | "pos": [
116 | 20,
117 | -260
118 | ],
119 | "size": [
120 | 326.8748779296875,
121 | 256.6977844238281
122 | ],
123 | "flags": {},
124 | "order": 2,
125 | "mode": 0,
126 | "inputs": [],
127 | "outputs": [
128 | {
129 | "name": "STRING",
130 | "type": "STRING",
131 | "links": [
132 | 4
133 | ]
134 | }
135 | ],
136 | "properties": {
137 | "cnr_id": "comfy-core",
138 | "ver": "0.3.51",
139 | "Node name for S&R": "PrimitiveStringMultiline"
140 | },
141 | "widgets_values": [
142 | "细雨如丝的江南小巷,一位身着浅绿色 旗袍我江南女子,撑着一把油纸伞缓缓走来。上绣着淡雅的兰花,用淡蓝色丝线勾勒出花瓣的轮廓,裙摆上的雨渍晕染开来,仿佛一幅水墨画。佳人的秀发盘起,插着一支兰花形状的玉簪,眉眼间透着淡淡的忧愁。雨滴打在伞面上,溅起晶莹的水花,与她身上散发的幽兰气质相得益彰。"
143 | ]
144 | },
145 | {
146 | "id": 13,
147 | "type": "LoadImage",
148 | "pos": [
149 | 320.9571228027344,
150 | 1127.0596923828125
151 | ],
152 | "size": [
153 | 291.4545593261719,
154 | 326
155 | ],
156 | "flags": {},
157 | "order": 3,
158 | "mode": 0,
159 | "inputs": [],
160 | "outputs": [
161 | {
162 | "name": "IMAGE",
163 | "type": "IMAGE",
164 | "links": [
165 | 9
166 | ]
167 | },
168 | {
169 | "name": "MASK",
170 | "type": "MASK",
171 | "links": null
172 | }
173 | ],
174 | "properties": {
175 | "cnr_id": "comfy-core",
176 | "ver": "0.3.51",
177 | "Node name for S&R": "LoadImage"
178 | },
179 | "widgets_values": [
180 | "ComfyUI_00023_.png",
181 | "image"
182 | ]
183 | },
184 | {
185 | "id": 1,
186 | "type": "DreaminaI2VNode",
187 | "pos": [
188 | 592.4619140625,
189 | 283.6224060058594
190 | ],
191 | "size": [
192 | 400,
193 | 252
194 | ],
195 | "flags": {},
196 | "order": 7,
197 | "mode": 0,
198 | "inputs": [
199 | {
200 | "name": "first_image",
201 | "type": "IMAGE",
202 | "link": 1
203 | },
204 | {
205 | "name": "last_image",
206 | "shape": 7,
207 | "type": "IMAGE",
208 | "link": null
209 | },
210 | {
211 | "name": "prompt",
212 | "type": "STRING",
213 | "widget": {
214 | "name": "prompt"
215 | },
216 | "link": 5
217 | }
218 | ],
219 | "outputs": [
220 | {
221 | "name": "video",
222 | "type": "VIDEO",
223 | "links": [
224 | 2
225 | ]
226 | }
227 | ],
228 | "properties": {
229 | "cnr_id": "Mojie-API-Party",
230 | "ver": "bcdc3885580de8d9b4734915fb7b6070aed68253",
231 | "Node name for S&R": "DreaminaI2VNode"
232 | },
233 | "widgets_values": [
234 | "",
235 | "1080p",
236 | "9:16",
237 | 10,
238 | false,
239 | 840,
240 | "randomize"
241 | ]
242 | },
243 | {
244 | "id": 3,
245 | "type": "SaveVideo",
246 | "pos": [
247 | 1022.8729858398438,
248 | 268.5070495605469
249 | ],
250 | "size": [
251 | 374,
252 | 758
253 | ],
254 | "flags": {},
255 | "order": 10,
256 | "mode": 0,
257 | "inputs": [
258 | {
259 | "name": "video",
260 | "type": "VIDEO",
261 | "link": 2
262 | }
263 | ],
264 | "outputs": [],
265 | "properties": {
266 | "cnr_id": "comfy-core",
267 | "ver": "0.3.51",
268 | "Node name for S&R": "SaveVideo"
269 | },
270 | "widgets_values": [
271 | "video/ComfyUI",
272 | "auto",
273 | "auto"
274 | ]
275 | },
276 | {
277 | "id": 14,
278 | "type": "DreaminaI2VNode",
279 | "pos": [
280 | 687.3207397460938,
281 | 1132.513916015625
282 | ],
283 | "size": [
284 | 400,
285 | 252
286 | ],
287 | "flags": {},
288 | "order": 9,
289 | "mode": 0,
290 | "inputs": [
291 | {
292 | "name": "first_image",
293 | "type": "IMAGE",
294 | "link": 9
295 | },
296 | {
297 | "name": "last_image",
298 | "shape": 7,
299 | "type": "IMAGE",
300 | "link": 11
301 | },
302 | {
303 | "name": "prompt",
304 | "type": "STRING",
305 | "widget": {
306 | "name": "prompt"
307 | },
308 | "link": 10
309 | }
310 | ],
311 | "outputs": [
312 | {
313 | "name": "video",
314 | "type": "VIDEO",
315 | "links": [
316 | 8
317 | ]
318 | }
319 | ],
320 | "properties": {
321 | "cnr_id": "Mojie-API-Party",
322 | "ver": "bcdc3885580de8d9b4734915fb7b6070aed68253",
323 | "Node name for S&R": "DreaminaI2VNode"
324 | },
325 | "widgets_values": [
326 | "",
327 | "1080p",
328 | "9:16",
329 | 10,
330 | false,
331 | 886,
332 | "randomize"
333 | ]
334 | },
335 | {
336 | "id": 11,
337 | "type": "SaveVideo",
338 | "pos": [
339 | 1135.7623291015625,
340 | 1119.786865234375
341 | ],
342 | "size": [
343 | 270,
344 | 574.4705810546875
345 | ],
346 | "flags": {},
347 | "order": 12,
348 | "mode": 0,
349 | "inputs": [
350 | {
351 | "name": "video",
352 | "type": "VIDEO",
353 | "link": 8
354 | }
355 | ],
356 | "outputs": [],
357 | "properties": {
358 | "cnr_id": "comfy-core",
359 | "ver": "0.3.51",
360 | "Node name for S&R": "SaveVideo"
361 | },
362 | "widgets_values": [
363 | "video/ComfyUI",
364 | "auto",
365 | "auto"
366 | ]
367 | },
368 | {
369 | "id": 15,
370 | "type": "LoadImage",
371 | "pos": [
372 | 322.9444580078125,
373 | 1501.0069580078125
374 | ],
375 | "size": [
376 | 284.5454406738281,
377 | 379.4546203613281
378 | ],
379 | "flags": {},
380 | "order": 4,
381 | "mode": 0,
382 | "inputs": [],
383 | "outputs": [
384 | {
385 | "name": "IMAGE",
386 | "type": "IMAGE",
387 | "links": [
388 | 11
389 | ]
390 | },
391 | {
392 | "name": "MASK",
393 | "type": "MASK",
394 | "links": null
395 | }
396 | ],
397 | "properties": {
398 | "cnr_id": "comfy-core",
399 | "ver": "0.3.51",
400 | "Node name for S&R": "LoadImage"
401 | },
402 | "widgets_values": [
403 | "ComfyUI_temp_clzmo_00003_.png",
404 | "image"
405 | ]
406 | },
407 | {
408 | "id": 6,
409 | "type": "DreaminaT2VNode",
410 | "pos": [
411 | 400,
412 | -260
413 | ],
414 | "size": [
415 | 400,
416 | 232
417 | ],
418 | "flags": {},
419 | "order": 8,
420 | "mode": 0,
421 | "inputs": [
422 | {
423 | "name": "prompt",
424 | "type": "STRING",
425 | "widget": {
426 | "name": "prompt"
427 | },
428 | "link": 4
429 | }
430 | ],
431 | "outputs": [
432 | {
433 | "name": "video",
434 | "type": "VIDEO",
435 | "links": [
436 | 3
437 | ]
438 | }
439 | ],
440 | "properties": {
441 | "cnr_id": "Mojie-API-Party",
442 | "ver": "bcdc3885580de8d9b4734915fb7b6070aed68253",
443 | "Node name for S&R": "DreaminaT2VNode"
444 | },
445 | "widgets_values": [
446 | "",
447 | "1080p",
448 | "16:9",
449 | 10,
450 | false,
451 | 362,
452 | "randomize"
453 | ]
454 | },
455 | {
456 | "id": 12,
457 | "type": "PrimitiveStringMultiline",
458 | "pos": [
459 | -39.44120407104492,
460 | 1133.533203125
461 | ],
462 | "size": [
463 | 326.8748779296875,
464 | 256.6977844238281
465 | ],
466 | "flags": {},
467 | "order": 5,
468 | "mode": 0,
469 | "inputs": [],
470 | "outputs": [
471 | {
472 | "name": "STRING",
473 | "type": "STRING",
474 | "links": [
475 | 10
476 | ]
477 | }
478 | ],
479 | "properties": {
480 | "cnr_id": "comfy-core",
481 | "ver": "0.3.51",
482 | "Node name for S&R": "PrimitiveStringMultiline"
483 | },
484 | "widgets_values": [
485 | "细雨如丝的江南小巷,一位身着浅绿色旗袍江南女子,撑着一把油纸伞缓缓走来。她停下脚步,镜头逐渐给到她的脸部特写,她忧郁的看向镜头。"
486 | ]
487 | },
488 | {
489 | "id": 16,
490 | "type": "MarkdownNote",
491 | "pos": [
492 | -477.6809387207031,
493 | -292.83740234375
494 | ],
495 | "size": [
496 | 377.1842041015625,
497 | 566.57861328125
498 | ],
499 | "flags": {},
500 | "order": 6,
501 | "mode": 0,
502 | "inputs": [],
503 | "outputs": [],
504 | "properties": {},
505 | "widgets_values": [
506 | "### seedance\n\nseedance视频生成工作流,\n\n该模型语义理解与指令遵循能力强。运镜专业。支持多种视频风格,可以丝滑兼容各种风格的首图。分辨率支持480P、720P、1080P,时长支持3-10s,帧率24fps\n\ncamerafixed是固定镜头开关,开启后将忽略镜头运镜提示词。\n\nduration是生成时长选项\n\nlast_image不是必须的,接入了之后就是首尾帧,没有接入就是图生视频。"
507 | ],
508 | "color": "#432",
509 | "bgcolor": "#653"
510 | }
511 | ],
512 | "links": [
513 | [
514 | 1,
515 | 2,
516 | 0,
517 | 1,
518 | 0,
519 | "IMAGE"
520 | ],
521 | [
522 | 2,
523 | 1,
524 | 0,
525 | 3,
526 | 0,
527 | "VIDEO"
528 | ],
529 | [
530 | 3,
531 | 6,
532 | 0,
533 | 5,
534 | 0,
535 | "VIDEO"
536 | ],
537 | [
538 | 4,
539 | 4,
540 | 0,
541 | 6,
542 | 0,
543 | "STRING"
544 | ],
545 | [
546 | 5,
547 | 7,
548 | 0,
549 | 1,
550 | 2,
551 | "STRING"
552 | ],
553 | [
554 | 8,
555 | 14,
556 | 0,
557 | 11,
558 | 0,
559 | "VIDEO"
560 | ],
561 | [
562 | 9,
563 | 13,
564 | 0,
565 | 14,
566 | 0,
567 | "IMAGE"
568 | ],
569 | [
570 | 10,
571 | 12,
572 | 0,
573 | 14,
574 | 2,
575 | "STRING"
576 | ],
577 | [
578 | 11,
579 | 15,
580 | 0,
581 | 14,
582 | 1,
583 | "IMAGE"
584 | ]
585 | ],
586 | "groups": [
587 | {
588 | "id": 1,
589 | "title": "seedance图生视频",
590 | "bounding": [
591 | -66.63548278808594,
592 | 209.3695526123047,
593 | 1528.8248291015625,
594 | 818.9716796875
595 | ],
596 | "color": "#88A",
597 | "font_size": 24,
598 | "flags": {}
599 | },
600 | {
601 | "id": 2,
602 | "title": "seedance文生视频",
603 | "bounding": [
604 | -68.0436782836914,
605 | -358.6665954589844,
606 | 1525.05517578125,
607 | 553.6654663085938
608 | ],
609 | "color": "#3f789e",
610 | "font_size": 24,
611 | "flags": {}
612 | },
613 | {
614 | "id": 3,
615 | "title": "seedance首尾帧视频",
616 | "bounding": [
617 | -64.0103759765625,
618 | 1046.1881103515625,
619 | 1526.9664306640625,
620 | 856.8729858398438
621 | ],
622 | "color": "#a1309b",
623 | "font_size": 24,
624 | "flags": {}
625 | }
626 | ],
627 | "config": {},
628 | "extra": {
629 | "ds": {
630 | "scale": 0.4665073802097334,
631 | "offset": [
632 | 1045.3545566660782,
633 | 408.12891673267626
634 | ]
635 | },
636 | "frontendVersion": "1.25.9"
637 | },
638 | "version": 0.4
639 | }
--------------------------------------------------------------------------------
/workflow/seededit.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "1ad92464-c142-4325-9775-91b34bc10428",
3 | "revision": 0,
4 | "last_node_id": 23,
5 | "last_link_id": 21,
6 | "nodes": [
7 | {
8 | "id": 10,
9 | "type": "SeedEdit3",
10 | "pos": [
11 | 4613.47509765625,
12 | -186.01011657714844
13 | ],
14 | "size": [
15 | 431.1004943847656,
16 | 223.8437042236328
17 | ],
18 | "flags": {},
19 | "order": 2,
20 | "mode": 0,
21 | "inputs": [
22 | {
23 | "name": "image",
24 | "type": "IMAGE",
25 | "link": 12
26 | }
27 | ],
28 | "outputs": [
29 | {
30 | "name": "output",
31 | "type": "IMAGE",
32 | "slot_index": 0,
33 | "links": [
34 | 11
35 | ]
36 | }
37 | ],
38 | "properties": {
39 | "cnr_id": "Mojie-API-Party",
40 | "ver": "923949e455be67f63c0ee4d40550ec93adea27db",
41 | "Node name for S&R": "SeedEdit3"
42 | },
43 | "widgets_values": [
44 | "更换图中的背景为海边",
45 | 0.5,
46 | 568,
47 | "randomize",
48 | 1
49 | ]
50 | },
51 | {
52 | "id": 12,
53 | "type": "PreviewImage",
54 | "pos": [
55 | 5072.2421875,
56 | -187.3025665283203
57 | ],
58 | "size": [
59 | 418.6126708984375,
60 | 553.7525634765625
61 | ],
62 | "flags": {},
63 | "order": 3,
64 | "mode": 0,
65 | "inputs": [
66 | {
67 | "name": "images",
68 | "type": "IMAGE",
69 | "link": 11
70 | }
71 | ],
72 | "outputs": [],
73 | "properties": {
74 | "cnr_id": "comfy-core",
75 | "ver": "0.3.51",
76 | "Node name for S&R": "PreviewImage"
77 | },
78 | "widgets_values": []
79 | },
80 | {
81 | "id": 14,
82 | "type": "LoadImage",
83 | "pos": [
84 | 4269.72265625,
85 | -195.3722381591797
86 | ],
87 | "size": [
88 | 319.7607727050781,
89 | 548.2903442382812
90 | ],
91 | "flags": {},
92 | "order": 0,
93 | "mode": 0,
94 | "inputs": [],
95 | "outputs": [
96 | {
97 | "name": "IMAGE",
98 | "type": "IMAGE",
99 | "links": [
100 | 12
101 | ]
102 | },
103 | {
104 | "name": "MASK",
105 | "type": "MASK",
106 | "links": null
107 | }
108 | ],
109 | "properties": {
110 | "cnr_id": "comfy-core",
111 | "ver": "0.3.51",
112 | "Node name for S&R": "LoadImage"
113 | },
114 | "widgets_values": [
115 | "volcengine_20250523225721.png",
116 | "image"
117 | ]
118 | },
119 | {
120 | "id": 15,
121 | "type": "MarkdownNote",
122 | "pos": [
123 | 3783.03076171875,
124 | -250.33775329589844
125 | ],
126 | "size": [
127 | 446.0703125,
128 | 655.8336181640625
129 | ],
130 | "flags": {},
131 | "order": 1,
132 | "mode": 0,
133 | "inputs": [],
134 | "outputs": [],
135 | "properties": {},
136 | "widgets_values": [
137 | "### seededit3.0 使用说明\n\nSeedEdit 3.0 是字节跳动开发的图片编辑工具,能通过文字描述修改图片。比如你说 “把背景换成海边”。支持使用中文提示词,支持输出中文。\n\n用于编辑图像的提示词 。建议:\n- 建议长度 <= 120字符,prompt过长有概率出图异常或不生效\n\n- 编辑指令使用自然语言即可\n- 每次编辑使用单指令会更好\n- 局部编辑时指令描述尽量精准,尤其是画面有多个实体的时候,描述清楚对谁做什么,能获取更精准的编辑效果\n\n- 发现编辑效果不明显的时候,可以调整一下编辑强度cfg_scale,数值越大越贴近指令执行\n尽量使用清晰的,分辨率高的底片.\n\n### 参考示例:\n- 添加/删除实体:添加/删除xxx(删除图上的女孩/添加一道彩虹)\n- 修改实体:把xxx改成xxx(把手里的鸡腿变成汉堡)\n- 修改风格:改成xxx风格(改成漫画风格)\n- 修改色彩:把xxx改成xx颜色(把衣服改成粉色的)\n- 修改动作:修改表情动作(让他哭/笑/生气)\n- 修改环境背景:背景换成xxx,在xxx(背景换成海边/在星空下)"
138 | ],
139 | "color": "#432",
140 | "bgcolor": "#653"
141 | }
142 | ],
143 | "links": [
144 | [
145 | 11,
146 | 10,
147 | 0,
148 | 12,
149 | 0,
150 | "IMAGE"
151 | ],
152 | [
153 | 12,
154 | 14,
155 | 0,
156 | 10,
157 | 0,
158 | "IMAGE"
159 | ]
160 | ],
161 | "groups": [
162 | {
163 | "id": 1,
164 | "title": "seed单图编辑",
165 | "bounding": [
166 | 4252.01220703125,
167 | -269.0345153808594,
168 | 1271.11962890625,
169 | 645.4844970703125
170 | ],
171 | "color": "#3f789e",
172 | "font_size": 24,
173 | "flags": {}
174 | }
175 | ],
176 | "config": {},
177 | "extra": {
178 | "ds": {
179 | "scale": 0.7972024500000091,
180 | "offset": [
181 | -3301.0756034673323,
182 | 389.2634024596974
183 | ]
184 | },
185 | "frontendVersion": "1.25.9"
186 | },
187 | "version": 0.4
188 | }
--------------------------------------------------------------------------------
/workflow/seedream_v4.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "bf0ea790-aba4-413e-80ca-68a5bbb521bb",
3 | "revision": 0,
4 | "last_node_id": 38,
5 | "last_link_id": 39,
6 | "nodes": [
7 | {
8 | "id": 35,
9 | "type": "ImageBatch",
10 | "pos": [
11 | -4878.46923828125,
12 | -388.9235534667969
13 | ],
14 | "size": [
15 | 140,
16 | 46
17 | ],
18 | "flags": {},
19 | "order": 5,
20 | "mode": 0,
21 | "inputs": [
22 | {
23 | "name": "image1",
24 | "type": "IMAGE",
25 | "link": 35
26 | },
27 | {
28 | "name": "image2",
29 | "type": "IMAGE",
30 | "link": 36
31 | }
32 | ],
33 | "outputs": [
34 | {
35 | "name": "IMAGE",
36 | "type": "IMAGE",
37 | "links": [
38 | 37
39 | ]
40 | }
41 | ],
42 | "properties": {
43 | "cnr_id": "comfy-core",
44 | "ver": "0.3.51",
45 | "Node name for S&R": "ImageBatch"
46 | }
47 | },
48 | {
49 | "id": 29,
50 | "type": "LoadImage",
51 | "pos": [
52 | -5250,
53 | -1150
54 | ],
55 | "size": [
56 | 250.01931762695312,
57 | 413.90338134765625
58 | ],
59 | "flags": {},
60 | "order": 0,
61 | "mode": 0,
62 | "inputs": [],
63 | "outputs": [
64 | {
65 | "name": "IMAGE",
66 | "type": "IMAGE",
67 | "links": [
68 | 34
69 | ]
70 | },
71 | {
72 | "name": "MASK",
73 | "type": "MASK",
74 | "links": null
75 | }
76 | ],
77 | "properties": {
78 | "cnr_id": "comfy-core",
79 | "ver": "0.3.51",
80 | "Node name for S&R": "LoadImage"
81 | },
82 | "widgets_values": [
83 | "volcengine_20250529170517.png",
84 | "image"
85 | ]
86 | },
87 | {
88 | "id": 31,
89 | "type": "DoubaoSeedreamNode",
90 | "pos": [
91 | -4960,
92 | -1150
93 | ],
94 | "size": [
95 | 400,
96 | 232
97 | ],
98 | "flags": {},
99 | "order": 4,
100 | "mode": 0,
101 | "inputs": [
102 | {
103 | "name": "image_input",
104 | "shape": 7,
105 | "type": "IMAGE",
106 | "link": 34
107 | }
108 | ],
109 | "outputs": [
110 | {
111 | "name": "output",
112 | "type": "IMAGE",
113 | "links": [
114 | 39
115 | ]
116 | }
117 | ],
118 | "properties": {
119 | "cnr_id": "Mojie-API-Party",
120 | "ver": "eb9562ca0e1e81de255034ad1bfe0b06aa40d385",
121 | "Node name for S&R": "DoubaoSeedreamNode"
122 | },
123 | "widgets_values": [
124 | "把端午安康改成中秋快乐",
125 | 623,
126 | "randomize",
127 | true,
128 | "2048x2048",
129 | 1024,
130 | 1024
131 | ]
132 | },
133 | {
134 | "id": 32,
135 | "type": "MarkdownNote",
136 | "pos": [
137 | -5670.4453125,
138 | -1168.5592041015625
139 | ],
140 | "size": [
141 | 340.12933349609375,
142 | 401.5765686035156
143 | ],
144 | "flags": {},
145 | "order": 1,
146 | "mode": 0,
147 | "inputs": [],
148 | "outputs": [],
149 | "properties": {},
150 | "widgets_values": [
151 | "### seedream_v4即梦4.0同款\n\nSeedream 4.0 原生支持文本、单图和多图输入,实现基于主体一致性的多图融合创作、图像编辑、组图生成等多样玩法,实现包括组图生成、多参考图生图等图片生成能力。支持中文输入输出,支持多照片组合输入。\n\nseedream_v4支持4k高清输出,节点中配置了预设尺寸。\n也可以通过自定义宽高来控制输出尺寸。custom_size是自定义尺寸的开关。\n\n多图组合和Nano的不一样,无需拼接,可直接组合批次输入,seedream会自动拼接。最多可支持10张图片进行组合。"
152 | ],
153 | "color": "#432",
154 | "bgcolor": "#653"
155 | },
156 | {
157 | "id": 36,
158 | "type": "LoadImage",
159 | "pos": [
160 | -5253.26318359375,
161 | 29.419052124023438
162 | ],
163 | "size": [
164 | 284.58203125,
165 | 366.2306823730469
166 | ],
167 | "flags": {},
168 | "order": 2,
169 | "mode": 0,
170 | "inputs": [],
171 | "outputs": [
172 | {
173 | "name": "IMAGE",
174 | "type": "IMAGE",
175 | "links": [
176 | 36
177 | ]
178 | },
179 | {
180 | "name": "MASK",
181 | "type": "MASK",
182 | "links": null
183 | }
184 | ],
185 | "properties": {
186 | "cnr_id": "comfy-core",
187 | "ver": "0.3.51",
188 | "Node name for S&R": "LoadImage"
189 | },
190 | "widgets_values": [
191 | "src=http___cbu01.alicdn.com_img_ibank_O1CN01xrkCnz1TYUtUapOQ8_!!2211000902394-0-cib.jpg&refer=http___cbu01.alicdn.jpg",
192 | "image"
193 | ]
194 | },
195 | {
196 | "id": 34,
197 | "type": "LoadImage",
198 | "pos": [
199 | -5250.05419921875,
200 | -443.3621520996094
201 | ],
202 | "size": [
203 | 288.49237060546875,
204 | 427.131591796875
205 | ],
206 | "flags": {},
207 | "order": 3,
208 | "mode": 0,
209 | "inputs": [],
210 | "outputs": [
211 | {
212 | "name": "IMAGE",
213 | "type": "IMAGE",
214 | "links": [
215 | 35
216 | ]
217 | },
218 | {
219 | "name": "MASK",
220 | "type": "MASK",
221 | "links": null
222 | }
223 | ],
224 | "properties": {
225 | "cnr_id": "comfy-core",
226 | "ver": "0.3.51",
227 | "Node name for S&R": "LoadImage"
228 | },
229 | "widgets_values": [
230 | "my (1).png",
231 | "image"
232 | ]
233 | },
234 | {
235 | "id": 38,
236 | "type": "SaveImage",
237 | "pos": [
238 | -4518.818359375,
239 | -1160.507568359375
240 | ],
241 | "size": [
242 | 403.2499694824219,
243 | 586.240966796875
244 | ],
245 | "flags": {},
246 | "order": 6,
247 | "mode": 0,
248 | "inputs": [
249 | {
250 | "name": "images",
251 | "type": "IMAGE",
252 | "link": 39
253 | }
254 | ],
255 | "outputs": [],
256 | "properties": {
257 | "cnr_id": "comfy-core",
258 | "ver": "0.3.51"
259 | },
260 | "widgets_values": [
261 | "ComfyUI"
262 | ]
263 | },
264 | {
265 | "id": 33,
266 | "type": "DoubaoSeedreamNode",
267 | "pos": [
268 | -4695.333984375,
269 | -396.2373046875
270 | ],
271 | "size": [
272 | 400,
273 | 232
274 | ],
275 | "flags": {},
276 | "order": 7,
277 | "mode": 0,
278 | "inputs": [
279 | {
280 | "name": "image_input",
281 | "shape": 7,
282 | "type": "IMAGE",
283 | "link": 37
284 | }
285 | ],
286 | "outputs": [
287 | {
288 | "name": "output",
289 | "type": "IMAGE",
290 | "links": [
291 | 38
292 | ]
293 | }
294 | ],
295 | "properties": {
296 | "cnr_id": "Mojie-API-Party",
297 | "ver": "eb9562ca0e1e81de255034ad1bfe0b06aa40d385",
298 | "Node name for S&R": "DoubaoSeedreamNode"
299 | },
300 | "widgets_values": [
301 | "图1的女士坐在图2的椅子上.",
302 | 1406,
303 | "randomize",
304 | true,
305 | "1664x2496",
306 | 1024,
307 | 1024
308 | ]
309 | },
310 | {
311 | "id": 37,
312 | "type": "SaveImage",
313 | "pos": [
314 | -4238.7958984375,
315 | -422.50244140625
316 | ],
317 | "size": [
318 | 732.0910034179688,
319 | 802.4579467773438
320 | ],
321 | "flags": {},
322 | "order": 8,
323 | "mode": 0,
324 | "inputs": [
325 | {
326 | "name": "images",
327 | "type": "IMAGE",
328 | "link": 38
329 | }
330 | ],
331 | "outputs": [],
332 | "properties": {
333 | "cnr_id": "comfy-core",
334 | "ver": "0.3.51"
335 | },
336 | "widgets_values": [
337 | "ComfyUI"
338 | ]
339 | }
340 | ],
341 | "links": [
342 | [
343 | 34,
344 | 29,
345 | 0,
346 | 31,
347 | 0,
348 | "IMAGE"
349 | ],
350 | [
351 | 35,
352 | 34,
353 | 0,
354 | 35,
355 | 0,
356 | "IMAGE"
357 | ],
358 | [
359 | 36,
360 | 36,
361 | 0,
362 | 35,
363 | 1,
364 | "IMAGE"
365 | ],
366 | [
367 | 37,
368 | 35,
369 | 0,
370 | 33,
371 | 0,
372 | "IMAGE"
373 | ],
374 | [
375 | 38,
376 | 33,
377 | 0,
378 | 37,
379 | 0,
380 | "IMAGE"
381 | ],
382 | [
383 | 39,
384 | 31,
385 | 0,
386 | 38,
387 | 0,
388 | "IMAGE"
389 | ]
390 | ],
391 | "groups": [
392 | {
393 | "id": 1,
394 | "title": "单图输入",
395 | "bounding": [
396 | -5266.33935546875,
397 | -1242.972412109375,
398 | 1181.684814453125,
399 | 708.481201171875
400 | ],
401 | "color": "#3f789e",
402 | "font_size": 24,
403 | "flags": {}
404 | },
405 | {
406 | "id": 2,
407 | "title": "多图组合输入",
408 | "bounding": [
409 | -5263.26318359375,
410 | -516.9620361328125,
411 | 1780.517822265625,
412 | 922.61181640625
413 | ],
414 | "color": "#a1309b",
415 | "font_size": 24,
416 | "flags": {}
417 | }
418 | ],
419 | "config": {},
420 | "extra": {
421 | "ds": {
422 | "scale": 0.6303940863128816,
423 | "offset": [
424 | 5837.721776744542,
425 | 1230.9888460166862
426 | ]
427 | },
428 | "frontendVersion": "1.25.9"
429 | },
430 | "version": 0.4
431 | }
--------------------------------------------------------------------------------
/workflow/图片翻译.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "ae9ebba6-18df-4409-b3f0-f6ed03037d9c",
3 | "revision": 0,
4 | "last_node_id": 28,
5 | "last_link_id": 19,
6 | "nodes": [
7 | {
8 | "id": 26,
9 | "type": "ImageTranslateNode",
10 | "pos": [
11 | 386.8037414550781,
12 | 569.7688598632812
13 | ],
14 | "size": [
15 | 270,
16 | 154
17 | ],
18 | "flags": {},
19 | "order": 2,
20 | "mode": 0,
21 | "inputs": [
22 | {
23 | "name": "image_input",
24 | "type": "IMAGE",
25 | "link": 19
26 | }
27 | ],
28 | "outputs": [
29 | {
30 | "name": "output",
31 | "type": "IMAGE",
32 | "links": [
33 | 18
34 | ]
35 | }
36 | ],
37 | "properties": {
38 | "cnr_id": "Mojie-API-Party",
39 | "ver": "777aab1921a675b8bcdcfc0dcee15ddb86b71491",
40 | "Node name for S&R": "ImageTranslateNode"
41 | },
42 | "widgets_values": [
43 | "default",
44 | "自动",
45 | "英语",
46 | 1833,
47 | "randomize"
48 | ]
49 | },
50 | {
51 | "id": 23,
52 | "type": "LoadImage",
53 | "pos": [
54 | 94.14804077148438,
55 | 564.169921875
56 | ],
57 | "size": [
58 | 270,
59 | 314.0000305175781
60 | ],
61 | "flags": {},
62 | "order": 0,
63 | "mode": 0,
64 | "inputs": [],
65 | "outputs": [
66 | {
67 | "name": "IMAGE",
68 | "type": "IMAGE",
69 | "links": [
70 | 19
71 | ]
72 | },
73 | {
74 | "name": "MASK",
75 | "type": "MASK",
76 | "links": null
77 | }
78 | ],
79 | "properties": {
80 | "cnr_id": "comfy-core",
81 | "ver": "0.3.51",
82 | "Node name for S&R": "LoadImage"
83 | },
84 | "widgets_values": [
85 | "f3d9b086-c746-4160-8d0c-775f767b1f72.png",
86 | "image"
87 | ]
88 | },
89 | {
90 | "id": 27,
91 | "type": "PreviewImage",
92 | "pos": [
93 | 675.8037719726562,
94 | 567.7688598632812
95 | ],
96 | "size": [
97 | 444,
98 | 338
99 | ],
100 | "flags": {},
101 | "order": 3,
102 | "mode": 0,
103 | "inputs": [
104 | {
105 | "name": "images",
106 | "type": "IMAGE",
107 | "link": 18
108 | }
109 | ],
110 | "outputs": [],
111 | "properties": {
112 | "cnr_id": "comfy-core",
113 | "ver": "0.3.51",
114 | "Node name for S&R": "PreviewImage"
115 | },
116 | "widgets_values": []
117 | },
118 | {
119 | "id": 28,
120 | "type": "MarkdownNote",
121 | "pos": [
122 | -287.3780822753906,
123 | 551.0415649414062
124 | ],
125 | "size": [
126 | 317.2727355957031,
127 | 394.5454406738281
128 | ],
129 | "flags": {},
130 | "order": 1,
131 | "mode": 0,
132 | "inputs": [],
133 | "outputs": [],
134 | "properties": {},
135 | "widgets_values": [
136 | "### 图片翻译使用说明\nsourcelang 是源语言,就是你上传的图片本身的语言。\n\nTargetlang 是目标语言,就是将图片需要翻译的语言。\n\nmodelid 一般选择默认,是覆盖模式,会将源语言擦除掉之后将翻译过后的新文字印在上面,效果更好。"
137 | ],
138 | "color": "#432",
139 | "bgcolor": "#653"
140 | }
141 | ],
142 | "links": [
143 | [
144 | 18,
145 | 26,
146 | 0,
147 | 27,
148 | 0,
149 | "IMAGE"
150 | ],
151 | [
152 | 19,
153 | 23,
154 | 0,
155 | 26,
156 | 0,
157 | "IMAGE"
158 | ]
159 | ],
160 | "groups": [],
161 | "config": {},
162 | "extra": {
163 | "ds": {
164 | "scale": 1.1,
165 | "offset": [
166 | 387.3780651400036,
167 | -333.7688669019324
168 | ]
169 | },
170 | "frontendVersion": "1.25.9"
171 | },
172 | "version": 0.4
173 | }
--------------------------------------------------------------------------------
/workflow/图片高清放大.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "f607b0cd-2397-48b1-8b80-3bb3024aacfa",
3 | "revision": 0,
4 | "last_node_id": 4,
5 | "last_link_id": 2,
6 | "nodes": [
7 | {
8 | "id": 2,
9 | "type": "LoadImage",
10 | "pos": [
11 | -78.10535430908203,
12 | 597.4962768554688
13 | ],
14 | "size": [
15 | 270,
16 | 314
17 | ],
18 | "flags": {},
19 | "order": 0,
20 | "mode": 0,
21 | "inputs": [],
22 | "outputs": [
23 | {
24 | "name": "IMAGE",
25 | "type": "IMAGE",
26 | "links": [
27 | 1
28 | ]
29 | },
30 | {
31 | "name": "MASK",
32 | "type": "MASK",
33 | "links": null
34 | }
35 | ],
36 | "properties": {
37 | "cnr_id": "comfy-core",
38 | "ver": "0.3.51",
39 | "Node name for S&R": "LoadImage"
40 | },
41 | "widgets_values": [
42 | "MojieAPI_00098_.png",
43 | "image"
44 | ]
45 | },
46 | {
47 | "id": 4,
48 | "type": "MarkdownNote",
49 | "pos": [
50 | -368.3532409667969,
51 | 602.1238403320312
52 | ],
53 | "size": [
54 | 249.25621032714844,
55 | 441.23968505859375
56 | ],
57 | "flags": {},
58 | "order": 1,
59 | "mode": 0,
60 | "inputs": [],
61 | "outputs": [],
62 | "properties": {},
63 | "widgets_values": [
64 | "### 高清放大节点使用说明\n最高可以将图片放大6倍,并且细节保留非常好,图片不失真。速度很快。\n\nmulitple 是放大倍数。\n\n输入图片最大请不要超过2048px。\n输出图片最大不会超过10240px。"
65 | ],
66 | "color": "#432",
67 | "bgcolor": "#653"
68 | },
69 | {
70 | "id": 1,
71 | "type": "ImageUpscaleNode",
72 | "pos": [
73 | 214.70455932617188,
74 | 602.3723754882812
75 | ],
76 | "size": [
77 | 270,
78 | 106
79 | ],
80 | "flags": {},
81 | "order": 2,
82 | "mode": 0,
83 | "inputs": [
84 | {
85 | "name": "image_input",
86 | "type": "IMAGE",
87 | "link": 1
88 | }
89 | ],
90 | "outputs": [
91 | {
92 | "name": "output",
93 | "type": "IMAGE",
94 | "links": [
95 | 2
96 | ]
97 | }
98 | ],
99 | "properties": {
100 | "cnr_id": "Mojie-API-Party",
101 | "ver": "777aab1921a675b8bcdcfc0dcee15ddb86b71491",
102 | "Node name for S&R": "ImageUpscaleNode"
103 | },
104 | "widgets_values": [
105 | 1243,
106 | "randomize",
107 | "x4"
108 | ]
109 | },
110 | {
111 | "id": 3,
112 | "type": "SaveImage",
113 | "pos": [
114 | 510.07635498046875,
115 | 605.3471069335938
116 | ],
117 | "size": [
118 | 503.6363525390625,
119 | 662.727294921875
120 | ],
121 | "flags": {},
122 | "order": 3,
123 | "mode": 0,
124 | "inputs": [
125 | {
126 | "name": "images",
127 | "type": "IMAGE",
128 | "link": 2
129 | }
130 | ],
131 | "outputs": [],
132 | "properties": {
133 | "cnr_id": "comfy-core",
134 | "ver": "0.3.51"
135 | },
136 | "widgets_values": [
137 | "ComfyUI"
138 | ]
139 | }
140 | ],
141 | "links": [
142 | [
143 | 1,
144 | 2,
145 | 0,
146 | 1,
147 | 0,
148 | "IMAGE"
149 | ],
150 | [
151 | 2,
152 | 1,
153 | 0,
154 | 3,
155 | 0,
156 | "IMAGE"
157 | ]
158 | ],
159 | "groups": [],
160 | "config": {},
161 | "extra": {
162 | "ds": {
163 | "scale": 1,
164 | "offset": [
165 | 450.1909283889162,
166 | -487.1714275571551
167 | ]
168 | },
169 | "frontendVersion": "1.25.9"
170 | },
171 | "version": 0.4
172 | }
--------------------------------------------------------------------------------
/workflow/服装模特生成(合集).json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "0a3b477c-f646-4993-b4fe-3370d260bbe9",
3 | "revision": 0,
4 | "last_node_id": 25,
5 | "last_link_id": 13,
6 | "nodes": [
7 | {
8 | "id": 6,
9 | "type": "SaveImage",
10 | "pos": [
11 | 821.43115234375,
12 | 222.91390991210938
13 | ],
14 | "size": [
15 | 504.6189880371094,
16 | 811.2249755859375
17 | ],
18 | "flags": {},
19 | "order": 14,
20 | "mode": 0,
21 | "inputs": [
22 | {
23 | "name": "images",
24 | "type": "IMAGE",
25 | "link": 4
26 | }
27 | ],
28 | "outputs": [],
29 | "properties": {
30 | "cnr_id": "comfy-core",
31 | "ver": "0.3.51"
32 | },
33 | "widgets_values": [
34 | "mojie-API"
35 | ]
36 | },
37 | {
38 | "id": 4,
39 | "type": "LoadImage",
40 | "pos": [
41 | 234.03355407714844,
42 | 704.7265625
43 | ],
44 | "size": [
45 | 258,
46 | 326
47 | ],
48 | "flags": {},
49 | "order": 0,
50 | "mode": 0,
51 | "inputs": [],
52 | "outputs": [
53 | {
54 | "name": "IMAGE",
55 | "type": "IMAGE",
56 | "links": [
57 | 2
58 | ]
59 | },
60 | {
61 | "name": "MASK",
62 | "type": "MASK",
63 | "links": null
64 | }
65 | ],
66 | "properties": {
67 | "cnr_id": "comfy-core",
68 | "ver": "0.3.51",
69 | "Node name for S&R": "LoadImage"
70 | },
71 | "widgets_values": [
72 | "Asian (10).png",
73 | "image"
74 | ]
75 | },
76 | {
77 | "id": 3,
78 | "type": "LoadImage",
79 | "pos": [
80 | 229.8437042236328,
81 | 224.69346618652344
82 | ],
83 | "size": [
84 | 270,
85 | 393.0909118652344
86 | ],
87 | "flags": {},
88 | "order": 1,
89 | "mode": 0,
90 | "inputs": [],
91 | "outputs": [
92 | {
93 | "name": "IMAGE",
94 | "type": "IMAGE",
95 | "links": [
96 | 1
97 | ]
98 | },
99 | {
100 | "name": "MASK",
101 | "type": "MASK",
102 | "links": null
103 | }
104 | ],
105 | "properties": {
106 | "cnr_id": "comfy-core",
107 | "ver": "0.3.51",
108 | "Node name for S&R": "LoadImage"
109 | },
110 | "widgets_values": [
111 | "O1CN01hPNJMY2DxfIZHPDEX_!!731648676 (1).jpg",
112 | "image"
113 | ]
114 | },
115 | {
116 | "id": 10,
117 | "type": "SaveImage",
118 | "pos": [
119 | 850.7461547851562,
120 | 1244.6373291015625
121 | ],
122 | "size": [
123 | 431.051025390625,
124 | 547.8079833984375
125 | ],
126 | "flags": {},
127 | "order": 15,
128 | "mode": 0,
129 | "inputs": [
130 | {
131 | "name": "images",
132 | "type": "IMAGE",
133 | "link": 6
134 | }
135 | ],
136 | "outputs": [],
137 | "properties": {
138 | "cnr_id": "comfy-core",
139 | "ver": "0.3.51"
140 | },
141 | "widgets_values": [
142 | "ComfyUI"
143 | ]
144 | },
145 | {
146 | "id": 9,
147 | "type": "LoadImage",
148 | "pos": [
149 | 264.82855224609375,
150 | 1256.8677978515625
151 | ],
152 | "size": [
153 | 270,
154 | 314
155 | ],
156 | "flags": {},
157 | "order": 2,
158 | "mode": 0,
159 | "inputs": [],
160 | "outputs": [
161 | {
162 | "name": "IMAGE",
163 | "type": "IMAGE",
164 | "links": [
165 | 5
166 | ]
167 | },
168 | {
169 | "name": "MASK",
170 | "type": "MASK",
171 | "links": null
172 | }
173 | ],
174 | "properties": {
175 | "cnr_id": "comfy-core",
176 | "ver": "0.3.51",
177 | "Node name for S&R": "LoadImage"
178 | },
179 | "widgets_values": [
180 | "mt (97).png",
181 | "image"
182 | ]
183 | },
184 | {
185 | "id": 8,
186 | "type": "GetDressing",
187 | "pos": [
188 | 559.4490356445312,
189 | 1253.061767578125
190 | ],
191 | "size": [
192 | 270,
193 | 130
194 | ],
195 | "flags": {},
196 | "order": 11,
197 | "mode": 0,
198 | "inputs": [
199 | {
200 | "name": "image",
201 | "type": "IMAGE",
202 | "link": 5
203 | }
204 | ],
205 | "outputs": [
206 | {
207 | "name": "output",
208 | "type": "IMAGE",
209 | "links": [
210 | 6
211 | ]
212 | }
213 | ],
214 | "properties": {
215 | "cnr_id": "Mojie-API-Party",
216 | "ver": "5f88d79db064fced6dce5b6dafb42aa836b81c60",
217 | "Node name for S&R": "GetDressing"
218 | },
219 | "widgets_values": [
220 | "全身",
221 | "3:4",
222 | 516,
223 | "randomize"
224 | ]
225 | },
226 | {
227 | "id": 13,
228 | "type": "MarkdownNote",
229 | "pos": [
230 | -105.657958984375,
231 | 186.6623992919922
232 | ],
233 | "size": [
234 | 276.3636474609375,
235 | 421.98345947265625
236 | ],
237 | "flags": {},
238 | "order": 3,
239 | "mode": 0,
240 | "inputs": [],
241 | "outputs": [],
242 | "properties": {},
243 | "widgets_values": [
244 | "##### 服装模特生成说明\n- 左侧上传服装和上传人脸,在中间选择风格。即可生成该人物穿着这件服装的效果。当有人脸的时候,人种和性别不起作用。\n- 当需要随机脸的时候,把人脸框去掉,此时选择人种和性别还有服装即可生成。\n\n"
245 | ],
246 | "color": "#432",
247 | "bgcolor": "#653"
248 | },
249 | {
250 | "id": 12,
251 | "type": "MarkdownNote",
252 | "pos": [
253 | -99.88379669189453,
254 | 1196.800048828125
255 | ],
256 | "size": [
257 | 276.3636474609375,
258 | 421.98345947265625
259 | ],
260 | "flags": {},
261 | "order": 4,
262 | "mode": 0,
263 | "inputs": [],
264 | "outputs": [],
265 | "properties": {},
266 | "widgets_values": [
267 | "##### AI服装提取说明\n- 可以把任意人身上的,或者在人台模特上的服装提取成白底图。\n- extend_prompt选择提取区域,size选择提取的尺寸大小\n\n"
268 | ],
269 | "color": "#432",
270 | "bgcolor": "#653"
271 | },
272 | {
273 | "id": 16,
274 | "type": "LoadImage",
275 | "pos": [
276 | 1838.927734375,
277 | 1264.4677734375
278 | ],
279 | "size": [
280 | 314,
281 | 513
282 | ],
283 | "flags": {},
284 | "order": 5,
285 | "mode": 0,
286 | "inputs": [],
287 | "outputs": [
288 | {
289 | "name": "IMAGE",
290 | "type": "IMAGE",
291 | "links": [
292 | 7
293 | ]
294 | },
295 | {
296 | "name": "MASK",
297 | "type": "MASK",
298 | "links": null
299 | }
300 | ],
301 | "properties": {
302 | "cnr_id": "comfy-core",
303 | "ver": "0.3.51",
304 | "Node name for S&R": "LoadImage"
305 | },
306 | "widgets_values": [
307 | "mojie-API_00001_.png",
308 | "image"
309 | ]
310 | },
311 | {
312 | "id": 15,
313 | "type": "MoterPoseNode",
314 | "pos": [
315 | 2185.5830078125,
316 | 1264.284912109375
317 | ],
318 | "size": [
319 | 270,
320 | 130
321 | ],
322 | "flags": {},
323 | "order": 12,
324 | "mode": 0,
325 | "inputs": [
326 | {
327 | "name": "image_input",
328 | "type": "IMAGE",
329 | "link": 7
330 | }
331 | ],
332 | "outputs": [
333 | {
334 | "name": "output",
335 | "type": "IMAGE",
336 | "links": [
337 | 8
338 | ]
339 | }
340 | ],
341 | "properties": {
342 | "cnr_id": "Mojie-API-Party",
343 | "ver": "5f88d79db064fced6dce5b6dafb42aa836b81c60",
344 | "Node name for S&R": "MoterPoseNode"
345 | },
346 | "widgets_values": [
347 | true,
348 | 1,
349 | 487,
350 | "randomize"
351 | ]
352 | },
353 | {
354 | "id": 17,
355 | "type": "PreviewImage",
356 | "pos": [
357 | 2482.0185546875,
358 | 1269.6495361328125
359 | ],
360 | "size": [
361 | 368,
362 | 495
363 | ],
364 | "flags": {},
365 | "order": 16,
366 | "mode": 0,
367 | "inputs": [
368 | {
369 | "name": "images",
370 | "type": "IMAGE",
371 | "link": 8
372 | }
373 | ],
374 | "outputs": [],
375 | "properties": {
376 | "cnr_id": "comfy-core",
377 | "ver": "0.3.51",
378 | "Node name for S&R": "PreviewImage"
379 | },
380 | "widgets_values": []
381 | },
382 | {
383 | "id": 24,
384 | "type": "SaveImage",
385 | "pos": [
386 | 2442.644775390625,
387 | 272.31024169921875
388 | ],
389 | "size": [
390 | 481.8710021972656,
391 | 760.2839965820312
392 | ],
393 | "flags": {},
394 | "order": 17,
395 | "mode": 0,
396 | "inputs": [
397 | {
398 | "name": "images",
399 | "type": "IMAGE",
400 | "link": 13
401 | }
402 | ],
403 | "outputs": [],
404 | "properties": {
405 | "cnr_id": "comfy-core",
406 | "ver": "0.3.51"
407 | },
408 | "widgets_values": [
409 | "ComfyUI"
410 | ]
411 | },
412 | {
413 | "id": 19,
414 | "type": "LoadImage",
415 | "pos": [
416 | 1832.5687255859375,
417 | 255.1504669189453
418 | ],
419 | "size": [
420 | 287.3030090332031,
421 | 340.6199951171875
422 | ],
423 | "flags": {},
424 | "order": 6,
425 | "mode": 0,
426 | "inputs": [],
427 | "outputs": [
428 | {
429 | "name": "IMAGE",
430 | "type": "IMAGE",
431 | "links": [
432 | 9
433 | ]
434 | },
435 | {
436 | "name": "MASK",
437 | "type": "MASK",
438 | "links": null
439 | }
440 | ],
441 | "properties": {
442 | "cnr_id": "comfy-core",
443 | "ver": "0.3.51",
444 | "Node name for S&R": "LoadImage"
445 | },
446 | "widgets_values": [
447 | "fz (113).png",
448 | "image"
449 | ]
450 | },
451 | {
452 | "id": 20,
453 | "type": "LoadImage",
454 | "pos": [
455 | 1837.27978515625,
456 | 641.9788208007812
457 | ],
458 | "size": [
459 | 289.9649963378906,
460 | 427.135009765625
461 | ],
462 | "flags": {},
463 | "order": 7,
464 | "mode": 0,
465 | "inputs": [],
466 | "outputs": [
467 | {
468 | "name": "IMAGE",
469 | "type": "IMAGE",
470 | "links": [
471 | 10
472 | ]
473 | },
474 | {
475 | "name": "MASK",
476 | "type": "MASK",
477 | "links": null
478 | }
479 | ],
480 | "properties": {
481 | "cnr_id": "comfy-core",
482 | "ver": "0.3.51",
483 | "Node name for S&R": "LoadImage"
484 | },
485 | "widgets_values": [
486 | "mt (300).png",
487 | "image"
488 | ]
489 | },
490 | {
491 | "id": 14,
492 | "type": "MarkdownNote",
493 | "pos": [
494 | 1497.03271484375,
495 | 1216.5877685546875
496 | ],
497 | "size": [
498 | 276.3636474609375,
499 | 421.98345947265625
500 | ],
501 | "flags": {},
502 | "order": 8,
503 | "mode": 0,
504 | "inputs": [],
505 | "outputs": [],
506 | "properties": {},
507 | "widgets_values": [
508 | "##### 模特姿势更改\n- 更改任意服装模特的姿势,动作。\n- 姿势动作是经过AI重新评估的,随机生成,避免重复。\n\n"
509 | ],
510 | "color": "#432",
511 | "bgcolor": "#653"
512 | },
513 | {
514 | "id": 22,
515 | "type": "MarkdownNote",
516 | "pos": [
517 | 1504.9609375,
518 | 206.96632385253906
519 | ],
520 | "size": [
521 | 276.3636474609375,
522 | 421.98345947265625
523 | ],
524 | "flags": {},
525 | "order": 9,
526 | "mode": 0,
527 | "inputs": [],
528 | "outputs": [],
529 | "properties": {},
530 | "widgets_values": [
531 | "##### 同款服装替换说明\n- 将任意衣服替换到任意模特上\n- 推荐只替换大致相同的同款式服装,款式差别太大容易替换失败。"
532 | ],
533 | "color": "#432",
534 | "bgcolor": "#653"
535 | },
536 | {
537 | "id": 2,
538 | "type": "ModelGenNode",
539 | "pos": [
540 | 536.0947265625,
541 | 231.709228515625
542 | ],
543 | "size": [
544 | 270,
545 | 174
546 | ],
547 | "flags": {},
548 | "order": 10,
549 | "mode": 0,
550 | "inputs": [
551 | {
552 | "name": "cloths_image",
553 | "type": "IMAGE",
554 | "link": 1
555 | },
556 | {
557 | "name": "face_image",
558 | "shape": 7,
559 | "type": "IMAGE",
560 | "link": 2
561 | }
562 | ],
563 | "outputs": [
564 | {
565 | "name": "output",
566 | "type": "IMAGE",
567 | "links": [
568 | 4
569 | ]
570 | }
571 | ],
572 | "properties": {
573 | "cnr_id": "Mojie-API-Party",
574 | "ver": "5f88d79db064fced6dce5b6dafb42aa836b81c60",
575 | "Node name for S&R": "ModelGenNode"
576 | },
577 | "widgets_values": [
578 | "亚裔",
579 | "woman",
580 | "通用-INS自拍",
581 | 396,
582 | "randomize"
583 | ]
584 | },
585 | {
586 | "id": 18,
587 | "type": "ReplaceClothesNode",
588 | "pos": [
589 | 2152.884521484375,
590 | 260.51910400390625
591 | ],
592 | "size": [
593 | 270,
594 | 102
595 | ],
596 | "flags": {},
597 | "order": 13,
598 | "mode": 0,
599 | "inputs": [
600 | {
601 | "name": "cloths_image",
602 | "type": "IMAGE",
603 | "link": 9
604 | },
605 | {
606 | "name": "model_image",
607 | "type": "IMAGE",
608 | "link": 10
609 | }
610 | ],
611 | "outputs": [
612 | {
613 | "name": "output",
614 | "type": "IMAGE",
615 | "links": [
616 | 13
617 | ]
618 | }
619 | ],
620 | "properties": {
621 | "cnr_id": "Mojie-API-Party",
622 | "ver": "5f88d79db064fced6dce5b6dafb42aa836b81c60",
623 | "Node name for S&R": "ReplaceClothesNode"
624 | },
625 | "widgets_values": [
626 | 379,
627 | "randomize"
628 | ]
629 | }
630 | ],
631 | "links": [
632 | [
633 | 1,
634 | 3,
635 | 0,
636 | 2,
637 | 0,
638 | "IMAGE"
639 | ],
640 | [
641 | 2,
642 | 4,
643 | 0,
644 | 2,
645 | 1,
646 | "IMAGE"
647 | ],
648 | [
649 | 4,
650 | 2,
651 | 0,
652 | 6,
653 | 0,
654 | "IMAGE"
655 | ],
656 | [
657 | 5,
658 | 9,
659 | 0,
660 | 8,
661 | 0,
662 | "IMAGE"
663 | ],
664 | [
665 | 6,
666 | 8,
667 | 0,
668 | 10,
669 | 0,
670 | "IMAGE"
671 | ],
672 | [
673 | 7,
674 | 16,
675 | 0,
676 | 15,
677 | 0,
678 | "IMAGE"
679 | ],
680 | [
681 | 8,
682 | 15,
683 | 0,
684 | 17,
685 | 0,
686 | "IMAGE"
687 | ],
688 | [
689 | 9,
690 | 19,
691 | 0,
692 | 18,
693 | 0,
694 | "IMAGE"
695 | ],
696 | [
697 | 10,
698 | 20,
699 | 0,
700 | 18,
701 | 1,
702 | "IMAGE"
703 | ],
704 | [
705 | 13,
706 | 18,
707 | 0,
708 | 24,
709 | 0,
710 | "IMAGE"
711 | ]
712 | ],
713 | "groups": [
714 | {
715 | "id": 1,
716 | "title": "上传人脸",
717 | "bounding": [
718 | 220.0405731201172,
719 | 628.464599609375,
720 | 289.97900390625,
721 | 420.2480773925781
722 | ],
723 | "color": "#a1309b",
724 | "font_size": 24,
725 | "flags": {
726 | "pinned": true
727 | }
728 | },
729 | {
730 | "id": 2,
731 | "title": "上传服装",
732 | "bounding": [
733 | 219.8437042236328,
734 | 151.0934600830078,
735 | 286.3636474609375,
736 | 471.2363586425781
737 | ],
738 | "color": "#8A8",
739 | "font_size": 24,
740 | "flags": {
741 | "pinned": true
742 | }
743 | },
744 | {
745 | "id": 3,
746 | "title": "服装模特生成",
747 | "bounding": [
748 | 515.7608642578125,
749 | 151.0319366455078,
750 | 817.72998046875,
751 | 904.780029296875
752 | ],
753 | "color": "#3f789e",
754 | "font_size": 24,
755 | "flags": {
756 | "pinned": true
757 | }
758 | },
759 | {
760 | "id": 4,
761 | "title": "服装提取",
762 | "bounding": [
763 | 224.49420166015625,
764 | 1167.1300048828125,
765 | 1105.5799560546875,
766 | 637.8099975585938
767 | ],
768 | "color": "#3f789e",
769 | "font_size": 24,
770 | "flags": {}
771 | },
772 | {
773 | "id": 5,
774 | "title": "模特姿势更改",
775 | "bounding": [
776 | 1808.1695556640625,
777 | 1181.0601806640625,
778 | 1062.593017578125,
779 | 632.7169799804688
780 | ],
781 | "color": "#3f789e",
782 | "font_size": 24,
783 | "flags": {}
784 | },
785 | {
786 | "id": 6,
787 | "title": "同款服装替换",
788 | "bounding": [
789 | 1804.6436767578125,
790 | 173.20899963378906,
791 | 1135.5400390625,
792 | 920.1331176757812
793 | ],
794 | "color": "#3f789e",
795 | "font_size": 24,
796 | "flags": {}
797 | }
798 | ],
799 | "config": {},
800 | "extra": {
801 | "ds": {
802 | "scale": 1.1,
803 | "offset": [
804 | 194.49309691832187,
805 | -132.32053702967104
806 | ]
807 | },
808 | "frontendVersion": "1.25.9"
809 | },
810 | "version": 0.4
811 | }
--------------------------------------------------------------------------------
/workflow/服装模特生成(生成组图).json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "7e183e28-641d-4c45-b141-ac68b51e2ae0",
3 | "revision": 0,
4 | "last_node_id": 31,
5 | "last_link_id": 22,
6 | "nodes": [
7 | {
8 | "id": 3,
9 | "type": "LoadImage",
10 | "pos": [
11 | 229.8437042236328,
12 | 224.69346618652344
13 | ],
14 | "size": [
15 | 270,
16 | 393.0909118652344
17 | ],
18 | "flags": {},
19 | "order": 0,
20 | "mode": 0,
21 | "inputs": [],
22 | "outputs": [
23 | {
24 | "name": "IMAGE",
25 | "type": "IMAGE",
26 | "links": [
27 | 1
28 | ]
29 | },
30 | {
31 | "name": "MASK",
32 | "type": "MASK",
33 | "links": null
34 | }
35 | ],
36 | "properties": {
37 | "cnr_id": "comfy-core",
38 | "ver": "0.3.51",
39 | "Node name for S&R": "LoadImage"
40 | },
41 | "widgets_values": [
42 | "fz (88).jpg",
43 | "image"
44 | ]
45 | },
46 | {
47 | "id": 6,
48 | "type": "SaveImage",
49 | "pos": [
50 | 569.356201171875,
51 | 476.65899658203125
52 | ],
53 | "size": [
54 | 576.3162841796875,
55 | 797.1055297851562
56 | ],
57 | "flags": {},
58 | "order": 4,
59 | "mode": 0,
60 | "inputs": [
61 | {
62 | "name": "images",
63 | "type": "IMAGE",
64 | "link": 4
65 | }
66 | ],
67 | "outputs": [],
68 | "properties": {
69 | "cnr_id": "comfy-core",
70 | "ver": "0.3.51"
71 | },
72 | "widgets_values": [
73 | "mojie-API"
74 | ]
75 | },
76 | {
77 | "id": 26,
78 | "type": "SaveImage",
79 | "pos": [
80 | 1192.3756103515625,
81 | 482.5464172363281
82 | ],
83 | "size": [
84 | 604.986083984375,
85 | 794.0030517578125
86 | ],
87 | "flags": {},
88 | "order": 8,
89 | "mode": 0,
90 | "inputs": [
91 | {
92 | "name": "images",
93 | "type": "IMAGE",
94 | "link": 17
95 | }
96 | ],
97 | "outputs": [],
98 | "properties": {
99 | "cnr_id": "comfy-core",
100 | "ver": "0.3.51"
101 | },
102 | "widgets_values": [
103 | "ComfyUI"
104 | ]
105 | },
106 | {
107 | "id": 15,
108 | "type": "MoterPoseNode",
109 | "pos": [
110 | 1228.786865234375,
111 | 240.5798797607422
112 | ],
113 | "size": [
114 | 270,
115 | 130
116 | ],
117 | "flags": {},
118 | "order": 5,
119 | "mode": 0,
120 | "inputs": [
121 | {
122 | "name": "image_input",
123 | "type": "IMAGE",
124 | "link": 15
125 | }
126 | ],
127 | "outputs": [
128 | {
129 | "name": "output",
130 | "type": "IMAGE",
131 | "links": [
132 | 17
133 | ]
134 | }
135 | ],
136 | "properties": {
137 | "cnr_id": "Mojie-API-Party",
138 | "ver": "5f88d79db064fced6dce5b6dafb42aa836b81c60",
139 | "Node name for S&R": "MoterPoseNode"
140 | },
141 | "widgets_values": [
142 | true,
143 | 1,
144 | 1116,
145 | "randomize"
146 | ]
147 | },
148 | {
149 | "id": 27,
150 | "type": "MoterPoseNode",
151 | "pos": [
152 | 1904.62841796875,
153 | 241.63043212890625
154 | ],
155 | "size": [
156 | 270,
157 | 130
158 | ],
159 | "flags": {},
160 | "order": 6,
161 | "mode": 0,
162 | "inputs": [
163 | {
164 | "name": "image_input",
165 | "type": "IMAGE",
166 | "link": 18
167 | }
168 | ],
169 | "outputs": [
170 | {
171 | "name": "output",
172 | "type": "IMAGE",
173 | "links": [
174 | 22
175 | ]
176 | }
177 | ],
178 | "properties": {
179 | "cnr_id": "Mojie-API-Party",
180 | "ver": "5f88d79db064fced6dce5b6dafb42aa836b81c60",
181 | "Node name for S&R": "MoterPoseNode"
182 | },
183 | "widgets_values": [
184 | true,
185 | 1,
186 | 1048,
187 | "randomize"
188 | ]
189 | },
190 | {
191 | "id": 29,
192 | "type": "MoterPoseNode",
193 | "pos": [
194 | 2423.2080078125,
195 | 238.8440704345703
196 | ],
197 | "size": [
198 | 270,
199 | 130
200 | ],
201 | "flags": {},
202 | "order": 7,
203 | "mode": 0,
204 | "inputs": [
205 | {
206 | "name": "image_input",
207 | "type": "IMAGE",
208 | "link": 20
209 | }
210 | ],
211 | "outputs": [
212 | {
213 | "name": "output",
214 | "type": "IMAGE",
215 | "links": [
216 | 21
217 | ]
218 | }
219 | ],
220 | "properties": {
221 | "cnr_id": "Mojie-API-Party",
222 | "ver": "5f88d79db064fced6dce5b6dafb42aa836b81c60",
223 | "Node name for S&R": "MoterPoseNode"
224 | },
225 | "widgets_values": [
226 | true,
227 | 1,
228 | 1866,
229 | "randomize"
230 | ]
231 | },
232 | {
233 | "id": 31,
234 | "type": "SaveImage",
235 | "pos": [
236 | 1834.437744140625,
237 | 489.2027893066406
238 | ],
239 | "size": [
240 | 561.5023193359375,
241 | 787.56103515625
242 | ],
243 | "flags": {},
244 | "order": 9,
245 | "mode": 0,
246 | "inputs": [
247 | {
248 | "name": "images",
249 | "type": "IMAGE",
250 | "link": 22
251 | }
252 | ],
253 | "outputs": [],
254 | "properties": {
255 | "cnr_id": "comfy-core",
256 | "ver": "0.3.51"
257 | },
258 | "widgets_values": [
259 | "ComfyUI"
260 | ]
261 | },
262 | {
263 | "id": 30,
264 | "type": "SaveImage",
265 | "pos": [
266 | 2440.73095703125,
267 | 486.9068908691406
268 | ],
269 | "size": [
270 | 597.9583740234375,
271 | 790.7820434570312
272 | ],
273 | "flags": {},
274 | "order": 10,
275 | "mode": 0,
276 | "inputs": [
277 | {
278 | "name": "images",
279 | "type": "IMAGE",
280 | "link": 21
281 | }
282 | ],
283 | "outputs": [],
284 | "properties": {
285 | "cnr_id": "comfy-core",
286 | "ver": "0.3.51"
287 | },
288 | "widgets_values": [
289 | "ComfyUI"
290 | ]
291 | },
292 | {
293 | "id": 13,
294 | "type": "MarkdownNote",
295 | "pos": [
296 | -105.657958984375,
297 | 186.6623992919922
298 | ],
299 | "size": [
300 | 276.3636474609375,
301 | 421.98345947265625
302 | ],
303 | "flags": {},
304 | "order": 1,
305 | "mode": 0,
306 | "inputs": [],
307 | "outputs": [],
308 | "properties": {},
309 | "widgets_values": [
310 | "##### 服装模特生成(组图)\n- 左侧上传服装和人脸。\n- 生成第一张后会根据图片修改人物姿势形成组图。\n\n"
311 | ],
312 | "color": "#432",
313 | "bgcolor": "#653"
314 | },
315 | {
316 | "id": 4,
317 | "type": "LoadImage",
318 | "pos": [
319 | 216.3179473876953,
320 | 704.7265625
321 | ],
322 | "size": [
323 | 286.344970703125,
324 | 326
325 | ],
326 | "flags": {},
327 | "order": 2,
328 | "mode": 0,
329 | "inputs": [],
330 | "outputs": [
331 | {
332 | "name": "IMAGE",
333 | "type": "IMAGE",
334 | "links": [
335 | 2
336 | ]
337 | },
338 | {
339 | "name": "MASK",
340 | "type": "MASK",
341 | "links": null
342 | }
343 | ],
344 | "properties": {
345 | "cnr_id": "comfy-core",
346 | "ver": "0.3.51",
347 | "Node name for S&R": "LoadImage"
348 | },
349 | "widgets_values": [
350 | "Asian (10).png",
351 | "image"
352 | ]
353 | },
354 | {
355 | "id": 2,
356 | "type": "ModelGenNode",
357 | "pos": [
358 | 539.6621704101562,
359 | 223.85621643066406
360 | ],
361 | "size": [
362 | 270,
363 | 174
364 | ],
365 | "flags": {},
366 | "order": 3,
367 | "mode": 0,
368 | "inputs": [
369 | {
370 | "name": "cloths_image",
371 | "type": "IMAGE",
372 | "link": 1
373 | },
374 | {
375 | "name": "face_image",
376 | "shape": 7,
377 | "type": "IMAGE",
378 | "link": 2
379 | }
380 | ],
381 | "outputs": [
382 | {
383 | "name": "output",
384 | "type": "IMAGE",
385 | "links": [
386 | 4,
387 | 15,
388 | 18,
389 | 20
390 | ]
391 | }
392 | ],
393 | "properties": {
394 | "cnr_id": "Mojie-API-Party",
395 | "ver": "5f88d79db064fced6dce5b6dafb42aa836b81c60",
396 | "Node name for S&R": "ModelGenNode"
397 | },
398 | "widgets_values": [
399 | "亚裔",
400 | "woman",
401 | "清新室内风",
402 | 775,
403 | "randomize"
404 | ]
405 | }
406 | ],
407 | "links": [
408 | [
409 | 1,
410 | 3,
411 | 0,
412 | 2,
413 | 0,
414 | "IMAGE"
415 | ],
416 | [
417 | 2,
418 | 4,
419 | 0,
420 | 2,
421 | 1,
422 | "IMAGE"
423 | ],
424 | [
425 | 4,
426 | 2,
427 | 0,
428 | 6,
429 | 0,
430 | "IMAGE"
431 | ],
432 | [
433 | 15,
434 | 2,
435 | 0,
436 | 15,
437 | 0,
438 | "IMAGE"
439 | ],
440 | [
441 | 17,
442 | 15,
443 | 0,
444 | 26,
445 | 0,
446 | "IMAGE"
447 | ],
448 | [
449 | 18,
450 | 2,
451 | 0,
452 | 27,
453 | 0,
454 | "IMAGE"
455 | ],
456 | [
457 | 20,
458 | 2,
459 | 0,
460 | 29,
461 | 0,
462 | "IMAGE"
463 | ],
464 | [
465 | 21,
466 | 29,
467 | 0,
468 | 30,
469 | 0,
470 | "IMAGE"
471 | ],
472 | [
473 | 22,
474 | 27,
475 | 0,
476 | 31,
477 | 0,
478 | "IMAGE"
479 | ]
480 | ],
481 | "groups": [
482 | {
483 | "id": 1,
484 | "title": "上传人脸",
485 | "bounding": [
486 | 220.0405731201172,
487 | 628.464599609375,
488 | 289.97900390625,
489 | 420.2480773925781
490 | ],
491 | "color": "#a1309b",
492 | "font_size": 24,
493 | "flags": {
494 | "pinned": true
495 | }
496 | },
497 | {
498 | "id": 2,
499 | "title": "上传服装",
500 | "bounding": [
501 | 219.8437042236328,
502 | 151.0934600830078,
503 | 286.3636474609375,
504 | 471.2363586425781
505 | ],
506 | "color": "#8A8",
507 | "font_size": 24,
508 | "flags": {
509 | "pinned": true
510 | }
511 | },
512 | {
513 | "id": 3,
514 | "title": "服装模特生成",
515 | "bounding": [
516 | 529.6621704101562,
517 | 150.25621032714844,
518 | 2519.02734375,
519 | 1137.4327392578125
520 | ],
521 | "color": "#3f789e",
522 | "font_size": 24,
523 | "flags": {}
524 | }
525 | ],
526 | "config": {},
527 | "extra": {
528 | "ds": {
529 | "scale": 0.5644739300537776,
530 | "offset": [
531 | 87.39248180534989,
532 | 4.0531302245717615
533 | ]
534 | },
535 | "frontendVersion": "1.25.9"
536 | },
537 | "version": 0.4
538 | }
--------------------------------------------------------------------------------