diff --git a/models/comfyui/workflows/advanced/controlnet-fusion-production-v1.json b/models/comfyui/workflows/advanced/controlnet-fusion-production-v1.json new file mode 100644 index 0000000..faf0b40 --- /dev/null +++ b/models/comfyui/workflows/advanced/controlnet-fusion-production-v1.json @@ -0,0 +1,399 @@ +{ + "last_node_id": 14, + "last_link_id": 18, + "nodes": [ + { + "id": 1, + "type": "CheckpointLoaderSimple", + "pos": [50, 100], + "size": {"0": 350, "1": 100}, + "flags": {}, + "order": 0, + "mode": 0, + "properties": {"Node name for S&R": "CheckpointLoaderSimple"}, + "widgets_values": ["sd_xl_base_1.0.safetensors"], + "title": "SDXL Base Loader", + "outputs": [ + {"name": "MODEL", "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} + ] + }, + { + "id": 2, + "type": "CLIPTextEncode", + "pos": [450, 100], + "size": {"0": 400, "1": 200}, + "flags": {}, + "order": 1, + "mode": 0, + "properties": {"Node name for S&R": "CLIPTextEncode"}, + "widgets_values": ["A futuristic city with precise architecture"], + "title": "API Positive Prompt", + "inputs": [ + {"name": "clip", "type": "CLIP", "link": 2} + ], + "outputs": [ + {"name": "CONDITIONING", "type": "CONDITIONING", "links": [9], "slot_index": 0} + ] + }, + { + "id": 3, + "type": "CLIPTextEncode", + "pos": [450, 350], + "size": {"0": 400, "1": 200}, + "flags": {}, + "order": 2, + "mode": 0, + "properties": {"Node name for S&R": "CLIPTextEncode"}, + "widgets_values": ["blurry, low quality, distorted"], + "title": "API Negative Prompt", + "inputs": [ + {"name": "clip", "type": "CLIP", "link": 3} + ], + "outputs": [ + {"name": "CONDITIONING", "type": "CONDITIONING", "links": [10], "slot_index": 0} + ] + }, + { + "id": 4, + "type": "ControlNetLoader", + "pos": [50, 300], + "size": {"0": 350, "1": 100}, + "flags": {}, + "order": 3, + "mode": 0, + "properties": {"Node name for S&R": "ControlNetLoader"}, + "widgets_values": ["controlnet-depth-sdxl-1.0.safetensors"], + "title": "Load Depth ControlNet", + "outputs": [ + {"name": "CONTROL_NET", "type": "CONTROL_NET", "links": [7], "slot_index": 0} + ] + }, + { + "id": 5, + "type": "LoadImage", + "pos": [50, 450], + "size": {"0": 350, "1": 100}, + "flags": {}, + "order": 4, + "mode": 0, + "properties": {"Node name for S&R": "LoadImage"}, + "widgets_values": ["examples/control_depth.png"], + "title": "API Depth Image", + "outputs": [ + {"name": "IMAGE", "type": "IMAGE", "links": [5], "slot_index": 0}, + {"name": "MASK", "type": "MASK", "links": null, "slot_index": 1} + ] + }, + { + "id": 6, + "type": "ControlNetApplyAdvanced", + "pos": [900, 100], + "size": {"0": 315, "1": 186}, + "flags": {}, + "order": 5, + "mode": 0, + "properties": {"Node name for S&R": "ControlNetApplyAdvanced"}, + "widgets_values": [0.8, 0.0, 1.0], + "title": "Apply Depth Control", + "inputs": [ + {"name": "positive", "type": "CONDITIONING", "link": 9}, + {"name": "negative", "type": "CONDITIONING", "link": 10}, + {"name": "control_net", "type": "CONTROL_NET", "link": 7}, + {"name": "image", "type": "IMAGE", "link": 5} + ], + "outputs": [ + {"name": "positive", "type": "CONDITIONING", "links": [11], "slot_index": 0}, + {"name": "negative", "type": "CONDITIONING", "links": [12], "slot_index": 1} + ] + }, + { + "id": 7, + "type": "ControlNetLoader", + "pos": [50, 600], + "size": {"0": 350, "1": 100}, + "flags": {}, + "order": 6, + "mode": 0, + "properties": {"Node name for S&R": "ControlNetLoader"}, + "widgets_values": ["controlnet-canny-sdxl-1.0.safetensors"], + "title": "Load Canny ControlNet", + "outputs": [ + {"name": "CONTROL_NET", "type": "CONTROL_NET", "links": [8], "slot_index": 0} + ] + }, + { + "id": 8, + "type": "LoadImage", + "pos": [50, 750], + "size": {"0": 350, "1": 100}, + "flags": {}, + "order": 7, + "mode": 0, + "properties": {"Node name for S&R": "LoadImage"}, + "widgets_values": ["examples/control_canny.png"], + "title": "API Canny Image", + "outputs": [ + {"name": "IMAGE", "type": "IMAGE", "links": [6], "slot_index": 0}, + {"name": "MASK", "type": "MASK", "links": null, "slot_index": 1} + ] + }, + { + "id": 9, + "type": "ControlNetApplyAdvanced", + "pos": [900, 400], + "size": {"0": 315, "1": 186}, + "flags": {}, + "order": 8, + "mode": 0, + "properties": {"Node name for S&R": "ControlNetApplyAdvanced"}, + "widgets_values": [0.6, 0.0, 1.0], + "title": "Apply Canny Control", + "inputs": [ + {"name": "positive", "type": "CONDITIONING", "link": 11}, + {"name": "negative", "type": "CONDITIONING", "link": 12}, + {"name": "control_net", "type": "CONTROL_NET", "link": 8}, + {"name": "image", "type": "IMAGE", "link": 6} + ], + "outputs": [ + {"name": "positive", "type": "CONDITIONING", "links": [13], "slot_index": 0}, + {"name": "negative", "type": "CONDITIONING", "links": [14], "slot_index": 1} + ] + }, + { + "id": 10, + "type": "EmptyLatentImage", + "pos": [450, 600], + "size": {"0": 315, "1": 106}, + "flags": {}, + "order": 9, + "mode": 0, + "properties": {"Node name for S&R": "EmptyLatentImage"}, + "widgets_values": [1024, 1024, 1], + "title": "API Latent Config", + "outputs": [ + {"name": "LATENT", "type": "LATENT", "links": [15], "slot_index": 0} + ] + }, + { + "id": 11, + "type": "KSampler", + "pos": [1270, 100], + "size": {"0": 315, "1": 474}, + "flags": {}, + "order": 10, + "mode": 0, + "properties": {"Node name for S&R": "KSampler"}, + "widgets_values": [42, "fixed", 30, 7.0, "euler", "normal", 1], + "title": "ControlNet Sampler", + "inputs": [ + {"name": "model", "type": "MODEL", "link": 1}, + {"name": "positive", "type": "CONDITIONING", "link": 13}, + {"name": "negative", "type": "CONDITIONING", "link": 14}, + {"name": "latent_image", "type": "LATENT", "link": 15} + ], + "outputs": [ + {"name": "LATENT", "type": "LATENT", "links": [16], "slot_index": 0} + ] + }, + { + "id": 12, + "type": "VAEDecode", + "pos": [1640, 100], + "size": {"0": 210, "1": 46}, + "flags": {}, + "order": 11, + "mode": 0, + "properties": {"Node name for S&R": "VAEDecode"}, + "title": "VAE Decode", + "inputs": [ + {"name": "samples", "type": "LATENT", "link": 16}, + {"name": "vae", "type": "VAE", "link": 4} + ], + "outputs": [ + {"name": "IMAGE", "type": "IMAGE", "links": [17, 18], "slot_index": 0} + ] + }, + { + "id": 13, + "type": "PreviewImage", + "pos": [1900, 100], + "size": {"0": 400, "1": 400}, + "flags": {}, + "order": 12, + "mode": 0, + "properties": {"Node name for S&R": "PreviewImage"}, + "title": "Preview Result", + "inputs": [ + {"name": "images", "type": "IMAGE", "link": 17} + ] + }, + { + "id": 14, + "type": "SaveImage", + "pos": [1900, 550], + "size": {"0": 400, "1": 100}, + "flags": {}, + "order": 13, + "mode": 0, + "properties": {"Node name for S&R": "SaveImage"}, + "widgets_values": ["controlnet_output"], + "title": "API Save Image", + "inputs": [ + {"name": "images", "type": "IMAGE", "link": 18} + ] + } + ], + "links": [ + [1, 1, 0, 11, 0, "MODEL"], + [2, 1, 1, 2, 0, "CLIP"], + [3, 1, 1, 3, 0, "CLIP"], + [4, 1, 2, 12, 1, "VAE"], + [5, 5, 0, 6, 3, "IMAGE"], + [6, 8, 0, 9, 3, "IMAGE"], + [7, 4, 0, 6, 2, "CONTROL_NET"], + [8, 7, 0, 9, 2, "CONTROL_NET"], + [9, 2, 0, 6, 0, "CONDITIONING"], + [10, 3, 0, 6, 1, "CONDITIONING"], + [11, 6, 0, 9, 0, "CONDITIONING"], + [12, 6, 1, 9, 1, "CONDITIONING"], + [13, 9, 0, 11, 1, "CONDITIONING"], + [14, 9, 1, 11, 2, "CONDITIONING"], + [15, 10, 0, 11, 3, "LATENT"], + [16, 11, 0, 12, 0, "LATENT"], + [17, 12, 0, 13, 0, "IMAGE"], + [18, 12, 0, 14, 0, "IMAGE"] + ], + "groups": [], + "config": {}, + "extra": { + "workflow_info": { + "name": "ControlNet Fusion Production", + "version": "1.0.0", + "description": "Multi-ControlNet workflow combining depth and canny edge control for precise composition. Chain multiple control methods for maximum control over generation.", + "category": "advanced", + "tags": [ + "controlnet", + "multi-control", + "depth", + "canny", + "advanced", + "production", + "sdxl" + ], + "requirements": { + "models": [ + "stable-diffusion-xl-base-1.0", + "controlnet-depth-sdxl-1.0", + "controlnet-canny-sdxl-1.0" + ], + "custom_nodes": [], + "vram_min": "16GB", + "vram_recommended": "24GB" + }, + "parameters": { + "prompt": { + "node_id": 2, + "widget_index": 0, + "type": "string", + "required": true, + "default": "A futuristic city with precise architecture", + "description": "Text description of desired image" + }, + "negative_prompt": { + "node_id": 3, + "widget_index": 0, + "type": "string", + "required": false, + "default": "blurry, low quality, distorted", + "description": "Undesired elements to avoid" + }, + "depth_image": { + "node_id": 5, + "widget_index": 0, + "type": "string", + "required": true, + "default": "examples/control_depth.png", + "description": "Depth map image for spatial control" + }, + "canny_image": { + "node_id": 8, + "widget_index": 0, + "type": "string", + "required": true, + "default": "examples/control_canny.png", + "description": "Canny edge image for structure control" + }, + "depth_strength": { + "node_id": 6, + "widget_index": 0, + "type": "float", + "required": false, + "default": 0.8, + "min": 0.0, + "max": 2.0, + "description": "Strength of depth control (0.0-2.0)" + }, + "canny_strength": { + "node_id": 9, + "widget_index": 0, + "type": "float", + "required": false, + "default": 0.6, + "min": 0.0, + "max": 2.0, + "description": "Strength of canny edge control (0.0-2.0)" + }, + "steps": { + "node_id": 11, + "widget_index": 2, + "type": "integer", + "required": false, + "default": 30, + "min": 20, + "max": 50, + "description": "Number of sampling steps (30-40 recommended for ControlNet)" + }, + "seed": { + "node_id": 11, + "widget_index": 0, + "type": "integer", + "required": false, + "default": 42, + "min": 0, + "max": 4294967295, + "description": "Random seed for reproducibility" + } + }, + "outputs": { + "images": { + "node_id": 14, + "type": "image", + "format": "PNG", + "count": 1, + "resolution": "1024x1024 (configurable)" + } + }, + "performance": { + "avg_generation_time": "50-70 seconds (30 steps)", + "vram_usage": "~18-22GB (dual ControlNet + SDXL)", + "gpu_utilization": "95-100%" + }, + "use_cases": [ + "Architectural visualization with precise control", + "Product renders with exact composition", + "Character poses with depth and edge guidance", + "Complex scene generation with multiple constraints" + ], + "notes": [ + "Example control images provided in examples/ directory", + "Depth map: Grayscale image where brightness = distance from camera", + "Canny edges: White edges on black background", + "Adjust control strengths to balance control vs. creativity", + "Higher steps (30-40) recommended for best quality with ControlNet" + ] + } + }, + "version": 0.4 +} diff --git a/models/comfyui/workflows/advanced/examples/control_canny.png b/models/comfyui/workflows/advanced/examples/control_canny.png new file mode 100644 index 0000000..0294d27 Binary files /dev/null and b/models/comfyui/workflows/advanced/examples/control_canny.png differ diff --git a/models/comfyui/workflows/advanced/examples/control_depth.png b/models/comfyui/workflows/advanced/examples/control_depth.png new file mode 100644 index 0000000..6e17f18 Binary files /dev/null and b/models/comfyui/workflows/advanced/examples/control_depth.png differ