Showing preview only (2,228K chars total). Download the full file or copy to clipboard to get everything.
Repository: bobvinch/comfy-server
Branch: master
Commit: 137cfdd59a16
Files: 89
Total size: 2.1 MB
Directory structure:
gitextract_m15fhcc9/
├── .eslintrc.js
├── .gitignore
├── .prettierrc
├── .run/
│ └── Comfy-server.run.xml
├── Dockerfile
├── README.md
├── docker-compose.yml.example
├── init.sql
├── nest-cli.json
├── package.json
├── pm2.config.js
├── src/
│ ├── app.controller.ts
│ ├── app.module.ts
│ ├── app.service.ts
│ ├── auth/
│ │ ├── auth.controller.ts
│ │ ├── auth.guard.ts
│ │ ├── auth.module.ts
│ │ ├── auth.service.ts
│ │ └── constants.ts
│ ├── cache/
│ │ ├── cache.controller.ts
│ │ ├── cache.module.ts
│ │ └── cache.service.ts
│ ├── draw/
│ │ ├── DrawCosumer.ts
│ │ ├── data/
│ │ │ ├── AImodel_api.json
│ │ │ ├── DrawConfig.ts
│ │ │ ├── aistudio_api.json
│ │ │ ├── api_matting.json
│ │ │ ├── api_removebg.json
│ │ │ ├── api_upscale.json
│ │ │ ├── api_upscale_detailfix.json
│ │ │ ├── api_wechat_img2imgi.json
│ │ │ ├── impaiting_api.json
│ │ │ ├── objectInfo.json
│ │ │ ├── test.json
│ │ │ ├── text2imgapi.json
│ │ │ ├── workflow_api_faceswap.ts
│ │ │ ├── workflow_api_hdfix_4.ts
│ │ │ ├── workflow_api_image2img.json
│ │ │ ├── workflow_api_image2img.ts
│ │ │ ├── workflow_api_img2video.json
│ │ │ ├── workflow_api_img2video.ts
│ │ │ ├── workflow_api_inpainting.json
│ │ │ ├── workflow_api_inpainting.ts
│ │ │ ├── workflow_api_matting.json
│ │ │ ├── workflow_api_matting.ts
│ │ │ ├── workflow_api_model.ts
│ │ │ ├── workflow_api_removebg.json
│ │ │ ├── workflow_api_removebg.ts
│ │ │ ├── workflow_api_tagger.ts
│ │ │ ├── workflow_api_text2img.json
│ │ │ └── workflow_api_text2img.ts
│ │ ├── draw.controller.ts
│ │ ├── draw.module.ts
│ │ └── draw.service.ts
│ ├── file/
│ │ ├── file.controller.ts
│ │ ├── file.module.ts
│ │ └── file.service.ts
│ ├── main.ts
│ ├── middleware/
│ │ └── XML.middleware.ts
│ ├── oneapi/
│ │ ├── tokens/
│ │ │ ├── dto/
│ │ │ │ ├── create-token.dto.ts
│ │ │ │ └── update-token.dto.ts
│ │ │ ├── entities/
│ │ │ │ └── token.entity.ts
│ │ │ ├── tokens.controller.ts
│ │ │ ├── tokens.module.ts
│ │ │ └── tokens.service.ts
│ │ └── users/
│ │ ├── dto/
│ │ │ ├── create-user.dto.ts
│ │ │ └── update-user.dto.ts
│ │ ├── entities/
│ │ │ └── user.entity.ts
│ │ ├── users.controller.ts
│ │ ├── users.module.ts
│ │ └── users.service.ts
│ ├── tweet/
│ │ ├── dto/
│ │ │ ├── create-tweet.dto.ts
│ │ │ └── update-tweet.dto.ts
│ │ ├── entities/
│ │ │ └── tweet.schema.ts
│ │ ├── tweet.controller.ts
│ │ ├── tweet.module.ts
│ │ └── tweet.service.ts
│ ├── users/
│ │ ├── dto/
│ │ │ ├── create-user.dto.ts
│ │ │ └── update-user.dto.ts
│ │ ├── schema/
│ │ │ └── user.schema.ts
│ │ ├── users.controller.ts
│ │ ├── users.module.ts
│ │ └── users.service.ts
│ ├── wechat-auth/
│ │ ├── wechat-auth.controller.ts
│ │ ├── wechat-auth.module.ts
│ │ └── wechat-auth.service.ts
│ └── ws/
│ └── ws.gateway.ts
├── tsconfig.build.json
└── tsconfig.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .eslintrc.js
================================================
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
project: 'tsconfig.json',
tsconfigRootDir: __dirname,
sourceType: 'module',
},
plugins: ['@typescript-eslint/eslint-plugin'],
extends: [
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
],
root: true,
env: {
node: true,
jest: true,
},
ignorePatterns: ['.eslintrc.js'],
rules: {
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
"prettier/prettier": ["error", { "endOfLine": "auto" }]
},
};
================================================
FILE: .gitignore
================================================
# compiled output
/dist
/node_modules
# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
# OS
.DS_Store
# Tests
/coverage
/.nyc_output
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
#配置文件
docker-compose.yml
.env.development
.env.production
temp.png
================================================
FILE: .prettierrc
================================================
{
"singleQuote": true,
"trailingComma": "all",
"endOfline":"auto"
}
================================================
FILE: .run/Comfy-server.run.xml
================================================
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Comfy-server" type="docker-deploy" factoryName="docker-image" server-name="Docker">
<deployment type="docker-image">
<settings>
<option name="imageTag" value="node20.12.1_runtime-stage:latest" />
<option name="containerName" value="comfy-server" />
<option name="envVars">
<list>
<DockerEnvVarImpl>
<option name="name" value="CONFIG_COMFYUI_QUENE_REDIS_HOST" />
<option name="value" value="172.17.0.4" />
</DockerEnvVarImpl>
<DockerEnvVarImpl>
<option name="name" value="CONFIG_COMFYUI_QUENE_REDIS_PASSWORD" />
<option name="value" value="" />
</DockerEnvVarImpl>
<DockerEnvVarImpl>
<option name="name" value="CONFIG_COMFYUI_QUENE_REDIS_PORT" />
<option name="value" value="6379" />
</DockerEnvVarImpl>
<DockerEnvVarImpl>
<option name="name" value="CONFIG_COMFYUI_SERVER_URL" />
<option name="value" value="http://172.17.0.0:8188" />
</DockerEnvVarImpl>
<DockerEnvVarImpl>
<option name="name" value="CONFIG_DB_MONGO_PASSWORD" />
<option name="value" value="password" />
</DockerEnvVarImpl>
<DockerEnvVarImpl>
<option name="name" value="CONFIG_DB_MONGO_URI" />
<option name="value" value="mongodb://172.17.0.3:27017" />
</DockerEnvVarImpl>
<DockerEnvVarImpl>
<option name="name" value="CONFIG_DB_MONGO_USERNAME" />
<option name="value" value="username" />
</DockerEnvVarImpl>
<DockerEnvVarImpl>
<option name="name" value="ONEAPI_MYSQL_DATABASE" />
<option name="value" value="oneapi" />
</DockerEnvVarImpl>
<DockerEnvVarImpl>
<option name="name" value="ONEAPI_MYSQL_HOST" />
<option name="value" value="172.17.0.2" />
</DockerEnvVarImpl>
<DockerEnvVarImpl>
<option name="name" value="ONEAPI_MYSQL_PASSWORD" />
<option name="value" value="wangbo123" />
</DockerEnvVarImpl>
<DockerEnvVarImpl>
<option name="name" value="ONEAPI_MYSQL_USERNAME" />
<option name="value" value="root" />
</DockerEnvVarImpl>
</list>
</option>
</settings>
</deployment>
<method v="2" />
</configuration>
</component>
================================================
FILE: Dockerfile
================================================
# 第二阶段
FROM node:20.12.1 AS runtime-stage
#2、作者
MAINTAINER bobovinch
# 创建工作目录
RUN mkdir -p /app
WORKDIR /app
# 复制构建阶段生成的输出到运行时阶段
COPY ./dist /app/dist
COPY ./dist /app/dist
#COPY ./node_modules /app/node_modules
COPY ./package.json /app/
COPY ./.env.* /app/
RUN npm install --force
# 设置环境变量
ENV NODE_ENV=production
ENV CONFIG_COMFYUI_QUENE_REDIS_HOST=172.17.0.4
ENV CONFIG_COMFYUI_QUENE_REDIS_PORT=6379
ENV CONFIG_COMFYUI_SERVER_URL=http://127.0.0.1:8188
# 暴露端口
EXPOSE 3001
EXPOSE 3002
# 设置入口点为启动脚本
ENTRYPOINT ["npm", "run", "start:prod"]
================================================
FILE: README.md
================================================
<p align="center">
<a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" alt="Nest Logo" /></a>
</p>
[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456
[circleci-url]: https://circleci.com/gh/nestjs/nest
<p align="center">A progressive <a href="http://nodejs.org" target="_blank">Node.js</a> framework for building efficient and scalable server-side applications.</p>
<p align="center">
<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/v/@nestjs/core.svg" alt="NPM Version" /></a>
<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/l/@nestjs/core.svg" alt="Package License" /></a>
<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/dm/@nestjs/common.svg" alt="NPM Downloads" /></a>
<a href="https://circleci.com/gh/nestjs/nest" target="_blank"><img src="https://img.shields.io/circleci/build/github/nestjs/nest/master" alt="CircleCI" /></a>
<a href="https://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></a>
<a href="https://discord.gg/G7Qnnhy" target="_blank"><img src="https://img.shields.io/badge/discord-online-brightgreen.svg" alt="Discord"/></a>
<a href="https://opencollective.com/nest#backer" target="_blank"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a>
<a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a>
<a href="https://paypal.me/kamilmysliwiec" target="_blank"><img src="https://img.shields.io/badge/Donate-PayPal-ff3f59.svg"/></a>
<a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://img.shields.io/badge/Support%20us-Open%20Collective-41B883.svg" alt="Support us"></a>
<a href="https://twitter.com/nestframework" target="_blank"><img src="https://img.shields.io/twitter/follow/nestframework.svg?style=social&label=Follow"></a>
</p>
<!--[](https://opencollective.com/nest#backer)
[](https://opencollective.com/nest#sponsor)-->
## Description
<p align="center">
<img src="https://wangbo0808.oss-cn-shanghai.aliyuncs.com/assets/hear.png" width="100%" alt="function description" />
</p>
<p align="center">
<img src="https://wangbo0808.oss-cn-shanghai.aliyuncs.com/assets/api%20descrption.png" width="100%" alt="function description" />
</p>
<p align="center">
<img src="https://wangbo0808.oss-cn-shanghai.aliyuncs.com/assets/response.png" width="100%" alt="function description" />
</p>
## 开始使用前必读!!!!
开始使用前请先安装redis,并配置.env .end.development .env.production环境变量中密码,如果有的话,没有密码则将密码配置删除
然后检查环境变量中ComfyUI的http路径和websocket路径
## 功能介绍
<p>0502更新,修复Redis相关问题,增加容器一键部署方式</p>
<p>最新0411更新,重大更新,增加大量商业化能力,运营AI绘画商业网站必备后台服务器</p>
<p>核心功能1:ComfyUI的绘画API服务和websocket转发,客户端必须使用socketIO链接,WS无法连接,注意版本</p>
<p>核心功能2:方便将任意comfyui工作转换为在线API,向外提供AI能力</p>
<p>ComfyUI server之间可以共享AI绘画能力</p>
<p>天然支持利用nginx直接实现负载均衡</p>
<p>增加注册,登录,微信登录,鉴权,黑名单等常用运营功能</p>
<p>支持任务队列,支持API提交任务的时候指定队列</p>
<p>支持黑名单管理</p>
<p>一键接入微信公众号,并且支持利用别人的API接入微信绘画,支持多轮指令记忆,能够区分绘画指令和提示词</p>
## 如何使用
<p>☆推荐使用docker-compose一键部署</p>
<p>1.下载docker-compose.yml.example和init.sql两个文件到一个文件夹中</p>
<p>2.取消.example后缀,修改docker-compose.yml中环境变量,主要修改ComfyUI的服务器地址和端口</p>
<p>3.运行:docker-compose pull拉取镜像</p>
<p>4.拉取完成后,运行docker-compose up -d启动容器</p>
<p>5.打开127.0.0.3001/api-docs可以访问API地址和进行在线API调试</p>
开发部署方式
<p>1.先按照如下如下方式启动服务器</p>
<p>2.客户端通过socketIO链接服务器,默认为3002端口,如果冲突在src/ws/ws.gateway.ts中修改</p>
<p>3.以websocket消息形式提交,提交绘画任务,事件名称为draw,消息格式:{client_id:"userid", prompt:"comfyui API", api:"define a API name" }</p>
<p>4、使用微信公众号绘画功能需要配置APPID和Secret</p>
教程地址:https://www.bilibili.com/video/BV1AE42137Gn?t=40.6
## Installation
```bash
$ npm install
```
## Running the app
```bash
# development
$ npm run start
# watch mode
$ npm run start:dev
# production mode
$ npm run start:prod
```
## Test
```bash
# unit tests
$ npm run test
# e2e tests
$ npm run test:e2e
# test coverage
$ npm run test:cov
```
## Support
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).
## Stay in touch
- Author - [Kamil Myśliwiec](https://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)
## License
Nest is [MIT licensed](LICENSE).
================================================
FILE: docker-compose.yml.example
================================================
# 非 host 版本, 不使用本机代理
# (不懂 Docker 的,只需要关心 OPENAI_BASE_URL 和 CHAT_API_KEY 即可!)
version: '3'
services:
comfy-server:
container_name: comfy-server
#image: ghcr.io/labring/fastgpt:latest # git
image: registry.cn-shanghai.aliyuncs.com/comfy-ai/comfy-server:latest # 阿里云
ports:
- "3001:3001" #http端口
- "3002:3002" #websocket端口
networks:
comfyai:
ipv4_address: 172.20.0.6
depends_on:
- mysql
- mongo
- redis
restart: always
environment:
# 必须!!重要配置!!!- Comfy UI服务器地址,注意不能是127.0.0.1,容器内无法访问,查看网络获取
- CONFIG_COMFYUI_SERVER_URL=http://192.168.0.107:8188
# 必须配置,MongoDB配置,用户管理
- CONFIG_DB_MONGO_URI=mongodb://172.20.0.3:27017
- CONFIG_DB_MONGO_USERNAME=username
- CONFIG_DB_MONGO_PASSWORD=password
# 必须配置,Redis配置,队列缓存
- CONFIG_COMFYUI_QUENE_REDIS_HOST=172.20.0.4
- CONFIG_COMFYUI_QUENE_REDIS_PORT=6379
- CONFIG_COMFYUI_QUENE_REDIS_PASSWORD=
#必须配置,大模型ONEAPI数据库配置
- ONEAPI_MYSQL_HOST=172.20.0.2
- ONEAPI_MYSQL_USERNAME=root
- ONEAPI_MYSQL_PASSWORD=test123
- ONEAPI_MYSQL_DATABASE=oneapi
#可选配置,微信开放平台,微信登录功能
- CONFIG_AUTH_WECHAT_APPID=
- CONFIG_AUTH_WECHAT_SECRET=
#可选配置,公众号配置,实现公众号绘图配置这里
- CONFIG_OFFICIAL_WECHAT_APPID=
- CONFIG_OFFICIAL_WECHAT_SECRET=
#可选配置,使用阿里云OSS存储绘画结果,OSS配置,如果需要将绘画的图片上传到阿里云oss,则配置这里
- OSS_REGION=
- OSS_ACCESSKEYID=
- OSS_ACCESSKEYSECRET=
- OSS_BUCKET=
#SD3 key,使用SD3 需要配置
- CONFIG_SD3_APIKEY=
#可选配置,接别人的Comfy-server API
- CONFIG_COMFYUI_SERVER_REMOTE_URL=
- CONFIG_COMFUI_SERVER_REMOTE_AUTH_USERNAME=
- CONFIG_COMFUI_SERVER_REMOTE_AUTH_PASSWORD=
# 使用大预言模型的后端接口
oneapi:
image: justsong/one-api
container_name: oneapi-mysql
restart: always
ports:
- "3000:3000"
networks:
comfyai:
ipv4_address: 172.20.0.5
depends_on:
- mysql
environment:
- SQL_DSN=root:test123@tcp(172.20.0.2:3306)/oneapi
- TZ=Asia/Shanghai
mongo:
image: registry.cn-shanghai.aliyuncs.com/comfy-ai/mongo-aliyun:latest
container_name: mongo
restart: always
# 生产环境建议不要暴露
ports:
- "27017:27017"
networks:
comfyai:
ipv4_address: 172.20.0.3
environment:
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
- MONGO_INITDB_ROOT_USERNAME=username
- MONGO_INITDB_ROOT_PASSWORD=password
volumes:
- /usr/mongo/data:/data/db
# 大预言模型数据库
mysql:
image: registry.cn-shanghai.aliyuncs.com/comfy-ai/mysql-aliyun:latest
container_name: mysql
restart: always
ports:
- "3306:3306"
networks:
comfyai:
ipv4_address: 172.20.0.2
environment:
- MYSQL_ROOT_PASSWORD=test123
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
- /usr/mysql/log:/var/log/mysql
- /usr/mysql/data:/var/lib/mysql
- /usr/mysql/conf:/etc/mysql/conf.d
# command: bash -c "mysqld --init-file=/docker-entrypoint-initdb.d/init.sql"
redis:
image: redis:latest
container_name: redis
restart: always
ports:
- "6379:6379"
networks:
comfyai:
ipv4_address: 172.20.0.4
networks:
comfyai:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
gateway: 172.20.0.1
================================================
FILE: init.sql
================================================
CREATE DATABASE oneapi;
================================================
FILE: nest-cli.json
================================================
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"deleteOutDir": true
}
}
================================================
FILE: package.json
================================================
{
"name": "myserver",
"version": "0.0.1",
"description": "<p align=\"center\">\r <a href=\"http://nestjs.com/\" target=\"blank\"><img src=\"https://nestjs.com/img/logo-small.svg\" width=\"200\" alt=\"Nest Logo\" /></a>\r </p>",
"author": "",
"private": true,
"license": "UNLICENSED",
"scripts": {
"build": "cross-env NODE_ENV=production nest build",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
"start": "cross-env NODE_ENV=production nest start",
"start:dev": "cross-env NODE_ENV=development nest start --watch",
"start:debug": "cross-env NODE_ENV=development nest start --debug --watch",
"start:prod": "node dist/main",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
},
"dependencies": {
"@nestjs-modules/ioredis": "^2.0.2",
"@nestjs/bull": "^10.0.1",
"@nestjs/common": "^10.3.6",
"@nestjs/config": "^3.2.0",
"@nestjs/core": "^10.3.6",
"@nestjs/jwt": "^10.2.0",
"@nestjs/mapped-types": "*",
"@nestjs/mongoose": "^10.0.4",
"@nestjs/platform-express": "^10.0.0",
"@nestjs/platform-socket.io": "^10.3.1",
"@nestjs/schedule": "^4.0.1",
"@nestjs/swagger": "^7.3.0",
"@nestjs/typeorm": "^10.0.2",
"@nestjs/websockets": "^10.3.1",
"@types/ali-oss": "^6.16.11",
"@types/socket.io": "^3.0.2",
"@types/socket.io-client": "^3.0.0",
"ali-oss": "^6.20.0",
"axios": "^1.6.7",
"bcrypt": "^5.1.1",
"bull": "^4.12.2",
"cross-env": "^7.0.3",
"fast-xml-parser": "^4.3.6",
"ioredis": "^5.4.1",
"mongoose": "^8.1.3",
"mysql2": "^3.9.1",
"nanoid": "^3.0.0",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.8.1",
"socket.io": "^4.7.4",
"socket.io-client": "^4.7.4",
"typeorm": "^0.3.20",
"ws": "^8.16.0",
"xml2js": "^0.6.2",
"xmlbuilder2": "^3.1.1"
},
"devDependencies": {
"@nestjs/cli": "^10.0.0",
"@nestjs/schematics": "^10.0.0",
"@nestjs/testing": "^10.0.0",
"@types/bcrypt": "^5.0.2",
"@types/bull": "^4.10.0",
"@types/express": "^4.17.21",
"@types/jest": "^29.5.2",
"@types/node": "^20.3.1",
"@types/supertest": "^6.0.0",
"@types/ws": "^8.5.10",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"eslint": "^8.42.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-prettier": "^5.0.0",
"jest": "^29.5.0",
"prettier": "^3.0.0",
"source-map-support": "^0.5.21",
"supertest": "^6.3.3",
"ts-jest": "^29.1.0",
"ts-loader": "^9.4.3",
"ts-node": "^10.9.1",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.1.3"
},
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"testRegex": ".*\\.spec\\.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"collectCoverageFrom": [
"**/*.(t|j)s"
],
"coverageDirectory": "../coverage",
"testEnvironment": "node"
},
"main": ".eslintrc.js"
}
================================================
FILE: pm2.config.js
================================================
/**
* this is a pm2 starter config file
* @type {{apps: [{watch: boolean, name: string, env: {NODE_ENV: string}, script: string}]}}
*/
module.exports = {
apps: [
{
name: 'comfy-server',
script: './dist/main.js',
watch: true,
env: {
NODE_ENV: 'production',
},
},
],
};
================================================
FILE: src/app.controller.ts
================================================
import { Controller, Get, Inject } from '@nestjs/common';
import { AppService } from './app.service';
import { DrawService } from './draw/draw.service';
@Controller()
export class AppController {
constructor(
private readonly appService: AppService,
private readonly drawService: DrawService,
) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
@Get('test')
test(): string {
return process.env.REDIS_HOST;
}
}
================================================
FILE: src/app.module.ts
================================================
import {
MiddlewareConsumer,
Module,
NestModule,
RequestMethod,
} from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { WsGateway } from './ws/ws.gateway';
import { DrawConsumer } from './draw/DrawCosumer';
import { ConfigModule } from '@nestjs/config';
//链接mongodb
import { MongooseModule } from '@nestjs/mongoose';
//链接mysql
import { TypeOrmModule } from '@nestjs/typeorm';
import { OneAPIUsersModule } from 'src/oneapi/users/users.module';
import { TokensModule } from './oneapi/tokens/tokens.module';
import { ConfigService } from '@nestjs/config/dist';
//定时任务
import { WechatAuthModule } from './wechat-auth/wechat-auth.module';
import { XMLMiddleware } from './middleware/XML.middleware';
import { DrawModule } from './draw/draw.module';
import { UsersModule } from './users/users.module';
import { AuthModule } from './auth/auth.module';
import { CacheModule } from './cache/cache.module';
import { FileModule } from './file/file.module';
import { TweetModule } from './tweet/tweet.module';
//'mongodb://username:password@localhost:27017/nest'
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: [`.env.${process.env.NODE_ENV}`],
}),
//OneAPI数据库,如果不启动ONEAPI的大模型,删除此处的模块引入和oneapi模块
TypeOrmModule.forRootAsync({
useFactory: (config: ConfigService) => ({
type: 'mysql',
host: config.get('ONEAPI_MYSQL_HOST'),
port: config.get('ONEAPI_MYSQL_PORT'),
username: config.get('ONEAPI_MYSQL_USERNAME'),
password: config.get('ONEAPI_MYSQL_PASSWORD'),
database: config.get('ONEAPI_MYSQL_DATABASE'),
// entities: [User],
autoLoadEntities: true,
synchronize: false, //是否同步,正式环境设置为false
}),
inject: [ConfigService],
}),
MongooseModule.forRootAsync({
useFactory: (config: ConfigService) => ({
uri: config.get('CONFIG_DB_MONGO_URI'),
user: config.get('CONFIG_DB_MONGO_USERNAME'),
pass: config.get('CONFIG_DB_MONGO_PASSWORD'),
dbName: 'aidraw',
}),
inject: [ConfigService],
}),
WechatAuthModule,
OneAPIUsersModule,
TokensModule,
DrawModule,
ConfigModule,
UsersModule,
AuthModule,
CacheModule,
FileModule,
TweetModule,
],
controllers: [AppController],
providers: [AppService, WsGateway, DrawConsumer],
})
/**
* 注册中间件,微信消息处理中间件
*/
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(XMLMiddleware).forRoutes({
path: 'wechatauth/handleMessage',
method: RequestMethod.POST,
});
}
}
================================================
FILE: src/app.service.ts
================================================
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
// 是否启用保存绘画历史记录
public Draw_SaveHistory = false;
getHello(): string {
return 'Welcome to my comfyui server'.toUpperCase();
}
}
================================================
FILE: src/auth/auth.controller.ts
================================================
import { AuthService } from './auth.service';
import {
Get,
Query,
Body,
Controller,
Post,
HttpCode,
HttpStatus,
} from '@nestjs/common';
import { ApiOperation } from '@nestjs/swagger';
@Controller('auth')
export class AuthController {
constructor(private authService: AuthService) {}
@ApiOperation({
summary: '鉴权',
description: 'Sign in with username and password,returning a token',
parameters: [
{
name: 'username',
in: 'query',
required: true,
description: 'username',
schema: {
type: 'string',
},
},
{
name: 'password',
in: 'query',
required: true,
description: 'password',
schema: {
type: 'string',
},
},
],
})
@HttpCode(HttpStatus.OK)
@Get('signin')
signIn(
@Query('username') username: string,
@Query('password') password: string,
) {
return this.authService.authToken(username, password);
}
}
================================================
FILE: src/auth/auth.guard.ts
================================================
import {
CanActivate,
ExecutionContext,
Injectable,
UnauthorizedException,
} from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { jwtConstants } from './constants';
import { Request } from 'express';
/**
* 🔒 This guard is used to protect routes that require authentication.
* It will check if the user is authenticated and if so, it will attach the user's payload to the request object.
* If the user is not authenticated, it will throw an UnauthorizedException.
*
*/
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private jwtService: JwtService) {}
async canActivate(context: ExecutionContext): Promise<boolean> {
const request = context.switchToHttp().getRequest();
const token = this.extractTokenFromHeader(request);
if (!token) {
throw new UnauthorizedException();
}
try {
// 💡 We're assigning the payload to the request object here
// so that we can access it in our route handlers
request['user'] = await this.jwtService.verifyAsync(token, {
secret: jwtConstants.secret,
});
} catch {
throw new UnauthorizedException();
}
return true;
}
private extractTokenFromHeader(request: Request): string | undefined {
const [type, token] = request.headers.authorization?.split(' ') ?? [];
return type === 'Bearer' ? token : undefined;
}
}
================================================
FILE: src/auth/auth.module.ts
================================================
import { Module } from '@nestjs/common';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { UsersModule } from '../users/users.module';
import { JwtModule } from '@nestjs/jwt';
import { jwtConstants } from './constants';
@Module({
imports: [
UsersModule,
JwtModule.register({
global: true,
secret: jwtConstants.secret,
signOptions: { expiresIn: '300s' },
}),
],
controllers: [AuthController],
providers: [AuthService],
exports: [AuthService],
})
export class AuthModule {}
================================================
FILE: src/auth/auth.service.ts
================================================
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { UsersService } from '../users/users.service';
import { JwtService } from '@nestjs/jwt';
@Injectable()
export class AuthService {
constructor(
private usersService: UsersService,
private jwtService: JwtService,
) {}
async authToken(username: string, pass: string): Promise<any> {
const user = await this.usersService.findByUsername(username);
if (
!user ||
!(await this.usersService.comparePassword(pass, user?.password))
) {
throw new UnauthorizedException();
}
return {
access_token: await this.usersService.createToken(
user._id + '',
user.username,
),
};
}
}
================================================
FILE: src/auth/constants.ts
================================================
export const jwtConstants = {
secret: 'this is a very secret secret',
};
================================================
FILE: src/cache/cache.controller.ts
================================================
import { Controller } from '@nestjs/common';
import { CacheService } from './cache.service';
@Controller('cache')
export class CacheController {
constructor(private readonly cacheService: CacheService) {}
}
================================================
FILE: src/cache/cache.module.ts
================================================
import { Module, Global } from '@nestjs/common';
import { CacheService } from './cache.service';
import { CacheController } from './cache.controller';
import { ConfigService } from '@nestjs/config';
import { RedisModule } from '@nestjs-modules/ioredis';
@Global()
@Module({
imports: [
RedisModule.forRootAsync({
useFactory: (config: ConfigService) => ({
type: 'single',
url: `redis://${config.get('CONFIG_COMFYUI_QUENE_REDIS_HOST')}:${config.get('CONFIG_COMFYUI_QUENE_REDIS_PORT')}`,
options: {
password: config.get('CONFIG_COMFYUI_QUENE_REDIS_PASSWORD'),
},
}),
inject: [ConfigService],
}),
],
providers: [CacheService],
exports: [CacheService],
})
export class CacheModule {}
================================================
FILE: src/cache/cache.service.ts
================================================
import { Injectable } from '@nestjs/common';
import Redis from 'ioredis';
import { ConfigService } from '@nestjs/config';
import { InjectRedis } from '@nestjs-modules/ioredis';
@Injectable()
export class CacheService {
// private redisClient: Redis;
constructor(
private readonly configService: ConfigService,
@InjectRedis() private readonly redis: Redis,
// private readonly redisService: RedisService,
) {
console.log('环境变量', this.configService);
// this.redisClient = this.redisService.getClient();
}
async root(): Promise<boolean> {
// this.redisClient = await this.redisService.getClient();
return true;
}
//获取值
async get(key: string): Promise<any> {
let value = await this.redis.get(key);
try {
value = JSON.parse(value);
} catch (error) {}
return value;
}
/**
* 设置值
* @param key {string} key
* @param value 值
* @param second 过期时间 秒
* @returns Promise<any>
*/
async set(key: string, value: any, second?: number) {
value = JSON.stringify(value);
return this.redis.set(key, value);
}
//删除值
async del(key: string) {
return this.redis.del(key);
}
//清除缓存
async flushall() {
return this.redis.flushall();
}
}
================================================
FILE: src/draw/DrawCosumer.ts
================================================
import {
Process,
Processor,
OnQueueActive,
OnQueueCompleted,
} from '@nestjs/bull';
import { Job } from 'bull';
import { WsGateway } from 'src/ws/ws.gateway';
import { Logger } from '@nestjs/common';
import { DrawService } from './draw.service';
import { WechatAuthService } from '../wechat-auth/wechat-auth.service';
import { AppService } from '../app.service';
import Websocket = require('ws');
@Processor('draw')
export class DrawConsumer {
constructor(
private readonly drawService: DrawService,
private readonly wechatauthService: WechatAuthService,
private readonly appSevice: AppService,
) {}
private readonly logger = new Logger(DrawConsumer.name);
private readonly clientId = 'admin9527'; //id可以随意
public ws_client: Websocket;
@Process('drawtask')
async drawtask(job: Job): Promise<string> {
// const output = await this.testTask(); //测试
// 绘画任务
const output = await this.drawTaskExcu(job, this.drawService.local_comfyui);
// this.logger.debug(`任务完成,${job.id}`);
//广播给所有人排队情况
const message = {
type: 'receive',
queue_remaining: await this.drawService.getQueueLength(),
};
WsGateway.server.emit('message', JSON.stringify(message));
return output + '';
}
/**
*
* @param job
* @param server_url
*/
async drawTaskExcu(job: Job, server_url: string) {
return new Promise(async (resolve, reject) => {
//client_id为用户id
// this.logger.debug(
// `初始化websocket链接的结构${await this.websocketInit()}`,
// );
if (!(await this.websocketInit(server_url))) {
reject({ status: 'error', data: job.data });
return;
}
const {
data: { source, client_id, prompt, socket_id, api },
} = job;
const params = {
client_id: this.clientId, //固定值
prompt: prompt,
};
const response = await this.drawService.sendTackprompt(
server_url,
params,
);
this.logger.debug(`发送绘画任务后的响应${response}`);
if (response) {
//将获取到的任务id保存到data中 方便后续在websocket失效的情况下也能取回绘画结果
job.data.prompt_id = response;
//将数据重新存给job
await job.update(job.data);
//监听服务器消息
this.logger.debug(`发送绘画任务成功`);
this.ws_client.onmessage = async (event: any) => {
//转发
this.logger.debug(event.data);
//如果存在并且socket处于连接状态
const target_socket =
WsGateway.server.sockets?.sockets?.get(socket_id);
if (target_socket) {
this.logger.debug(`发送给${socket_id},${event.data}`);
target_socket.emit('message', event.data);
}
try {
const { type, data } = JSON.parse(event.data + '');
if (type === 'execution_error') {
reject({ status: 'error', data: job.data });
}
if (type === 'executed') {
//如果API是反推提示词输出文本结果
if (api === '图片反推提示词') {
const {
output: { tags },
} = data;
resolve(tags[0]);
}
// 解析视频
const {
data: {
output: { gifs },
},
} = JSON.parse(event.data + '');
if (gifs && gifs[0]?.filename.includes('final')) {
let videoUrl = '';
//如果是微信消息
const { filename, subfolder, type } = gifs[0];
if (subfolder) {
videoUrl = `${server_url}/view?subfolder=${subfolder}&filename=${filename}&type=${type}`;
} else {
videoUrl = `${server_url}/view?filename=${filename}&type=${type}`;
}
// 微信公众号回复
if (source === 'wechat') {
const mediaId =
await this.wechatauthService.getMediaId(videoUrl);
await this.wechatauthService.sendServiceImageMessge(
mediaId,
client_id,
);
}
resolve(videoUrl);
}
// 解析图片
const {
data: {
output: { images },
},
} = JSON.parse(event.data + '');
if (images && images[0]?.filename.includes('final')) {
let imageUrl = '';
//如果是微信消息
const { filename, subfolder, type } = images[0];
if (subfolder) {
imageUrl = `${server_url}/view?subfolder=${subfolder}&filename=${filename}&type=${type}`;
} else {
imageUrl = `${server_url}/view?filename=${filename}&type=${type}`;
}
// 微信公众号回复
// if (source === 'wechat') {
// const mediaId =
// await this.wechatauthService.getMediaId(imageUrl);
// await this.wechatauthService.sendServiceImageMessge(
// mediaId,
// client_id,
// );
// }
resolve(imageUrl);
}
//保存到数据库
if (this.appSevice.Draw_SaveHistory) {
// todo 保存到数据库
}
}
} catch (e) {
this.logger.error(e);
}
};
} else {
reject({ status: 'error', data: job.data });
}
});
}
/**
* 初始化与绘画服务端的链接
*/
async websocketInit(server_url: string): Promise<boolean> {
return new Promise(async (resolve) => {
if (!this.validateWsconnect()) {
const url = server_url.split('//')[1];
this.ws_client = new Websocket(
`${server_url.includes('https') ? 'wss' : 'ws'}://${url}/ws?clientId=${this.clientId}`,
);
this.ws_client.onopen = () => {
this.logger.debug(
'链接绘画服务器成功,链接状态:',
this.ws_client.readyState,
);
resolve(true);
};
this.ws_client.onerror = () => {
this.logger.error('链接绘画服务器失败');
resolve(false);
};
setTimeout(() => {
if (this.ws_client.readyState !== 1) {
this.logger.error('链接绘画服务器超时');
resolve(false);
}
}, 500);
} else {
resolve(true);
}
});
}
/**
* 验证链接状态
*/
validateWsconnect() {
if (this.ws_client === undefined || this.ws_client.readyState !== 1) {
this.logger.error('链接不存在,尝试重新连接');
return false;
} else {
return true;
}
}
@OnQueueActive()
async onActive(job: Job) {
const remain = await this.drawService.getQueueLength();
//广播队列任务信息
WsGateway.server.sockets?.emit('remain', {
remain,
});
this.logger.debug(
`onActive job ${job.id} of type ${job.name} with data ${job.data}...队列::`,
remain,
);
}
@OnQueueCompleted()
OnQueueCompleted(job: Job) {
console.log(
`Processing job ${job.id} of type ${job.name} with data ${job.returnvalue}...finished`,
);
}
private async testTask() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('ok');
}, 10000);
});
}
}
================================================
FILE: src/draw/data/AImodel_api.json
================================================
{
"42": {
"inputs": {
"upscale_method": "nearest-exact",
"scale_by": 1,
"image": [
"170",
0
]
},
"class_type": "ImageScaleBy"
},
"54": {
"inputs": {
"cloth_type": "None",
"return_form": "mask",
"image": [
"42",
0
]
},
"class_type": "ALY_Seg_Cloth"
},
"62": {
"inputs": {
"mask": [
"115",
0
]
},
"class_type": "InvertMask"
},
"63": {
"inputs": {
"samples": [
"64",
0
],
"mask": [
"62",
0
]
},
"class_type": "SetLatentNoiseMask"
},
"64": {
"inputs": {
"pixels": [
"42",
0
],
"vae": [
"143",
4
]
},
"class_type": "VAEEncode"
},
"74": {
"inputs": {
"channel": "red",
"image": [
"54",
1
]
},
"class_type": "ImageToMask"
},
"87": {
"inputs": {
"text": "(吊带:1.5)"
},
"class_type": "Text Multiline"
},
"88": {
"inputs": {
"from_translate": "auto",
"to_translate": "english",
"add_proxies": "disable",
"proxies": "",
"auth_data": "",
"service": "GoogleTranslator",
"text": [
"87",
0
],
"Show proxy": "proxy_hide",
"Show authorization": "authorization_hide"
},
"class_type": "DeepTranslatorTextNode"
},
"95": {
"inputs": {
"delimiter": ",",
"clean_whitespace": "true",
"text_a": [
"88",
0
],
"text_b": [
"96",
0
]
},
"class_type": "Text Concatenate"
},
"96": {
"inputs": {
"text": "NSFW,lowrs,blurry,deformed, distorted, disfigured:1.3, stacked torsos:1.2, totem pole:1.1, poorly drawn, bad anatomy, wrong anatomy, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck,extra limb, missing limb, floating limbs, mutated hands and fingers:1.4, disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation, extra fingers:1.2, worst quality, low quality:1.3out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, mutation, deformed, blurry, dehydrated, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs"
},
"class_type": "Text Multiline"
},
"115": {
"inputs": {
"expand": 1,
"tapered_corners": false,
"mask": [
"74",
0
]
},
"class_type": "GrowMask"
},
"122": {
"inputs": {
"x": 0,
"y": 0,
"resize_source": false,
"destination": [
"128",
0
],
"source": [
"42",
0
],
"mask": [
"74",
0
]
},
"class_type": "ImageCompositeMasked"
},
"127": {
"inputs": {
"value": [
"42",
0
]
},
"class_type": "ImpactImageInfo"
},
"128": {
"inputs": {
"width": [
"127",
2
],
"height": [
"127",
1
],
"red": 255,
"green": 255,
"blue": 255
},
"class_type": "Image Blank"
},
"129": {
"inputs": {
"filename_prefix": "aimodel_mask",
"images": [
"122",
0
]
},
"class_type": "SaveImage"
},
"130": {
"inputs": {
"guide_size": 256,
"guide_size_for": true,
"max_size": 768,
"seed": 255582749293796,
"steps": 5,
"cfg": 1.5,
"sampler_name": "lcm",
"scheduler": "sgm_uniform",
"denoise": 0.5,
"feather": 5,
"noise_mask": true,
"force_inpaint": true,
"bbox_threshold": 0.5,
"bbox_dilation": 10,
"bbox_crop_factor": 3,
"sam_detection_hint": "center-1",
"sam_dilation": 0,
"sam_threshold": 0.93,
"sam_bbox_expansion": 0,
"sam_mask_hint_threshold": 0.7,
"sam_mask_hint_use_negative": "False",
"drop_size": 10,
"wildcard": "",
"cycle": 1,
"image": [
"142",
5
],
"model": [
"142",
0
],
"clip": [
"143",
5
],
"vae": [
"142",
4
],
"positive": [
"142",
1
],
"negative": [
"142",
2
],
"bbox_detector": [
"138",
0
]
},
"class_type": "FaceDetailer"
},
"138": {
"inputs": {
"model_name": "bbox/face_yolov8m.pt"
},
"class_type": "UltralyticsDetectorProvider"
},
"142": {
"inputs": {
"seed": 255582749293796,
"steps": 5,
"cfg": 1.5,
"sampler_name": "lcm",
"scheduler": "sgm_uniform",
"denoise": 1,
"preview_method": "none",
"vae_decode": "true",
"model": [
"143",
0
],
"positive": [
"143",
1
],
"negative": [
"143",
2
],
"latent_image": [
"63",
0
],
"optional_vae": [
"143",
4
]
},
"class_type": "KSampler (Efficient)"
},
"143": {
"inputs": {
"ckpt_name": "极氪写实MAX-极氪白系列模型_V6.safetensors",
"vae_name": "Baked VAE",
"clip_skip": -2,
"lora_name": "None",
"lora_model_strength": 1,
"lora_clip_strength": 1,
"positive": [
"159",
0
],
"negative": [
"95",
0
],
"token_normalization": "none",
"weight_interpretation": "A1111",
"empty_latent_width": 512,
"empty_latent_height": 512,
"batch_size": 1,
"lora_stack": [
"147",
0
],
"cnet_stack": [
"153",
0
]
},
"class_type": "Efficient Loader"
},
"147": {
"inputs": {
"input_mode": "simple",
"lora_count": 3,
"lora_name_1": "lcm\\lcm_sd1.5_pytorch_lora_weights.safetensors",
"lora_wt_1": 1,
"model_str_1": 1,
"clip_str_1": 1,
"lora_name_2": "None",
"lora_wt_2": 1,
"model_str_2": 1,
"clip_str_2": 1,
"lora_name_3": "None",
"lora_wt_3": 1,
"model_str_3": 1,
"clip_str_3": 1,
"lora_name_4": "None",
"lora_wt_4": 1,
"model_str_4": 1,
"clip_str_4": 1,
"lora_name_5": "None",
"lora_wt_5": 1,
"model_str_5": 1,
"clip_str_5": 1,
"lora_name_6": "None",
"lora_wt_6": 1,
"model_str_6": 1,
"clip_str_6": 1,
"lora_name_7": "None",
"lora_wt_7": 1,
"model_str_7": 1,
"clip_str_7": 1,
"lora_name_8": "None",
"lora_wt_8": 1,
"model_str_8": 1,
"clip_str_8": 1,
"lora_name_9": "None",
"lora_wt_9": 1,
"model_str_9": 1,
"clip_str_9": 1,
"lora_name_10": "None",
"lora_wt_10": 1,
"model_str_10": 1,
"clip_str_10": 1,
"lora_name_11": "None",
"lora_wt_11": 1,
"model_str_11": 1,
"clip_str_11": 1,
"lora_name_12": "None",
"lora_wt_12": 1,
"model_str_12": 1,
"clip_str_12": 1,
"lora_name_13": "None",
"lora_wt_13": 1,
"model_str_13": 1,
"clip_str_13": 1,
"lora_name_14": "None",
"lora_wt_14": 1,
"model_str_14": 1,
"clip_str_14": 1,
"lora_name_15": "None",
"lora_wt_15": 1,
"model_str_15": 1,
"clip_str_15": 1,
"lora_name_16": "None",
"lora_wt_16": 1,
"model_str_16": 1,
"clip_str_16": 1,
"lora_name_17": "None",
"lora_wt_17": 1,
"model_str_17": 1,
"clip_str_17": 1,
"lora_name_18": "None",
"lora_wt_18": 1,
"model_str_18": 1,
"clip_str_18": 1,
"lora_name_19": "None",
"lora_wt_19": 1,
"model_str_19": 1,
"clip_str_19": 1,
"lora_name_20": "None",
"lora_wt_20": 1,
"model_str_20": 1,
"clip_str_20": 1,
"lora_name_21": "None",
"lora_wt_21": 1,
"model_str_21": 1,
"clip_str_21": 1,
"lora_name_22": "None",
"lora_wt_22": 1,
"model_str_22": 1,
"clip_str_22": 1,
"lora_name_23": "None",
"lora_wt_23": 1,
"model_str_23": 1,
"clip_str_23": 1,
"lora_name_24": "None",
"lora_wt_24": 1,
"model_str_24": 1,
"clip_str_24": 1,
"lora_name_25": "None",
"lora_wt_25": 1,
"model_str_25": 1,
"clip_str_25": 1,
"lora_name_26": "None",
"lora_wt_26": 1,
"model_str_26": 1,
"clip_str_26": 1,
"lora_name_27": "None",
"lora_wt_27": 1,
"model_str_27": 1,
"clip_str_27": 1,
"lora_name_28": "None",
"lora_wt_28": 1,
"model_str_28": 1,
"clip_str_28": 1,
"lora_name_29": "None",
"lora_wt_29": 1,
"model_str_29": 1,
"clip_str_29": 1,
"lora_name_30": "None",
"lora_wt_30": 1,
"model_str_30": 1,
"clip_str_30": 1,
"lora_name_31": "None",
"lora_wt_31": 1,
"model_str_31": 1,
"clip_str_31": 1,
"lora_name_32": "None",
"lora_wt_32": 1,
"model_str_32": 1,
"clip_str_32": 1,
"lora_name_33": "None",
"lora_wt_33": 1,
"model_str_33": 1,
"clip_str_33": 1,
"lora_name_34": "None",
"lora_wt_34": 1,
"model_str_34": 1,
"clip_str_34": 1,
"lora_name_35": "None",
"lora_wt_35": 1,
"model_str_35": 1,
"clip_str_35": 1,
"lora_name_36": "None",
"lora_wt_36": 1,
"model_str_36": 1,
"clip_str_36": 1,
"lora_name_37": "None",
"lora_wt_37": 1,
"model_str_37": 1,
"clip_str_37": 1,
"lora_name_38": "None",
"lora_wt_38": 1,
"model_str_38": 1,
"clip_str_38": 1,
"lora_name_39": "None",
"lora_wt_39": 1,
"model_str_39": 1,
"clip_str_39": 1,
"lora_name_40": "None",
"lora_wt_40": 1,
"model_str_40": 1,
"clip_str_40": 1,
"lora_name_41": "None",
"lora_wt_41": 1,
"model_str_41": 1,
"clip_str_41": 1,
"lora_name_42": "None",
"lora_wt_42": 1,
"model_str_42": 1,
"clip_str_42": 1,
"lora_name_43": "None",
"lora_wt_43": 1,
"model_str_43": 1,
"clip_str_43": 1,
"lora_name_44": "None",
"lora_wt_44": 1,
"model_str_44": 1,
"clip_str_44": 1,
"lora_name_45": "None",
"lora_wt_45": 1,
"model_str_45": 1,
"clip_str_45": 1,
"lora_name_46": "None",
"lora_wt_46": 1,
"model_str_46": 1,
"clip_str_46": 1,
"lora_name_47": "None",
"lora_wt_47": 1,
"model_str_47": 1,
"clip_str_47": 1,
"lora_name_48": "None",
"lora_wt_48": 1,
"model_str_48": 1,
"clip_str_48": 1,
"lora_name_49": "None",
"lora_wt_49": 1,
"model_str_49": 1,
"clip_str_49": 1
},
"class_type": "LoRA Stacker"
},
"153": {
"inputs": {
"switch_1": "On",
"controlnet_1": "control_v11p_sd15_openpose.pth",
"controlnet_strength_1": 1,
"start_percent_1": 0,
"end_percent_1": 1,
"switch_2": "Off",
"controlnet_2": "None",
"controlnet_strength_2": 1,
"start_percent_2": 0,
"end_percent_2": 1,
"switch_3": "Off",
"controlnet_3": "None",
"controlnet_strength_3": 1,
"start_percent_3": 0,
"end_percent_3": 1,
"image_1": [
"166",
0
]
},
"class_type": "CR Multi-ControlNet Stack"
},
"159": {
"inputs": {
"from_translate": "auto",
"to_translate": "english",
"add_proxies": "disable",
"proxies": "",
"auth_data": "",
"service": "GoogleTranslator",
"text": "一个女孩,正面视角,灰色背景,光着肩膀,光着腿,坐在凳子上,室内场景,露腰",
"Show proxy": "proxy_hide",
"Show authorization": "authorization_hide"
},
"class_type": "DeepTranslatorTextNode"
},
"166": {
"inputs": {
"detect_hand": "enable",
"detect_body": "enable",
"detect_face": "enable",
"resolution": 512,
"bbox_detector": "yolox_l.onnx",
"pose_estimator": "dw-ll_ucoco_384.onnx",
"image": [
"42",
0
]
},
"class_type": "DWPreprocessor"
},
"169": {
"inputs": {
"output_path": "[time(%Y-%m-%d)]",
"filename_prefix": "aimodel_output_final_",
"filename_delimiter": "_",
"filename_number_padding": 4,
"filename_number_start": "false",
"extension": "png",
"quality": 100,
"lossless_webp": "false",
"overwrite_mode": "false",
"show_history": "false",
"show_history_by_prefix": "true",
"embed_workflow": "true",
"show_previews": "true",
"images": [
"130",
0
]
},
"class_type": "Image Save"
},
"170": {
"inputs": {
"image_path": "https://wangbo0808.oss-cn-shanghai.aliyuncs.com/aidraw/img2video_static.jpg",
"RGBA": "false",
"filename_text_extension": "false"
},
"class_type": "Image Load"
}
}
================================================
FILE: src/draw/data/DrawConfig.ts
================================================
/**
* 绘画模块配置参数
*/
export const drawConfig={
defaultTimeOut: 60, //默认任务超时时间
};
export const ApiTimeOut = [
{
type: '文生图',
timeout: 60,
},
{
type: '图生图',
timeout: 60,
},
{
type: '图生视频',
timeout: 120,
},
{
type: 'AI模特',
timeout: 120,
},
{
type: 'AI写真',
timeout: 240,
},
{
type: '放大1',
timeout: 120,
},
{
type: '放大2',
timeout: 180,
},
{
type: '图片反推提示词',
timeout: 20,
},
] as ComfyAPIType[];
export interface ComfyAPIType {
type:
| '文生图'
| '图生图'
| '图生视频'
| 'AI模特'
| 'AI写真'
| '放大1'
| '放大2'
| 'AI推文'
| '换脸'
| '图片反推提示词';
timeout: number;
}
export interface DrawTask {
source: 'wechat' | 'web';
client_id: string;
prompt: any;
api: string;
socket_id?: string;
lifo?: boolean;
prompt_id?: string;
}
================================================
FILE: src/draw/data/aistudio_api.json
================================================
{
"9": {
"inputs": {
"ipadapter_file": "ip-adapter-faceid-plusv2_sd15.bin"
},
"class_type": "IPAdapterModelLoader"
},
"31": {
"inputs": {
"clip_name": "model.safetensors"
},
"class_type": "CLIPVisionLoader"
},
"32": {
"inputs": {
"provider": "CUDA"
},
"class_type": "InsightFaceLoader"
},
"33": {
"inputs": {
"weight": 0.9,
"noise": 0,
"weight_type": "original",
"start_at": 0,
"end_at": 1,
"faceid_v2": true,
"weight_v2": 1,
"unfold_batch": false,
"ipadapter": [
"9",
0
],
"clip_vision": [
"31",
0
],
"insightface": [
"32",
0
],
"image": [
"92",
0
],
"model": [
"80",
0
]
},
"class_type": "IPAdapterApplyFaceID"
},
"50": {
"inputs": {
"model": "wd-v1-4-moat-tagger-v2",
"threshold": 0.35,
"character_threshold": 0.85,
"exclude_tags": "",
"tags": "1girl, solo, short_hair, brown_hair, shirt, brown_eyes, standing, white_shirt, short_sleeves, midriff, pants, lips, hand_on_hip, contrapposto, realistic, high-waist_pants",
"image": [
"63",
0
]
},
"class_type": "WD14Tagger|pysssss"
},
"63": {
"inputs": {
"enabled": true,
"swap_model": "inswapper_128.onnx",
"facedetection": "retinaface_resnet50",
"face_restore_model": "none",
"face_restore_visibility": 1,
"codeformer_weight": 0.5,
"detect_gender_source": "no",
"detect_gender_input": "no",
"source_faces_index": "0",
"input_faces_index": "0",
"console_log_level": 1,
"input_image": [
"91",
0
],
"source_image": [
"92",
0
]
},
"class_type": "ReActorFaceSwap"
},
"66": {
"inputs": {
"guide_size": 256,
"guide_size_for": true,
"max_size": 768,
"seed": 337795391108149,
"steps": 20,
"cfg": 7.5,
"sampler_name": "dpmpp_2m",
"scheduler": "karras",
"denoise": 0.25,
"feather": 5,
"noise_mask": true,
"force_inpaint": true,
"bbox_threshold": 0.5,
"bbox_dilation": 10,
"bbox_crop_factor": 3,
"sam_detection_hint": "center-1",
"sam_dilation": 0,
"sam_threshold": 0.93,
"sam_bbox_expansion": 0,
"sam_mask_hint_threshold": 0.7,
"sam_mask_hint_use_negative": "False",
"drop_size": 10,
"wildcard": "",
"cycle": 1,
"image": [
"79",
5
],
"model": [
"79",
0
],
"clip": [
"80",
5
],
"vae": [
"79",
4
],
"positive": [
"79",
1
],
"negative": [
"79",
2
],
"bbox_detector": [
"86",
0
]
},
"class_type": "FaceDetailer"
},
"79": {
"inputs": {
"seed": 337795391108149,
"steps": 20,
"cfg": 7.5,
"sampler_name": "dpmpp_2m",
"scheduler": "karras",
"denoise": 0.3,
"preview_method": "none",
"vae_decode": "true",
"model": [
"33",
0
],
"positive": [
"80",
1
],
"negative": [
"80",
2
],
"latent_image": [
"87",
0
],
"optional_vae": [
"80",
4
]
},
"class_type": "KSampler (Efficient)"
},
"80": {
"inputs": {
"ckpt_name": "极氪写实MAX-极氪白系列模型_V6.safetensors",
"vae_name": "Baked VAE",
"clip_skip": -2,
"lora_name": "None",
"lora_model_strength": 1,
"lora_clip_strength": 1,
"positive": [
"50",
0
],
"negative": [
"82",
0
],
"token_normalization": "none",
"weight_interpretation": "A1111",
"empty_latent_width": 512,
"empty_latent_height": 512,
"batch_size": 1,
"lora_stack": [
"89",
0
]
},
"class_type": "Efficient Loader"
},
"82": {
"inputs": {
"action": "append",
"tidy_tags": "yes",
"text_a": "blurry, malformed, distorted, naked",
"text_b": "",
"text_c": "",
"result": "blurry, malformed, distorted, naked"
},
"class_type": "StringFunction|pysssss"
},
"86": {
"inputs": {
"model_name": "bbox/face_yolov8m.pt"
},
"class_type": "UltralyticsDetectorProvider"
},
"87": {
"inputs": {
"pixels": [
"63",
0
],
"vae": [
"80",
4
]
},
"class_type": "VAEEncode"
},
"89": {
"inputs": {
"input_mode": "simple",
"lora_count": 3,
"lora_name_1": "None",
"lora_wt_1": 1,
"model_str_1": 1,
"clip_str_1": 1,
"lora_name_2": "None",
"lora_wt_2": 1,
"model_str_2": 1,
"clip_str_2": 1,
"lora_name_3": "None",
"lora_wt_3": 1,
"model_str_3": 1,
"clip_str_3": 1,
"lora_name_4": "None",
"lora_wt_4": 1,
"model_str_4": 1,
"clip_str_4": 1,
"lora_name_5": "None",
"lora_wt_5": 1,
"model_str_5": 1,
"clip_str_5": 1,
"lora_name_6": "None",
"lora_wt_6": 1,
"model_str_6": 1,
"clip_str_6": 1,
"lora_name_7": "None",
"lora_wt_7": 1,
"model_str_7": 1,
"clip_str_7": 1,
"lora_name_8": "None",
"lora_wt_8": 1,
"model_str_8": 1,
"clip_str_8": 1,
"lora_name_9": "None",
"lora_wt_9": 1,
"model_str_9": 1,
"clip_str_9": 1,
"lora_name_10": "None",
"lora_wt_10": 1,
"model_str_10": 1,
"clip_str_10": 1,
"lora_name_11": "None",
"lora_wt_11": 1,
"model_str_11": 1,
"clip_str_11": 1,
"lora_name_12": "None",
"lora_wt_12": 1,
"model_str_12": 1,
"clip_str_12": 1,
"lora_name_13": "None",
"lora_wt_13": 1,
"model_str_13": 1,
"clip_str_13": 1,
"lora_name_14": "None",
"lora_wt_14": 1,
"model_str_14": 1,
"clip_str_14": 1,
"lora_name_15": "None",
"lora_wt_15": 1,
"model_str_15": 1,
"clip_str_15": 1,
"lora_name_16": "None",
"lora_wt_16": 1,
"model_str_16": 1,
"clip_str_16": 1,
"lora_name_17": "None",
"lora_wt_17": 1,
"model_str_17": 1,
"clip_str_17": 1,
"lora_name_18": "None",
"lora_wt_18": 1,
"model_str_18": 1,
"clip_str_18": 1,
"lora_name_19": "None",
"lora_wt_19": 1,
"model_str_19": 1,
"clip_str_19": 1,
"lora_name_20": "None",
"lora_wt_20": 1,
"model_str_20": 1,
"clip_str_20": 1,
"lora_name_21": "None",
"lora_wt_21": 1,
"model_str_21": 1,
"clip_str_21": 1,
"lora_name_22": "None",
"lora_wt_22": 1,
"model_str_22": 1,
"clip_str_22": 1,
"lora_name_23": "None",
"lora_wt_23": 1,
"model_str_23": 1,
"clip_str_23": 1,
"lora_name_24": "None",
"lora_wt_24": 1,
"model_str_24": 1,
"clip_str_24": 1,
"lora_name_25": "None",
"lora_wt_25": 1,
"model_str_25": 1,
"clip_str_25": 1,
"lora_name_26": "None",
"lora_wt_26": 1,
"model_str_26": 1,
"clip_str_26": 1,
"lora_name_27": "None",
"lora_wt_27": 1,
"model_str_27": 1,
"clip_str_27": 1,
"lora_name_28": "None",
"lora_wt_28": 1,
"model_str_28": 1,
"clip_str_28": 1,
"lora_name_29": "None",
"lora_wt_29": 1,
"model_str_29": 1,
"clip_str_29": 1,
"lora_name_30": "None",
"lora_wt_30": 1,
"model_str_30": 1,
"clip_str_30": 1,
"lora_name_31": "None",
"lora_wt_31": 1,
"model_str_31": 1,
"clip_str_31": 1,
"lora_name_32": "None",
"lora_wt_32": 1,
"model_str_32": 1,
"clip_str_32": 1,
"lora_name_33": "None",
"lora_wt_33": 1,
"model_str_33": 1,
"clip_str_33": 1,
"lora_name_34": "None",
"lora_wt_34": 1,
"model_str_34": 1,
"clip_str_34": 1,
"lora_name_35": "None",
"lora_wt_35": 1,
"model_str_35": 1,
"clip_str_35": 1,
"lora_name_36": "None",
"lora_wt_36": 1,
"model_str_36": 1,
"clip_str_36": 1,
"lora_name_37": "None",
"lora_wt_37": 1,
"model_str_37": 1,
"clip_str_37": 1,
"lora_name_38": "None",
"lora_wt_38": 1,
"model_str_38": 1,
"clip_str_38": 1,
"lora_name_39": "None",
"lora_wt_39": 1,
"model_str_39": 1,
"clip_str_39": 1,
"lora_name_40": "None",
"lora_wt_40": 1,
"model_str_40": 1,
"clip_str_40": 1,
"lora_name_41": "None",
"lora_wt_41": 1,
"model_str_41": 1,
"clip_str_41": 1,
"lora_name_42": "None",
"lora_wt_42": 1,
"model_str_42": 1,
"clip_str_42": 1,
"lora_name_43": "None",
"lora_wt_43": 1,
"model_str_43": 1,
"clip_str_43": 1,
"lora_name_44": "None",
"lora_wt_44": 1,
"model_str_44": 1,
"clip_str_44": 1,
"lora_name_45": "None",
"lora_wt_45": 1,
"model_str_45": 1,
"clip_str_45": 1,
"lora_name_46": "None",
"lora_wt_46": 1,
"model_str_46": 1,
"clip_str_46": 1,
"lora_name_47": "None",
"lora_wt_47": 1,
"model_str_47": 1,
"clip_str_47": 1,
"lora_name_48": "None",
"lora_wt_48": 1,
"model_str_48": 1,
"clip_str_48": 1,
"lora_name_49": "None",
"lora_wt_49": 1,
"model_str_49": 1,
"clip_str_49": 1
},
"class_type": "LoRA Stacker"
},
"91": {
"inputs": {
"image_path": "./ComfyUI/input/example.png",
"RGBA": "false",
"filename_text_extension": "true"
},
"class_type": "Image Load"
},
"92": {
"inputs": {
"image_path": "./ComfyUI/input/example.png",
"RGBA": "false",
"filename_text_extension": "true"
},
"class_type": "Image Load"
},
"93": {
"inputs": {
"output_path": "[time(%Y-%m-%d)]",
"filename_prefix": "aistudio_output_final_",
"filename_delimiter": "_",
"filename_number_padding": 4,
"filename_number_start": "false",
"extension": "png",
"quality": 100,
"lossless_webp": "false",
"overwrite_mode": "false",
"show_history": "false",
"show_history_by_prefix": "true",
"embed_workflow": "true",
"show_previews": "true",
"images": [
"66",
0
]
},
"class_type": "Image Save"
},
"94": {
"inputs": {
"output_path": "[time(%Y-%m-%d)]",
"filename_prefix": "aistudio_output_2_",
"filename_delimiter": "_",
"filename_number_padding": 4,
"filename_number_start": "false",
"extension": "png",
"quality": 100,
"lossless_webp": "false",
"overwrite_mode": "false",
"show_history": "false",
"show_history_by_prefix": "true",
"embed_workflow": "true",
"show_previews": "true",
"images": [
"79",
5
]
},
"class_type": "Image Save"
},
"95": {
"inputs": {
"output_path": "[time(%Y-%m-%d)]",
"filename_prefix": "aistudio_output_1_",
"filename_delimiter": "_",
"filename_number_padding": 4,
"filename_number_start": "false",
"extension": "png",
"quality": 100,
"lossless_webp": "false",
"overwrite_mode": "false",
"show_history": "false",
"show_history_by_prefix": "true",
"embed_workflow": "true",
"show_previews": "true",
"images": [
"63",
0
]
},
"class_type": "Image Save"
}
}
================================================
FILE: src/draw/data/api_matting.json
================================================
{
"5": {
"inputs": {
"prompt": [
"19",
0
],
"threshold": 0.31,
"sam_model": [
"6",
0
],
"grounding_dino_model": [
"7",
0
],
"image": [
"62",
0
]
},
"class_type": "GroundingDinoSAMSegment (segment anything)"
},
"6": {
"inputs": {
"model_name": "sam_vit_h_4b8939.pth",
"device_mode": "Prefer GPU"
},
"class_type": "SAMLoader"
},
"7": {
"inputs": {
"model_name": "GroundingDINO_SwinB (938MB)"
},
"class_type": "GroundingDinoModelLoader (segment anything)"
},
"19": {
"inputs": {
"from_translate": "auto",
"to_translate": "english",
"add_proxies": "disable",
"proxies": "",
"auth_data": "",
"service": "GoogleTranslator",
"text": "人",
"Show proxy": "proxy_hide",
"Show authorization": "authorization_hide"
},
"class_type": "DeepTranslatorTextNode"
},
"44": {
"inputs": {
"mask": [
"5",
1
]
},
"class_type": "InvertMask"
},
"59": {
"inputs": {
"image": [
"5",
0
],
"alpha": [
"44",
0
]
},
"class_type": "JoinImageWithAlpha"
},
"62": {
"inputs": {
"image_path": "C:\\Users\\wangb\\Downloads\\image1 - 2024-03-19T221914.324.png",
"RGBA": "false",
"filename_text_extension": "true"
},
"class_type": "Image Load"
},
"63": {
"inputs": {
"output_path": "[time(%Y-%m-%d)]",
"filename_prefix": [
"66",
0
],
"filename_delimiter": "_",
"filename_number_padding": 4,
"filename_number_start": "false",
"extension": "png",
"quality": 100,
"lossless_webp": "false",
"overwrite_mode": "false",
"show_history": "false",
"show_history_by_prefix": "true",
"embed_workflow": "true",
"show_previews": "true",
"images": [
"59",
0
]
},
"class_type": "Image Save"
},
"66": {
"inputs": {
"delimiter": "-",
"clean_whitespace": "true",
"text_a": [
"19",
0
],
"text_b": "output_matting_final_"
},
"class_type": "Text Concatenate"
}
}
================================================
FILE: src/draw/data/api_removebg.json
================================================
{
"62": {
"inputs": {
"image_path": "E:\\ComfyUI_windows_portable\\ComfyUI\\input\\canvasimage (35).png",
"RGBA": "false",
"filename_text_extension": "true"
},
"class_type": "Image Load"
},
"63": {
"inputs": {
"output_path": "[time(%Y-%m-%d)]",
"filename_prefix": [
"66",
0
],
"filename_delimiter": "_",
"filename_number_padding": 4,
"filename_number_start": "false",
"extension": "png",
"quality": 100,
"lossless_webp": "false",
"overwrite_mode": "false",
"show_history": "false",
"show_history_by_prefix": "true",
"embed_workflow": "true",
"show_previews": "true",
"images": [
"72",
0
]
},
"class_type": "Image Save"
},
"66": {
"inputs": {
"delimiter": "-",
"clean_whitespace": "true",
"text_a": [
"62",
2
],
"text_b": "output_rmbg_final_"
},
"class_type": "Text Concatenate"
},
"72": {
"inputs": {
"transparency": true,
"model": "u2net",
"post_processing": false,
"only_mask": false,
"alpha_matting": false,
"alpha_matting_foreground_threshold": 240,
"alpha_matting_background_threshold": 10,
"alpha_matting_erode_size": 10,
"background_color": "none",
"images": [
"62",
0
]
},
"class_type": "Image Rembg (Remove Background)"
}
}
================================================
FILE: src/draw/data/api_upscale.json
================================================
{
"5": {
"inputs": {
"output_path": "[time(%Y-%m-%d)]",
"filename_prefix": [
"16",
0
],
"filename_delimiter": "_",
"filename_number_padding": 4,
"filename_number_start": "false",
"extension": "png",
"quality": 100,
"lossless_webp": "false",
"overwrite_mode": "false",
"show_history": "false",
"show_history_by_prefix": "true",
"embed_workflow": "true",
"show_previews": "true",
"images": [
"11",
0
]
},
"class_type": "Image Save"
},
"11": {
"inputs": {
"upscale_model": [
"12",
0
],
"image": [
"15",
0
]
},
"class_type": "ImageUpscaleWithModel"
},
"12": {
"inputs": {
"model_name": "4x-UltraSharp.pth"
},
"class_type": "UpscaleModelLoader"
},
"15": {
"inputs": {
"image_path": "E:\\ComfyUI_windows_portable\\ComfyUI\\output\\ComfyUI_01494_.png",
"RGBA": "false",
"filename_text_extension": "false"
},
"class_type": "Image Load"
},
"16": {
"inputs": {
"delimiter": "_",
"clean_whitespace": "true",
"text_a": [
"15",
2
],
"text_b": "output_upscale_final_"
},
"class_type": "Text Concatenate"
}
}
================================================
FILE: src/draw/data/api_upscale_detailfix.json
================================================
{
"5": {
"inputs": {
"output_path": "[time(%Y-%m-%d)]",
"filename_prefix": [
"16",
0
],
"filename_delimiter": "_",
"filename_number_padding": 4,
"filename_number_start": "false",
"extension": "png",
"quality": 100,
"lossless_webp": "false",
"overwrite_mode": "false",
"show_history": "false",
"show_history_by_prefix": "true",
"embed_workflow": "true",
"show_previews": "true",
"images": [
"28",
0
]
},
"class_type": "Image Save"
},
"15": {
"inputs": {
"image_path": "E:\\ComfyUI_windows_portable\\ComfyUI\\output\\ComfyUI_01494_.png",
"RGBA": "false",
"filename_text_extension": "false"
},
"class_type": "Image Load"
},
"16": {
"inputs": {
"delimiter": "_",
"clean_whitespace": "true",
"text_a": [
"15",
2
],
"text_b": "upscale_detailfix_final_"
},
"class_type": "Text Concatenate"
},
"23": {
"inputs": {
"ckpt_name": "极氪写实MAX-极氪白系列模型_V6.safetensors",
"vae_name": "vae-ft-mse-840000-ema-pruned.safetensors",
"clip_skip": -2,
"lora_name": "None",
"lora_model_strength": 1,
"lora_clip_strength": 1,
"positive": [
"24",
0
],
"negative": "CLIP_NEGATIVE",
"token_normalization": "none",
"weight_interpretation": "comfy",
"empty_latent_width": 512,
"empty_latent_height": 512,
"batch_size": 1
},
"class_type": "Efficient Loader"
},
"24": {
"inputs": {
"model": "wd-v1-4-moat-tagger-v2",
"threshold": 0.35,
"character_threshold": 0.85,
"exclude_tags": "",
"tags": "1girl, solo, long_hair, looking_at_viewer, brown_hair, black_hair, bare_shoulders, brown_eyes, jewelry, upper_body, earrings, lips, eyelashes, red_background, realistic, nose",
"image": [
"15",
0
]
},
"class_type": "WD14Tagger|pysssss"
},
"28": {
"inputs": {
"upscale_by": 2,
"seed": 54765465571794,
"steps": 20,
"cfg": 8,
"sampler_name": "dpmpp_2m",
"scheduler": "karras",
"denoise": 0.25,
"mode_type": "Linear",
"tile_width": 512,
"tile_height": 512,
"mask_blur": 8,
"tile_padding": 32,
"seam_fix_mode": "None",
"seam_fix_denoise": 1,
"seam_fix_width": 64,
"seam_fix_mask_blur": 8,
"seam_fix_padding": 16,
"force_uniform_tiles": "enable",
"image": [
"15",
0
],
"model": [
"23",
0
],
"positive": [
"23",
1
],
"negative": [
"23",
2
],
"vae": [
"23",
4
],
"upscale_model": [
"29",
0
]
},
"class_type": "UltimateSDUpscale"
},
"29": {
"inputs": {
"model_name": "4x-UltraSharp.pth"
},
"class_type": "UpscaleModelLoader"
}
}
================================================
FILE: src/draw/data/api_wechat_img2imgi.json
================================================
{
"18": {
"inputs": {
"text": "paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, manboobs,(ugly:1.331), (duplicate:1.331), (morbid:1.21), (mutilated:1.21), (tranny:1.331), mutated hands, (poorly drawn hands:1.331), blurry, (bad anatomy:1.21), (bad proportions:1.331), extra limbs, (disfigured:1.331), (more than 2 nipples:1.331), (missing arms:1.331), (extra legs:1.331), (fused fingers:1.61051), (too many fingers:1.61051), (unclear eyes:1.331), bad hands, missing fingers, extra digit, (futa:1.1), bad body, NG_DeepNegative_V1_75T,"
},
"class_type": "ttN text"
},
"19": {
"inputs": {
"text": "(8k, best quality, masterpiece:1.2)"
},
"class_type": "ttN text"
},
"23": {
"inputs": {
"from_translate": "auto",
"to_translate": "english",
"add_proxies": "disable",
"proxies": "",
"auth_data": "",
"service": "GoogleTranslator",
"text": "",
"Show proxy": "proxy_hide",
"Show authorization": "authorization_hide"
},
"class_type": "DeepTranslatorTextNode"
},
"25": {
"inputs": {
"delimiter": ",",
"clean_whitespace": "true",
"text_a": [
"87",
0
],
"text_b": [
"19",
0
]
},
"class_type": "Text Concatenate"
},
"26": {
"inputs": {
"delimiter": "",
"clean_whitespace": "true",
"text_a": [
"23",
0
],
"text_b": [
"18",
0
]
},
"class_type": "Text Concatenate"
},
"44": {
"inputs": {
"upscale_type": "latent",
"hires_ckpt_name": "(use same)",
"latent_upscaler": "nearest-exact",
"pixel_upscaler": "4x-UltraSharp.pth",
"upscale_by": 1.5,
"use_same_seed": true,
"seed": -1,
"hires_steps": 12,
"denoise": 0.3,
"iterations": 1,
"use_controlnet": false,
"control_net_name": "control_sd15_random_color.pth",
"strength": 1,
"preprocessor": "CannyEdgePreprocessor",
"preprocessor_imgs": false
},
"class_type": "HighRes-Fix Script"
},
"45": {
"inputs": {
"input_mode": "simple",
"lora_count": 7,
"lora_name_1": "lcm\\lcm_sd1.5_pytorch_lora_weights.safetensors",
"lora_wt_1": 1,
"model_str_1": 1,
"clip_str_1": 1,
"lora_name_2": "None",
"lora_wt_2": 0.5,
"model_str_2": 1,
"clip_str_2": 1,
"lora_name_3": "None",
"lora_wt_3": 0.5,
"model_str_3": 1,
"clip_str_3": 1,
"lora_name_4": "None",
"lora_wt_4": 1,
"model_str_4": 1,
"clip_str_4": 1,
"lora_name_5": "None",
"lora_wt_5": 1,
"model_str_5": 1,
"clip_str_5": 1,
"lora_name_6": "None",
"lora_wt_6": 1,
"model_str_6": 1,
"clip_str_6": 1,
"lora_name_7": "None",
"lora_wt_7": 1,
"model_str_7": 1,
"clip_str_7": 1,
"lora_name_8": "None",
"lora_wt_8": 1,
"model_str_8": 1,
"clip_str_8": 1,
"lora_name_9": "None",
"lora_wt_9": 1,
"model_str_9": 1,
"clip_str_9": 1,
"lora_name_10": "None",
"lora_wt_10": 1,
"model_str_10": 1,
"clip_str_10": 1,
"lora_name_11": "None",
"lora_wt_11": 1,
"model_str_11": 1,
"clip_str_11": 1,
"lora_name_12": "None",
"lora_wt_12": 1,
"model_str_12": 1,
"clip_str_12": 1,
"lora_name_13": "None",
"lora_wt_13": 1,
"model_str_13": 1,
"clip_str_13": 1,
"lora_name_14": "None",
"lora_wt_14": 1,
"model_str_14": 1,
"clip_str_14": 1,
"lora_name_15": "None",
"lora_wt_15": 1,
"model_str_15": 1,
"clip_str_15": 1,
"lora_name_16": "None",
"lora_wt_16": 1,
"model_str_16": 1,
"clip_str_16": 1,
"lora_name_17": "None",
"lora_wt_17": 1,
"model_str_17": 1,
"clip_str_17": 1,
"lora_name_18": "None",
"lora_wt_18": 1,
"model_str_18": 1,
"clip_str_18": 1,
"lora_name_19": "None",
"lora_wt_19": 1,
"model_str_19": 1,
"clip_str_19": 1,
"lora_name_20": "None",
"lora_wt_20": 1,
"model_str_20": 1,
"clip_str_20": 1,
"lora_name_21": "None",
"lora_wt_21": 1,
"model_str_21": 1,
"clip_str_21": 1,
"lora_name_22": "None",
"lora_wt_22": 1,
"model_str_22": 1,
"clip_str_22": 1,
"lora_name_23": "None",
"lora_wt_23": 1,
"model_str_23": 1,
"clip_str_23": 1,
"lora_name_24": "None",
"lora_wt_24": 1,
"model_str_24": 1,
"clip_str_24": 1,
"lora_name_25": "None",
"lora_wt_25": 1,
"model_str_25": 1,
"clip_str_25": 1,
"lora_name_26": "None",
"lora_wt_26": 1,
"model_str_26": 1,
"clip_str_26": 1,
"lora_name_27": "None",
"lora_wt_27": 1,
"model_str_27": 1,
"clip_str_27": 1,
"lora_name_28": "None",
"lora_wt_28": 1,
"model_str_28": 1,
"clip_str_28": 1,
"lora_name_29": "None",
"lora_wt_29": 1,
"model_str_29": 1,
"clip_str_29": 1,
"lora_name_30": "None",
"lora_wt_30": 1,
"model_str_30": 1,
"clip_str_30": 1,
"lora_name_31": "None",
"lora_wt_31": 1,
"model_str_31": 1,
"clip_str_31": 1,
"lora_name_32": "None",
"lora_wt_32": 1,
"model_str_32": 1,
"clip_str_32": 1,
"lora_name_33": "None",
"lora_wt_33": 1,
"model_str_33": 1,
"clip_str_33": 1,
"lora_name_34": "None",
"lora_wt_34": 1,
"model_str_34": 1,
"clip_str_34": 1,
"lora_name_35": "None",
"lora_wt_35": 1,
"model_str_35": 1,
"clip_str_35": 1,
"lora_name_36": "None",
"lora_wt_36": 1,
"model_str_36": 1,
"clip_str_36": 1,
"lora_name_37": "None",
"lora_wt_37": 1,
"model_str_37": 1,
"clip_str_37": 1,
"lora_name_38": "None",
"lora_wt_38": 1,
"model_str_38": 1,
"clip_str_38": 1,
"lora_name_39": "None",
"lora_wt_39": 1,
"model_str_39": 1,
"clip_str_39": 1,
"lora_name_40": "None",
"lora_wt_40": 1,
"model_str_40": 1,
"clip_str_40": 1,
"lora_name_41": "None",
"lora_wt_41": 1,
"model_str_41": 1,
"clip_str_41": 1,
"lora_name_42": "None",
"lora_wt_42": 1,
"model_str_42": 1,
"clip_str_42": 1,
"lora_name_43": "None",
"lora_wt_43": 1,
"model_str_43": 1,
"clip_str_43": 1,
"lora_name_44": "None",
"lora_wt_44": 1,
"model_str_44": 1,
"clip_str_44": 1,
"lora_name_45": "None",
"lora_wt_45": 1,
"model_str_45": 1,
"clip_str_45": 1,
"lora_name_46": "None",
"lora_wt_46": 1,
"model_str_46": 1,
"clip_str_46": 1,
"lora_name_47": "None",
"lora_wt_47": 1,
"model_str_47": 1,
"clip_str_47": 1,
"lora_name_48": "None",
"lora_wt_48": 1,
"model_str_48": 1,
"clip_str_48": 1,
"lora_name_49": "None",
"lora_wt_49": 1,
"model_str_49": 1,
"clip_str_49": 1
},
"class_type": "LoRA Stacker"
},
"47": {
"inputs": {
"ckpt_name": "极氪写实MAX-极氪白系列模型_V6.safetensors",
"vae_name": "Baked VAE",
"clip_skip": -2,
"lora_name": "None",
"lora_model_strength": 1,
"lora_clip_strength": 1,
"positive": [
"25",
0
],
"negative": [
"26",
0
],
"token_normalization": "none",
"weight_interpretation": "A1111",
"empty_latent_width": 512,
"empty_latent_height": 768,
"batch_size": 1,
"lora_stack": [
"45",
0
]
},
"class_type": "Efficient Loader"
},
"51": {
"inputs": {
"output_path": "[time(%Y-%m-%d)]",
"filename_prefix": "img2img_output_final_",
"filename_delimiter": "_",
"filename_number_padding": 4,
"filename_number_start": "false",
"extension": "png",
"quality": 100,
"lossless_webp": "false",
"overwrite_mode": "false",
"show_history": "false",
"show_history_by_prefix": "true",
"embed_workflow": "true",
"show_previews": "true",
"images": [
"85",
5
]
},
"class_type": "Image Save"
},
"70": {
"inputs": {
"image_path": "C:\\Users\\wangb\\Pictures\\342585.png",
"RGBA": "false",
"filename_text_extension": "false"
},
"class_type": "Image Load"
},
"71": {
"inputs": {
"image": [
"70",
0
]
},
"class_type": "Image Size to Number"
},
"72": {
"inputs": {
"number_type": "integer",
"number": 512
},
"class_type": "Constant Number"
},
"73": {
"inputs": {
"operation": "division",
"number_a": [
"72",
0
],
"number_b": [
"71",
0
]
},
"class_type": "Number Operation"
},
"74": {
"inputs": {
"upscale_method": "nearest-exact",
"scale_by": [
"73",
1
],
"image": [
"70",
0
]
},
"class_type": "ImageScaleBy"
},
"85": {
"inputs": {
"seed": 579488174679770,
"steps": 5,
"cfg": 1.5,
"sampler_name": "lcm",
"scheduler": "sgm_uniform",
"denoise": 0.5,
"preview_method": "none",
"vae_decode": "true",
"model": [
"47",
0
],
"positive": [
"47",
1
],
"negative": [
"47",
2
],
"latent_image": [
"86",
0
],
"optional_vae": [
"47",
4
],
"script": [
"44",
0
]
},
"class_type": "KSampler (Efficient)"
},
"86": {
"inputs": {
"pixels": [
"74",
0
],
"vae": [
"47",
4
]
},
"class_type": "VAEEncode"
},
"87": {
"inputs": {
"model": "wd-v1-4-moat-tagger-v2",
"threshold": 0.35,
"character_threshold": 0.85,
"exclude_tags": "",
"tags": "1girl, solo, long_hair, breasts, blue_eyes, skirt, jewelry, braid, white_hair, necklace, cape, armor, lips, snow, realistic, dragon, crown_braid",
"image": [
"70",
0
]
},
"class_type": "WD14Tagger|pysssss"
}
}
================================================
FILE: src/draw/data/impaiting_api.json
================================================
{
"18": {
"inputs": {
"text": "paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, manboobs,(ugly:1.331), (duplicate:1.331), (morbid:1.21), (mutilated:1.21), (tranny:1.331), mutated hands, (poorly drawn hands:1.331), blurry, (bad anatomy:1.21), (bad proportions:1.331), extra limbs, (disfigured:1.331), (more than 2 nipples:1.331), (missing arms:1.331), (extra legs:1.331), (fused fingers:1.61051), (too many fingers:1.61051), (unclear eyes:1.331), bad hands, missing fingers, extra digit, (futa:1.1), bad body, NG_DeepNegative_V1_75T,"
},
"class_type": "ttN text"
},
"19": {
"inputs": {
"text": "(8k, best quality, masterpiece:1.2)"
},
"class_type": "ttN text"
},
"23": {
"inputs": {
"from_translate": "auto",
"to_translate": "english",
"add_proxies": "disable",
"proxies": "",
"auth_data": "",
"service": "GoogleTranslator",
"text": "",
"Show proxy": "proxy_hide",
"Show authorization": "authorization_hide"
},
"class_type": "DeepTranslatorTextNode"
},
"24": {
"inputs": {
"from_translate": "auto",
"to_translate": "english",
"add_proxies": "disable",
"proxies": "",
"auth_data": "",
"service": "GoogleTranslator",
"text": "",
"Show proxy": "proxy_hide",
"Show authorization": "authorization_hide"
},
"class_type": "DeepTranslatorTextNode"
},
"25": {
"inputs": {
"delimiter": ",",
"clean_whitespace": "true",
"text_a": [
"24",
0
],
"text_b": [
"19",
0
]
},
"class_type": "Text Concatenate"
},
"26": {
"inputs": {
"delimiter": "",
"clean_whitespace": "true",
"text_a": [
"23",
0
],
"text_b": [
"18",
0
]
},
"class_type": "Text Concatenate"
},
"44": {
"inputs": {
"upscale_type": "latent",
"hires_ckpt_name": "(use same)",
"latent_upscaler": "nearest-exact",
"pixel_upscaler": "4x-UltraSharp.pth",
"upscale_by": 1,
"use_same_seed": true,
"seed": -1,
"hires_steps": 12,
"denoise": 0.3,
"iterations": 1,
"use_controlnet": false,
"control_net_name": "control_sd15_random_color.pth",
"strength": 1,
"preprocessor": "CannyEdgePreprocessor",
"preprocessor_imgs": false
},
"class_type": "HighRes-Fix Script"
},
"45": {
"inputs": {
"input_mode": "simple",
"lora_count": 7,
"lora_name_1": "lcm\\lcm_sd1.5_pytorch_lora_weights.safetensors",
"lora_wt_1": 1,
"model_str_1": 1,
"clip_str_1": 1,
"lora_name_2": "None",
"lora_wt_2": 0.5,
"model_str_2": 1,
"clip_str_2": 1,
"lora_name_3": "None",
"lora_wt_3": 0.5,
"model_str_3": 1,
"clip_str_3": 1,
"lora_name_4": "None",
"lora_wt_4": 1,
"model_str_4": 1,
"clip_str_4": 1,
"lora_name_5": "None",
"lora_wt_5": 1,
"model_str_5": 1,
"clip_str_5": 1,
"lora_name_6": "None",
"lora_wt_6": 1,
"model_str_6": 1,
"clip_str_6": 1,
"lora_name_7": "None",
"lora_wt_7": 1,
"model_str_7": 1,
"clip_str_7": 1,
"lora_name_8": "None",
"lora_wt_8": 1,
"model_str_8": 1,
"clip_str_8": 1,
"lora_name_9": "None",
"lora_wt_9": 1,
"model_str_9": 1,
"clip_str_9": 1,
"lora_name_10": "None",
"lora_wt_10": 1,
"model_str_10": 1,
"clip_str_10": 1,
"lora_name_11": "None",
"lora_wt_11": 1,
"model_str_11": 1,
"clip_str_11": 1,
"lora_name_12": "None",
"lora_wt_12": 1,
"model_str_12": 1,
"clip_str_12": 1,
"lora_name_13": "None",
"lora_wt_13": 1,
"model_str_13": 1,
"clip_str_13": 1,
"lora_name_14": "None",
"lora_wt_14": 1,
"model_str_14": 1,
"clip_str_14": 1,
"lora_name_15": "None",
"lora_wt_15": 1,
"model_str_15": 1,
"clip_str_15": 1,
"lora_name_16": "None",
"lora_wt_16": 1,
"model_str_16": 1,
"clip_str_16": 1,
"lora_name_17": "None",
"lora_wt_17": 1,
"model_str_17": 1,
"clip_str_17": 1,
"lora_name_18": "None",
"lora_wt_18": 1,
"model_str_18": 1,
"clip_str_18": 1,
"lora_name_19": "None",
"lora_wt_19": 1,
"model_str_19": 1,
"clip_str_19": 1,
"lora_name_20": "None",
"lora_wt_20": 1,
"model_str_20": 1,
"clip_str_20": 1,
"lora_name_21": "None",
"lora_wt_21": 1,
"model_str_21": 1,
"clip_str_21": 1,
"lora_name_22": "None",
"lora_wt_22": 1,
"model_str_22": 1,
"clip_str_22": 1,
"lora_name_23": "None",
"lora_wt_23": 1,
"model_str_23": 1,
"clip_str_23": 1,
"lora_name_24": "None",
"lora_wt_24": 1,
"model_str_24": 1,
"clip_str_24": 1,
"lora_name_25": "None",
"lora_wt_25": 1,
"model_str_25": 1,
"clip_str_25": 1,
"lora_name_26": "None",
"lora_wt_26": 1,
"model_str_26": 1,
"clip_str_26": 1,
"lora_name_27": "None",
"lora_wt_27": 1,
"model_str_27": 1,
"clip_str_27": 1,
"lora_name_28": "None",
"lora_wt_28": 1,
"model_str_28": 1,
"clip_str_28": 1,
"lora_name_29": "None",
"lora_wt_29": 1,
"model_str_29": 1,
"clip_str_29": 1,
"lora_name_30": "None",
"lora_wt_30": 1,
"model_str_30": 1,
"clip_str_30": 1,
"lora_name_31": "None",
"lora_wt_31": 1,
"model_str_31": 1,
"clip_str_31": 1,
"lora_name_32": "None",
"lora_wt_32": 1,
"model_str_32": 1,
"clip_str_32": 1,
"lora_name_33": "None",
"lora_wt_33": 1,
"model_str_33": 1,
"clip_str_33": 1,
"lora_name_34": "None",
"lora_wt_34": 1,
"model_str_34": 1,
"clip_str_34": 1,
"lora_name_35": "None",
"lora_wt_35": 1,
"model_str_35": 1,
"clip_str_35": 1,
"lora_name_36": "None",
"lora_wt_36": 1,
"model_str_36": 1,
"clip_str_36": 1,
"lora_name_37": "None",
"lora_wt_37": 1,
"model_str_37": 1,
"clip_str_37": 1,
"lora_name_38": "None",
"lora_wt_38": 1,
"model_str_38": 1,
"clip_str_38": 1,
"lora_name_39": "None",
"lora_wt_39": 1,
"model_str_39": 1,
"clip_str_39": 1,
"lora_name_40": "None",
"lora_wt_40": 1,
"model_str_40": 1,
"clip_str_40": 1,
"lora_name_41": "None",
"lora_wt_41": 1,
"model_str_41": 1,
"clip_str_41": 1,
"lora_name_42": "None",
"lora_wt_42": 1,
"model_str_42": 1,
"clip_str_42": 1,
"lora_name_43": "None",
"lora_wt_43": 1,
"model_str_43": 1,
"clip_str_43": 1,
"lora_name_44": "None",
"lora_wt_44": 1,
"model_str_44": 1,
"clip_str_44": 1,
"lora_name_45": "None",
"lora_wt_45": 1,
"model_str_45": 1,
"clip_str_45": 1,
"lora_name_46": "None",
"lora_wt_46": 1,
"model_str_46": 1,
"clip_str_46": 1,
"lora_name_47": "None",
"lora_wt_47": 1,
"model_str_47": 1,
"clip_str_47": 1,
"lora_name_48": "None",
"lora_wt_48": 1,
"model_str_48": 1,
"clip_str_48": 1,
"lora_name_49": "None",
"lora_wt_49": 1,
"model_str_49": 1,
"clip_str_49": 1
},
"class_type": "LoRA Stacker"
},
"47": {
"inputs": {
"ckpt_name": "极氪写实MAX-极氪白系列模型_V6.safetensors",
"vae_name": "Baked VAE",
"clip_skip": -2,
"lora_name": "None",
"lora_model_strength": 1,
"lora_clip_strength": 1,
"positive": [
"25",
0
],
"negative": [
"26",
0
],
"token_normalization": "none",
"weight_interpretation": "A1111",
"empty_latent_width": 512,
"empty_latent_height": 768,
"batch_size": 1,
"lora_stack": [
"45",
0
]
},
"class_type": "Efficient Loader"
},
"51": {
"inputs": {
"output_path": "[time(%Y-%m-%d)]",
"filename_prefix": [
"93",
0
],
"filename_delimiter": "_",
"filename_number_padding": 4,
"filename_number_start": "false",
"extension": "png",
"quality": 100,
"lossless_webp": "false",
"overwrite_mode": "false",
"show_history": "false",
"show_history_by_prefix": "true",
"embed_workflow": "true",
"show_previews": "true",
"images": [
"85",
5
]
},
"class_type": "Image Save"
},
"70": {
"inputs": {
"image_path": "C:\\Users\\wangb\\Downloads\\image1 - 2024-03-20T180727.831.png",
"RGBA": "false",
"filename_text_extension": "false"
},
"class_type": "Image Load"
},
"74": {
"inputs": {
"upscale_method": "nearest-exact",
"scale_by": 1,
"image": [
"70",
0
]
},
"class_type": "ImageScaleBy"
},
"85": {
"inputs": {
"seed": 742381179588665,
"steps": 5,
"cfg": 1.5,
"sampler_name": "lcm",
"scheduler": "sgm_uniform",
"denoise": 0.5,
"preview_method": "none",
"vae_decode": "true",
"model": [
"47",
0
],
"positive": [
"47",
1
],
"negative": [
"47",
2
],
"latent_image": [
"88",
0
],
"optional_vae": [
"47",
4
],
"script": [
"44",
0
]
},
"class_type": "KSampler (Efficient)"
},
"86": {
"inputs": {
"pixels": [
"74",
0
],
"vae": [
"47",
4
]
},
"class_type": "VAEEncode"
},
"87": {
"inputs": {
"image_path": "C:\\Users\\wangb\\Downloads\\mask (21).png",
"RGBA": "false",
"filename_text_extension": "false"
},
"class_type": "Image Load"
},
"88": {
"inputs": {
"samples": [
"86",
0
],
"mask": [
"91",
0
]
},
"class_type": "SetLatentNoiseMask"
},
"91": {
"inputs": {
"mask": [
"87",
1
]
},
"class_type": "InvertMask"
},
"93": {
"inputs": {
"delimiter": ", ",
"clean_whitespace": "true",
"text_a": [
"70",
2
],
"text_b": "output_impaiting_final_"
},
"class_type": "Text Concatenate"
}
}
================================================
FILE: src/draw/data/objectInfo.json
================================================
{
"KSampler": {
"input": {
"required": {
"model": [
"MODEL"
],
"seed": [
"INT",
{
"default": 0,
"min": 0,
"max": 18446744073709551615
}
],
"steps": [
"INT",
{
"default": 20,
"min": 1,
"max": 10000
}
],
"cfg": [
"FLOAT",
{
"default": 8.0,
"min": 0.0,
"max": 100.0,
"step": 0.1,
"round": 0.01
}
],
"sampler_name": [
[
"euler",
"euler_ancestral",
"heun",
"heunpp2",
"dpm_2",
"dpm_2_ancestral",
"lms",
"dpm_fast",
"dpm_adaptive",
"dpmpp_2s_ancestral",
"dpmpp_sde",
"dpmpp_sde_gpu",
"dpmpp_2m",
"dpmpp_2m_alt",
"dpmpp_2m_sde",
"dpmpp_2m_sde_gpu",
"dpmpp_3m_sde",
"dpmpp_3m_sde_gpu",
"ddpm",
"lcm",
"ddim",
"uni_pc",
"uni_pc_bh2"
]
],
"scheduler": [
[
"normal",
"karras",
"exponential",
"sgm_uniform",
"simple",
"ddim_uniform"
]
],
"positive": [
"CONDITIONING"
],
"negative": [
"CONDITIONING"
],
"latent_image": [
"LATENT"
],
"denoise": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "KSampler",
"display_name": "KSampler",
"description": "",
"category": "sampling",
"output_node": false
},
"CheckpointLoaderSimple": {
"input": {
"required": {
"ckpt_name": [
[
"ghostmix_v20Bakedvae.safetensors",
"juggernautXL_v9Rundiffusionphoto2.safetensors",
"majicmixRealistic_v7.safetensors",
"svd-fp16.safetensors"
]
]
}
},
"output": [
"MODEL",
"CLIP",
"VAE"
],
"output_is_list": [
false,
false,
false
],
"output_name": [
"MODEL",
"CLIP",
"VAE"
],
"name": "CheckpointLoaderSimple",
"display_name": "Load Checkpoint",
"description": "",
"category": "loaders",
"output_node": false
},
"CLIPTextEncode": {
"input": {
"required": {
"text": [
"STRING",
{
"multiline": true
}
],
"clip": [
"CLIP"
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "CLIPTextEncode",
"display_name": "CLIP Text Encode (Prompt)",
"description": "",
"category": "conditioning",
"output_node": false
},
"CLIPSetLastLayer": {
"input": {
"required": {
"clip": [
"CLIP"
],
"stop_at_clip_layer": [
"INT",
{
"default": -1,
"min": -24,
"max": -1,
"step": 1
}
]
}
},
"output": [
"CLIP"
],
"output_is_list": [
false
],
"output_name": [
"CLIP"
],
"name": "CLIPSetLastLayer",
"display_name": "CLIP Set Last Layer",
"description": "",
"category": "conditioning",
"output_node": false
},
"VAEDecode": {
"input": {
"required": {
"samples": [
"LATENT"
],
"vae": [
"VAE"
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "VAEDecode",
"display_name": "VAE Decode",
"description": "",
"category": "latent",
"output_node": false
},
"VAEEncode": {
"input": {
"required": {
"pixels": [
"IMAGE"
],
"vae": [
"VAE"
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "VAEEncode",
"display_name": "VAE Encode",
"description": "",
"category": "latent",
"output_node": false
},
"VAEEncodeForInpaint": {
"input": {
"required": {
"pixels": [
"IMAGE"
],
"vae": [
"VAE"
],
"mask": [
"MASK"
],
"grow_mask_by": [
"INT",
{
"default": 6,
"min": 0,
"max": 64,
"step": 1
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "VAEEncodeForInpaint",
"display_name": "VAE Encode (for Inpainting)",
"description": "",
"category": "latent/inpaint",
"output_node": false
},
"VAELoader": {
"input": {
"required": {
"vae_name": [
[
"sdxl_vae_fp16_fix.safetensors",
"vae-ft-mse-840000-ema-pruned.safetensors"
]
]
}
},
"output": [
"VAE"
],
"output_is_list": [
false
],
"output_name": [
"VAE"
],
"name": "VAELoader",
"display_name": "Load VAE",
"description": "",
"category": "loaders",
"output_node": false
},
"EmptyLatentImage": {
"input": {
"required": {
"width": [
"INT",
{
"default": 512,
"min": 16,
"max": 16384,
"step": 8
}
],
"height": [
"INT",
{
"default": 512,
"min": 16,
"max": 16384,
"step": 8
}
],
"batch_size": [
"INT",
{
"default": 1,
"min": 1,
"max": 4096
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "EmptyLatentImage",
"display_name": "Empty Latent Image",
"description": "",
"category": "latent",
"output_node": false
},
"LatentUpscale": {
"input": {
"required": {
"samples": [
"LATENT"
],
"upscale_method": [
[
"nearest-exact",
"bilinear",
"area",
"bicubic",
"bislerp"
]
],
"width": [
"INT",
{
"default": 512,
"min": 0,
"max": 16384,
"step": 8
}
],
"height": [
"INT",
{
"default": 512,
"min": 0,
"max": 16384,
"step": 8
}
],
"crop": [
[
"disabled",
"center"
]
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentUpscale",
"display_name": "Upscale Latent",
"description": "",
"category": "latent",
"output_node": false
},
"LatentUpscaleBy": {
"input": {
"required": {
"samples": [
"LATENT"
],
"upscale_method": [
[
"nearest-exact",
"bilinear",
"area",
"bicubic",
"bislerp"
]
],
"scale_by": [
"FLOAT",
{
"default": 1.5,
"min": 0.01,
"max": 8.0,
"step": 0.01
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentUpscaleBy",
"display_name": "Upscale Latent By",
"description": "",
"category": "latent",
"output_node": false
},
"LatentFromBatch": {
"input": {
"required": {
"samples": [
"LATENT"
],
"batch_index": [
"INT",
{
"default": 0,
"min": 0,
"max": 63
}
],
"length": [
"INT",
{
"default": 1,
"min": 1,
"max": 64
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentFromBatch",
"display_name": "Latent From Batch",
"description": "",
"category": "latent/batch",
"output_node": false
},
"RepeatLatentBatch": {
"input": {
"required": {
"samples": [
"LATENT"
],
"amount": [
"INT",
{
"default": 1,
"min": 1,
"max": 64
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "RepeatLatentBatch",
"display_name": "Repeat Latent Batch",
"description": "",
"category": "latent/batch",
"output_node": false
},
"SaveImage": {
"input": {
"required": {
"images": [
"IMAGE"
],
"filename_prefix": [
"STRING",
{
"default": "ComfyUI"
}
]
},
"hidden": {
"prompt": "PROMPT",
"extra_pnginfo": "EXTRA_PNGINFO"
}
},
"output": [],
"output_is_list": [],
"output_name": [],
"name": "SaveImage",
"display_name": "Save Image",
"description": "",
"category": "image",
"output_node": true
},
"PreviewImage": {
"input": {
"required": {
"images": [
"IMAGE"
]
},
"hidden": {
"prompt": "PROMPT",
"extra_pnginfo": "EXTRA_PNGINFO"
}
},
"output": [],
"output_is_list": [],
"output_name": [],
"name": "PreviewImage",
"display_name": "Preview Image",
"description": "",
"category": "image",
"output_node": true
},
"LoadImage": {
"input": {
"required": {
"image": [
[
"2022-06-23 19-46-52-280417 (1).png",
"2022-06-23 19-46-52-280417.png",
"ChMkJ13cwnOIK4FoAAXGX559JJgAAvbPAImQfAABcZ3473 (1).jpg",
"IMG_20230624_115309.jpg",
"R-C.jpg",
"example.png",
"u=1090338134,2696420997&fm=253&fmt=auto&app=138&f=JPEG (1).webp",
"u=1090338134,2696420997&fm=253&fmt=auto&app=138&f=JPEG (2).webp",
"u=1090338134,2696420997&fm=253&fmt=auto&app=138&f=JPEG.webp"
],
{
"image_upload": true
}
]
}
},
"output": [
"IMAGE",
"MASK"
],
"output_is_list": [
false,
false
],
"output_name": [
"IMAGE",
"MASK"
],
"name": "LoadImage",
"display_name": "Load Image",
"description": "",
"category": "image",
"output_node": false
},
"LoadImageMask": {
"input": {
"required": {
"image": [
[
"2022-06-23 19-46-52-280417 (1).png",
"2022-06-23 19-46-52-280417.png",
"ChMkJ13cwnOIK4FoAAXGX559JJgAAvbPAImQfAABcZ3473 (1).jpg",
"IMG_20230624_115309.jpg",
"R-C.jpg",
"example.png",
"u=1090338134,2696420997&fm=253&fmt=auto&app=138&f=JPEG (1).webp",
"u=1090338134,2696420997&fm=253&fmt=auto&app=138&f=JPEG (2).webp",
"u=1090338134,2696420997&fm=253&fmt=auto&app=138&f=JPEG.webp"
],
{
"image_upload": true
}
],
"channel": [
[
"alpha",
"red",
"green",
"blue"
]
]
}
},
"output": [
"MASK"
],
"output_is_list": [
false
],
"output_name": [
"MASK"
],
"name": "LoadImageMask",
"display_name": "Load Image (as Mask)",
"description": "",
"category": "mask",
"output_node": false
},
"ImageScale": {
"input": {
"required": {
"image": [
"IMAGE"
],
"upscale_method": [
[
"nearest-exact",
"bilinear",
"area",
"bicubic",
"lanczos"
]
],
"width": [
"INT",
{
"default": 512,
"min": 0,
"max": 16384,
"step": 1
}
],
"height": [
"INT",
{
"default": 512,
"min": 0,
"max": 16384,
"step": 1
}
],
"crop": [
[
"disabled",
"center"
]
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "ImageScale",
"display_name": "Upscale Image",
"description": "",
"category": "image/upscaling",
"output_node": false
},
"ImageScaleBy": {
"input": {
"required": {
"image": [
"IMAGE"
],
"upscale_method": [
[
"nearest-exact",
"bilinear",
"area",
"bicubic",
"lanczos"
]
],
"scale_by": [
"FLOAT",
{
"default": 1.0,
"min": 0.01,
"max": 8.0,
"step": 0.01
}
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "ImageScaleBy",
"display_name": "Upscale Image By",
"description": "",
"category": "image/upscaling",
"output_node": false
},
"ImageInvert": {
"input": {
"required": {
"image": [
"IMAGE"
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "ImageInvert",
"display_name": "Invert Image",
"description": "",
"category": "image",
"output_node": false
},
"ImageBatch": {
"input": {
"required": {
"image1": [
"IMAGE"
],
"image2": [
"IMAGE"
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "ImageBatch",
"display_name": "Batch Images",
"description": "",
"category": "image",
"output_node": false
},
"ImagePadForOutpaint": {
"input": {
"required": {
"image": [
"IMAGE"
],
"left": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
],
"top": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
],
"right": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
],
"bottom": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
],
"feathering": [
"INT",
{
"default": 40,
"min": 0,
"max": 16384,
"step": 1
}
]
}
},
"output": [
"IMAGE",
"MASK"
],
"output_is_list": [
false,
false
],
"output_name": [
"IMAGE",
"MASK"
],
"name": "ImagePadForOutpaint",
"display_name": "Pad Image for Outpainting",
"description": "",
"category": "image",
"output_node": false
},
"EmptyImage": {
"input": {
"required": {
"width": [
"INT",
{
"default": 512,
"min": 1,
"max": 16384,
"step": 1
}
],
"height": [
"INT",
{
"default": 512,
"min": 1,
"max": 16384,
"step": 1
}
],
"batch_size": [
"INT",
{
"default": 1,
"min": 1,
"max": 4096
}
],
"color": [
"INT",
{
"default": 0,
"min": 0,
"max": 16777215,
"step": 1,
"display": "color"
}
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "EmptyImage",
"display_name": "EmptyImage",
"description": "",
"category": "image",
"output_node": false
},
"ConditioningAverage": {
"input": {
"required": {
"conditioning_to": [
"CONDITIONING"
],
"conditioning_from": [
"CONDITIONING"
],
"conditioning_to_strength": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "ConditioningAverage",
"display_name": "ConditioningAverage",
"description": "",
"category": "conditioning",
"output_node": false
},
"ConditioningCombine": {
"input": {
"required": {
"conditioning_1": [
"CONDITIONING"
],
"conditioning_2": [
"CONDITIONING"
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "ConditioningCombine",
"display_name": "Conditioning (Combine)",
"description": "",
"category": "conditioning",
"output_node": false
},
"ConditioningConcat": {
"input": {
"required": {
"conditioning_to": [
"CONDITIONING"
],
"conditioning_from": [
"CONDITIONING"
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "ConditioningConcat",
"display_name": "Conditioning (Concat)",
"description": "",
"category": "conditioning",
"output_node": false
},
"ConditioningSetArea": {
"input": {
"required": {
"conditioning": [
"CONDITIONING"
],
"width": [
"INT",
{
"default": 64,
"min": 64,
"max": 16384,
"step": 8
}
],
"height": [
"INT",
{
"default": 64,
"min": 64,
"max": 16384,
"step": 8
}
],
"x": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
],
"y": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
],
"strength": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "ConditioningSetArea",
"display_name": "Conditioning (Set Area)",
"description": "",
"category": "conditioning",
"output_node": false
},
"ConditioningSetAreaPercentage": {
"input": {
"required": {
"conditioning": [
"CONDITIONING"
],
"width": [
"FLOAT",
{
"default": 1.0,
"min": 0,
"max": 1.0,
"step": 0.01
}
],
"height": [
"FLOAT",
{
"default": 1.0,
"min": 0,
"max": 1.0,
"step": 0.01
}
],
"x": [
"FLOAT",
{
"default": 0,
"min": 0,
"max": 1.0,
"step": 0.01
}
],
"y": [
"FLOAT",
{
"default": 0,
"min": 0,
"max": 1.0,
"step": 0.01
}
],
"strength": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "ConditioningSetAreaPercentage",
"display_name": "Conditioning (Set Area with Percentage)",
"description": "",
"category": "conditioning",
"output_node": false
},
"ConditioningSetAreaStrength": {
"input": {
"required": {
"conditioning": [
"CONDITIONING"
],
"strength": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "ConditioningSetAreaStrength",
"display_name": "ConditioningSetAreaStrength",
"description": "",
"category": "conditioning",
"output_node": false
},
"ConditioningSetMask": {
"input": {
"required": {
"conditioning": [
"CONDITIONING"
],
"mask": [
"MASK"
],
"strength": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
],
"set_cond_area": [
[
"default",
"mask bounds"
]
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "ConditioningSetMask",
"display_name": "Conditioning (Set Mask)",
"description": "",
"category": "conditioning",
"output_node": false
},
"KSamplerAdvanced": {
"input": {
"required": {
"model": [
"MODEL"
],
"add_noise": [
[
"enable",
"disable"
]
],
"noise_seed": [
"INT",
{
"default": 0,
"min": 0,
"max": 18446744073709551615
}
],
"steps": [
"INT",
{
"default": 20,
"min": 1,
"max": 10000
}
],
"cfg": [
"FLOAT",
{
"default": 8.0,
"min": 0.0,
"max": 100.0,
"step": 0.1,
"round": 0.01
}
],
"sampler_name": [
[
"euler",
"euler_ancestral",
"heun",
"heunpp2",
"dpm_2",
"dpm_2_ancestral",
"lms",
"dpm_fast",
"dpm_adaptive",
"dpmpp_2s_ancestral",
"dpmpp_sde",
"dpmpp_sde_gpu",
"dpmpp_2m",
"dpmpp_2m_alt",
"dpmpp_2m_sde",
"dpmpp_2m_sde_gpu",
"dpmpp_3m_sde",
"dpmpp_3m_sde_gpu",
"ddpm",
"lcm",
"ddim",
"uni_pc",
"uni_pc_bh2"
]
],
"scheduler": [
[
"normal",
"karras",
"exponential",
"sgm_uniform",
"simple",
"ddim_uniform"
]
],
"positive": [
"CONDITIONING"
],
"negative": [
"CONDITIONING"
],
"latent_image": [
"LATENT"
],
"start_at_step": [
"INT",
{
"default": 0,
"min": 0,
"max": 10000
}
],
"end_at_step": [
"INT",
{
"default": 10000,
"min": 0,
"max": 10000
}
],
"return_with_leftover_noise": [
[
"disable",
"enable"
]
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "KSamplerAdvanced",
"display_name": "KSampler (Advanced)",
"description": "",
"category": "sampling",
"output_node": false
},
"SetLatentNoiseMask": {
"input": {
"required": {
"samples": [
"LATENT"
],
"mask": [
"MASK"
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "SetLatentNoiseMask",
"display_name": "Set Latent Noise Mask",
"description": "",
"category": "latent/inpaint",
"output_node": false
},
"LatentComposite": {
"input": {
"required": {
"samples_to": [
"LATENT"
],
"samples_from": [
"LATENT"
],
"x": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
],
"y": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
],
"feather": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentComposite",
"display_name": "Latent Composite",
"description": "",
"category": "latent",
"output_node": false
},
"LatentBlend": {
"input": {
"required": {
"samples1": [
"LATENT"
],
"samples2": [
"LATENT"
],
"blend_factor": [
"FLOAT",
{
"default": 0.5,
"min": 0,
"max": 1,
"step": 0.01
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentBlend",
"display_name": "Latent Blend",
"description": "",
"category": "_for_testing",
"output_node": false
},
"LatentRotate": {
"input": {
"required": {
"samples": [
"LATENT"
],
"rotation": [
[
"none",
"90 degrees",
"180 degrees",
"270 degrees"
]
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentRotate",
"display_name": "Rotate Latent",
"description": "",
"category": "latent/transform",
"output_node": false
},
"LatentFlip": {
"input": {
"required": {
"samples": [
"LATENT"
],
"flip_method": [
[
"x-axis: vertically",
"y-axis: horizontally"
]
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentFlip",
"display_name": "Flip Latent",
"description": "",
"category": "latent/transform",
"output_node": false
},
"LatentCrop": {
"input": {
"required": {
"samples": [
"LATENT"
],
"width": [
"INT",
{
"default": 512,
"min": 64,
"max": 16384,
"step": 8
}
],
"height": [
"INT",
{
"default": 512,
"min": 64,
"max": 16384,
"step": 8
}
],
"x": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
],
"y": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentCrop",
"display_name": "Crop Latent",
"description": "",
"category": "latent/transform",
"output_node": false
},
"LoraLoader": {
"input": {
"required": {
"model": [
"MODEL"
],
"clip": [
"CLIP"
],
"lora_name": [
[
"ip-adapter-faceid-plus_sd15_lora.safetensors",
"ip-adapter-faceid-plusv2_sd15_lora.safetensors",
"ip-adapter-faceid-plusv2_sdxl_lora.safetensors",
"ip-adapter-faceid_sd15_lora.safetensors",
"ip-adapter-faceid_sdxl_lora.safetensors",
"sd15_lcm_lora_rank1.safetensors",
"sdxl_LCM_lora_rank1.safetensors"
]
],
"strength_model": [
"FLOAT",
{
"default": 1.0,
"min": -20.0,
"max": 20.0,
"step": 0.01
}
],
"strength_clip": [
"FLOAT",
{
"default": 1.0,
"min": -20.0,
"max": 20.0,
"step": 0.01
}
]
}
},
"output": [
"MODEL",
"CLIP"
],
"output_is_list": [
false,
false
],
"output_name": [
"MODEL",
"CLIP"
],
"name": "LoraLoader",
"display_name": "Load LoRA",
"description": "",
"category": "loaders",
"output_node": false
},
"CLIPLoader": {
"input": {
"required": {
"clip_name": [
[]
],
"type": [
[
"stable_diffusion",
"stable_cascade"
]
]
}
},
"output": [
"CLIP"
],
"output_is_list": [
false
],
"output_name": [
"CLIP"
],
"name": "CLIPLoader",
"display_name": "Load CLIP",
"description": "",
"category": "advanced/loaders",
"output_node": false
},
"UNETLoader": {
"input": {
"required": {
"unet_name": [
[]
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "UNETLoader",
"display_name": "UNETLoader",
"description": "",
"category": "advanced/loaders",
"output_node": false
},
"DualCLIPLoader": {
"input": {
"required": {
"clip_name1": [
[]
],
"clip_name2": [
[]
]
}
},
"output": [
"CLIP"
],
"output_is_list": [
false
],
"output_name": [
"CLIP"
],
"name": "DualCLIPLoader",
"display_name": "DualCLIPLoader",
"description": "",
"category": "advanced/loaders",
"output_node": false
},
"CLIPVisionEncode": {
"input": {
"required": {
"clip_vision": [
"CLIP_VISION"
],
"image": [
"IMAGE"
]
}
},
"output": [
"CLIP_VISION_OUTPUT"
],
"output_is_list": [
false
],
"output_name": [
"CLIP_VISION_OUTPUT"
],
"name": "CLIPVisionEncode",
"display_name": "CLIP Vision Encode",
"description": "",
"category": "conditioning",
"output_node": false
},
"StyleModelApply": {
"input": {
"required": {
"conditioning": [
"CONDITIONING"
],
"style_model": [
"STYLE_MODEL"
],
"clip_vision_output": [
"CLIP_VISION_OUTPUT"
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "StyleModelApply",
"display_name": "Apply Style Model",
"description": "",
"category": "conditioning/style_model",
"output_node": false
},
"unCLIPConditioning": {
"input": {
"required": {
"conditioning": [
"CONDITIONING"
],
"clip_vision_output": [
"CLIP_VISION_OUTPUT"
],
"strength": [
"FLOAT",
{
"default": 1.0,
"min": -10.0,
"max": 10.0,
"step": 0.01
}
],
"noise_augmentation": [
"FLOAT",
{
"default": 0.0,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "unCLIPConditioning",
"display_name": "unCLIPConditioning",
"description": "",
"category": "conditioning",
"output_node": false
},
"ControlNetApply": {
"input": {
"required": {
"conditioning": [
"CONDITIONING"
],
"control_net": [
"CONTROL_NET"
],
"image": [
"IMAGE"
],
"strength": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "ControlNetApply",
"display_name": "Apply ControlNet",
"description": "",
"category": "conditioning",
"output_node": false
},
"ControlNetApplyAdvanced": {
"input": {
"required": {
"positive": [
"CONDITIONING"
],
"negative": [
"CONDITIONING"
],
"control_net": [
"CONTROL_NET"
],
"image": [
"IMAGE"
],
"strength": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
],
"start_percent": [
"FLOAT",
{
"default": 0.0,
"min": 0.0,
"max": 1.0,
"step": 0.001
}
],
"end_percent": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 1.0,
"step": 0.001
}
]
}
},
"output": [
"CONDITIONING",
"CONDITIONING"
],
"output_is_list": [
false,
false
],
"output_name": [
"positive",
"negative"
],
"name": "ControlNetApplyAdvanced",
"display_name": "Apply ControlNet (Advanced)",
"description": "",
"category": "conditioning",
"output_node": false
},
"ControlNetLoader": {
"input": {
"required": {
"control_net_name": [
[
"#control_v11p_sd15_seg_fp16.safetensors",
"#control_v11p_sd15_softedge_fp16.safetensors",
"control_v11f1e_sd15_tile_fp16.safetensors",
"control_v11f1p_sd15_depth_fp16.safetensors",
"control_v11p_sd15_canny_fp16.safetensors",
"control_v11p_sd15_inpaint_fp16.safetensors",
"control_v11p_sd15_lineart_fp16.safetensors",
"control_v11p_sd15_openpose_fp16.safetensors"
]
]
}
},
"output": [
"CONTROL_NET"
],
"output_is_list": [
false
],
"output_name": [
"CONTROL_NET"
],
"name": "ControlNetLoader",
"display_name": "Load ControlNet Model",
"description": "",
"category": "loaders",
"output_node": false
},
"DiffControlNetLoader": {
"input": {
"required": {
"model": [
"MODEL"
],
"control_net_name": [
[
"#control_v11p_sd15_seg_fp16.safetensors",
"#control_v11p_sd15_softedge_fp16.safetensors",
"control_v11f1e_sd15_tile_fp16.safetensors",
"control_v11f1p_sd15_depth_fp16.safetensors",
"control_v11p_sd15_canny_fp16.safetensors",
"control_v11p_sd15_inpaint_fp16.safetensors",
"control_v11p_sd15_lineart_fp16.safetensors",
"control_v11p_sd15_openpose_fp16.safetensors"
]
]
}
},
"output": [
"CONTROL_NET"
],
"output_is_list": [
false
],
"output_name": [
"CONTROL_NET"
],
"name": "DiffControlNetLoader",
"display_name": "Load ControlNet Model (diff)",
"description": "",
"category": "loaders",
"output_node": false
},
"StyleModelLoader": {
"input": {
"required": {
"style_model_name": [
[]
]
}
},
"output": [
"STYLE_MODEL"
],
"output_is_list": [
false
],
"output_name": [
"STYLE_MODEL"
],
"name": "StyleModelLoader",
"display_name": "Load Style Model",
"description": "",
"category": "loaders",
"output_node": false
},
"CLIPVisionLoader": {
"input": {
"required": {
"clip_name": [
[
"clip_h.pth"
]
]
}
},
"output": [
"CLIP_VISION"
],
"output_is_list": [
false
],
"output_name": [
"CLIP_VISION"
],
"name": "CLIPVisionLoader",
"display_name": "Load CLIP Vision",
"description": "",
"category": "loaders",
"output_node": false
},
"VAEDecodeTiled": {
"input": {
"required": {
"samples": [
"LATENT"
],
"vae": [
"VAE"
],
"tile_size": [
"INT",
{
"default": 512,
"min": 320,
"max": 4096,
"step": 64
}
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "VAEDecodeTiled",
"display_name": "VAE Decode (Tiled)",
"description": "",
"category": "_for_testing",
"output_node": false
},
"VAEEncodeTiled": {
"input": {
"required": {
"pixels": [
"IMAGE"
],
"vae": [
"VAE"
],
"tile_size": [
"INT",
{
"default": 512,
"min": 320,
"max": 4096,
"step": 64
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "VAEEncodeTiled",
"display_name": "VAE Encode (Tiled)",
"description": "",
"category": "_for_testing",
"output_node": false
},
"unCLIPCheckpointLoader": {
"input": {
"required": {
"ckpt_name": [
[
"ghostmix_v20Bakedvae.safetensors",
"juggernautXL_v9Rundiffusionphoto2.safetensors",
"majicmixRealistic_v7.safetensors",
"svd-fp16.safetensors"
]
]
}
},
"output": [
"MODEL",
"CLIP",
"VAE",
"CLIP_VISION"
],
"output_is_list": [
false,
false,
false,
false
],
"output_name": [
"MODEL",
"CLIP",
"VAE",
"CLIP_VISION"
],
"name": "unCLIPCheckpointLoader",
"display_name": "unCLIPCheckpointLoader",
"description": "",
"category": "loaders",
"output_node": false
},
"GLIGENLoader": {
"input": {
"required": {
"gligen_name": [
[]
]
}
},
"output": [
"GLIGEN"
],
"output_is_list": [
false
],
"output_name": [
"GLIGEN"
],
"name": "GLIGENLoader",
"display_name": "GLIGENLoader",
"description": "",
"category": "loaders",
"output_node": false
},
"GLIGENTextBoxApply": {
"input": {
"required": {
"conditioning_to": [
"CONDITIONING"
],
"clip": [
"CLIP"
],
"gligen_textbox_model": [
"GLIGEN"
],
"text": [
"STRING",
{
"multiline": true
}
],
"width": [
"INT",
{
"default": 64,
"min": 8,
"max": 16384,
"step": 8
}
],
"height": [
"INT",
{
"default": 64,
"min": 8,
"max": 16384,
"step": 8
}
],
"x": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
],
"y": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "GLIGENTextBoxApply",
"display_name": "GLIGENTextBoxApply",
"description": "",
"category": "conditioning/gligen",
"output_node": false
},
"InpaintModelConditioning": {
"input": {
"required": {
"positive": [
"CONDITIONING"
],
"negative": [
"CONDITIONING"
],
"vae": [
"VAE"
],
"pixels": [
"IMAGE"
],
"mask": [
"MASK"
]
}
},
"output": [
"CONDITIONING",
"CONDITIONING",
"LATENT"
],
"output_is_list": [
false,
false,
false
],
"output_name": [
"positive",
"negative",
"latent"
],
"name": "InpaintModelConditioning",
"display_name": "InpaintModelConditioning",
"description": "",
"category": "conditioning/inpaint",
"output_node": false
},
"CheckpointLoader": {
"input": {
"required": {
"config_name": [
[
"anything_v3.yaml",
"v1-inference.yaml",
"v1-inference_clip_skip_2.yaml",
"v1-inference_clip_skip_2_fp16.yaml",
"v1-inference_fp16.yaml",
"v1-inpainting-inference.yaml",
"v2-inference-v.yaml",
"v2-inference-v_fp32.yaml",
"v2-inference.yaml",
"v2-inference_fp32.yaml",
"v2-inpainting-inference.yaml"
]
],
"ckpt_name": [
[
"ghostmix_v20Bakedvae.safetensors",
"juggernautXL_v9Rundiffusionphoto2.safetensors",
"majicmixRealistic_v7.safetensors",
"svd-fp16.safetensors"
]
]
}
},
"output": [
"MODEL",
"CLIP",
"VAE"
],
"output_is_list": [
false,
false,
false
],
"output_name": [
"MODEL",
"CLIP",
"VAE"
],
"name": "CheckpointLoader",
"display_name": "Load Checkpoint With Config (DEPRECATED)",
"description": "",
"category": "advanced/loaders",
"output_node": false
},
"DiffusersLoader": {
"input": {
"required": {
"model_path": [
[]
]
}
},
"output": [
"MODEL",
"CLIP",
"VAE"
],
"output_is_list": [
false,
false,
false
],
"output_name": [
"MODEL",
"CLIP",
"VAE"
],
"name": "DiffusersLoader",
"display_name": "DiffusersLoader",
"description": "",
"category": "advanced/loaders/deprecated",
"output_node": false
},
"LoadLatent": {
"input": {
"required": {
"latent": [
[]
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LoadLatent",
"display_name": "LoadLatent",
"description": "",
"category": "_for_testing",
"output_node": false
},
"SaveLatent": {
"input": {
"required": {
"samples": [
"LATENT"
],
"filename_prefix": [
"STRING",
{
"default": "latents/ComfyUI"
}
]
},
"hidden": {
"prompt": "PROMPT",
"extra_pnginfo": "EXTRA_PNGINFO"
}
},
"output": [],
"output_is_list": [],
"output_name": [],
"name": "SaveLatent",
"display_name": "SaveLatent",
"description": "",
"category": "_for_testing",
"output_node": true
},
"ConditioningZeroOut": {
"input": {
"required": {
"conditioning": [
"CONDITIONING"
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "ConditioningZeroOut",
"display_name": "ConditioningZeroOut",
"description": "",
"category": "advanced/conditioning",
"output_node": false
},
"ConditioningSetTimestepRange": {
"input": {
"required": {
"conditioning": [
"CONDITIONING"
],
"start": [
"FLOAT",
{
"default": 0.0,
"min": 0.0,
"max": 1.0,
"step": 0.001
}
],
"end": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 1.0,
"step": 0.001
}
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "ConditioningSetTimestepRange",
"display_name": "ConditioningSetTimestepRange",
"description": "",
"category": "advanced/conditioning",
"output_node": false
},
"LoraLoaderModelOnly": {
"input": {
"required": {
"model": [
"MODEL"
],
"lora_name": [
[
"ip-adapter-faceid-plus_sd15_lora.safetensors",
"ip-adapter-faceid-plusv2_sd15_lora.safetensors",
"ip-adapter-faceid-plusv2_sdxl_lora.safetensors",
"ip-adapter-faceid_sd15_lora.safetensors",
"ip-adapter-faceid_sdxl_lora.safetensors",
"sd15_lcm_lora_rank1.safetensors",
"sdxl_LCM_lora_rank1.safetensors"
]
],
"strength_model": [
"FLOAT",
{
"default": 1.0,
"min": -20.0,
"max": 20.0,
"step": 0.01
}
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "LoraLoaderModelOnly",
"display_name": "LoraLoaderModelOnly",
"description": "",
"category": "loaders",
"output_node": false
},
"LatentAdd": {
"input": {
"required": {
"samples1": [
"LATENT"
],
"samples2": [
"LATENT"
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentAdd",
"display_name": "LatentAdd",
"description": "",
"category": "latent/advanced",
"output_node": false
},
"LatentSubtract": {
"input": {
"required": {
"samples1": [
"LATENT"
],
"samples2": [
"LATENT"
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentSubtract",
"display_name": "LatentSubtract",
"description": "",
"category": "latent/advanced",
"output_node": false
},
"LatentMultiply": {
"input": {
"required": {
"samples": [
"LATENT"
],
"multiplier": [
"FLOAT",
{
"default": 1.0,
"min": -10.0,
"max": 10.0,
"step": 0.01
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentMultiply",
"display_name": "LatentMultiply",
"description": "",
"category": "latent/advanced",
"output_node": false
},
"LatentInterpolate": {
"input": {
"required": {
"samples1": [
"LATENT"
],
"samples2": [
"LATENT"
],
"ratio": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentInterpolate",
"display_name": "LatentInterpolate",
"description": "",
"category": "latent/advanced",
"output_node": false
},
"LatentBatch": {
"input": {
"required": {
"samples1": [
"LATENT"
],
"samples2": [
"LATENT"
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentBatch",
"display_name": "LatentBatch",
"description": "",
"category": "latent/batch",
"output_node": false
},
"LatentBatchSeedBehavior": {
"input": {
"required": {
"samples": [
"LATENT"
],
"seed_behavior": [
[
"random",
"fixed"
],
{
"default": "fixed"
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentBatchSeedBehavior",
"display_name": "LatentBatchSeedBehavior",
"description": "",
"category": "latent/advanced",
"output_node": false
},
"HypernetworkLoader": {
"input": {
"required": {
"model": [
"MODEL"
],
"hypernetwork_name": [
[
"easy_negative.safetensors"
]
],
"strength": [
"FLOAT",
{
"default": 1.0,
"min": -10.0,
"max": 10.0,
"step": 0.01
}
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "HypernetworkLoader",
"display_name": "HypernetworkLoader",
"description": "",
"category": "loaders",
"output_node": false
},
"UpscaleModelLoader": {
"input": {
"required": {
"model_name": [
[
"RealESRGAN_x2plus.pth",
"RealESRGAN_x4plus.pth",
"RealESRGAN_x4plus_anime_6B.pth"
]
]
}
},
"output": [
"UPSCALE_MODEL"
],
"output_is_list": [
false
],
"output_name": [
"UPSCALE_MODEL"
],
"name": "UpscaleModelLoader",
"display_name": "Load Upscale Model",
"description": "",
"category": "loaders",
"output_node": false
},
"ImageUpscaleWithModel": {
"input": {
"required": {
"upscale_model": [
"UPSCALE_MODEL"
],
"image": [
"IMAGE"
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "ImageUpscaleWithModel",
"display_name": "Upscale Image (using Model)",
"description": "",
"category": "image/upscaling",
"output_node": false
},
"ImageBlend": {
"input": {
"required": {
"image1": [
"IMAGE"
],
"image2": [
"IMAGE"
],
"blend_factor": [
"FLOAT",
{
"default": 0.5,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
],
"blend_mode": [
[
"normal",
"multiply",
"screen",
"overlay",
"soft_light",
"difference"
]
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "ImageBlend",
"display_name": "ImageBlend",
"description": "",
"category": "image/postprocessing",
"output_node": false
},
"ImageBlur": {
"input": {
"required": {
"image": [
"IMAGE"
],
"blur_radius": [
"INT",
{
"default": 1,
"min": 1,
"max": 31,
"step": 1
}
],
"sigma": [
"FLOAT",
{
"default": 1.0,
"min": 0.1,
"max": 10.0,
"step": 0.1
}
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "ImageBlur",
"display_name": "ImageBlur",
"description": "",
"category": "image/postprocessing",
"output_node": false
},
"ImageQuantize": {
"input": {
"required": {
"image": [
"IMAGE"
],
"colors": [
"INT",
{
"default": 256,
"min": 1,
"max": 256,
"step": 1
}
],
"dither": [
[
"none",
"floyd-steinberg",
"bayer-2",
"bayer-4",
"bayer-8",
"bayer-16"
]
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "ImageQuantize",
"display_name": "ImageQuantize",
"description": "",
"category": "image/postprocessing",
"output_node": false
},
"ImageSharpen": {
"input": {
"required": {
"image": [
"IMAGE"
],
"sharpen_radius": [
"INT",
{
"default": 1,
"min": 1,
"max": 31,
"step": 1
}
],
"sigma": [
"FLOAT",
{
"default": 1.0,
"min": 0.1,
"max": 10.0,
"step": 0.01
}
],
"alpha": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 5.0,
"step": 0.01
}
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "ImageSharpen",
"display_name": "ImageSharpen",
"description": "",
"category": "image/postprocessing",
"output_node": false
},
"ImageScaleToTotalPixels": {
"input": {
"required": {
"image": [
"IMAGE"
],
"upscale_method": [
[
"nearest-exact",
"bilinear",
"area",
"bicubic",
"lanczos"
]
],
"megapixels": [
"FLOAT",
{
"default": 1.0,
"min": 0.01,
"max": 16.0,
"step": 0.01
}
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "ImageScaleToTotalPixels",
"display_name": "ImageScaleToTotalPixels",
"description": "",
"category": "image/upscaling",
"output_node": false
},
"LatentCompositeMasked": {
"input": {
"required": {
"destination": [
"LATENT"
],
"source": [
"LATENT"
],
"x": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
],
"y": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 8
}
],
"resize_source": [
"BOOLEAN",
{
"default": false
}
]
},
"optional": {
"mask": [
"MASK"
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
false
],
"output_name": [
"LATENT"
],
"name": "LatentCompositeMasked",
"display_name": "LatentCompositeMasked",
"description": "",
"category": "latent",
"output_node": false
},
"ImageCompositeMasked": {
"input": {
"required": {
"destination": [
"IMAGE"
],
"source": [
"IMAGE"
],
"x": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 1
}
],
"y": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 1
}
],
"resize_source": [
"BOOLEAN",
{
"default": false
}
]
},
"optional": {
"mask": [
"MASK"
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "ImageCompositeMasked",
"display_name": "ImageCompositeMasked",
"description": "",
"category": "image",
"output_node": false
},
"MaskToImage": {
"input": {
"required": {
"mask": [
"MASK"
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "MaskToImage",
"display_name": "Convert Mask to Image",
"description": "",
"category": "mask",
"output_node": false
},
"ImageToMask": {
"input": {
"required": {
"image": [
"IMAGE"
],
"channel": [
[
"red",
"green",
"blue",
"alpha"
]
]
}
},
"output": [
"MASK"
],
"output_is_list": [
false
],
"output_name": [
"MASK"
],
"name": "ImageToMask",
"display_name": "Convert Image to Mask",
"description": "",
"category": "mask",
"output_node": false
},
"ImageColorToMask": {
"input": {
"required": {
"image": [
"IMAGE"
],
"color": [
"INT",
{
"default": 0,
"min": 0,
"max": 16777215,
"step": 1,
"display": "color"
}
]
}
},
"output": [
"MASK"
],
"output_is_list": [
false
],
"output_name": [
"MASK"
],
"name": "ImageColorToMask",
"display_name": "ImageColorToMask",
"description": "",
"category": "mask",
"output_node": false
},
"SolidMask": {
"input": {
"required": {
"value": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
],
"width": [
"INT",
{
"default": 512,
"min": 1,
"max": 16384,
"step": 1
}
],
"height": [
"INT",
{
"default": 512,
"min": 1,
"max": 16384,
"step": 1
}
]
}
},
"output": [
"MASK"
],
"output_is_list": [
false
],
"output_name": [
"MASK"
],
"name": "SolidMask",
"display_name": "SolidMask",
"description": "",
"category": "mask",
"output_node": false
},
"InvertMask": {
"input": {
"required": {
"mask": [
"MASK"
]
}
},
"output": [
"MASK"
],
"output_is_list": [
false
],
"output_name": [
"MASK"
],
"name": "InvertMask",
"display_name": "InvertMask",
"description": "",
"category": "mask",
"output_node": false
},
"CropMask": {
"input": {
"required": {
"mask": [
"MASK"
],
"x": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 1
}
],
"y": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 1
}
],
"width": [
"INT",
{
"default": 512,
"min": 1,
"max": 16384,
"step": 1
}
],
"height": [
"INT",
{
"default": 512,
"min": 1,
"max": 16384,
"step": 1
}
]
}
},
"output": [
"MASK"
],
"output_is_list": [
false
],
"output_name": [
"MASK"
],
"name": "CropMask",
"display_name": "CropMask",
"description": "",
"category": "mask",
"output_node": false
},
"MaskComposite": {
"input": {
"required": {
"destination": [
"MASK"
],
"source": [
"MASK"
],
"x": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 1
}
],
"y": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 1
}
],
"operation": [
[
"multiply",
"add",
"subtract",
"and",
"or",
"xor"
]
]
}
},
"output": [
"MASK"
],
"output_is_list": [
false
],
"output_name": [
"MASK"
],
"name": "MaskComposite",
"display_name": "MaskComposite",
"description": "",
"category": "mask",
"output_node": false
},
"FeatherMask": {
"input": {
"required": {
"mask": [
"MASK"
],
"left": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 1
}
],
"top": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 1
}
],
"right": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 1
}
],
"bottom": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 1
}
]
}
},
"output": [
"MASK"
],
"output_is_list": [
false
],
"output_name": [
"MASK"
],
"name": "FeatherMask",
"display_name": "FeatherMask",
"description": "",
"category": "mask",
"output_node": false
},
"GrowMask": {
"input": {
"required": {
"mask": [
"MASK"
],
"expand": [
"INT",
{
"default": 0,
"min": -16384,
"max": 16384,
"step": 1
}
],
"tapered_corners": [
"BOOLEAN",
{
"default": true
}
]
}
},
"output": [
"MASK"
],
"output_is_list": [
false
],
"output_name": [
"MASK"
],
"name": "GrowMask",
"display_name": "GrowMask",
"description": "",
"category": "mask",
"output_node": false
},
"ThresholdMask": {
"input": {
"required": {
"mask": [
"MASK"
],
"value": [
"FLOAT",
{
"default": 0.5,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
]
}
},
"output": [
"MASK"
],
"output_is_list": [
false
],
"output_name": [
"MASK"
],
"name": "ThresholdMask",
"display_name": "ThresholdMask",
"description": "",
"category": "mask",
"output_node": false
},
"PorterDuffImageComposite": {
"input": {
"required": {
"source": [
"IMAGE"
],
"source_alpha": [
"MASK"
],
"destination": [
"IMAGE"
],
"destination_alpha": [
"MASK"
],
"mode": [
[
"ADD",
"CLEAR",
"DARKEN",
"DST",
"DST_ATOP",
"DST_IN",
"DST_OUT",
"DST_OVER",
"LIGHTEN",
"MULTIPLY",
"OVERLAY",
"SCREEN",
"SRC",
"SRC_ATOP",
"SRC_IN",
"SRC_OUT",
"SRC_OVER",
"XOR"
],
{
"default": "DST"
}
]
}
},
"output": [
"IMAGE",
"MASK"
],
"output_is_list": [
false,
false
],
"output_name": [
"IMAGE",
"MASK"
],
"name": "PorterDuffImageComposite",
"display_name": "Porter-Duff Image Composite",
"description": "",
"category": "mask/compositing",
"output_node": false
},
"SplitImageWithAlpha": {
"input": {
"required": {
"image": [
"IMAGE"
]
}
},
"output": [
"IMAGE",
"MASK"
],
"output_is_list": [
false,
false
],
"output_name": [
"IMAGE",
"MASK"
],
"name": "SplitImageWithAlpha",
"display_name": "Split Image with Alpha",
"description": "",
"category": "mask/compositing",
"output_node": false
},
"JoinImageWithAlpha": {
"input": {
"required": {
"image": [
"IMAGE"
],
"alpha": [
"MASK"
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "JoinImageWithAlpha",
"display_name": "Join Image with Alpha",
"description": "",
"category": "mask/compositing",
"output_node": false
},
"RebatchLatents": {
"input": {
"required": {
"latents": [
"LATENT"
],
"batch_size": [
"INT",
{
"default": 1,
"min": 1,
"max": 4096
}
]
}
},
"output": [
"LATENT"
],
"output_is_list": [
true
],
"output_name": [
"LATENT"
],
"name": "RebatchLatents",
"display_name": "Rebatch Latents",
"description": "",
"category": "latent/batch",
"output_node": false
},
"RebatchImages": {
"input": {
"required": {
"images": [
"IMAGE"
],
"batch_size": [
"INT",
{
"default": 1,
"min": 1,
"max": 4096
}
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
true
],
"output_name": [
"IMAGE"
],
"name": "RebatchImages",
"display_name": "Rebatch Images",
"description": "",
"category": "image/batch",
"output_node": false
},
"ModelMergeSimple": {
"input": {
"required": {
"model1": [
"MODEL"
],
"model2": [
"MODEL"
],
"ratio": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "ModelMergeSimple",
"display_name": "ModelMergeSimple",
"description": "",
"category": "advanced/model_merging",
"output_node": false
},
"ModelMergeBlocks": {
"input": {
"required": {
"model1": [
"MODEL"
],
"model2": [
"MODEL"
],
"input": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
],
"middle": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
],
"out": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "ModelMergeBlocks",
"display_name": "ModelMergeBlocks",
"description": "",
"category": "advanced/model_merging",
"output_node": false
},
"ModelMergeSubtract": {
"input": {
"required": {
"model1": [
"MODEL"
],
"model2": [
"MODEL"
],
"multiplier": [
"FLOAT",
{
"default": 1.0,
"min": -10.0,
"max": 10.0,
"step": 0.01
}
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "ModelMergeSubtract",
"display_name": "ModelMergeSubtract",
"description": "",
"category": "advanced/model_merging",
"output_node": false
},
"ModelMergeAdd": {
"input": {
"required": {
"model1": [
"MODEL"
],
"model2": [
"MODEL"
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "ModelMergeAdd",
"display_name": "ModelMergeAdd",
"description": "",
"category": "advanced/model_merging",
"output_node": false
},
"CheckpointSave": {
"input": {
"required": {
"model": [
"MODEL"
],
"clip": [
"CLIP"
],
"vae": [
"VAE"
],
"filename_prefix": [
"STRING",
{
"default": "checkpoints/ComfyUI"
}
]
},
"hidden": {
"prompt": "PROMPT",
"extra_pnginfo": "EXTRA_PNGINFO"
}
},
"output": [],
"output_is_list": [],
"output_name": [],
"name": "CheckpointSave",
"display_name": "CheckpointSave",
"description": "",
"category": "advanced/model_merging",
"output_node": true
},
"CLIPMergeSimple": {
"input": {
"required": {
"clip1": [
"CLIP"
],
"clip2": [
"CLIP"
],
"ratio": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
]
}
},
"output": [
"CLIP"
],
"output_is_list": [
false
],
"output_name": [
"CLIP"
],
"name": "CLIPMergeSimple",
"display_name": "CLIPMergeSimple",
"description": "",
"category": "advanced/model_merging",
"output_node": false
},
"CLIPMergeSubtract": {
"input": {
"required": {
"clip1": [
"CLIP"
],
"clip2": [
"CLIP"
],
"multiplier": [
"FLOAT",
{
"default": 1.0,
"min": -10.0,
"max": 10.0,
"step": 0.01
}
]
}
},
"output": [
"CLIP"
],
"output_is_list": [
false
],
"output_name": [
"CLIP"
],
"name": "CLIPMergeSubtract",
"display_name": "CLIPMergeSubtract",
"description": "",
"category": "advanced/model_merging",
"output_node": false
},
"CLIPMergeAdd": {
"input": {
"required": {
"clip1": [
"CLIP"
],
"clip2": [
"CLIP"
]
}
},
"output": [
"CLIP"
],
"output_is_list": [
false
],
"output_name": [
"CLIP"
],
"name": "CLIPMergeAdd",
"display_name": "CLIPMergeAdd",
"description": "",
"category": "advanced/model_merging",
"output_node": false
},
"CLIPSave": {
"input": {
"required": {
"clip": [
"CLIP"
],
"filename_prefix": [
"STRING",
{
"default": "clip/ComfyUI"
}
]
},
"hidden": {
"prompt": "PROMPT",
"extra_pnginfo": "EXTRA_PNGINFO"
}
},
"output": [],
"output_is_list": [],
"output_name": [],
"name": "CLIPSave",
"display_name": "CLIPSave",
"description": "",
"category": "advanced/model_merging",
"output_node": true
},
"VAESave": {
"input": {
"required": {
"vae": [
"VAE"
],
"filename_prefix": [
"STRING",
{
"default": "vae/ComfyUI_vae"
}
]
},
"hidden": {
"prompt": "PROMPT",
"extra_pnginfo": "EXTRA_PNGINFO"
}
},
"output": [],
"output_is_list": [],
"output_name": [],
"name": "VAESave",
"display_name": "VAESave",
"description": "",
"category": "advanced/model_merging",
"output_node": true
},
"TomePatchModel": {
"input": {
"required": {
"model": [
"MODEL"
],
"ratio": [
"FLOAT",
{
"default": 0.3,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "TomePatchModel",
"display_name": "TomePatchModel",
"description": "",
"category": "_for_testing",
"output_node": false
},
"CLIPTextEncodeSDXLRefiner": {
"input": {
"required": {
"ascore": [
"FLOAT",
{
"default": 6.0,
"min": 0.0,
"max": 1000.0,
"step": 0.01
}
],
"width": [
"INT",
{
"default": 1024.0,
"min": 0,
"max": 16384
}
],
"height": [
"INT",
{
"default": 1024.0,
"min": 0,
"max": 16384
}
],
"text": [
"STRING",
{
"multiline": true
}
],
"clip": [
"CLIP"
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "CLIPTextEncodeSDXLRefiner",
"display_name": "CLIPTextEncodeSDXLRefiner",
"description": "",
"category": "advanced/conditioning",
"output_node": false
},
"CLIPTextEncodeSDXL": {
"input": {
"required": {
"width": [
"INT",
{
"default": 1024.0,
"min": 0,
"max": 16384
}
],
"height": [
"INT",
{
"default": 1024.0,
"min": 0,
"max": 16384
}
],
"crop_w": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384
}
],
"crop_h": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384
}
],
"target_width": [
"INT",
{
"default": 1024.0,
"min": 0,
"max": 16384
}
],
"target_height": [
"INT",
{
"default": 1024.0,
"min": 0,
"max": 16384
}
],
"text_g": [
"STRING",
{
"multiline": true,
"default": "CLIP_G"
}
],
"clip": [
"CLIP"
],
"text_l": [
"STRING",
{
"multiline": true,
"default": "CLIP_L"
}
]
}
},
"output": [
"CONDITIONING"
],
"output_is_list": [
false
],
"output_name": [
"CONDITIONING"
],
"name": "CLIPTextEncodeSDXL",
"display_name": "CLIPTextEncodeSDXL",
"description": "",
"category": "advanced/conditioning",
"output_node": false
},
"Canny": {
"input": {
"required": {
"image": [
"IMAGE"
],
"low_threshold": [
"FLOAT",
{
"default": 0.4,
"min": 0.01,
"max": 0.99,
"step": 0.01
}
],
"high_threshold": [
"FLOAT",
{
"default": 0.8,
"min": 0.01,
"max": 0.99,
"step": 0.01
}
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "Canny",
"display_name": "Canny",
"description": "",
"category": "image/preprocessors",
"output_node": false
},
"FreeU": {
"input": {
"required": {
"model": [
"MODEL"
],
"b1": [
"FLOAT",
{
"default": 1.1,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
],
"b2": [
"FLOAT",
{
"default": 1.2,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
],
"s1": [
"FLOAT",
{
"default": 0.9,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
],
"s2": [
"FLOAT",
{
"default": 0.2,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "FreeU",
"display_name": "FreeU",
"description": "",
"category": "model_patches",
"output_node": false
},
"FreeU_V2": {
"input": {
"required": {
"model": [
"MODEL"
],
"b1": [
"FLOAT",
{
"default": 1.3,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
],
"b2": [
"FLOAT",
{
"default": 1.4,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
],
"s1": [
"FLOAT",
{
"default": 0.9,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
],
"s2": [
"FLOAT",
{
"default": 0.2,
"min": 0.0,
"max": 10.0,
"step": 0.01
}
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "FreeU_V2",
"display_name": "FreeU_V2",
"description": "",
"category": "model_patches",
"output_node": false
},
"SamplerCustom": {
"input": {
"required": {
"model": [
"MODEL"
],
"add_noise": [
"BOOLEAN",
{
"default": true
}
],
"noise_seed": [
"INT",
{
"default": 0,
"min": 0,
"max": 18446744073709551615
}
],
"cfg": [
"FLOAT",
{
"default": 8.0,
"min": 0.0,
"max": 100.0,
"step": 0.1,
"round": 0.01
}
],
"positive": [
"CONDITIONING"
],
"negative": [
"CONDITIONING"
],
"sampler": [
"SAMPLER"
],
"sigmas": [
"SIGMAS"
],
"latent_image": [
"LATENT"
]
}
},
"output": [
"LATENT",
"LATENT"
],
"output_is_list": [
false,
false
],
"output_name": [
"output",
"denoised_output"
],
"name": "SamplerCustom",
"display_name": "SamplerCustom",
"description": "",
"category": "sampling/custom_sampling",
"output_node": false
},
"BasicScheduler": {
"input": {
"required": {
"model": [
"MODEL"
],
"scheduler": [
[
"normal",
"karras",
"exponential",
"sgm_uniform",
"simple",
"ddim_uniform"
]
],
"steps": [
"INT",
{
"default": 20,
"min": 1,
"max": 10000
}
],
"denoise": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
]
}
},
"output": [
"SIGMAS"
],
"output_is_list": [
false
],
"output_name": [
"SIGMAS"
],
"name": "BasicScheduler",
"display_name": "BasicScheduler",
"description": "",
"category": "sampling/custom_sampling/schedulers",
"output_node": false
},
"KarrasScheduler": {
"input": {
"required": {
"steps": [
"INT",
{
"default": 20,
"min": 1,
"max": 10000
}
],
"sigma_max": [
"FLOAT",
{
"default": 14.614642,
"min": 0.0,
"max": 1000.0,
"step": 0.01,
"round": false
}
],
"sigma_min": [
"FLOAT",
{
"default": 0.0291675,
"min": 0.0,
"max": 1000.0,
"step": 0.01,
"round": false
}
],
"rho": [
"FLOAT",
{
"default": 7.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
]
}
},
"output": [
"SIGMAS"
],
"output_is_list": [
false
],
"output_name": [
"SIGMAS"
],
"name": "KarrasScheduler",
"display_name": "KarrasScheduler",
"description": "",
"category": "sampling/custom_sampling/schedulers",
"output_node": false
},
"ExponentialScheduler": {
"input": {
"required": {
"steps": [
"INT",
{
"default": 20,
"min": 1,
"max": 10000
}
],
"sigma_max": [
"FLOAT",
{
"default": 14.614642,
"min": 0.0,
"max": 1000.0,
"step": 0.01,
"round": false
}
],
"sigma_min": [
"FLOAT",
{
"default": 0.0291675,
"min": 0.0,
"max": 1000.0,
"step": 0.01,
"round": false
}
]
}
},
"output": [
"SIGMAS"
],
"output_is_list": [
false
],
"output_name": [
"SIGMAS"
],
"name": "ExponentialScheduler",
"display_name": "ExponentialScheduler",
"description": "",
"category": "sampling/custom_sampling/schedulers",
"output_node": false
},
"PolyexponentialScheduler": {
"input": {
"required": {
"steps": [
"INT",
{
"default": 20,
"min": 1,
"max": 10000
}
],
"sigma_max": [
"FLOAT",
{
"default": 14.614642,
"min": 0.0,
"max": 1000.0,
"step": 0.01,
"round": false
}
],
"sigma_min": [
"FLOAT",
{
"default": 0.0291675,
"min": 0.0,
"max": 1000.0,
"step": 0.01,
"round": false
}
],
"rho": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
]
}
},
"output": [
"SIGMAS"
],
"output_is_list": [
false
],
"output_name": [
"SIGMAS"
],
"name": "PolyexponentialScheduler",
"display_name": "PolyexponentialScheduler",
"description": "",
"category": "sampling/custom_sampling/schedulers",
"output_node": false
},
"VPScheduler": {
"input": {
"required": {
"steps": [
"INT",
{
"default": 20,
"min": 1,
"max": 10000
}
],
"beta_d": [
"FLOAT",
{
"default": 19.9,
"min": 0.0,
"max": 1000.0,
"step": 0.01,
"round": false
}
],
"beta_min": [
"FLOAT",
{
"default": 0.1,
"min": 0.0,
"max": 1000.0,
"step": 0.01,
"round": false
}
],
"eps_s": [
"FLOAT",
{
"default": 0.001,
"min": 0.0,
"max": 1.0,
"step": 0.0001,
"round": false
}
]
}
},
"output": [
"SIGMAS"
],
"output_is_list": [
false
],
"output_name": [
"SIGMAS"
],
"name": "VPScheduler",
"display_name": "VPScheduler",
"description": "",
"category": "sampling/custom_sampling/schedulers",
"output_node": false
},
"SDTurboScheduler": {
"input": {
"required": {
"model": [
"MODEL"
],
"steps": [
"INT",
{
"default": 1,
"min": 1,
"max": 10
}
],
"denoise": [
"FLOAT",
{
"default": 1.0,
"min": 0,
"max": 1.0,
"step": 0.01
}
]
}
},
"output": [
"SIGMAS"
],
"output_is_list": [
false
],
"output_name": [
"SIGMAS"
],
"name": "SDTurboScheduler",
"display_name": "SDTurboScheduler",
"description": "",
"category": "sampling/custom_sampling/schedulers",
"output_node": false
},
"KSamplerSelect": {
"input": {
"required": {
"sampler_name": [
[
"euler",
"euler_ancestral",
"heun",
"heunpp2",
"dpm_2",
"dpm_2_ancestral",
"lms",
"dpm_fast",
"dpm_adaptive",
"dpmpp_2s_ancestral",
"dpmpp_sde",
"dpmpp_sde_gpu",
"dpmpp_2m",
"dpmpp_2m_alt",
"dpmpp_2m_sde",
"dpmpp_2m_sde_gpu",
"dpmpp_3m_sde",
"dpmpp_3m_sde_gpu",
"ddpm",
"lcm",
"ddim",
"uni_pc",
"uni_pc_bh2"
]
]
}
},
"output": [
"SAMPLER"
],
"output_is_list": [
false
],
"output_name": [
"SAMPLER"
],
"name": "KSamplerSelect",
"display_name": "KSamplerSelect",
"description": "",
"category": "sampling/custom_sampling/samplers",
"output_node": false
},
"SamplerEulerAncestral": {
"input": {
"required": {
"eta": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"s_noise": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
]
}
},
"output": [
"SAMPLER"
],
"output_is_list": [
false
],
"output_name": [
"SAMPLER"
],
"name": "SamplerEulerAncestral",
"display_name": "SamplerEulerAncestral",
"description": "",
"category": "sampling/custom_sampling/samplers",
"output_node": false
},
"SamplerLMS": {
"input": {
"required": {
"order": [
"INT",
{
"default": 4,
"min": 1,
"max": 100
}
]
}
},
"output": [
"SAMPLER"
],
"output_is_list": [
false
],
"output_name": [
"SAMPLER"
],
"name": "SamplerLMS",
"display_name": "SamplerLMS",
"description": "",
"category": "sampling/custom_sampling/samplers",
"output_node": false
},
"SamplerDPMPP_3M_SDE": {
"input": {
"required": {
"eta": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"s_noise": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"noise_device": [
[
"gpu",
"cpu"
]
]
}
},
"output": [
"SAMPLER"
],
"output_is_list": [
false
],
"output_name": [
"SAMPLER"
],
"name": "SamplerDPMPP_3M_SDE",
"display_name": "SamplerDPMPP_3M_SDE",
"description": "",
"category": "sampling/custom_sampling/samplers",
"output_node": false
},
"SamplerDPMPP_2M_SDE": {
"input": {
"required": {
"solver_type": [
[
"midpoint",
"heun"
]
],
"eta": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"s_noise": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"noise_device": [
[
"gpu",
"cpu"
]
]
}
},
"output": [
"SAMPLER"
],
"output_is_list": [
false
],
"output_name": [
"SAMPLER"
],
"name": "SamplerDPMPP_2M_SDE",
"display_name": "SamplerDPMPP_2M_SDE",
"description": "",
"category": "sampling/custom_sampling/samplers",
"output_node": false
},
"SamplerDPMPP_SDE": {
"input": {
"required": {
"eta": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"s_noise": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"r": [
"FLOAT",
{
"default": 0.5,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"noise_device": [
[
"gpu",
"cpu"
]
]
}
},
"output": [
"SAMPLER"
],
"output_is_list": [
false
],
"output_name": [
"SAMPLER"
],
"name": "SamplerDPMPP_SDE",
"display_name": "SamplerDPMPP_SDE",
"description": "",
"category": "sampling/custom_sampling/samplers",
"output_node": false
},
"SamplerDPMAdaptative": {
"input": {
"required": {
"order": [
"INT",
{
"default": 3,
"min": 2,
"max": 3
}
],
"rtol": [
"FLOAT",
{
"default": 0.05,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"atol": [
"FLOAT",
{
"default": 0.0078,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"h_init": [
"FLOAT",
{
"default": 0.05,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"pcoeff": [
"FLOAT",
{
"default": 0.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"icoeff": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"dcoeff": [
"FLOAT",
{
"default": 0.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"accept_safety": [
"FLOAT",
{
"default": 0.81,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"eta": [
"FLOAT",
{
"default": 0.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
],
"s_noise": [
"FLOAT",
{
"default": 1.0,
"min": 0.0,
"max": 100.0,
"step": 0.01,
"round": false
}
]
}
},
"output": [
"SAMPLER"
],
"output_is_list": [
false
],
"output_name": [
"SAMPLER"
],
"name": "SamplerDPMAdaptative",
"display_name": "SamplerDPMAdaptative",
"description": "",
"category": "sampling/custom_sampling/samplers",
"output_node": false
},
"SplitSigmas": {
"input": {
"required": {
"sigmas": [
"SIGMAS"
],
"step": [
"INT",
{
"default": 0,
"min": 0,
"max": 10000
}
]
}
},
"output": [
"SIGMAS",
"SIGMAS"
],
"output_is_list": [
false,
false
],
"output_name": [
"SIGMAS",
"SIGMAS"
],
"name": "SplitSigmas",
"display_name": "SplitSigmas",
"description": "",
"category": "sampling/custom_sampling/sigmas",
"output_node": false
},
"FlipSigmas": {
"input": {
"required": {
"sigmas": [
"SIGMAS"
]
}
},
"output": [
"SIGMAS"
],
"output_is_list": [
false
],
"output_name": [
"SIGMAS"
],
"name": "FlipSigmas",
"display_name": "FlipSigmas",
"description": "",
"category": "sampling/custom_sampling/sigmas",
"output_node": false
},
"HyperTile": {
"input": {
"required": {
"model": [
"MODEL"
],
"tile_size": [
"INT",
{
"default": 256,
"min": 1,
"max": 2048
}
],
"swap_size": [
"INT",
{
"default": 2,
"min": 1,
"max": 128
}
],
"max_depth": [
"INT",
{
"default": 0,
"min": 0,
"max": 10
}
],
"scale_depth": [
"BOOLEAN",
{
"default": false
}
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "HyperTile",
"display_name": "HyperTile",
"description": "",
"category": "model_patches",
"output_node": false
},
"ModelSamplingDiscrete": {
"input": {
"required": {
"model": [
"MODEL"
],
"sampling": [
[
"eps",
"v_prediction",
"lcm",
"x0"
]
],
"zsnr": [
"BOOLEAN",
{
"default": false
}
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "ModelSamplingDiscrete",
"display_name": "ModelSamplingDiscrete",
"description": "",
"category": "advanced/model",
"output_node": false
},
"ModelSamplingContinuousEDM": {
"input": {
"required": {
"model": [
"MODEL"
],
"sampling": [
[
"v_prediction",
"edm_playground_v2.5",
"eps"
]
],
"sigma_max": [
"FLOAT",
{
"default": 120.0,
"min": 0.0,
"max": 1000.0,
"step": 0.001,
"round": false
}
],
"sigma_min": [
"FLOAT",
{
"default": 0.002,
"min": 0.0,
"max": 1000.0,
"step": 0.001,
"round": false
}
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "ModelSamplingContinuousEDM",
"display_name": "ModelSamplingContinuousEDM",
"description": "",
"category": "advanced/model",
"output_node": false
},
"ModelSamplingStableCascade": {
"input": {
"required": {
"model": [
"MODEL"
],
"shift": [
"FLOAT",
{
"default": 2.0,
"min": 0.0,
"max": 100.0,
"step": 0.01
}
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "ModelSamplingStableCascade",
"display_name": "ModelSamplingStableCascade",
"description": "",
"category": "advanced/model",
"output_node": false
},
"RescaleCFG": {
"input": {
"required": {
"model": [
"MODEL"
],
"multiplier": [
"FLOAT",
{
"default": 0.7,
"min": 0.0,
"max": 1.0,
"step": 0.01
}
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "RescaleCFG",
"display_name": "RescaleCFG",
"description": "",
"category": "advanced/model",
"output_node": false
},
"PatchModelAddDownscale": {
"input": {
"required": {
"model": [
"MODEL"
],
"block_number": [
"INT",
{
"default": 3,
"min": 1,
"max": 32,
"step": 1
}
],
"downscale_factor": [
"FLOAT",
{
"default": 2.0,
"min": 0.1,
"max": 9.0,
"step": 0.001
}
],
"start_percent": [
"FLOAT",
{
"default": 0.0,
"min": 0.0,
"max": 1.0,
"step": 0.001
}
],
"end_percent": [
"FLOAT",
{
"default": 0.35,
"min": 0.0,
"max": 1.0,
"step": 0.001
}
],
"downscale_after_skip": [
"BOOLEAN",
{
"default": true
}
],
"downscale_method": [
[
"bicubic",
"nearest-exact",
"bilinear",
"area",
"bislerp"
]
],
"upscale_method": [
[
"bicubic",
"nearest-exact",
"bilinear",
"area",
"bislerp"
]
]
}
},
"output": [
"MODEL"
],
"output_is_list": [
false
],
"output_name": [
"MODEL"
],
"name": "PatchModelAddDownscale",
"display_name": "PatchModelAddDownscale (Kohya Deep Shrink)",
"description": "",
"category": "_for_testing",
"output_node": false
},
"ImageCrop": {
"input": {
"required": {
"image": [
"IMAGE"
],
"width": [
"INT",
{
"default": 512,
"min": 1,
"max": 16384,
"step": 1
}
],
"height": [
"INT",
{
"default": 512,
"min": 1,
"max": 16384,
"step": 1
}
],
"x": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 1
}
],
"y": [
"INT",
{
"default": 0,
"min": 0,
"max": 16384,
"step": 1
}
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "ImageCrop",
"display_name": "ImageCrop",
"description": "",
"category": "image/transform",
"output_node": false
},
"RepeatImageBatch": {
"input": {
"required": {
"image": [
"IMAGE"
],
"amount": [
"INT",
{
"default": 1,
"min": 1,
"max": 4096
}
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "RepeatImageBatch",
"display_name": "RepeatImageBatch",
"description": "",
"category": "image/batch",
"output_node": false
},
"ImageFromBatch": {
"input": {
"required": {
"image": [
"IMAGE"
],
"batch_index": [
"INT",
{
"default": 0,
"min": 0,
"max": 4095
}
],
"length": [
"INT",
{
"default": 1,
"min": 1,
"max": 4096
}
]
}
},
"output": [
"IMAGE"
],
"output_is_list": [
false
],
"output_name": [
"IMAGE"
],
"name": "ImageFromBatch",
"display_name": "ImageFromBatch",
"description": "",
"category": "image/batch",
"output_node": false
},
"SaveAnimatedWEBP": {
"input": {
"required": {
"images": [
"IMAGE"
],
"filename_prefix": [
"STRING",
{
"default": "ComfyUI"
}
],
"fps": [
"FLOAT",
{
"default": 6.0,
"min": 0.01,
"max": 1000.0,
"step": 0.01
}
],
"lossless": [
"BOOLEAN",
{
"default": true
}
],
"quality": [
"INT",
{
"default": 80,
"min": 0,
"max": 100
}
],
"method": [
[
"default",
"fastest",
"slowest"
]
]
},
"hidden": {
"prompt": "PROMPT",
"extra_pnginfo": "EXTRA_PNGINFO"
}
},
"output": [],
"output_is_list": [],
"output_name": [],
"name": "SaveAnimatedWEBP",
"display_name": "SaveAnimatedWEBP",
"description": "",
"category": "image/animation",
"output_node": true
},
"SaveAnimatedPNG": {
"input": {
"required": {
"images": [
"IMAGE"
],
"filename_prefix": [
"STRING",
{
"default": "ComfyUI"
}
],
"fps": [
"FLOAT",
{
"default": 6.0,
"min": 0.01,
"max": 1000.0,
"step": 0.01
}
],
"compress_level": [
"INT",
{
"default": 4,
"min": 0,
"max": 9
}
]
},
"hidden": {
"prompt": "PROMPT",
"extra_pnginfo": "EXTRA_PNGINFO"
}
},
"output": [],
"output_is_list": [],
"output_name": [],
"name": "SaveAnimatedPNG",
"display_name": "SaveAnimatedPNG",
"description": "",
"category": "image/animation",
"output_node": true
},
"ImageOnlyCheckpointLoader": {
"input": {
"required": {
"ckpt_name": [
gitextract_m15fhcc9/ ├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── .run/ │ └── Comfy-server.run.xml ├── Dockerfile ├── README.md ├── docker-compose.yml.example ├── init.sql ├── nest-cli.json ├── package.json ├── pm2.config.js ├── src/ │ ├── app.controller.ts │ ├── app.module.ts │ ├── app.service.ts │ ├── auth/ │ │ ├── auth.controller.ts │ │ ├── auth.guard.ts │ │ ├── auth.module.ts │ │ ├── auth.service.ts │ │ └── constants.ts │ ├── cache/ │ │ ├── cache.controller.ts │ │ ├── cache.module.ts │ │ └── cache.service.ts │ ├── draw/ │ │ ├── DrawCosumer.ts │ │ ├── data/ │ │ │ ├── AImodel_api.json │ │ │ ├── DrawConfig.ts │ │ │ ├── aistudio_api.json │ │ │ ├── api_matting.json │ │ │ ├── api_removebg.json │ │ │ ├── api_upscale.json │ │ │ ├── api_upscale_detailfix.json │ │ │ ├── api_wechat_img2imgi.json │ │ │ ├── impaiting_api.json │ │ │ ├── objectInfo.json │ │ │ ├── test.json │ │ │ ├── text2imgapi.json │ │ │ ├── workflow_api_faceswap.ts │ │ │ ├── workflow_api_hdfix_4.ts │ │ │ ├── workflow_api_image2img.json │ │ │ ├── workflow_api_image2img.ts │ │ │ ├── workflow_api_img2video.json │ │ │ ├── workflow_api_img2video.ts │ │ │ ├── workflow_api_inpainting.json │ │ │ ├── workflow_api_inpainting.ts │ │ │ ├── workflow_api_matting.json │ │ │ ├── workflow_api_matting.ts │ │ │ ├── workflow_api_model.ts │ │ │ ├── workflow_api_removebg.json │ │ │ ├── workflow_api_removebg.ts │ │ │ ├── workflow_api_tagger.ts │ │ │ ├── workflow_api_text2img.json │ │ │ └── workflow_api_text2img.ts │ │ ├── draw.controller.ts │ │ ├── draw.module.ts │ │ └── draw.service.ts │ ├── file/ │ │ ├── file.controller.ts │ │ ├── file.module.ts │ │ └── file.service.ts │ ├── main.ts │ ├── middleware/ │ │ └── XML.middleware.ts │ ├── oneapi/ │ │ ├── tokens/ │ │ │ ├── dto/ │ │ │ │ ├── create-token.dto.ts │ │ │ │ └── update-token.dto.ts │ │ │ ├── entities/ │ │ │ │ └── token.entity.ts │ │ │ ├── tokens.controller.ts │ │ │ ├── tokens.module.ts │ │ │ └── tokens.service.ts │ │ └── users/ │ │ ├── dto/ │ │ │ ├── create-user.dto.ts │ │ │ └── update-user.dto.ts │ │ ├── entities/ │ │ │ └── user.entity.ts │ │ ├── users.controller.ts │ │ ├── users.module.ts │ │ └── users.service.ts │ ├── tweet/ │ │ ├── dto/ │ │ │ ├── create-tweet.dto.ts │ │ │ └── update-tweet.dto.ts │ │ ├── entities/ │ │ │ └── tweet.schema.ts │ │ ├── tweet.controller.ts │ │ ├── tweet.module.ts │ │ └── tweet.service.ts │ ├── users/ │ │ ├── dto/ │ │ │ ├── create-user.dto.ts │ │ │ └── update-user.dto.ts │ │ ├── schema/ │ │ │ └── user.schema.ts │ │ ├── users.controller.ts │ │ ├── users.module.ts │ │ └── users.service.ts │ ├── wechat-auth/ │ │ ├── wechat-auth.controller.ts │ │ ├── wechat-auth.module.ts │ │ └── wechat-auth.service.ts │ └── ws/ │ └── ws.gateway.ts ├── tsconfig.build.json └── tsconfig.json
SYMBOL INDEX (222 symbols across 48 files)
FILE: src/app.controller.ts
class AppController (line 6) | class AppController {
method constructor (line 7) | constructor(
method getHello (line 13) | getHello(): string {
method test (line 17) | test(): string {
FILE: src/app.module.ts
class AppModule (line 81) | class AppModule implements NestModule {
method configure (line 82) | configure(consumer: MiddlewareConsumer) {
FILE: src/app.service.ts
class AppService (line 4) | class AppService {
method getHello (line 7) | getHello(): string {
FILE: src/auth/auth.controller.ts
class AuthController (line 14) | class AuthController {
method constructor (line 15) | constructor(private authService: AuthService) {}
method signIn (line 42) | signIn(
FILE: src/auth/auth.guard.ts
class AuthGuard (line 18) | class AuthGuard implements CanActivate {
method constructor (line 19) | constructor(private jwtService: JwtService) {}
method canActivate (line 21) | async canActivate(context: ExecutionContext): Promise<boolean> {
method extractTokenFromHeader (line 39) | private extractTokenFromHeader(request: Request): string | undefined {
FILE: src/auth/auth.module.ts
class AuthModule (line 21) | class AuthModule {}
FILE: src/auth/auth.service.ts
class AuthService (line 6) | class AuthService {
method constructor (line 7) | constructor(
method authToken (line 12) | async authToken(username: string, pass: string): Promise<any> {
FILE: src/cache/cache.controller.ts
class CacheController (line 5) | class CacheController {
method constructor (line 6) | constructor(private readonly cacheService: CacheService) {}
FILE: src/cache/cache.module.ts
class CacheModule (line 23) | class CacheModule {}
FILE: src/cache/cache.service.ts
class CacheService (line 6) | class CacheService {
method constructor (line 8) | constructor(
method root (line 16) | async root(): Promise<boolean> {
method get (line 21) | async get(key: string): Promise<any> {
method set (line 35) | async set(key: string, value: any, second?: number) {
method del (line 40) | async del(key: string) {
method flushall (line 44) | async flushall() {
FILE: src/draw/DrawCosumer.ts
class DrawConsumer (line 16) | class DrawConsumer {
method constructor (line 17) | constructor(
method drawtask (line 28) | async drawtask(job: Job): Promise<string> {
method drawTaskExcu (line 47) | async drawTaskExcu(job: Job, server_url: string) {
method websocketInit (line 171) | async websocketInit(server_url: string): Promise<boolean> {
method validateWsconnect (line 204) | validateWsconnect() {
method onActive (line 214) | async onActive(job: Job) {
method OnQueueCompleted (line 227) | OnQueueCompleted(job: Job) {
method testTask (line 233) | private async testTask() {
FILE: src/draw/data/DrawConfig.ts
type ComfyAPIType (line 44) | interface ComfyAPIType {
type DrawTask (line 59) | interface DrawTask {
FILE: src/draw/draw.controller.ts
class DrawController (line 8) | class DrawController {
method constructor (line 9) | constructor(private readonly drawService: DrawService) {}
method getObjectinfo (line 16) | async getObjectinfo() {
method submitDrawTask (line 69) | async submitDrawTask(@Body() data: DrawTask) {
method text2img (line 126) | async text2img(
method img2img (line 205) | async img2img(
method img2video (line 272) | async img2video(
method segmentAnything (line 327) | async segmentAnything(
method inpainting (line 387) | async inpainting(
method removebg (line 440) | async removebg(
method hdfix (line 493) | async hdfix(
method faceswap (line 553) | async faceswap(
method model (line 618) | async model(
method image2tagger (line 672) | async image2tagger(
method addBlackList (line 705) | async addBlackList(@Query('client_id') client_id: string) {
method getBlackList (line 715) | async getBlackList() {
method removeBlackList (line 736) | async removeBlackList(@Query('client_id') uid: string) {
FILE: src/draw/draw.module.ts
class DrawModule (line 33) | class DrawModule {}
FILE: src/draw/draw.service.ts
type WeChatDrawModel (line 35) | type WeChatDrawModel = 'text2img' | 'image2img' | 'img2video';
type SD3AspectRatio (line 36) | type SD3AspectRatio =
type SD3StylePreset (line 45) | type SD3StylePreset =
class DrawService (line 65) | class DrawService {
method constructor (line 75) | constructor(
method sendToQueue (line 114) | async sendToQueue(data: DrawTask) {
method submitDrawTask (line 132) | async submitDrawTask(data: DrawTask): Promise<string> {
method getQueueLength (line 188) | async getQueueLength() {
method isInQueue (line 196) | async isInQueue(uid: string) {
method getObject_info (line 210) | async getObject_info() {
method sendTackprompt (line 233) | async sendTackprompt(comfyuihttpUrl: string, data: any): Promise<strin...
method getAccessToken (line 248) | async getAccessToken() {
method wechatDrawFromRemoteServer (line 269) | async wechatDrawFromRemoteServer(
method text2img (line 321) | async text2img(
method image2img (line 390) | async image2img(
method image2video (line 466) | async image2video(
method segmentAnything (line 524) | async segmentAnything(
method inpainting (line 563) | async inpainting(
method removebg (line 610) | async removebg(
method workflowApiHdfix4 (line 648) | async workflowApiHdfix4(
method image2tagger (line 675) | async image2tagger(
method faceSwap (line 702) | async faceSwap(
method model (line 736) | async model(
method text2imgSD3 (line 786) | async text2imgSD3(params: {
method Initalize (line 860) | async Initalize() {
method addBlackList (line 887) | async addBlackList(uid: string) {
method isInBlackList (line 899) | async isInBlackList(uid: string) {
method removeBlackList (line 907) | async removeBlackList(uid: string) {
method getBlackList (line 917) | async getBlackList() {
FILE: src/file/file.controller.ts
class FileController (line 5) | class FileController {
method constructor (line 6) | constructor(private readonly fileService: FileService) {}
method upload (line 8) | async upload() {
FILE: src/file/file.module.ts
class FileModule (line 10) | class FileModule {}
FILE: src/file/file.service.ts
constant OSS (line 5) | const OSS = require('ali-oss');
class FileService (line 8) | class FileService {
method constructor (line 9) | constructor(
method urlToFile (line 20) | async urlToFile(url, fileName, mimeType): Promise<File> {
method urlToArrayBuffer (line 33) | async urlToArrayBuffer(url: string): Promise<ArrayBuffer> {
method uploadFileToOSS (line 46) | async uploadFileToOSS(
method uploadBufferToOSS (line 94) | async uploadBufferToOSS(
FILE: src/main.ts
function bootstrap (line 6) | async function bootstrap() {
FILE: src/middleware/XML.middleware.ts
class XMLMiddleware (line 10) | class XMLMiddleware implements NestMiddleware {
method use (line 11) | async use(req: Request, res: Response, next: NextFunction) {
FILE: src/oneapi/tokens/dto/create-token.dto.ts
class CreateTokenDto (line 3) | class CreateTokenDto extends Token {}
FILE: src/oneapi/tokens/dto/update-token.dto.ts
class UpdateTokenDto (line 4) | class UpdateTokenDto extends PartialType(CreateTokenDto) {}
FILE: src/oneapi/tokens/entities/token.entity.ts
class Token (line 4) | class Token {
FILE: src/oneapi/tokens/tokens.controller.ts
class TokensController (line 8) | class TokensController {
method constructor (line 9) | constructor(private readonly tokensService: TokensService) {}
method create (line 12) | create(@Body() createTokenDto: CreateTokenDto) {
method findAll (line 17) | findAll() {
method findOne (line 22) | findOne(@Param('id') id: string) {
method update (line 27) | update(@Param('id') id: string, @Body() updateTokenDto: UpdateTokenDto) {
method remove (line 32) | remove(@Param('id') id: string) {
FILE: src/oneapi/tokens/tokens.module.ts
class TokensModule (line 12) | class TokensModule {}
FILE: src/oneapi/tokens/tokens.service.ts
class TokensService (line 9) | class TokensService {
method constructor (line 10) | constructor(
method create (line 14) | async create(createTokenDto: CreateTokenDto) {
method findAll (line 26) | findAll() {
method findOne (line 30) | async findOne(id: number) {
method update (line 34) | update(id: number, updateTokenDto: UpdateTokenDto) {
method remove (line 38) | remove(id: number) {
FILE: src/oneapi/users/dto/create-user.dto.ts
class CreateUserDto (line 3) | class CreateUserDto extends OneAPIUser {}
FILE: src/oneapi/users/dto/update-user.dto.ts
class UpdateUserDto (line 4) | class UpdateUserDto extends PartialType(CreateUserDto) {}
FILE: src/oneapi/users/entities/user.entity.ts
class OneAPIUser (line 10) | class OneAPIUser extends BaseEntity {
FILE: src/oneapi/users/users.controller.ts
class UsersController (line 16) | class UsersController {
method constructor (line 17) | constructor(private readonly oneAPIUsersService: OneAPIUsersService) {}
method create (line 20) | create(@Body() user: OneAPIUser) {
method CreateByUniId (line 29) | async CreateByUniId(@Body() user: OneAPIUser) {
method findAll (line 38) | findAll() {
method findOne (line 47) | findOne(@Param('id') id: string) {
method update (line 56) | update(@Param('id') id: string, @Body() user: OneAPIUser) {
method remove (line 65) | remove(@Param('id') id: string) {
FILE: src/oneapi/users/users.module.ts
class OneAPIUsersModule (line 13) | class OneAPIUsersModule {}
FILE: src/oneapi/users/users.service.ts
class OneAPIUsersService (line 8) | class OneAPIUsersService {
method constructor (line 10) | constructor(
method create (line 14) | async create(user: OneAPIUser) {
method findAll (line 18) | findAll() {
method findOne (line 22) | findOne(id: number) {
method findOneByUniId (line 25) | async findOneByUniId(github_id: string) {
method CreateByUniId (line 34) | async CreateByUniId(user: OneAPIUser) {
method update (line 52) | update(id: number, user: OneAPIUser) {
method remove (line 57) | remove(id: number) {
FILE: src/tweet/dto/create-tweet.dto.ts
class CreateTweetDto (line 3) | class CreateTweetDto extends Tweet{}
FILE: src/tweet/dto/update-tweet.dto.ts
class UpdateTweetDto (line 4) | class UpdateTweetDto extends PartialType(CreateTweetDto) {}
FILE: src/tweet/entities/tweet.schema.ts
type UserDocument (line 5) | type UserDocument = HydratedDocument<Tweet>;
class Tweet (line 7) | class Tweet {
type TweetProject (line 60) | interface TweetProject {
type TweetData (line 71) | interface TweetData {
FILE: src/tweet/tweet.controller.ts
class TweetController (line 9) | class TweetController {
method constructor (line 10) | constructor(private readonly tweetService: TweetService) {}
method savePrject (line 16) | savePrject(@Body() createTweetDto: CreateTweetDto) {
method findAll (line 23) | findAll() {
method findOne (line 28) | findOne(@Param('id') id: string) {
method update (line 33) | update(@Param('id') id: string, @Body() updateTweetDto: UpdateTweetDto) {
method remove (line 38) | remove(@Param('id') id: string) {
FILE: src/tweet/tweet.module.ts
class TweetModule (line 14) | class TweetModule {}
FILE: src/tweet/tweet.service.ts
class TweetService (line 9) | class TweetService {
method constructor (line 10) | constructor(@InjectModel(Tweet.name) private tweetModel: Model<Tweet>) {}
method create (line 11) | create(createTweetDto: CreateTweetDto) {
method savePrject (line 21) | async savePrject(user_id: string, project: TweetProject) {
method getData (line 58) | async getData(user_id: string) {
method findAll (line 66) | findAll() {
method findOne (line 70) | async findOne(id: string) {
method update (line 74) | update(id: number, updateTweetDto: UpdateTweetDto) {
method remove (line 78) | remove(id: number) {
FILE: src/users/dto/create-user.dto.ts
class CreateUserDto (line 3) | class CreateUserDto extends User{}
FILE: src/users/dto/update-user.dto.ts
class UpdateUserDto (line 4) | class UpdateUserDto extends PartialType(CreateUserDto) {}
FILE: src/users/schema/user.schema.ts
type UserDocument (line 5) | type UserDocument = HydratedDocument<User>;
class User (line 8) | class User {
FILE: src/users/users.controller.ts
class UsersController (line 20) | class UsersController {
method constructor (line 21) | constructor(
method createUser (line 26) | createUser(@Body() createUserDto: CreateUserDto) {
method loginBywechat (line 34) | loginBywechat(@Body() createUserDto: CreateUserDto) {
method registerByUsername (line 43) | registerByUsername(@Body() createUserDto: CreateUserDto) {
method loginByUsername (line 52) | loginByUsername(@Body() createUserDto: CreateUserDto) {
method findAll (line 57) | findAll() {
method findOne (line 62) | findOne(@Param('id') id: string) {
method update (line 67) | update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
method remove (line 72) | remove(@Param('id') id: string) {
FILE: src/users/users.module.ts
class UsersModule (line 16) | class UsersModule {}
FILE: src/users/users.service.ts
type RegistRes (line 13) | type RegistRes = {
class UsersService (line 20) | class UsersService {
method constructor (line 21) | constructor(
method create (line 30) | async create(createUserDto: CreateUserDto) {
method registerByUsername (line 63) | async registerByUsername(createUserDto: CreateUserDto) {
method loginBywechat (line 91) | async loginBywechat(createUserDto: CreateUserDto) {
method loginByUsername (line 99) | async loginByUsername(createUserDto: CreateUserDto) {
method autoLogin (line 127) | async autoLogin(user: User) {
method findAll (line 131) | findAll() {
method findOne (line 135) | findOne(id: string) {
method findByUsername (line 139) | async findByUsername(username: string) {
method findByEmail (line 143) | async findByEmail(email: string) {
method findByWxUnionid (line 147) | async findByWxUnionid(wx_unionid: string) {
method update (line 151) | async update(id: string, updateUserDto: UpdateUserDto) {
method remove (line 156) | async remove(id: string) {
method hashPassword (line 163) | async hashPassword(password: string) {
method comparePassword (line 168) | async comparePassword(password: string, hash: string) {
method createToken (line 181) | async createToken(_id: string, username: string) {
method updateToken (line 194) | async updateToken(_id, username) {
method getUserInfoByToken (line 204) | private async getUserInfoByToken(token: string) {
method validateToken (line 212) | async validateToken(token: string): Promise<User | false> {
FILE: src/wechat-auth/wechat-auth.controller.ts
class WechatAuthController (line 21) | class WechatAuthController {
method constructor (line 22) | constructor(
method getUserInfo (line 41) | async getUserInfo(@Query('code') code: string) {
method loginByOpenid (line 90) | async loginByOpenid(
method hangleMessage (line 156) | async hangleMessage(
method receiveMessage (line 333) | receiveMessage(
FILE: src/wechat-auth/wechat-auth.module.ts
class WechatAuthModule (line 15) | class WechatAuthModule {}
FILE: src/wechat-auth/wechat-auth.service.ts
class WechatAuthService (line 9) | class WechatAuthService {
method constructor (line 10) | constructor(
method getAccess_token (line 29) | private async getAccess_token(code) {
method getUserinfo (line 47) | async getUserinfo(code: string) {
method getMediaId (line 71) | async getMediaId(imageUrl: string, type?: string): Promise<string> {
method getAccessToken (line 103) | private async getAccessToken(): Promise<string> {
method sendServiceImageMessge (line 133) | async sendServiceImageMessge(
method saveCommand (line 168) | async saveCommand(command: string, openid: string) {
method getCommand (line 176) | async getCommand(openid: string) {
FILE: src/ws/ws.gateway.ts
class WsGateway (line 18) | class WsGateway implements OnGatewayInit, OnGatewayConnection {
method constructor (line 19) | constructor(
method afterInit (line 25) | afterInit(server: any) {
method handleConnection (line 33) | handleConnection(client: Socket) {
method handleMessage (line 38) | handleMessage(client: any, payload: any): string {
method handleDrawMessage (line 44) | async handleDrawMessage(client: any, payload: any): Promise<string> {
method sendSystemMessage (line 88) | sendSystemMessage(socketid: string, message: string) {
Condensed preview — 89 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,458K chars).
[
{
"path": ".eslintrc.js",
"chars": 723,
"preview": "module.exports = {\n parser: '@typescript-eslint/parser',\n parserOptions: {\n project: 'tsconfig.json',\n tsconfigR"
},
{
"path": ".gitignore",
"chars": 459,
"preview": "# compiled output\n/dist\n/node_modules\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
},
{
"path": ".prettierrc",
"chars": 73,
"preview": "{\n \"singleQuote\": true,\n \"trailingComma\": \"all\",\n \"endOfline\":\"auto\"\n}"
},
{
"path": ".run/Comfy-server.run.xml",
"chars": 2629,
"preview": "<component name=\"ProjectRunConfigurationManager\">\n <configuration default=\"false\" name=\"Comfy-server\" type=\"docker-depl"
},
{
"path": "Dockerfile",
"chars": 549,
"preview": "\n# 第二阶段\nFROM node:20.12.1 AS runtime-stage\n#2、作者\nMAINTAINER bobovinch\n# 创建工作目录\nRUN mkdir -p /app\nWORKDIR /app\n\n# 复制构建阶段生"
},
{
"path": "README.md",
"chars": 4854,
"preview": "<p align=\"center\">\n <a href=\"http://nestjs.com/\" target=\"blank\"><img src=\"https://nestjs.com/img/logo-small.svg\" width="
},
{
"path": "docker-compose.yml.example",
"chars": 3372,
"preview": "# 非 host 版本, 不使用本机代理\n# (不懂 Docker 的,只需要关心 OPENAI_BASE_URL 和 CHAT_API_KEY 即可!)\nversion: '3'\nservices:\n comfy-server:\n "
},
{
"path": "init.sql",
"chars": 23,
"preview": "CREATE DATABASE oneapi;"
},
{
"path": "nest-cli.json",
"chars": 171,
"preview": "{\n \"$schema\": \"https://json.schemastore.org/nest-cli\",\n \"collection\": \"@nestjs/schematics\",\n \"sourceRoot\": \"src\",\n \""
},
{
"path": "package.json",
"chars": 3264,
"preview": "{\n \"name\": \"myserver\",\n \"version\": \"0.0.1\",\n \"description\": \"<p align=\\\"center\\\">\\r <a href=\\\"http://nestjs.com/\\\" "
},
{
"path": "pm2.config.js",
"chars": 321,
"preview": "/**\n * this is a pm2 starter config file\n * @type {{apps: [{watch: boolean, name: string, env: {NODE_ENV: string}, scrip"
},
{
"path": "src/app.controller.ts",
"chars": 462,
"preview": "import { Controller, Get, Inject } from '@nestjs/common';\nimport { AppService } from './app.service';\nimport { DrawServi"
},
{
"path": "src/app.module.ts",
"chars": 2678,
"preview": "import {\n MiddlewareConsumer,\n Module,\n NestModule,\n RequestMethod,\n} from '@nestjs/common';\nimport { AppController "
},
{
"path": "src/app.service.ts",
"chars": 225,
"preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class AppService {\n // 是否启用保存绘画历史记录\n public Draw_Sa"
},
{
"path": "src/auth/auth.controller.ts",
"chars": 1001,
"preview": "import { AuthService } from './auth.service';\nimport {\n Get,\n Query,\n Body,\n Controller,\n Post,\n HttpCode,\n HttpS"
},
{
"path": "src/auth/auth.guard.ts",
"chars": 1393,
"preview": "import {\n CanActivate,\n ExecutionContext,\n Injectable,\n UnauthorizedException,\n} from '@nestjs/common';\nimport { Jwt"
},
{
"path": "src/auth/auth.module.ts",
"chars": 570,
"preview": "import { Module } from '@nestjs/common';\nimport { AuthController } from './auth.controller';\nimport { AuthService } from"
},
{
"path": "src/auth/auth.service.ts",
"chars": 727,
"preview": "import { Injectable, UnauthorizedException } from '@nestjs/common';\nimport { UsersService } from '../users/users.service"
},
{
"path": "src/auth/constants.ts",
"chars": 75,
"preview": "export const jwtConstants = {\n secret: 'this is a very secret secret',\n};\n"
},
{
"path": "src/cache/cache.controller.ts",
"chars": 210,
"preview": "import { Controller } from '@nestjs/common';\nimport { CacheService } from './cache.service';\n\n@Controller('cache')\nexpor"
},
{
"path": "src/cache/cache.module.ts",
"chars": 754,
"preview": "import { Module, Global } from '@nestjs/common';\nimport { CacheService } from './cache.service';\nimport { CacheControlle"
},
{
"path": "src/cache/cache.service.ts",
"chars": 1229,
"preview": "import { Injectable } from '@nestjs/common';\nimport Redis from 'ioredis';\nimport { ConfigService } from '@nestjs/config'"
},
{
"path": "src/draw/DrawCosumer.ts",
"chars": 7268,
"preview": "import {\n Process,\n Processor,\n OnQueueActive,\n OnQueueCompleted,\n} from '@nestjs/bull';\nimport { Job } from 'bull';"
},
{
"path": "src/draw/data/AImodel_api.json",
"chars": 13106,
"preview": "{\n \"42\": {\n \"inputs\": {\n \"upscale_method\": \"nearest-exact\",\n \"scale_by\": 1,\n \"image\": [\n \"170\""
},
{
"path": "src/draw/data/DrawConfig.ts",
"chars": 851,
"preview": "/**\n * 绘画模块配置参数\n */\n\nexport const drawConfig={\n defaultTimeOut: 60, //默认任务超时时间\n};\n\nexport const ApiTimeOut = [\n {\n "
},
{
"path": "src/draw/data/aistudio_api.json",
"chars": 11870,
"preview": "{\n \"9\": {\n \"inputs\": {\n \"ipadapter_file\": \"ip-adapter-faceid-plusv2_sd15.bin\"\n },\n \"class_type\": \"IPAdapt"
},
{
"path": "src/draw/data/api_matting.json",
"chars": 2312,
"preview": "{\n \"5\": {\n \"inputs\": {\n \"prompt\": [\n \"19\",\n 0\n ],\n \"threshold\": 0.31,\n \"sam_model\""
},
{
"path": "src/draw/data/api_removebg.json",
"chars": 1470,
"preview": "{\n \"62\": {\n \"inputs\": {\n \"image_path\": \"E:\\\\ComfyUI_windows_portable\\\\ComfyUI\\\\input\\\\canvasimage (35).png\",\n "
},
{
"path": "src/draw/data/api_upscale.json",
"chars": 1328,
"preview": "{\n \"5\": {\n \"inputs\": {\n \"output_path\": \"[time(%Y-%m-%d)]\",\n \"filename_prefix\": [\n \"16\",\n 0\n "
},
{
"path": "src/draw/data/api_upscale_detailfix.json",
"chars": 3023,
"preview": "{\n \"5\": {\n \"inputs\": {\n \"output_path\": \"[time(%Y-%m-%d)]\",\n \"filename_prefix\": [\n \"16\",\n 0\n "
},
{
"path": "src/draw/data/api_wechat_img2imgi.json",
"chars": 10592,
"preview": "{\n \"18\": {\n \"inputs\": {\n \"text\": \"paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), "
},
{
"path": "src/draw/data/impaiting_api.json",
"chars": 10793,
"preview": "{\n \"18\": {\n \"inputs\": {\n \"text\": \"paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), "
},
{
"path": "src/draw/data/objectInfo.json",
"chars": 1918213,
"preview": "{\n \"KSampler\": {\n \"input\": {\n \"required\": {\n \"model\": [\n \"MODEL\"\n ],\n \"seed\": [\n "
},
{
"path": "src/draw/data/test.json",
"chars": 10319,
"preview": "{\n \"source\": \"web\",\n \"prompt\": {\n \"18\": {\n \"inputs\": {\n \"text\": \"paintings, sketches, (worst quality:2)"
},
{
"path": "src/draw/data/text2imgapi.json",
"chars": 10407,
"preview": "{\n \"18\": {\n \"inputs\": {\n \"text\": \"paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), "
},
{
"path": "src/draw/data/workflow_api_faceswap.ts",
"chars": 2704,
"preview": "export const FaceSwap = {\n '63': {\n inputs: {\n enabled: true,\n swap_model: 'inswapper_128.onnx',\n fac"
},
{
"path": "src/draw/data/workflow_api_hdfix_4.ts",
"chars": 1505,
"preview": "export const workflowApiHdfix4 = {\n '5': {\n inputs: {\n output_path: '[time(%Y-%m-%d)]',\n filename_prefix: "
},
{
"path": "src/draw/data/workflow_api_image2img.json",
"chars": 11175,
"preview": "{\n \"18\": {\n \"inputs\": {\n \"text\": \"paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), "
},
{
"path": "src/draw/data/workflow_api_image2img.ts",
"chars": 4617,
"preview": "export const image2img = {\n '18': {\n inputs: {\n text: 'paintings, sketches, (worst quality:2), (low quality:2),"
},
{
"path": "src/draw/data/workflow_api_img2video.json",
"chars": 2934,
"preview": "{\n \"8\": {\n \"inputs\": {\n \"width\": [\n \"36\",\n 2\n ],\n \"height\": [\n \"36\",\n 1\n "
},
{
"path": "src/draw/data/workflow_api_img2video.ts",
"chars": 2458,
"preview": "export const img2video = {\n '8': {\n inputs: {\n width: ['36', 2],\n height: ['36', 1],\n video_frames: 1"
},
{
"path": "src/draw/data/workflow_api_inpainting.json",
"chars": 5100,
"preview": "{\n \"18\": {\n \"inputs\": {\n \"text\": \"paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), "
},
{
"path": "src/draw/data/workflow_api_inpainting.ts",
"chars": 4460,
"preview": "export const inpainting = {\n '18': {\n inputs: {\n text: 'paintings, sketches, (worst quality:2), (low quality:2)"
},
{
"path": "src/draw/data/workflow_api_matting.json",
"chars": 2734,
"preview": "{\n \"5\": {\n \"inputs\": {\n \"prompt\": [\n \"67\",\n 0\n ],\n \"threshold\": 0.3,\n \"sam_model\":"
},
{
"path": "src/draw/data/workflow_api_matting.ts",
"chars": 2380,
"preview": "export const matting = {\n '5': {\n inputs: {\n prompt: ['67', 0],\n threshold: 0.3,\n sam_model: ['6', 0]"
},
{
"path": "src/draw/data/workflow_api_model.ts",
"chars": 11267,
"preview": "export const workflowApiModel = {\n '63': {\n inputs: {\n samples: ['64', 0],\n mask: ['170', 1],\n },\n c"
},
{
"path": "src/draw/data/workflow_api_removebg.json",
"chars": 1893,
"preview": "{\n \"62\": {\n \"inputs\": {\n \"image_path\": \"http://region-8.autodl.pro:23781/view?subfolder=2024-04-06&filename=R-C"
},
{
"path": "src/draw/data/workflow_api_removebg.ts",
"chars": 1719,
"preview": "export const removebg = {\n '62': {\n inputs: {\n image_path:\n 'http://region-8.autodl.pro:23781/view?subfo"
},
{
"path": "src/draw/data/workflow_api_tagger.ts",
"chars": 854,
"preview": "export const workflowApiTagger = {\n '10': {\n inputs: {\n image_path: './ComfyUI/input/example.png',\n RGBA: "
},
{
"path": "src/draw/data/workflow_api_text2img.json",
"chars": 9503,
"preview": "{\n \"18\": {\n \"inputs\": {\n \"text\": \"paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), "
},
{
"path": "src/draw/data/workflow_api_text2img.ts",
"chars": 8645,
"preview": "export const text2img = {\n '18': {\n inputs: {\n text: 'paintings, sketches, (worst quality:2), (low quality:2), "
},
{
"path": "src/draw/draw.controller.ts",
"chars": 21720,
"preview": "import { Get, Query, Body, Controller, Post } from '@nestjs/common';\nimport { DrawService } from './draw.service';\nimpor"
},
{
"path": "src/draw/draw.module.ts",
"chars": 1027,
"preview": "import { Module } from '@nestjs/common';\nimport { DrawService } from './draw.service';\nimport { DrawController } from '."
},
{
"path": "src/draw/draw.service.ts",
"chars": 25302,
"preview": "import { Injectable, Logger } from '@nestjs/common';\nimport { InjectQueue } from '@nestjs/bull';\nimport { Queue } from '"
},
{
"path": "src/file/file.controller.ts",
"chars": 788,
"preview": "import { Controller, Get } from '@nestjs/common';\nimport { FileService } from './file.service';\n\n@Controller('file')\nexp"
},
{
"path": "src/file/file.module.ts",
"chars": 267,
"preview": "import { Module } from '@nestjs/common';\nimport { FileService } from './file.service';\nimport { FileController } from '."
},
{
"path": "src/file/file.service.ts",
"chars": 3644,
"preview": "import { Injectable } from '@nestjs/common';\nimport { ConfigService } from '@nestjs/config';\nimport { nanoid } from 'nan"
},
{
"path": "src/main.ts",
"chars": 1016,
"preview": "import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\nimport { SwaggerModule, DocumentBu"
},
{
"path": "src/middleware/XML.middleware.ts",
"chars": 1118,
"preview": "import { Injectable, NestMiddleware } from '@nestjs/common';\nimport { NextFunction, Request, Response } from 'express';\n"
},
{
"path": "src/oneapi/tokens/dto/create-token.dto.ts",
"chars": 96,
"preview": "import { Token } from '../entities/token.entity';\n\nexport class CreateTokenDto extends Token {}\n"
},
{
"path": "src/oneapi/tokens/dto/update-token.dto.ts",
"chars": 173,
"preview": "import { PartialType } from '@nestjs/mapped-types';\nimport { CreateTokenDto } from './create-token.dto';\n\nexport class U"
},
{
"path": "src/oneapi/tokens/entities/token.entity.ts",
"chars": 675,
"preview": "import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';\n\n@Entity({ name: 'tokens' })\nexport class Token {\n @P"
},
{
"path": "src/oneapi/tokens/tokens.controller.ts",
"chars": 983,
"preview": "import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';\nimport { TokensService } from './tok"
},
{
"path": "src/oneapi/tokens/tokens.module.ts",
"chars": 401,
"preview": "import { Module } from '@nestjs/common';\nimport { TokensService } from './tokens.service';\nimport { TokensController } f"
},
{
"path": "src/oneapi/tokens/tokens.service.ts",
"chars": 1099,
"preview": "import { Injectable } from '@nestjs/common';\nimport { CreateTokenDto } from './dto/create-token.dto';\nimport { UpdateTok"
},
{
"path": "src/oneapi/users/dto/create-user.dto.ts",
"chars": 104,
"preview": "import { OneAPIUser } from '../entities/user.entity';\n\nexport class CreateUserDto extends OneAPIUser {}\n"
},
{
"path": "src/oneapi/users/dto/update-user.dto.ts",
"chars": 164,
"preview": "import { PartialType } from '@nestjs/swagger';\nimport { CreateUserDto } from './create-user.dto';\n\nexport class UpdateUs"
},
{
"path": "src/oneapi/users/entities/user.entity.ts",
"chars": 1912,
"preview": "import {\n Entity,\n Column,\n PrimaryGeneratedColumn,\n BaseEntity,\n} from 'typeorm';\nimport { ApiProperty } from '@nes"
},
{
"path": "src/oneapi/users/users.controller.ts",
"chars": 1511,
"preview": "import {\n Controller,\n Get,\n Post,\n Body,\n Patch,\n Param,\n Delete,\n} from '@nestjs/common';\nimport { OneAPIUsersS"
},
{
"path": "src/oneapi/users/users.module.ts",
"chars": 469,
"preview": "import { Module } from '@nestjs/common';\nimport { OneAPIUsersService } from './users.service';\nimport { UsersController "
},
{
"path": "src/oneapi/users/users.service.ts",
"chars": 1559,
"preview": "import { Injectable, Logger } from '@nestjs/common';\nimport { OneAPIUser } from './entities/user.entity';\n\nimport { Inje"
},
{
"path": "src/tweet/dto/create-tweet.dto.ts",
"chars": 95,
"preview": "import { Tweet } from '../entities/tweet.schema';\n\nexport class CreateTweetDto extends Tweet{}\n"
},
{
"path": "src/tweet/dto/update-tweet.dto.ts",
"chars": 168,
"preview": "import { PartialType } from '@nestjs/swagger';\nimport { CreateTweetDto } from './create-tweet.dto';\n\nexport class Update"
},
{
"path": "src/tweet/entities/tweet.schema.ts",
"chars": 1913,
"preview": "import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';\nimport { HydratedDocument } from 'mongoose';\nimport { Ap"
},
{
"path": "src/tweet/tweet.controller.ts",
"chars": 1149,
"preview": "import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';\nimport { TweetService } from './twee"
},
{
"path": "src/tweet/tweet.module.ts",
"chars": 455,
"preview": "import { Module } from '@nestjs/common';\nimport { TweetService } from './tweet.service';\nimport { TweetController } from"
},
{
"path": "src/tweet/tweet.service.ts",
"chars": 2006,
"preview": "import { Injectable } from '@nestjs/common';\nimport { CreateTweetDto } from './dto/create-tweet.dto';\nimport { UpdateTwe"
},
{
"path": "src/users/dto/create-user.dto.ts",
"chars": 89,
"preview": "import { User } from '../schema/user.schema';\n\nexport class CreateUserDto extends User{}\n"
},
{
"path": "src/users/dto/update-user.dto.ts",
"chars": 164,
"preview": "import { PartialType } from '@nestjs/swagger';\nimport { CreateUserDto } from './create-user.dto';\n\nexport class UpdateUs"
},
{
"path": "src/users/schema/user.schema.ts",
"chars": 1962,
"preview": "import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';\nimport { HydratedDocument } from 'mongoose';\nimport { Ap"
},
{
"path": "src/users/users.controller.ts",
"chars": 1771,
"preview": "import {\n Query,\n Controller,\n Get,\n Post,\n Body,\n Patch,\n Param,\n Delete,\n} from '@nestjs/common';\nimport { Use"
},
{
"path": "src/users/users.module.ts",
"chars": 544,
"preview": "import { Module } from '@nestjs/common';\nimport { UsersService } from './users.service';\nimport { UsersController } from"
},
{
"path": "src/users/users.service.ts",
"chars": 5442,
"preview": "import { Injectable } from '@nestjs/common';\nimport { CreateUserDto } from './dto/create-user.dto';\nimport { InjectModel"
},
{
"path": "src/wechat-auth/wechat-auth.controller.ts",
"chars": 9765,
"preview": "import {\n Body,\n Controller,\n Get,\n HttpCode,\n Logger,\n Post,\n Query,\n Req,\n Res,\n} from '@nestjs/common';\nimpo"
},
{
"path": "src/wechat-auth/wechat-auth.module.ts",
"chars": 574,
"preview": "import { Module } from '@nestjs/common';\nimport { WechatAuthService } from './wechat-auth.service';\nimport { WechatAuthC"
},
{
"path": "src/wechat-auth/wechat-auth.service.ts",
"chars": 5176,
"preview": "import { Injectable, Logger } from '@nestjs/common';\nimport axios from 'axios';\nimport { ConfigService } from '@nestjs/c"
},
{
"path": "src/ws/ws.gateway.ts",
"chars": 2547,
"preview": "import {\n SubscribeMessage,\n WebSocketGateway,\n OnGatewayInit,\n OnGatewayConnection,\n} from '@nestjs/websockets';\nim"
},
{
"path": "tsconfig.build.json",
"chars": 97,
"preview": "{\n \"extends\": \"./tsconfig.json\",\n \"exclude\": [\"node_modules\", \"test\", \"dist\", \"**/*spec.ts\"]\n}\n"
},
{
"path": "tsconfig.json",
"chars": 577,
"preview": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"declaration\": true,\n \"removeComments\": true,\n \"emitDecorat"
}
]
About this extraction
This page contains the full source code of the bobvinch/comfy-server GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 89 files (2.1 MB), approximately 554.3k tokens, and a symbol index with 222 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.