Chat with an already-loaded Qwen2.5-VL or Qwen3-VL text encoder instead of loading a separate LLM -- multi-turn, vision-capable chat sharing the same VRAM, exposed as both a sidebar panel and an OpenAI-compatible /v1/chat/completions endpoint. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
347 lines
11 KiB
JSON
347 lines
11 KiB
JSON
{
|
|
"id": "chat-te-sample-qwen-image-edit",
|
|
"revision": 0,
|
|
"last_node_id": 200,
|
|
"last_link_id": 20,
|
|
"nodes": [
|
|
{
|
|
"id": 99,
|
|
"type": "MarkdownNote",
|
|
"pos": [0, -260],
|
|
"size": [700, 220],
|
|
"flags": {},
|
|
"order": 0,
|
|
"mode": 0,
|
|
"inputs": [],
|
|
"outputs": [],
|
|
"title": "Chat TE サンプルワークフロー",
|
|
"properties": {},
|
|
"widgets_values": [
|
|
"このワークフローは Chat TE (chat_TE カスタムノード) の推奨連携パターンを示すサンプルです。\n\n1. CLIPLoader (下のノード) の直後に `Qwen Chat Bridge (Register CLIP)` を挿入し、そのCLIPをチャットのバックエンドとして登録しています。\n2. 画像生成側 (TextEncodeQwenImageEdit x2) にも同じCLIPを配線しているため、チャットと画像生成が完全に同一の重みを共有します (VRAM二重消費なし)。\n3. 左サイドバーの「Chat TE」タブでモデルを再ロードする必要はありません。ワークフロー実行時にこのグラフがロードしたCLIPがそのまま使われます。\n4. キャンバス上で下の「Positive Prompt (chat_te)」ノードを選択し、チャットパネルの返答から「Send to encoder」を押すと、そのテキストがこのノードの `prompt` ウィジェットに書き込まれます。"
|
|
],
|
|
"color": "#222",
|
|
"bgcolor": "#000"
|
|
},
|
|
{
|
|
"id": 37,
|
|
"type": "UNETLoader",
|
|
"pos": [0, 0],
|
|
"size": [330, 90],
|
|
"flags": {},
|
|
"order": 1,
|
|
"mode": 0,
|
|
"inputs": [],
|
|
"outputs": [
|
|
{ "name": "MODEL", "type": "MODEL", "links": [1] }
|
|
],
|
|
"properties": {
|
|
"cnr_id": "comfy-core",
|
|
"Node name for S&R": "UNETLoader",
|
|
"models": [
|
|
{ "name": "qwen_image_edit_fp8_e4m3fn.safetensors", "url": "https://huggingface.co/Comfy-Org/Qwen-Image-Edit_ComfyUI/resolve/main/split_files/diffusion_models/qwen_image_edit_fp8_e4m3fn.safetensors", "directory": "diffusion_models" }
|
|
]
|
|
},
|
|
"widgets_values": ["diffusion_models\\qwen_image_edit_fp8_e4m3fn.safetensors", "default"]
|
|
},
|
|
{
|
|
"id": 38,
|
|
"type": "CLIPLoader",
|
|
"pos": [0, 150],
|
|
"size": [330, 110],
|
|
"flags": {},
|
|
"order": 2,
|
|
"mode": 0,
|
|
"inputs": [],
|
|
"outputs": [
|
|
{ "name": "CLIP", "type": "CLIP", "links": [5] }
|
|
],
|
|
"properties": {
|
|
"cnr_id": "comfy-core",
|
|
"Node name for S&R": "CLIPLoader",
|
|
"models": [
|
|
{ "name": "qwen_2.5_vl_7b_fp8_scaled.safetensors", "url": "https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI/resolve/main/split_files/text_encoders/qwen_2.5_vl_7b_fp8_scaled.safetensors", "directory": "text_encoders" }
|
|
]
|
|
},
|
|
"widgets_values": ["qwen_2.5_vl_7b_fp8_scaled.safetensors", "qwen_image", "default"]
|
|
},
|
|
{
|
|
"id": 200,
|
|
"type": "QwenChatBridgeLoader",
|
|
"pos": [400, 150],
|
|
"size": [300, 60],
|
|
"flags": {},
|
|
"order": 3,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{ "name": "clip", "type": "CLIP", "link": 5 }
|
|
],
|
|
"outputs": [
|
|
{ "name": "CLIP", "type": "CLIP", "links": [6, 7] }
|
|
],
|
|
"title": "Qwen Chat Bridge (Register CLIP)",
|
|
"properties": {
|
|
"Node name for S&R": "QwenChatBridgeLoader"
|
|
},
|
|
"widgets_values": []
|
|
},
|
|
{
|
|
"id": 39,
|
|
"type": "VAELoader",
|
|
"pos": [0, 300],
|
|
"size": [330, 60],
|
|
"flags": {},
|
|
"order": 4,
|
|
"mode": 0,
|
|
"inputs": [],
|
|
"outputs": [
|
|
{ "name": "VAE", "type": "VAE", "links": [8, 9, 10, 11] }
|
|
],
|
|
"properties": {
|
|
"cnr_id": "comfy-core",
|
|
"Node name for S&R": "VAELoader",
|
|
"models": [
|
|
{ "name": "qwen_image_vae.safetensors", "url": "https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI/resolve/main/split_files/vae/qwen_image_vae.safetensors", "directory": "vae" }
|
|
]
|
|
},
|
|
"widgets_values": ["qwen_image_vae.safetensors"]
|
|
},
|
|
{
|
|
"id": 78,
|
|
"type": "LoadImage",
|
|
"pos": [0, 420],
|
|
"size": [274, 314],
|
|
"flags": {},
|
|
"order": 5,
|
|
"mode": 0,
|
|
"inputs": [],
|
|
"outputs": [
|
|
{ "name": "IMAGE", "type": "IMAGE", "links": [12] },
|
|
{ "name": "MASK", "type": "MASK", "links": null }
|
|
],
|
|
"properties": {
|
|
"cnr_id": "comfy-core",
|
|
"Node name for S&R": "LoadImage"
|
|
},
|
|
"widgets_values": ["example.png", "image"]
|
|
},
|
|
{
|
|
"id": 93,
|
|
"type": "ImageScaleToTotalPixels",
|
|
"pos": [340, 420],
|
|
"size": [270, 106],
|
|
"flags": {},
|
|
"order": 6,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{ "name": "image", "type": "IMAGE", "link": 12 }
|
|
],
|
|
"outputs": [
|
|
{ "name": "IMAGE", "type": "IMAGE", "links": [13, 14, 15] }
|
|
],
|
|
"properties": {
|
|
"cnr_id": "comfy-core",
|
|
"Node name for S&R": "ImageScaleToTotalPixels"
|
|
},
|
|
"widgets_values": ["lanczos", 1.5, 1]
|
|
},
|
|
{
|
|
"id": 89,
|
|
"type": "LoraLoaderModelOnly",
|
|
"pos": [400, 0],
|
|
"size": [300, 82],
|
|
"flags": {},
|
|
"order": 7,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{ "name": "model", "type": "MODEL", "link": 1 }
|
|
],
|
|
"outputs": [
|
|
{ "name": "MODEL", "type": "MODEL", "links": [2] }
|
|
],
|
|
"properties": {
|
|
"cnr_id": "comfy-core",
|
|
"Node name for S&R": "LoraLoaderModelOnly",
|
|
"models": [
|
|
{ "name": "Qwen-Image-Edit-Lightning-4steps-V1.0-bf16.safetensors", "url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Edit-Lightning-4steps-V1.0-bf16.safetensors", "directory": "loras" }
|
|
]
|
|
},
|
|
"widgets_values": ["qwen\\Qwen-Image-Edit-Lightning-4steps-V1.0-bf16.safetensors", 1]
|
|
},
|
|
{
|
|
"id": 66,
|
|
"type": "ModelSamplingAuraFlow",
|
|
"pos": [740, 0],
|
|
"size": [290, 60],
|
|
"flags": {},
|
|
"order": 8,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{ "name": "model", "type": "MODEL", "link": 2 }
|
|
],
|
|
"outputs": [
|
|
{ "name": "MODEL", "type": "MODEL", "links": [3] }
|
|
],
|
|
"properties": { "cnr_id": "comfy-core", "Node name for S&R": "ModelSamplingAuraFlow" },
|
|
"widgets_values": [3]
|
|
},
|
|
{
|
|
"id": 75,
|
|
"type": "CFGNorm",
|
|
"pos": [1060, 0],
|
|
"size": [290, 60],
|
|
"flags": {},
|
|
"order": 9,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{ "name": "model", "type": "MODEL", "link": 3 }
|
|
],
|
|
"outputs": [
|
|
{ "name": "patched_model", "type": "MODEL", "links": [4] }
|
|
],
|
|
"properties": { "cnr_id": "comfy-core", "Node name for S&R": "CFGNorm" },
|
|
"widgets_values": [1]
|
|
},
|
|
{
|
|
"id": 76,
|
|
"type": "TextEncodeQwenImageEdit",
|
|
"pos": [740, 150],
|
|
"size": [360, 150],
|
|
"flags": {},
|
|
"order": 10,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{ "name": "clip", "type": "CLIP", "link": 6 },
|
|
{ "name": "vae", "type": "VAE", "shape": 7, "link": 8 },
|
|
{ "name": "image", "type": "IMAGE", "shape": 7, "link": 13 }
|
|
],
|
|
"outputs": [
|
|
{ "name": "CONDITIONING", "type": "CONDITIONING", "links": [16] }
|
|
],
|
|
"title": "Positive Prompt (chat_te)",
|
|
"properties": { "cnr_id": "comfy-core", "Node name for S&R": "TextEncodeQwenImageEdit" },
|
|
"widgets_values": ["背景を夕焼けの海辺に変更し、全体を暖色系のトーンにしてください。"],
|
|
"color": "#223",
|
|
"bgcolor": "#335"
|
|
},
|
|
{
|
|
"id": 77,
|
|
"type": "TextEncodeQwenImageEdit",
|
|
"pos": [740, 350],
|
|
"size": [360, 150],
|
|
"flags": {},
|
|
"order": 11,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{ "name": "clip", "type": "CLIP", "link": 7 },
|
|
{ "name": "vae", "type": "VAE", "shape": 7, "link": 9 },
|
|
{ "name": "image", "type": "IMAGE", "shape": 7, "link": 14 }
|
|
],
|
|
"outputs": [
|
|
{ "name": "CONDITIONING", "type": "CONDITIONING", "links": [17] }
|
|
],
|
|
"title": "Negative Prompt",
|
|
"properties": { "cnr_id": "comfy-core", "Node name for S&R": "TextEncodeQwenImageEdit" },
|
|
"widgets_values": [""],
|
|
"color": "#322",
|
|
"bgcolor": "#533"
|
|
},
|
|
{
|
|
"id": 88,
|
|
"type": "VAEEncode",
|
|
"pos": [400, 560],
|
|
"size": [180, 46],
|
|
"flags": {},
|
|
"order": 12,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{ "name": "pixels", "type": "IMAGE", "link": 15 },
|
|
{ "name": "vae", "type": "VAE", "link": 10 }
|
|
],
|
|
"outputs": [
|
|
{ "name": "LATENT", "type": "LATENT", "links": [18] }
|
|
],
|
|
"properties": { "cnr_id": "comfy-core", "Node name for S&R": "VAEEncode" },
|
|
"widgets_values": []
|
|
},
|
|
{
|
|
"id": 3,
|
|
"type": "KSampler",
|
|
"pos": [1150, 150],
|
|
"size": [300, 474],
|
|
"flags": {},
|
|
"order": 13,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{ "name": "model", "type": "MODEL", "link": 4 },
|
|
{ "name": "positive", "type": "CONDITIONING", "link": 16 },
|
|
{ "name": "negative", "type": "CONDITIONING", "link": 17 },
|
|
{ "name": "latent_image", "type": "LATENT", "link": 18 }
|
|
],
|
|
"outputs": [
|
|
{ "name": "LATENT", "type": "LATENT", "links": [19] }
|
|
],
|
|
"properties": { "cnr_id": "comfy-core", "Node name for S&R": "KSampler" },
|
|
"widgets_values": [0, "randomize", 4, 1, "euler", "simple", 1]
|
|
},
|
|
{
|
|
"id": 8,
|
|
"type": "VAEDecode",
|
|
"pos": [1500, 150],
|
|
"size": [210, 46],
|
|
"flags": {},
|
|
"order": 14,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{ "name": "samples", "type": "LATENT", "link": 19 },
|
|
{ "name": "vae", "type": "VAE", "link": 11 }
|
|
],
|
|
"outputs": [
|
|
{ "name": "IMAGE", "type": "IMAGE", "links": [20] }
|
|
],
|
|
"properties": { "cnr_id": "comfy-core", "Node name for S&R": "VAEDecode" },
|
|
"widgets_values": []
|
|
},
|
|
{
|
|
"id": 60,
|
|
"type": "SaveImage",
|
|
"pos": [1750, 150],
|
|
"size": [400, 420],
|
|
"flags": {},
|
|
"order": 15,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{ "name": "images", "type": "IMAGE", "link": 20 }
|
|
],
|
|
"outputs": [],
|
|
"properties": { "cnr_id": "comfy-core", "Node name for S&R": "SaveImage" },
|
|
"widgets_values": ["chat_te_sample"]
|
|
}
|
|
],
|
|
"links": [
|
|
[1, 37, 0, 89, 0, "MODEL"],
|
|
[2, 89, 0, 66, 0, "MODEL"],
|
|
[3, 66, 0, 75, 0, "MODEL"],
|
|
[4, 75, 0, 3, 0, "MODEL"],
|
|
[5, 38, 0, 200, 0, "CLIP"],
|
|
[6, 200, 0, 76, 0, "CLIP"],
|
|
[7, 200, 0, 77, 0, "CLIP"],
|
|
[8, 39, 0, 76, 1, "VAE"],
|
|
[9, 39, 0, 77, 1, "VAE"],
|
|
[10, 39, 0, 88, 1, "VAE"],
|
|
[11, 39, 0, 8, 1, "VAE"],
|
|
[12, 78, 0, 93, 0, "IMAGE"],
|
|
[13, 93, 0, 76, 2, "IMAGE"],
|
|
[14, 93, 0, 77, 2, "IMAGE"],
|
|
[15, 93, 0, 88, 0, "IMAGE"],
|
|
[16, 76, 0, 3, 1, "CONDITIONING"],
|
|
[17, 77, 0, 3, 2, "CONDITIONING"],
|
|
[18, 88, 0, 3, 3, "LATENT"],
|
|
[19, 3, 0, 8, 0, "LATENT"],
|
|
[20, 8, 0, 60, 0, "IMAGE"]
|
|
],
|
|
"groups": [],
|
|
"config": {},
|
|
"extra": {},
|
|
"version": 0.4
|
|
}
|