{ "last_node_id": 23, "last_link_id": 30, "nodes": [ { "id": 1, "type": "CheckpointLoaderSimple", "pos": [40, 60], "size": [340, 98], "flags": {}, "order": 0, "mode": 0, "inputs": [], "outputs": [ {"name": "MODEL", "type": "MODEL", "links": [1, 27], "slot_index": 0}, {"name": "CLIP", "type": "CLIP", "links": [2], "slot_index": 1}, {"name": "VAE", "type": "VAE", "links": [3, 4], "slot_index": 2} ], "properties": {"Node name for S&R": "CheckpointLoaderSimple"}, "widgets_values": ["flux1-dev-fp8.safetensors"], "title": "Load FLUX.1 Dev fp8 (all-in-one checkpoint)" }, { "id": 2, "type": "LoraLoaderModelOnly", "pos": [40, 210], "size": [340, 82], "flags": {}, "order": 6, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 1}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [5], "slot_index": 0}], "properties": {"Node name for S&R": "LoraLoaderModelOnly"}, "widgets_values": ["uso-flux1-dit-lora-v1.safetensors", 1.0], "title": "USO DiT LoRA" }, { "id": 3, "type": "ModelPatchLoader", "pos": [40, 340], "size": [340, 58], "flags": {}, "order": 1, "mode": 0, "inputs": [], "outputs": [{"name": "MODEL_PATCH", "type": "MODEL_PATCH", "links": [6, 7], "slot_index": 0}], "properties": {"Node name for S&R": "ModelPatchLoader"}, "widgets_values": ["uso-flux1-projector-v1.safetensors"], "title": "USO Projector (model patch)" }, { "id": 4, "type": "CLIPVisionLoader", "pos": [40, 450], "size": [340, 58], "flags": {}, "order": 2, "mode": 0, "inputs": [], "outputs": [{"name": "CLIP_VISION", "type": "CLIP_VISION", "links": [8, 9], "slot_index": 0}], "properties": {"Node name for S&R": "CLIPVisionLoader"}, "widgets_values": ["sigclip_vision_patch14_384.safetensors"], "title": "Load SigCLIP Vision" }, { "id": 12, "type": "LoadImage", "pos": [40, 560], "size": [340, 314], "flags": {}, "order": 3, "mode": 0, "inputs": [], "outputs": [ {"name": "IMAGE", "type": "IMAGE", "links": [10], "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": [], "slot_index": 1} ], "properties": {"Node name for S&R": "LoadImage"}, "widgets_values": ["example.png", "image"], "title": "Style Reference Image" }, { "id": 5, "type": "CLIPVisionEncode", "pos": [440, 560], "size": [300, 78], "flags": {}, "order": 7, "mode": 0, "inputs": [ {"name": "clip_vision", "type": "CLIP_VISION", "link": 8}, {"name": "image", "type": "IMAGE", "link": 10} ], "outputs": [{"name": "CLIP_VISION_OUTPUT", "type": "CLIP_VISION_OUTPUT", "links": [11], "slot_index": 0}], "properties": {"Node name for S&R": "CLIPVisionEncode"}, "widgets_values": ["center"], "title": "Encode Style 1" }, { "id": 6, "type": "USOStyleReference", "pos": [440, 690], "size": [300, 78], "flags": {}, "order": 11, "mode": 0, "inputs": [ {"name": "model", "type": "MODEL", "link": 5}, {"name": "model_patch", "type": "MODEL_PATCH", "link": 6}, {"name": "clip_vision_output", "type": "CLIP_VISION_OUTPUT", "link": 11} ], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [12], "slot_index": 0}], "properties": {"Node name for S&R": "USOStyleReference"}, "title": "Apply USO Style 1" }, { "id": 18, "type": "LoadImage", "pos": [40, 930], "size": [340, 314], "flags": {}, "order": 4, "mode": 4, "inputs": [], "outputs": [ {"name": "IMAGE", "type": "IMAGE", "links": [21], "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": [], "slot_index": 1} ], "properties": {"Node name for S&R": "LoadImage"}, "widgets_values": ["example.png", "image"], "title": "Style Reference 2 (bypassed — right-click ▸ Bypass to enable)" }, { "id": 19, "type": "CLIPVisionEncode", "pos": [440, 930], "size": [300, 78], "flags": {}, "order": 10, "mode": 4, "inputs": [ {"name": "clip_vision", "type": "CLIP_VISION", "link": 9}, {"name": "image", "type": "IMAGE", "link": 21} ], "outputs": [{"name": "CLIP_VISION_OUTPUT", "type": "CLIP_VISION_OUTPUT", "links": [13], "slot_index": 0}], "properties": {"Node name for S&R": "CLIPVisionEncode"}, "widgets_values": ["center"], "title": "Encode Style 2 (bypassed)" }, { "id": 20, "type": "USOStyleReference", "pos": [440, 1060], "size": [300, 78], "flags": {}, "order": 14, "mode": 4, "inputs": [ {"name": "model", "type": "MODEL", "link": 12}, {"name": "model_patch", "type": "MODEL_PATCH", "link": 7}, {"name": "clip_vision_output", "type": "CLIP_VISION_OUTPUT", "link": 13} ], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [14], "slot_index": 0}], "properties": {"Node name for S&R": "USOStyleReference"}, "title": "Apply USO Style 2 (bypassed)" }, { "id": 14, "type": "LoadImage", "pos": [800, 560], "size": [340, 314], "flags": {}, "order": 5, "mode": 0, "inputs": [], "outputs": [ {"name": "IMAGE", "type": "IMAGE", "links": [22], "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": [], "slot_index": 1} ], "properties": {"Node name for S&R": "LoadImage"}, "widgets_values": ["example.png", "image"], "title": "Content Image (what to restyle)" }, { "id": 15, "type": "ImageScaleToMaxDimension", "pos": [800, 930], "size": [300, 82], "flags": {}, "order": 9, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 22}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [23], "slot_index": 0}], "properties": {"Node name for S&R": "ImageScaleToMaxDimension"}, "widgets_values": ["lanczos", 1280], "title": "Scale content (working resolution)" }, { "id": 10, "type": "VAEEncode", "pos": [800, 1060], "size": [300, 46], "flags": {}, "order": 13, "mode": 0, "inputs": [ {"name": "pixels", "type": "IMAGE", "link": 23}, {"name": "vae", "type": "VAE", "link": 3} ], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [17], "slot_index": 0}], "properties": {"Node name for S&R": "VAEEncode"}, "title": "VAE Encode content" }, { "id": 7, "type": "CLIPTextEncode", "pos": [440, 60], "size": [420, 160], "flags": {}, "order": 8, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 2}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [15, 16], "slot_index": 0}], "properties": {"Node name for S&R": "CLIPTextEncode"}, "widgets_values": ["A high quality photo of a young woman, natural skin texture, professional photography"], "title": "Positive Prompt (describe the content image!)" }, { "id": 11, "type": "FluxGuidance", "pos": [900, 120], "size": [260, 58], "flags": {}, "order": 12, "mode": 0, "inputs": [{"name": "conditioning", "type": "CONDITIONING", "link": 15}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [19, 28], "slot_index": 0}], "properties": {"Node name for S&R": "FluxGuidance"}, "widgets_values": [3.5], "title": "Flux Guidance" }, { "id": 9, "type": "ConditioningZeroOut", "pos": [900, 240], "size": [260, 26], "flags": {}, "order": 15, "mode": 0, "inputs": [{"name": "conditioning", "type": "CONDITIONING", "link": 16}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [20, 29], "slot_index": 0}], "properties": {"Node name for S&R": "ConditioningZeroOut"}, "title": "Negative (zeroed — flux uses CFG 1)" }, { "id": 13, "type": "KSampler", "pos": [1220, 60], "size": [315, 262], "flags": {}, "order": 16, "mode": 0, "inputs": [ {"name": "model", "type": "MODEL", "link": 14}, {"name": "positive", "type": "CONDITIONING", "link": 19}, {"name": "negative", "type": "CONDITIONING", "link": 20}, {"name": "latent_image", "type": "LATENT", "link": 17} ], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [25], "slot_index": 0}], "properties": {"Node name for S&R": "KSampler"}, "widgets_values": [42, "randomize", 20, 1.0, "euler", "simple", 0.6], "title": "Pass 1 — USO style (denoise = style strength)" }, { "id": 23, "type": "KSampler", "pos": [1220, 380], "size": [315, 262], "flags": {}, "order": 17, "mode": 0, "inputs": [ {"name": "model", "type": "MODEL", "link": 27}, {"name": "positive", "type": "CONDITIONING", "link": 28}, {"name": "negative", "type": "CONDITIONING", "link": 29}, {"name": "latent_image", "type": "LATENT", "link": 25} ], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [30], "slot_index": 0}], "properties": {"Node name for S&R": "KSampler"}, "widgets_values": [42, "randomize", 20, 1.0, "euler", "simple", 0.3], "title": "Pass 2 — plain flux refine (cleans USO texture)" }, { "id": 16, "type": "VAEDecode", "pos": [1580, 380], "size": [210, 46], "flags": {}, "order": 18, "mode": 0, "inputs": [ {"name": "samples", "type": "LATENT", "link": 30}, {"name": "vae", "type": "VAE", "link": 4} ], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [26], "slot_index": 0}], "properties": {"Node name for S&R": "VAEDecode"} }, { "id": 21, "type": "SaveImage", "pos": [1580, 480], "size": [360, 270], "flags": {}, "order": 19, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 26}], "outputs": [], "properties": {"Node name for S&R": "SaveImage"}, "widgets_values": ["uso_style_transfer"] }, { "id": 22, "type": "MarkdownNote", "pos": [1940, 60], "size": [480, 460], "flags": {}, "order": 20, "mode": 0, "inputs": [], "outputs": [], "properties": {"Node name for S&R": "MarkdownNote"}, "widgets_values": ["## FLUX.1 USO — photo style transfer (two-pass)\n\nByteDance **USO** (Unified Style & subject-driven generation) on FLUX.1-dev, ComfyUI native nodes. Re-renders a content image in the look of a style reference (color grade, lighting, overall aesthetic) while keeping composition and scene.\n\n**Two-pass design:** USO at full strength leaves a papery canvas texture on photos, so Pass 1 (USO model, i2i on the content latent) applies the style, then Pass 2 (plain flux, low denoise) re-refines to clean photographic texture. Bypass Pass 2 if you *want* the painterly look.\n\n**Models** (all on HF `aleph65/ComfyUI`, originals from Comfy-Org):\n- `checkpoints/flux1-dev-fp8.safetensors` (unet+clip+t5+vae in one)\n- `loras/uso-flux1-dit-lora-v1.safetensors` (strength 1.0)\n- `model_patches/uso-flux1-projector-v1.safetensors`\n- `clip_vision/sigclip_vision_patch14_384.safetensors`\n\n**How to drive it:**\n- **Prompt matters**: describe the content image (subject, setting, lighting). Generic prompts or \"like the reference\" phrasing cause collage/painting failures.\n- *Pass 1 denoise* = style strength: 0.5 subtle grade / 0.6 default / 0.75 strong restyle. *Pass 2 denoise* 0.25–0.35; higher drifts identity.\n- *Style Reference 2* group is a bypassed placeholder — enable all three nodes to blend two styles.\n- Do **not** feed full scenes through `ReferenceLatent` (USO subject-ref) — it pastes the reference as an inset panel. This workflow deliberately skips it; subject mode only works with tight subject crops on clean backgrounds.\n\n**Sampler (both passes):** 20 steps / CFG 1.0 / euler / simple, FluxGuidance 3.5.\n\n**Credits:** [ComfyUI USO docs](https://docs.comfy.org/tutorials/flux/flux-1-uso) · video: [Codebreakers — The Ultimate Style Transfer and Character Consistency Workflow](https://www.youtube.com/watch?v=0m99y4B9Cs4)"], "title": "About this workflow" } ], "links": [ [1, 1, 0, 2, 0, "MODEL"], [2, 1, 1, 7, 0, "CLIP"], [3, 1, 2, 10, 1, "VAE"], [4, 1, 2, 16, 1, "VAE"], [5, 2, 0, 6, 0, "MODEL"], [6, 3, 0, 6, 1, "MODEL_PATCH"], [7, 3, 0, 20, 1, "MODEL_PATCH"], [8, 4, 0, 5, 0, "CLIP_VISION"], [9, 4, 0, 19, 0, "CLIP_VISION"], [10, 12, 0, 5, 1, "IMAGE"], [11, 5, 0, 6, 2, "CLIP_VISION_OUTPUT"], [12, 6, 0, 20, 0, "MODEL"], [13, 19, 0, 20, 2, "CLIP_VISION_OUTPUT"], [14, 20, 0, 13, 0, "MODEL"], [15, 7, 0, 11, 0, "CONDITIONING"], [16, 7, 0, 9, 0, "CONDITIONING"], [17, 10, 0, 13, 3, "LATENT"], [19, 11, 0, 13, 1, "CONDITIONING"], [20, 9, 0, 13, 2, "CONDITIONING"], [21, 18, 0, 19, 1, "IMAGE"], [22, 14, 0, 15, 0, "IMAGE"], [23, 15, 0, 10, 0, "IMAGE"], [25, 13, 0, 23, 3, "LATENT"], [26, 16, 0, 21, 0, "IMAGE"], [27, 1, 0, 23, 0, "MODEL"], [28, 11, 0, 23, 1, "CONDITIONING"], [29, 9, 0, 23, 2, "CONDITIONING"], [30, 23, 0, 16, 0, "LATENT"] ], "groups": [], "config": {}, "extra": {}, "version": 0.4 }