diff --git a/README.md b/README.md index 6ab97b3..8c1fc08 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ git clone https://github.com/juddisjudd/ComfyUI-BawkNodes.git Requires a ComfyUI build with FLUX.2 support (late 2025 or newer). GGUF loading needs ComfyUI-GGUF. -Example workflows for every supported model family are in [`workflows/`](workflows/): FLUX.1 dev text-to-image (with two LoRA sets and a switch), img2img, Kontext edit, FLUX.2 dev, klein 4B text-to-image and klein 9B two-reference edit. +Example workflows for every supported model family are in [`workflows/`](workflows/): FLUX.1 dev text-to-image, **LoRA sets with trigger words + switch** (`flux1_dev_lora_sets.json`), img2img, Kontext edit, FLUX.2 dev, klein 4B text-to-image and klein 9B two-reference edit. ## Changes in 3.1.0 diff --git a/workflows/flux1_dev_lora_sets.json b/workflows/flux1_dev_lora_sets.json new file mode 100644 index 0000000..c38f0bc --- /dev/null +++ b/workflows/flux1_dev_lora_sets.json @@ -0,0 +1,699 @@ +{ + "id": "31229801-8550-50a0-bb17-1f8896a9c262", + "revision": 0, + "last_node_id": 9, + "last_link_id": 14, + "nodes": [ + { + "id": 1, + "type": "DiffusionModelLoader", + "pos": [ + 80, + 200 + ], + "size": [ + 380, + 180 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1 + ] + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 3 + ] + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 2 + ] + }, + { + "name": "MODEL_STRING", + "type": "STRING", + "links": [ + 4 + ] + } + ], + "properties": { + "cnr_id": "comfyui-bawknodes", + "Node name for S&R": "DiffusionModelLoader" + }, + "widgets_values": [ + "flux1-dev.safetensors", + "ae.safetensors", + "t5xxl_fp16.safetensors", + "clip_l.safetensors", + "default" + ] + }, + { + "id": 2, + "type": "FluxWildcardEncode", + "pos": [ + 1040, + 200 + ], + "size": [ + 420, + 640 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1 + }, + { + "name": "clip", + "type": "CLIP", + "link": 2 + }, + { + "name": "lora_stack", + "type": "LORA_STACK", + "link": 9 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 10 + ] + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [] + }, + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 11 + ] + }, + { + "name": "PROMPT_OUT", + "type": "STRING", + "links": [ + 12 + ] + }, + { + "name": "LORA_INFO", + "type": "STRING", + "links": [ + 13 + ] + } + ], + "properties": { + "cnr_id": "comfyui-bawknodes", + "Node name for S&R": "FluxWildcardEncode" + }, + "widgets_values": [ + "A {cinematic|candid|editorial} photo of a rooster wearing a tiny leather jacket, golden hour light, shallow depth of field", + 0, + "randomize", + "prepend", + "None", + 1.0, + "", + "None", + 1.0, + "", + "None", + 1.0, + "", + "None", + 1.0, + "", + "None", + 1.0, + "", + "None", + 1.0, + "" + ] + }, + { + "id": 3, + "type": "BawkSampler", + "pos": [ + 1520, + 200 + ], + "size": [ + 400, + 520 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 10 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 11 + }, + { + "name": "vae", + "type": "VAE", + "link": 3 + }, + { + "name": "input_image", + "type": "IMAGE", + "link": null + }, + { + "name": "reference_image", + "type": "IMAGE", + "link": null + }, + { + "name": "reference_image_2", + "type": "IMAGE", + "link": null + } + ], + "outputs": [ + { + "name": "images", + "type": "IMAGE", + "links": [ + 14 + ] + }, + { + "name": "latent", + "type": "LATENT", + "links": [] + } + ], + "properties": { + "cnr_id": "comfyui-bawknodes", + "Node name for S&R": "BawkSampler" + }, + "widgets_values": [ + "4:5 Portrait - 1024x1280", + 1, + 0, + "randomize", + 20, + 3.5, + "euler", + "auto", + 1.0, + 1.0, + 1.15, + 0.5, + 1024, + 1024 + ] + }, + { + "id": 4, + "type": "FluxImageSaver", + "pos": [ + 1980, + 200 + ], + "size": [ + 400, + 300 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 14 + }, + { + "name": "model_string", + "type": "STRING", + "link": 4 + }, + { + "name": "processed_prompt", + "type": "STRING", + "link": 12 + }, + { + "name": "lora_info", + "type": "STRING", + "link": 13 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfyui-bawknodes", + "Node name for S&R": "FluxImageSaver" + }, + "widgets_values": [ + "lora_sets", + "png", + 95, + true, + true, + false, + "" + ] + }, + { + "id": 5, + "type": "BawkLoraStack", + "pos": [ + 80, + 440 + ], + "size": [ + 400, + 560 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "lora_stack", + "type": "LORA_STACK", + "link": null + } + ], + "outputs": [ + { + "name": "lora_stack", + "type": "LORA_STACK", + "links": [ + 5, + 6 + ] + }, + { + "name": "lora_triggers", + "type": "STRING", + "links": [] + }, + { + "name": "lora_info", + "type": "STRING", + "links": [] + } + ], + "properties": { + "cnr_id": "comfyui-bawknodes", + "Node name for S&R": "BawkLoraStack" + }, + "widgets_values": [ + true, + "my_character.safetensors", + 1.0, + "ohwx person", + "None", + 1.0, + "", + "None", + 1.0, + "", + "None", + 1.0, + "", + "None", + 1.0, + "", + "None", + 1.0, + "" + ], + "title": "Base set - always on (character)" + }, + { + "id": 6, + "type": "BawkLoraStack", + "pos": [ + 560, + 440 + ], + "size": [ + 400, + 560 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "lora_stack", + "type": "LORA_STACK", + "link": 5 + } + ], + "outputs": [ + { + "name": "lora_stack", + "type": "LORA_STACK", + "links": [ + 7 + ] + }, + { + "name": "lora_triggers", + "type": "STRING", + "links": [] + }, + { + "name": "lora_info", + "type": "STRING", + "links": [] + } + ], + "properties": { + "cnr_id": "comfyui-bawknodes", + "Node name for S&R": "BawkLoraStack" + }, + "widgets_values": [ + true, + "painterly_style.safetensors", + 0.6, + "oil painting, visible brushstrokes", + "dramatic_light.safetensors", + 0.4, + "dramatic rim lighting", + "None", + 1.0, + "", + "None", + 1.0, + "", + "None", + 1.0, + "", + "None", + 1.0, + "" + ], + "title": "Set A - painterly" + }, + { + "id": 7, + "type": "BawkLoraStack", + "pos": [ + 560, + 1080 + ], + "size": [ + 400, + 560 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "lora_stack", + "type": "LORA_STACK", + "link": 6 + } + ], + "outputs": [ + { + "name": "lora_stack", + "type": "LORA_STACK", + "links": [ + 8 + ] + }, + { + "name": "lora_triggers", + "type": "STRING", + "links": [] + }, + { + "name": "lora_info", + "type": "STRING", + "links": [] + } + ], + "properties": { + "cnr_id": "comfyui-bawknodes", + "Node name for S&R": "BawkLoraStack" + }, + "widgets_values": [ + true, + "anime_style.safetensors", + 0.75, + "anime style", + "detail_boost.safetensors", + 0.3, + "", + "None", + 1.0, + "", + "None", + 1.0, + "", + "None", + 1.0, + "", + "None", + 1.0, + "" + ], + "title": "Set B - anime" + }, + { + "id": 8, + "type": "BawkLoraSwitch", + "pos": [ + 1040, + 1000 + ], + "size": [ + 300, + 140 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "set_a", + "type": "LORA_STACK", + "link": 7 + }, + { + "name": "set_b", + "type": "LORA_STACK", + "link": 8 + }, + { + "name": "set_c", + "type": "LORA_STACK", + "link": null + }, + { + "name": "set_d", + "type": "LORA_STACK", + "link": null + } + ], + "outputs": [ + { + "name": "lora_stack", + "type": "LORA_STACK", + "links": [ + 9 + ] + }, + { + "name": "lora_triggers", + "type": "STRING", + "links": [] + }, + { + "name": "lora_info", + "type": "STRING", + "links": [] + } + ], + "properties": { + "cnr_id": "comfyui-bawknodes", + "Node name for S&R": "BawkLoraSwitch" + }, + "widgets_values": [ + "A" + ], + "title": "LoRA Switch" + }, + { + "id": 9, + "type": "MarkdownNote", + "pos": [ + 80, + 40 + ], + "size": [ + 900, + 190 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "**FLUX.1 dev - LoRA sets with trigger words**\n\n- **Base set** (character LoRA) is chained into both style sets, so it is always applied.\n- **Set A / Set B** hold style LoRAs. Pick the active one on the **LoRA Switch**; only that set loads.\n- Each slot has its own **trigger words**. They are prepended to the prompt only while that LoRA is active, so switching sets also swaps the words. Strength 0 = slot off.\n- Keep the summed strength of style LoRAs around 1.0-1.5; above ~2 FLUX starts to degrade.\n- The encoder's inline slots are for one-off LoRAs; `LORA_INFO` goes to the saver (PNG metadata + prompt txt)." + ], + "color": "#432", + "bgcolor": "#653" + } + ], + "links": [ + [ + 1, + 1, + 0, + 2, + 0, + "MODEL" + ], + [ + 2, + 1, + 2, + 2, + 1, + "CLIP" + ], + [ + 3, + 1, + 1, + 3, + 2, + "VAE" + ], + [ + 4, + 1, + 3, + 4, + 1, + "STRING" + ], + [ + 5, + 5, + 0, + 6, + 0, + "LORA_STACK" + ], + [ + 6, + 5, + 0, + 7, + 0, + "LORA_STACK" + ], + [ + 7, + 6, + 0, + 8, + 0, + "LORA_STACK" + ], + [ + 8, + 7, + 0, + 8, + 1, + "LORA_STACK" + ], + [ + 9, + 8, + 0, + 2, + 2, + "LORA_STACK" + ], + [ + 10, + 2, + 0, + 3, + 0, + "MODEL" + ], + [ + 11, + 2, + 2, + 3, + 1, + "CONDITIONING" + ], + [ + 12, + 2, + 3, + 4, + 2, + "STRING" + ], + [ + 13, + 2, + 4, + 4, + 3, + "STRING" + ], + [ + 14, + 3, + 0, + 4, + 0, + "IMAGE" + ] + ], + "groups": [], + "config": {}, + "extra": {}, + "version": 0.4 +} \ No newline at end of file