From ac74730ee2684baad280a6d05a6118c2c1ac3b11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Sun, 23 Nov 2025 10:48:13 +0100 Subject: [PATCH] fix: rebuild FLUX Schnell workflow with correct node types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaced CheckpointLoaderSimple with UNETLoader + DualCLIPLoader. Replaced CLIPTextEncode with CLIPTextEncodeFlux. Added proper VAELoader with ae.safetensors. Added ConditioningZeroOut for empty negative conditioning. Removed old negative prompt input (FLUX doesn't use it). Changes match FLUX Dev workflow structure. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../flux-schnell-t2i-production-v1.json | 237 +++++++++--------- 1 file changed, 121 insertions(+), 116 deletions(-) diff --git a/comfyui/workflows/text-to-image/flux-schnell-t2i-production-v1.json b/comfyui/workflows/text-to-image/flux-schnell-t2i-production-v1.json index 97da3c8..448b888 100644 --- a/comfyui/workflows/text-to-image/flux-schnell-t2i-production-v1.json +++ b/comfyui/workflows/text-to-image/flux-schnell-t2i-production-v1.json @@ -1,12 +1,12 @@ { - "last_node_id": 12, - "last_link_id": 15, + "last_node_id": 9, + "last_link_id": 9, "nodes": [ { "id": 1, - "type": "CheckpointLoaderSimple", + "type": "UNETLoader", "pos": [50, 100], - "size": {"0": 350, "1": 100}, + "size": [350, 100], "flags": {}, "order": 0, "mode": 0, @@ -16,34 +16,44 @@ "type": "MODEL", "links": [1], "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [2, 3], - "slot_index": 1 - }, - { - "name": "VAE", - "type": "VAE", - "links": [4], - "slot_index": 2 } ], "properties": { - "Node name for S&R": "CheckpointLoaderSimple" + "Node name for S&R": "UNETLoader" }, - "widgets_values": ["diffusers/FLUX.1-schnell"], - "title": "FLUX Schnell Checkpoint Loader" + "widgets_values": ["flux1-schnell.safetensors", "default"], + "title": "FLUX Schnell UNET Loader" }, { "id": 2, - "type": "CLIPTextEncode", - "pos": [450, 100], - "size": {"0": 400, "1": 200}, + "type": "DualCLIPLoader", + "pos": [50, 250], + "size": [350, 100], "flags": {}, "order": 1, "mode": 0, + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [2], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DualCLIPLoader" + }, + "widgets_values": ["t5xxl_fp16.safetensors", "clip_l.safetensors", "flux"], + "title": "FLUX CLIP Loader" + }, + { + "id": 3, + "type": "CLIPTextEncodeFlux", + "pos": [450, 100], + "size": [400, 250], + "flags": {}, + "order": 2, + "mode": 0, "inputs": [ { "name": "clip", @@ -55,58 +65,61 @@ { "name": "CONDITIONING", "type": "CONDITIONING", - "links": [5], + "links": [3, 8], "slot_index": 0 } ], "properties": { - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "CLIPTextEncodeFlux" }, - "widgets_values": ["A beautiful mountain landscape at sunset, highly detailed, cinematic lighting, 8k"], + "widgets_values": [ + "A beautiful mountain landscape at sunset, highly detailed, cinematic lighting, 8k", + "A beautiful mountain landscape at sunset, highly detailed, cinematic lighting, 8k", + 3.5 + ], "title": "API Positive Prompt" }, { - "id": 3, - "type": "CLIPTextEncode", - "pos": [450, 350], - "size": {"0": 400, "1": 200}, + "id": 9, + "type": "ConditioningZeroOut", + "pos": [450, 400], + "size": [315, 60], "flags": {}, - "order": 2, + "order": 3, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 3 + "name": "conditioning", + "type": "CONDITIONING", + "link": 8 } ], "outputs": [ { "name": "CONDITIONING", "type": "CONDITIONING", - "links": [6], + "links": [9], "slot_index": 0 } ], "properties": { - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "ConditioningZeroOut" }, - "widgets_values": ["blurry, low quality, distorted, watermark"], - "title": "API Negative Prompt" + "title": "Empty Negative Conditioning" }, { "id": 4, "type": "EmptyLatentImage", - "pos": [450, 600], - "size": {"0": 315, "1": 106}, + "pos": [450, 500], + "size": [315, 106], "flags": {}, - "order": 3, + "order": 4, "mode": 0, "outputs": [ { "name": "LATENT", "type": "LATENT", - "links": [7], + "links": [4], "slot_index": 0 } ], @@ -120,9 +133,9 @@ "id": 5, "type": "KSampler", "pos": [900, 100], - "size": {"0": 315, "1": 474}, + "size": [315, 474], "flags": {}, - "order": 4, + "order": 5, "mode": 0, "inputs": [ { @@ -133,66 +146,80 @@ { "name": "positive", "type": "CONDITIONING", - "link": 5 + "link": 3 }, { "name": "negative", "type": "CONDITIONING", - "link": 6 + "link": 9 }, { "name": "latent_image", "type": "LATENT", - "link": 7 + "link": 4 } ], "outputs": [ { "name": "LATENT", "type": "LATENT", - "links": [8], + "links": [5], "slot_index": 0 } ], "properties": { "Node name for S&R": "KSampler" }, - "widgets_values": [ - 42, - "fixed", - 4, - 1.0, - "euler", - "normal", - 1 - ], + "widgets_values": [42, "fixed", 4, 1.0, "euler", "normal", 1.0], "title": "FLUX Schnell Sampler (4 steps)" }, { "id": 6, + "type": "VAELoader", + "pos": [900, 600], + "size": [315, 60], + "flags": {}, + "order": 6, + "mode": 0, + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [6], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAELoader" + }, + "widgets_values": ["ae.safetensors"], + "title": "FLUX VAE Loader" + }, + { + "id": 7, "type": "VAEDecode", "pos": [1270, 100], - "size": {"0": 210, "1": 46}, + "size": [210, 46], "flags": {}, - "order": 5, + "order": 7, "mode": 0, "inputs": [ { "name": "samples", "type": "LATENT", - "link": 8 + "link": 5 }, { "name": "vae", "type": "VAE", - "link": 4 + "link": 6 } ], "outputs": [ { "name": "IMAGE", "type": "IMAGE", - "links": [9, 10], + "links": [7], "slot_index": 0 } ], @@ -201,39 +228,19 @@ }, "title": "VAE Decode" }, - { - "id": 7, - "type": "PreviewImage", - "pos": [1530, 100], - "size": {"0": 400, "1": 400}, - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 9 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "title": "Preview Output" - }, { "id": 8, "type": "SaveImage", - "pos": [1530, 550], - "size": {"0": 400, "1": 100}, + "pos": [1530, 100], + "size": [400, 100], "flags": {}, - "order": 7, + "order": 8, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 10 + "link": 7 } ], "properties": { @@ -245,49 +252,39 @@ ], "links": [ [1, 1, 0, 5, 0, "MODEL"], - [2, 1, 1, 2, 0, "CLIP"], - [3, 1, 1, 3, 0, "CLIP"], - [4, 1, 2, 6, 1, "VAE"], - [5, 2, 0, 5, 1, "CONDITIONING"], - [6, 3, 0, 5, 2, "CONDITIONING"], - [7, 4, 0, 5, 3, "LATENT"], - [8, 5, 0, 6, 0, "LATENT"], - [9, 6, 0, 7, 0, "IMAGE"], - [10, 6, 0, 8, 0, "IMAGE"] + [2, 2, 0, 3, 0, "CLIP"], + [3, 3, 0, 5, 1, "CONDITIONING"], + [4, 4, 0, 5, 3, "LATENT"], + [5, 5, 0, 7, 0, "LATENT"], + [6, 6, 0, 7, 1, "VAE"], + [7, 7, 0, 8, 0, "IMAGE"], + [8, 3, 0, 9, 0, "CONDITIONING"], + [9, 9, 0, 5, 2, "CONDITIONING"] ], "groups": [], "config": {}, "extra": { "workflow_info": { "name": "FLUX Schnell Text-to-Image Production", - "version": "1.0.0", - "author": "RunPod AI Model Orchestrator", + "version": "1.2.0", "description": "Fast text-to-image generation using FLUX.1-schnell (4 steps). Optimized for rapid prototyping and iteration.", "category": "text-to-image", "tags": ["flux", "schnell", "fast", "production", "t2i"], "requirements": { - "models": ["FLUX.1-schnell"], + "models": ["FLUX.1-schnell", "CLIP-L", "T5-XXL FP16"], "custom_nodes": [], "vram_min": "16GB", "vram_recommended": "24GB" }, "parameters": { "prompt": { - "node_id": 2, + "node_id": 3, "widget_index": 0, "type": "string", "required": true, "default": "A beautiful mountain landscape at sunset", "description": "Text description of desired image" }, - "negative_prompt": { - "node_id": 3, - "widget_index": 0, - "type": "string", - "required": false, - "default": "blurry, low quality", - "description": "Undesired elements to avoid" - }, "width": { "node_id": 4, "widget_index": 0, @@ -326,17 +323,17 @@ "default": 4, "min": 1, "max": 10, - "description": "Number of sampling steps (4 recommended for Schnell)" + "description": "Number of sampling steps (4 recommended for FLUX Schnell)" }, - "cfg": { - "node_id": 5, - "widget_index": 3, + "guidance": { + "node_id": 3, + "widget_index": 2, "type": "float", "required": false, - "default": 1.0, + "default": 3.5, "min": 1.0, - "max": 1.0, - "description": "Classifier-free guidance scale (1.0 for FLUX Schnell)" + "max": 10.0, + "description": "Guidance scale (3.5 recommended for FLUX)" } }, "outputs": { @@ -348,10 +345,18 @@ } }, "performance": { - "avg_generation_time": "5-8 seconds", - "vram_usage": "~16GB", + "avg_generation_time": "5-8 seconds (4 steps)", + "vram_usage": "~16-18GB", "gpu_utilization": "95-100%" - } + }, + "notes": [ + "FLUX uses UNETLoader instead of CheckpointLoader", + "DualCLIPLoader loads both T5-XXL and CLIP-L text encoders", + "CLIPTextEncodeFlux is FLUX-specific text encoder", + "No negative prompt for FLUX - guidance is handled differently", + "CFG scale of 1.0 recommended, guidance in text encoder", + "Schnell is optimized for 4 steps - fastest FLUX variant" + ] } }, "version": 0.4