{ "id": "00000000-0000-0000-0000-000000000000", "revision": 0, "last_node_id": 26, "last_link_id": 34, "nodes": [ { "id": 1, "type": "MarkdownNote", "pos": [ -1340, -120 ], "size": [ 580, 700 ], "flags": {}, "order": 0, "mode": 0, "inputs": [], "outputs": [], "properties": { "Node name for S&R": "MarkdownNote", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ "## FLUX Redux + ControlNet \u2014 style + composition (v1 draft)\n\n**Image A (style)** supplies aesthetic/palette/lighting via **FLUX.1 Redux**; **Image B\n(composition)** supplies layout via **Depth** (Shakker-Labs ControlNet **Union-Pro-2.0** \u2014 mode\ninferred from the control image, do NOT add SetUnionControlNetType). Optional text prompt.\n\n**Models** (HF `aleph65/ComfyUI`):\n- `diffusion_models/flux1-dev.safetensors` (bf16) \u00b7 `text_encoders/t5xxl_fp16.safetensors` +\n `clip_l.safetensors` \u00b7 `vae/ae.safetensors`\n- `style_models/flux1-redux-dev.safetensors` \u00b7 `clip_vision/sigclip_vision_patch14_384.safetensors`\n- `controlnet/FLUX.1-dev-ControlNet-Union-Pro-2.0.safetensors`\n- bypassed extras: `loras/flux1-turbo-alpha.safetensors`\n- `depth_anything_v2_vitl.pth` auto-downloads into `custom_nodes/comfyui_controlnet_aux/ckpts/`\n\n**Knobs**\n- *Apply Style Model* `strength` = Redux influence, `attn_bias` mode: 0.3\u20130.7 (start 0.5).\n Raise if style too weak; lower (or use the ReduxAdvanced group) if Image A's layout leaks.\n- *Depth ControlNet* strength 0.6\u20130.8, end_percent 0.8 (official 2.0 rec: 0.8/0.8).\n- **Canny group (bypassed)**: enable to stack hard contour lock at LOW strength 0.25\u20130.4, or\n use instead of depth (rewire). Union-Pro-2.0 handles both from the same loader.\n- **ReduxAdvanced group (bypassed)**: alternative style isolation via token downsampling\n (factor 3). To use: connect its CONDITIONING output to the depth Apply ControlNet `positive`\n (replacing Apply Style Model) and enable the node.\n- **Turbo group (bypassed)**: enable turbo-alpha LoRA + set steps to 8 for fast previews.\n- Sampler: euler / simple / 28 steps / CFG 1.0 / FluxGuidance 3.5 / denoise 1.0.\n\nPrompt may be empty; a short scene description usually helps. Match latent aspect to Image B.\n" ] }, { "id": 2, "type": "UNETLoader", "pos": [ -720, -80 ], "size": [ 340, 82 ], "flags": {}, "order": 1, "mode": 0, "inputs": [], "outputs": [ { "name": "MODEL", "type": "MODEL", "links": [ 26 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "UNETLoader", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ "flux1-dev.safetensors", "default" ] }, { "id": 3, "type": "DualCLIPLoader", "pos": [ -720, 60 ], "size": [ 340, 130 ], "flags": {}, "order": 2, "mode": 0, "inputs": [], "outputs": [ { "name": "CLIP", "type": "CLIP", "links": [ 3 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "DualCLIPLoader", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ "t5xxl_fp16.safetensors", "clip_l.safetensors", "flux", "default" ] }, { "id": 4, "type": "VAELoader", "pos": [ -720, 250 ], "size": [ 340, 58 ], "flags": {}, "order": 3, "mode": 0, "inputs": [], "outputs": [ { "name": "VAE", "type": "VAE", "links": [ 19, 24, 33 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "VAELoader", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ "ae.safetensors" ] }, { "id": 5, "type": "LoadImage", "pos": [ -720, 420 ], "size": [ 274, 314 ], "flags": {}, "order": 4, "mode": 0, "inputs": [], "outputs": [ { "name": "IMAGE", "type": "IMAGE", "links": [ 2, 12 ], "slot_index": 0 }, { "name": "MASK", "type": "MASK", "links": [], "slot_index": 1 } ], "properties": { "Node name for S&R": "LoadImage", "cnr_id": "comfy-core", "ver": "0.27.0" }, "title": "Style reference (Image A)", "widgets_values": [ "style_ref.png", "image" ] }, { "id": 6, "type": "CLIPVisionLoader", "pos": [ -720, 780 ], "size": [ 340, 58 ], "flags": {}, "order": 5, "mode": 0, "inputs": [], "outputs": [ { "name": "CLIP_VISION", "type": "CLIP_VISION", "links": [ 1, 11 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "CLIPVisionLoader", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ "sigclip_vision_patch14_384.safetensors" ] }, { "id": 7, "type": "CLIPVisionEncode", "pos": [ -340, 480 ], "size": [ 290, 78 ], "flags": {}, "order": 6, "mode": 0, "inputs": [ { "name": "clip_vision", "type": "CLIP_VISION", "link": 1 }, { "name": "image", "type": "IMAGE", "link": 2 } ], "outputs": [ { "name": "CLIP_VISION_OUTPUT", "type": "CLIP_VISION_OUTPUT", "links": [ 8 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "CLIPVisionEncode", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ "center" ] }, { "id": 8, "type": "StyleModelLoader", "pos": [ -720, 870 ], "size": [ 340, 58 ], "flags": {}, "order": 7, "mode": 0, "inputs": [], "outputs": [ { "name": "STYLE_MODEL", "type": "STYLE_MODEL", "links": [ 7, 10 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "StyleModelLoader", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ "flux1-redux-dev.safetensors" ] }, { "id": 9, "type": "CLIPTextEncode", "pos": [ -300, 60 ], "size": [ 400, 160 ], "flags": {}, "order": 8, "mode": 0, "inputs": [ { "name": "clip", "type": "CLIP", "link": 3 } ], "outputs": [ { "name": "CONDITIONING", "type": "CONDITIONING", "links": [ 4 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "CLIPTextEncode", "cnr_id": "comfy-core", "ver": "0.27.0" }, "title": "Prompt (optional \u2014 may stay empty)", "widgets_values": [ "" ] }, { "id": 10, "type": "FluxGuidance", "pos": [ 140, 60 ], "size": [ 290, 58 ], "flags": {}, "order": 9, "mode": 0, "inputs": [ { "name": "conditioning", "type": "CONDITIONING", "link": 4 } ], "outputs": [ { "name": "CONDITIONING", "type": "CONDITIONING", "links": [ 5, 6, 9 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "FluxGuidance", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ 3.5 ] }, { "id": 11, "type": "ConditioningZeroOut", "pos": [ 140, 170 ], "size": [ 290, 48 ], "flags": {}, "order": 10, "mode": 0, "inputs": [ { "name": "conditioning", "type": "CONDITIONING", "link": 5 } ], "outputs": [ { "name": "CONDITIONING", "type": "CONDITIONING", "links": [ 17 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "ConditioningZeroOut", "cnr_id": "comfy-core", "ver": "0.27.0" } }, { "id": 12, "type": "StyleModelApply", "pos": [ 140, 300 ], "size": [ 320, 102 ], "flags": {}, "order": 11, "mode": 0, "inputs": [ { "name": "conditioning", "type": "CONDITIONING", "link": 6 }, { "name": "style_model", "type": "STYLE_MODEL", "link": 7 }, { "name": "clip_vision_output", "type": "CLIP_VISION_OUTPUT", "link": 8 } ], "outputs": [ { "name": "CONDITIONING", "type": "CONDITIONING", "links": [ 16 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "StyleModelApply", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ 0.5, "attn_bias" ] }, { "id": 13, "type": "ReduxAdvanced", "pos": [ 140, 520 ], "size": [ 320, 190 ], "flags": {}, "order": 12, "mode": 4, "inputs": [ { "name": "conditioning", "type": "CONDITIONING", "link": 9 }, { "name": "style_model", "type": "STYLE_MODEL", "link": 10 }, { "name": "clip_vision", "type": "CLIP_VISION", "link": 11 }, { "name": "image", "type": "IMAGE", "link": 12 }, { "name": "mask", "type": "MASK", "link": null } ], "outputs": [ { "name": "CONDITIONING", "type": "CONDITIONING", "links": [], "slot_index": 0 }, { "name": "IMAGE", "type": "IMAGE", "links": [], "slot_index": 1 }, { "name": "MASK", "type": "MASK", "links": [], "slot_index": 2 } ], "properties": { "Node name for S&R": "ReduxAdvanced", "aux_id": "kaibioinfo/ComfyUI_AdvancedRefluxControl" }, "title": "ALT: ReduxAdvanced (rewire to use)", "widgets_values": [ 3, "area", "center crop (square)", 1.0, 0.1 ] }, { "id": 14, "type": "LoadImage", "pos": [ -720, 1000 ], "size": [ 274, 314 ], "flags": {}, "order": 13, "mode": 0, "inputs": [], "outputs": [ { "name": "IMAGE", "type": "IMAGE", "links": [ 13, 15 ], "slot_index": 0 }, { "name": "MASK", "type": "MASK", "links": [], "slot_index": 1 } ], "properties": { "Node name for S&R": "LoadImage", "cnr_id": "comfy-core", "ver": "0.27.0" }, "title": "Composition reference (Image B)", "widgets_values": [ "composition_ref.png", "image" ] }, { "id": 15, "type": "DepthAnythingV2Preprocessor", "pos": [ -300, 1030 ], "size": [ 330, 82 ], "flags": {}, "order": 14, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", "link": 13 } ], "outputs": [ { "name": "IMAGE", "type": "IMAGE", "links": [ 14, 20 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "DepthAnythingV2Preprocessor", "cnr_id": "comfyui_controlnet_aux" }, "widgets_values": [ "depth_anything_v2_vitl.pth", 1024 ] }, { "id": 16, "type": "PreviewImage", "pos": [ -300, 1180 ], "size": [ 300, 300 ], "flags": {}, "order": 15, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", "link": 14 } ], "outputs": [], "properties": { "Node name for S&R": "PreviewImage", "cnr_id": "comfy-core", "ver": "0.27.0" }, "title": "Depth map preview" }, { "id": 17, "type": "Canny", "pos": [ -300, 1540 ], "size": [ 290, 82 ], "flags": {}, "order": 16, "mode": 4, "inputs": [ { "name": "image", "type": "IMAGE", "link": 15 } ], "outputs": [ { "name": "IMAGE", "type": "IMAGE", "links": [ 25 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "Canny", "cnr_id": "comfy-core", "ver": "0.27.0" }, "title": "OPTIONAL: canny edges", "widgets_values": [ 0.2, 0.5 ] }, { "id": 18, "type": "ControlNetLoader", "pos": [ 140, 950 ], "size": [ 380, 58 ], "flags": {}, "order": 17, "mode": 0, "inputs": [], "outputs": [ { "name": "CONTROL_NET", "type": "CONTROL_NET", "links": [ 18, 23 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "ControlNetLoader", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ "FLUX.1-dev-ControlNet-Union-Pro-2.0.safetensors" ] }, { "id": 19, "type": "ControlNetApplySD3", "pos": [ 560, 300 ], "size": [ 320, 166 ], "flags": {}, "order": 18, "mode": 0, "inputs": [ { "name": "positive", "type": "CONDITIONING", "link": 16 }, { "name": "negative", "type": "CONDITIONING", "link": 17 }, { "name": "control_net", "type": "CONTROL_NET", "link": 18 }, { "name": "vae", "type": "VAE", "link": 19 }, { "name": "image", "type": "IMAGE", "link": 20 } ], "outputs": [ { "name": "positive", "type": "CONDITIONING", "links": [ 21 ], "slot_index": 0 }, { "name": "negative", "type": "CONDITIONING", "links": [ 22 ], "slot_index": 1 } ], "properties": { "Node name for S&R": "ControlNetApplySD3", "cnr_id": "comfy-core", "ver": "0.27.0" }, "title": "Apply ControlNet \u2014 DEPTH", "widgets_values": [ 0.7, 0.0, 0.8 ] }, { "id": 20, "type": "ControlNetApplySD3", "pos": [ 560, 560 ], "size": [ 320, 166 ], "flags": {}, "order": 19, "mode": 4, "inputs": [ { "name": "positive", "type": "CONDITIONING", "link": 21 }, { "name": "negative", "type": "CONDITIONING", "link": 22 }, { "name": "control_net", "type": "CONTROL_NET", "link": 23 }, { "name": "vae", "type": "VAE", "link": 24 }, { "name": "image", "type": "IMAGE", "link": 25 } ], "outputs": [ { "name": "positive", "type": "CONDITIONING", "links": [ 29 ], "slot_index": 0 }, { "name": "negative", "type": "CONDITIONING", "links": [ 30 ], "slot_index": 1 } ], "properties": { "Node name for S&R": "ControlNetApplySD3", "cnr_id": "comfy-core", "ver": "0.27.0" }, "title": "OPTIONAL: Apply ControlNet \u2014 CANNY (stack)", "widgets_values": [ 0.35, 0.0, 0.6 ] }, { "id": 21, "type": "LoraLoaderModelOnly", "pos": [ -300, -160 ], "size": [ 340, 82 ], "flags": {}, "order": 20, "mode": 4, "inputs": [ { "name": "model", "type": "MODEL", "link": 26 } ], "outputs": [ { "name": "MODEL", "type": "MODEL", "links": [ 27 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "LoraLoaderModelOnly", "cnr_id": "comfy-core", "ver": "0.27.0" }, "title": "FAST PREVIEW: turbo LoRA (set steps 8)", "widgets_values": [ "flux1-turbo-alpha.safetensors", 1.0 ] }, { "id": 22, "type": "ModelSamplingFlux", "pos": [ 140, -160 ], "size": [ 300, 130 ], "flags": {}, "order": 21, "mode": 0, "inputs": [ { "name": "model", "type": "MODEL", "link": 27 } ], "outputs": [ { "name": "MODEL", "type": "MODEL", "links": [ 28 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "ModelSamplingFlux", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ 1.15, 0.5, 1024, 1024 ] }, { "id": 23, "type": "EmptySD3LatentImage", "pos": [ 560, 950 ], "size": [ 290, 106 ], "flags": {}, "order": 22, "mode": 0, "inputs": [], "outputs": [ { "name": "LATENT", "type": "LATENT", "links": [ 31 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "EmptySD3LatentImage", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ 1024, 1024, 1 ] }, { "id": 24, "type": "KSampler", "pos": [ 980, 300 ], "size": [ 300, 262 ], "flags": {}, "order": 23, "mode": 0, "inputs": [ { "name": "model", "type": "MODEL", "link": 28 }, { "name": "positive", "type": "CONDITIONING", "link": 29 }, { "name": "negative", "type": "CONDITIONING", "link": 30 }, { "name": "latent_image", "type": "LATENT", "link": 31 } ], "outputs": [ { "name": "LATENT", "type": "LATENT", "links": [ 32 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "KSampler", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ 0, "randomize", 28, 1.0, "euler", "simple", 1.0 ] }, { "id": 25, "type": "VAEDecode", "pos": [ 1320, 300 ], "size": [ 210, 66 ], "flags": {}, "order": 24, "mode": 0, "inputs": [ { "name": "samples", "type": "LATENT", "link": 32 }, { "name": "vae", "type": "VAE", "link": 33 } ], "outputs": [ { "name": "IMAGE", "type": "IMAGE", "links": [ 34 ], "slot_index": 0 } ], "properties": { "Node name for S&R": "VAEDecode", "cnr_id": "comfy-core", "ver": "0.27.0" } }, { "id": 26, "type": "SaveImage", "pos": [ 1320, 420 ], "size": [ 400, 400 ], "flags": {}, "order": 25, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", "link": 34 } ], "outputs": [], "properties": { "Node name for S&R": "SaveImage", "cnr_id": "comfy-core", "ver": "0.27.0" }, "widgets_values": [ "flux-redux/style-comp" ] } ], "links": [ [ 1, 6, 0, 7, 0, "CLIP_VISION" ], [ 2, 5, 0, 7, 1, "IMAGE" ], [ 3, 3, 0, 9, 0, "CLIP" ], [ 4, 9, 0, 10, 0, "CONDITIONING" ], [ 5, 10, 0, 11, 0, "CONDITIONING" ], [ 6, 10, 0, 12, 0, "CONDITIONING" ], [ 7, 8, 0, 12, 1, "STYLE_MODEL" ], [ 8, 7, 0, 12, 2, "CLIP_VISION_OUTPUT" ], [ 9, 10, 0, 13, 0, "CONDITIONING" ], [ 10, 8, 0, 13, 1, "STYLE_MODEL" ], [ 11, 6, 0, 13, 2, "CLIP_VISION" ], [ 12, 5, 0, 13, 3, "IMAGE" ], [ 13, 14, 0, 15, 0, "IMAGE" ], [ 14, 15, 0, 16, 0, "IMAGE" ], [ 15, 14, 0, 17, 0, "IMAGE" ], [ 16, 12, 0, 19, 0, "CONDITIONING" ], [ 17, 11, 0, 19, 1, "CONDITIONING" ], [ 18, 18, 0, 19, 2, "CONTROL_NET" ], [ 19, 4, 0, 19, 3, "VAE" ], [ 20, 15, 0, 19, 4, "IMAGE" ], [ 21, 19, 0, 20, 0, "CONDITIONING" ], [ 22, 19, 1, 20, 1, "CONDITIONING" ], [ 23, 18, 0, 20, 2, "CONTROL_NET" ], [ 24, 4, 0, 20, 3, "VAE" ], [ 25, 17, 0, 20, 4, "IMAGE" ], [ 26, 2, 0, 21, 0, "MODEL" ], [ 27, 21, 0, 22, 0, "MODEL" ], [ 28, 22, 0, 24, 0, "MODEL" ], [ 29, 20, 0, 24, 1, "CONDITIONING" ], [ 30, 20, 1, 24, 2, "CONDITIONING" ], [ 31, 23, 0, 24, 3, "LATENT" ], [ 32, 24, 0, 25, 0, "LATENT" ], [ 33, 4, 0, 25, 1, "VAE" ], [ 34, 25, 0, 26, 0, "IMAGE" ] ], "groups": [ { "id": 1, "title": "STYLE REFERENCE \u2014 Redux", "bounding": [ -740, 340, 1220, 700 ], "color": "#3f789e", "font_size": 24, "flags": {} }, { "id": 2, "title": "COMPOSITION REFERENCE \u2014 Union-Pro-2.0", "bounding": [ -740, 900, 1220, 800 ], "color": "#8f5b34", "font_size": 24, "flags": {} }, { "id": 3, "title": "SAMPLING", "bounding": [ 940, 200, 800, 700 ], "color": "#444", "font_size": 24, "flags": {} } ], "config": {}, "extra": {}, "version": 0.4 }