{
 "130": {
  "inputs": {
   "image": "ccc2ad765e207ae7c0fb1f3ea3906fde7cb75209407ec0d6cff9d9e58c4bc166.png"
  },
  "class_type": "LoadImage",
  "_meta": {
   "title": "Load Image"
  }
 },
 "224:191": {
  "inputs": {
   "megapixel": "2.1",
   "aspect_ratio": "16:9 (Panorama)",
   "divisible_by": "8",
   "custom_ratio": false,
   "custom_aspect_ratio": "1:1"
  },
  "class_type": "FluxResolutionNode",
  "_meta": {
   "title": "Flux Resolution Calc"
  }
 },
 "224:240": {
  "inputs": {
   "value": [
    "299",
    1
   ]
  },
  "class_type": "PrimitiveInt",
  "_meta": {
   "title": "top_or_left_outpaint_pct"
  }
 },
 "224:241": {
  "inputs": {
   "interpolation": "lanczos",
   "method": "keep proportion",
   "condition": "always",
   "multiple_of": 0,
   "image": [
    "130",
    0
   ],
   "width": [
    "224:191",
    0
   ],
   "height": [
    "224:191",
    1
   ]
  },
  "class_type": "ImageResize+",
  "_meta": {
   "title": "\ud83d\udd27 Image Resize"
  }
 },
 "224:242": {
  "inputs": {
   "expression": "floor((a - b) * (c / 100))",
   "values.a": [
    "224:191",
    0
   ],
   "values.b": [
    "224:241",
    1
   ],
   "values.c": [
    "224:240",
    0
   ]
  },
  "class_type": "ComfyMathExpression",
  "_meta": {
   "title": "pad_left"
  }
 },
 "224:243": {
  "inputs": {
   "expression": "(a - b) - floor((a - b) * (c / 100))",
   "values.a": [
    "224:191",
    0
   ],
   "values.b": [
    "224:241",
    1
   ],
   "values.c": [
    "224:240",
    0
   ]
  },
  "class_type": "ComfyMathExpression",
  "_meta": {
   "title": "pad_right"
  }
 },
 "224:244": {
  "inputs": {
   "expression": "floor((a - b) * (c / 100))",
   "values.a": [
    "224:191",
    1
   ],
   "values.b": [
    "224:241",
    2
   ],
   "values.c": [
    "224:240",
    0
   ]
  },
  "class_type": "ComfyMathExpression",
  "_meta": {
   "title": "pad_top"
  }
 },
 "224:245": {
  "inputs": {
   "expression": "(a - b) - floor((a - b) * (c / 100))",
   "values.a": [
    "224:191",
    1
   ],
   "values.b": [
    "224:241",
    2
   ],
   "values.c": [
    "224:240",
    0
   ]
  },
  "class_type": "ComfyMathExpression",
  "_meta": {
   "title": "pad_bottom"
  }
 },
 "224:246": {
  "inputs": {
   "feathering": 0,
   "image": [
    "224:241",
    0
   ],
   "left": [
    "224:242",
    1
   ],
   "top": [
    "224:244",
    1
   ],
   "right": [
    "224:243",
    1
   ],
   "bottom": [
    "224:245",
    1
   ]
  },
  "class_type": "ImagePadForOutpaint",
  "_meta": {
   "title": "Pad Image for Outpainting"
  }
 },
 "224:247": {
  "inputs": {
   "image": [
    "224:246",
    0
   ]
  },
  "class_type": "GetImageSize",
  "_meta": {
   "title": "Get Image Size"
  }
 },
 "224:248": {
  "inputs": {
   "batch_size": 1,
   "color": 65280,
   "width": [
    "224:247",
    0
   ],
   "height": [
    "224:247",
    1
   ]
  },
  "class_type": "EmptyImage",
  "_meta": {
   "title": "Empty Image"
  }
 },
 "224:249": {
  "inputs": {
   "x": 0,
   "y": 0,
   "resize_source": false,
   "destination": [
    "224:246",
    0
   ],
   "source": [
    "224:248",
    0
   ],
   "mask": [
    "224:246",
    1
   ]
  },
  "class_type": "ImageCompositeMasked",
  "_meta": {
   "title": "Image Composite Masked"
  }
 },
 "224:255": {
  "inputs": {
   "expression": "a - b",
   "values.a": [
    "224:191",
    0
   ],
   "values.b": [
    "224:241",
    1
   ]
  },
  "class_type": "ComfyMathExpression",
  "_meta": {
   "title": "has_horizontal_slack"
  }
 },
 "262": {
  "inputs": {
   "image_a": [
    "302",
    0
   ],
   "image_b": [
    "264",
    0
   ],
   "compare_view": {
    "__value__": [
     "",
     ""
    ]
   }
  },
  "class_type": "ImageCompare",
  "_meta": {
   "title": "Compare Images"
  }
 },
 "264": {
  "inputs": {
   "upscale_method": "lanczos",
   "keep_proportion": "stretch",
   "pad_color": "0, 0, 0",
   "crop_position": "center",
   "divisible_by": 2,
   "device": "cpu",
   "image": [
    "303",
    0
   ],
   "width": [
    "265",
    0
   ],
   "height": [
    "265",
    1
   ]
  },
  "class_type": "ImageResizeKJv2",
  "_meta": {
   "title": "Resize Image v2"
  }
 },
 "265": {
  "inputs": {
   "image": [
    "280:175",
    0
   ]
  },
  "class_type": "GetImageSize",
  "_meta": {
   "title": "Get Image Size"
  }
 },
 "276": {
  "inputs": {
   "switch": false,
   "on_false": [
    "291",
    0
   ],
   "on_true": [
    "283",
    0
   ]
  },
  "class_type": "ComfySwitchNode",
  "_meta": {
   "title": "Automatic Outpaint Caption"
  }
 },
 "277": {
  "inputs": {
   "source": [
    "276",
    0
   ]
  },
  "class_type": "PreviewAny",
  "_meta": {
   "title": "Caption Preview"
  }
 },
 "278": {
  "inputs": {
   "string_a": "Outpaint/fill the solid green pixels with new image content that seamlessly continues the scene. DO NOT modify the original non-green pixels \u2014 they must remain exactly as they are. Do not copy/paste existing pixels into the green area. The new content must blend seamlessly in lighting, color, perspective, and detail. The green region should be replaced with:",
   "delimiter": "\n",
   "string_b": [
    "277",
    0
   ]
  },
  "class_type": "StringConcatenate",
  "_meta": {
   "title": "Assemble Outpaint Prompt"
  }
 },
 "279": {
  "inputs": {
   "source": [
    "298",
    0
   ]
  },
  "class_type": "PreviewAny",
  "_meta": {
   "title": "Final Prompt"
  }
 },
 "280:155": {
  "inputs": {
   "shift": 3.1,
   "sampling": "flow",
   "model": [
    "280:166",
    0
   ]
  },
  "class_type": "ModelSamplingAuraFlow",
  "_meta": {
   "title": "ModelSamplingAuraFlow"
  }
 },
 "280:156": {
  "inputs": {
   "vae_name": "qwen_image_vae.safetensors"
  },
  "class_type": "VAELoader",
  "_meta": {
   "title": "Load VAE"
  }
 },
 "280:161": {
  "inputs": {
   "clip": [
    "280:167",
    0
   ],
   "prompt": [
    "279",
    0
   ],
   "vae": [
    "280:156",
    0
   ],
   "image1": [
    "280:176",
    0
   ]
  },
  "class_type": "TextEncodeQwenImageEditPlus",
  "_meta": {
   "title": "TextEncodeQwenImageEditPlus (Positive)"
  }
 },
 "280:152": {
  "inputs": {
   "strength": 1,
   "pre_cfg": false,
   "model": [
    "280:155",
    0
   ]
  },
  "class_type": "CFGNorm",
  "_meta": {
   "title": "CFGNorm"
  }
 },
 "280:162": {
  "inputs": {
   "lora_name": "Qwen-Image-Edit-2511-Lightning-4steps-V1.0-bf16.safetensors",
   "strength_model": 1,
   "model": [
    "280:152",
    0
   ]
  },
  "class_type": "LoraLoaderModelOnly",
  "_meta": {
   "title": "Load LoRA"
  }
 },
 "280:163": {
  "inputs": {
   "value": 4
  },
  "class_type": "PrimitiveFloat",
  "_meta": {
   "title": "CFG"
  }
 },
 "280:164": {
  "inputs": {
   "value": 1
  },
  "class_type": "PrimitiveFloat",
  "_meta": {
   "title": "CFG"
  }
 },
 "280:165": {
  "inputs": {
   "pixels": [
    "280:176",
    0
   ],
   "vae": [
    "280:156",
    0
   ]
  },
  "class_type": "VAEEncode",
  "_meta": {
   "title": "VAE Encode"
  }
 },
 "280:166": {
  "inputs": {
   "unet_name": "qwen_image_edit_2511_bf16.safetensors",
   "weight_dtype": "default"
  },
  "class_type": "UNETLoader",
  "_meta": {
   "title": "Load Diffusion Model"
  }
 },
 "280:167": {
  "inputs": {
   "clip_name": "qwen_2.5_vl_7b_fp8_scaled.safetensors",
   "type": "qwen_image",
   "device": "default"
  },
  "class_type": "CLIPLoader",
  "_meta": {
   "title": "Load CLIP"
  }
 },
 "280:168": {
  "inputs": {
   "switch": [
    "280:171",
    0
   ],
   "on_false": [
    "280:152",
    0
   ],
   "on_true": [
    "280:162",
    0
   ]
  },
  "class_type": "ComfySwitchNode",
  "_meta": {
   "title": "Switch (Model)"
  }
 },
 "280:169": {
  "inputs": {
   "value": 6
  },
  "class_type": "PrimitiveInt",
  "_meta": {
   "title": "Steps"
  }
 },
 "280:170": {
  "inputs": {
   "value": 30
  },
  "class_type": "PrimitiveInt",
  "_meta": {
   "title": "Steps"
  }
 },
 "280:171": {
  "inputs": {
   "value": true
  },
  "class_type": "PrimitiveBoolean",
  "_meta": {
   "title": "Enable 4steps LoRA?"
  }
 },
 "280:172": {
  "inputs": {
   "switch": [
    "280:171",
    0
   ],
   "on_false": [
    "280:163",
    0
   ],
   "on_true": [
    "280:164",
    0
   ]
  },
  "class_type": "ComfySwitchNode",
  "_meta": {
   "title": "Switch (CFG)"
  }
 },
 "280:173": {
  "inputs": {
   "switch": [
    "280:171",
    0
   ],
   "on_false": [
    "280:170",
    0
   ],
   "on_true": [
    "280:169",
    0
   ]
  },
  "class_type": "ComfySwitchNode",
  "_meta": {
   "title": "Switch (Steps)"
  }
 },
 "280:174": {
  "inputs": {
   "seed": 927215755554477,
   "sampler_name": "euler",
   "scheduler": "simple",
   "denoise": 1,
   "model": [
    "280:168",
    0
   ],
   "steps": [
    "280:173",
    0
   ],
   "cfg": [
    "280:172",
    0
   ],
   "positive": [
    "280:161",
    0
   ],
   "negative": [
    "280:229",
    0
   ],
   "latent_image": [
    "280:165",
    0
   ]
  },
  "class_type": "KSampler",
  "_meta": {
   "title": "KSampler"
  }
 },
 "280:175": {
  "inputs": {
   "samples": [
    "280:174",
    0
   ],
   "vae": [
    "280:156",
    0
   ]
  },
  "class_type": "VAEDecode",
  "_meta": {
   "title": "VAE Decode"
  }
 },
 "280:176": {
  "inputs": {
   "image": [
    "303",
    0
   ]
  },
  "class_type": "FluxKontextImageScale",
  "_meta": {
   "title": "FluxKontextImageScale"
  }
 },
 "280:229": {
  "inputs": {
   "prompt": "",
   "clip": [
    "280:167",
    0
   ],
   "vae": [
    "280:156",
    0
   ],
   "image1": [
    "280:176",
    0
   ]
  },
  "class_type": "TextEncodeQwenImageEditPlus",
  "_meta": {
   "title": "Text Encode Qwen Image Edit Plus"
  }
 },
 "283": {
  "inputs": {
   "max_length": 400,
   "sampling_mode": "on",
   "thinking": false,
   "use_default_template": true,
   "mtp": "auto",
   "clip": [
    "285",
    0
   ],
   "prompt": [
    "297",
    0
   ],
   "image": [
    "303",
    0
   ],
   "sampling_mode.temperature": 0.7,
   "sampling_mode.top_k": 64,
   "sampling_mode.top_p": 0.95,
   "sampling_mode.min_p": 0.05,
   "sampling_mode.repetition_penalty": 1.05,
   "sampling_mode.seed": 123456789,
   "sampling_mode.presence_penalty": 0
  },
  "class_type": "TextGenerateLTX2Prompt",
  "_meta": {
   "title": "Generate Prompt"
  }
 },
 "285": {
  "inputs": {
   "clip_name": "qwen3.5_4b_bf16.safetensors",
   "type": "stable_diffusion",
   "device": "default"
  },
  "class_type": "CLIPLoader",
  "_meta": {
   "title": "CLIP Loader"
  }
 },
 "291": {
  "inputs": {
   "value": "A large mirror on the left and a door on the right."
  },
  "class_type": "PrimitiveStringMultiline",
  "_meta": {
   "title": "Manual Caption (describe the expanded region)"
  }
 },
 "292": {
  "inputs": {
   "choice": "Centered"
  },
  "class_type": "CustomCombo",
  "_meta": {
   "title": "Image Position"
  }
 },
 "293": {
  "inputs": {
   "json_string": "{\"Image at Start (Left / Top)\": \"0\", \"Image at 1/3 (Rule of Thirds)\": \"33\", \"Centered\": \"50\", \"Image at 2/3 (Rule of Thirds)\": \"67\", \"Image at End (Right / Bottom)\": \"100\"}",
   "key": [
    "292",
    0
   ]
  },
  "class_type": "JsonExtractString",
  "_meta": {
   "title": "Position % (JSON)"
  }
 },
 "299": {
  "inputs": {
   "value": [
    "293",
    0
   ]
  },
  "class_type": "ComfyNumberConvert",
  "_meta": {
   "title": "Convert Number (% -> INT)"
  }
 },
 "294": {
  "inputs": {
   "json_string": "{\"Image at Start (Left / Top)\": \"Placement: the original photograph sits flush at the LEFT edge of the final frame; all new content extends to the RIGHT of the visible scene.\", \"Image at 1/3 (Rule of Thirds)\": \"Placement: the original photograph sits left of center; a narrow band of new content extends to the LEFT and a wider area extends to the RIGHT.\", \"Centered\": \"Placement: the original photograph is centered; new content extends equally to the LEFT and to the RIGHT.\", \"Image at 2/3 (Rule of Thirds)\": \"Placement: the original photograph sits right of center; a wider area of new content extends to the LEFT and a narrow band extends to the RIGHT.\", \"Image at End (Right / Bottom)\": \"Placement: the original photograph sits flush at the RIGHT edge of the final frame; all new content extends to the LEFT of the visible scene.\"}",
   "key": [
    "292",
    0
   ]
  },
  "class_type": "JsonExtractString",
  "_meta": {
   "title": "Placement Phrase (Horizontal)"
  }
 },
 "295": {
  "inputs": {
   "json_string": "{\"Image at Start (Left / Top)\": \"Placement: the original photograph sits flush at the TOP edge of the final frame; all new content extends BELOW the visible scene.\", \"Image at 1/3 (Rule of Thirds)\": \"Placement: the original photograph sits above center; a narrow band of new content extends ABOVE and a wider area extends BELOW.\", \"Centered\": \"Placement: the original photograph is centered; new content extends equally ABOVE and BELOW.\", \"Image at 2/3 (Rule of Thirds)\": \"Placement: the original photograph sits below center; a wider area of new content extends ABOVE and a narrow band extends BELOW.\", \"Image at End (Right / Bottom)\": \"Placement: the original photograph sits flush at the BOTTOM edge of the final frame; all new content extends ABOVE the visible scene.\"}",
   "key": [
    "292",
    0
   ]
  },
  "class_type": "JsonExtractString",
  "_meta": {
   "title": "Placement Phrase (Vertical)"
  }
 },
 "296": {
  "inputs": {
   "switch": [
    "224:255",
    2
   ],
   "on_false": [
    "295",
    0
   ],
   "on_true": [
    "294",
    0
   ]
  },
  "class_type": "ComfySwitchNode",
  "_meta": {
   "title": "Placement Phrase (axis auto-selected)"
  }
 },
 "297": {
  "inputs": {
   "string_a": "You are writing a scene-continuation description for an image outpainting model. The flat solid green area in this image is a placeholder that will be replaced with new scenery extending the photograph. Study the visible non-green content \u2014 the space, surfaces, objects, materials, lighting, colors, and perspective \u2014 and describe in 2-4 sentences exactly what should appear in that area as a natural continuation of the scene.\n\nBe concrete and specific: name the surfaces that extend (floor, walls, ceiling, sky, ground) with their materials, patterns, and colors; any furniture or objects that would plausibly continue or appear; the light direction, temperature, and shadows; and the depth and perspective as the scene recedes.\n\nWrite ONLY the description of the new content itself, as if captioning a photograph of that area. Never mention \"green\", \"region\", \"placeholder\", \"pixels\", \"image\", or the editing process. Never use instructional phrasing like \"should contain\" or \"must match\". Start directly with the content \u2014 for example: \"A continuation of the terracotta tiled floor, its beige grout lines receding toward a plaster wall washed in warm lamplight...\"",
   "delimiter": "\n\n",
   "string_b": [
    "296",
    0
   ]
  },
  "class_type": "StringConcatenate",
  "_meta": {
   "title": "Caption Instruction + Placement"
  }
 },
 "298": {
  "inputs": {
   "delimiter": "\n",
   "string_a": [
    "278",
    0
   ],
   "string_b": [
    "296",
    0
   ]
  },
  "class_type": "StringConcatenate",
  "_meta": {
   "title": "Final Prompt + Placement"
  }
 },
 "302": {
  "inputs": {
   "filename_prefix": "Qwen-2511-outpaint",
   "format": "png",
   "images": [
    "280:175",
    0
   ],
   "format.bit_depth": "8-bit",
   "format.input_color_space": "sRGB"
  },
  "class_type": "SaveImageAdvanced",
  "_meta": {
   "title": "Save Image (Advanced)"
  }
 },
 "303": {
  "inputs": {
   "filename_prefix": "Qwen-2511-outpaint_region",
   "format": "png",
   "images": [
    "224:249",
    0
   ],
   "format.bit_depth": "8-bit",
   "format.input_color_space": "sRGB"
  },
  "class_type": "SaveImageAdvanced",
  "_meta": {
   "title": "Save Image (Advanced)"
  }
 }
}