ComfyUI / workflows /flux-redux-style-composition.json
aleph65's picture
Add flux-redux workflow drafts (v1): style+composition (Union-Pro-2.0), fal dev replica, prompt, Replicate schnell replica, BFL depth-lora variant + research notes; frozen starting points in wip/flux-redux/
7cd8b95 verified
Raw
History Blame Contribute Delete
26.1 kB
{
"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
}