{
  "_meta": {
    "title": "Exploded Character Asset Workflow Template",
    "purpose": "Use IP-Adapter for character identity, ControlNet OpenPose for separated body-part layout, then save one generated exploded-view PNG.",
    "required_custom_nodes": [
      "ComfyUI_IPAdapter_plus or equivalent IP-Adapter nodes",
      "ControlNet OpenPose model",
      "A checkpoint suitable for anime or cel-shaded characters"
    ],
    "placeholders": [
      "__POSITIVE_PROMPT__",
      "__NEGATIVE_PROMPT__",
      "__SEED__",
      "__OPENPOSE_IMAGE__",
      "__REFERENCE_IMAGE_1__"
    ],
    "note": "Node names differ across ComfyUI installs. Treat this as an API prompt template and adjust class_type/input names to match your installed IP-Adapter and ControlNet nodes."
  },
  "1": {
    "class_type": "CheckpointLoaderSimple",
    "inputs": {
      "ckpt_name": "anime-or-cel-character-checkpoint.safetensors"
    }
  },
  "2": {
    "class_type": "CLIPTextEncode",
    "inputs": {
      "clip": ["1", 1],
      "text": "__POSITIVE_PROMPT__, clean cel shading, flat color background, individual body parts separated, no overlap, transparent-friendly edges"
    }
  },
  "3": {
    "class_type": "CLIPTextEncode",
    "inputs": {
      "clip": ["1", 1],
      "text": "__NEGATIVE_PROMPT__, overlapping arms, hand covering torso, cropped head, merged limbs, noisy background, watermark"
    }
  },
  "4": {
    "class_type": "EmptyLatentImage",
    "inputs": {
      "width": 1024,
      "height": 1024,
      "batch_size": 1
    }
  },
  "10": {
    "class_type": "LoadImage",
    "inputs": {
      "image": "__OPENPOSE_IMAGE__"
    }
  },
  "11": {
    "class_type": "ControlNetLoader",
    "inputs": {
      "control_net_name": "control_v11p_sd15_openpose.pth"
    }
  },
  "12": {
    "class_type": "ControlNetApplyAdvanced",
    "inputs": {
      "positive": ["2", 0],
      "negative": ["3", 0],
      "control_net": ["11", 0],
      "image": ["10", 0],
      "strength": 1.0,
      "start_percent": 0.0,
      "end_percent": 1.0
    }
  },
  "20": {
    "class_type": "LoadImage",
    "inputs": {
      "image": "__REFERENCE_IMAGE_1__"
    }
  },
  "21": {
    "class_type": "IPAdapterModelLoader",
    "inputs": {
      "ipadapter_file": "ip-adapter-plus_sd15.bin"
    }
  },
  "22": {
    "class_type": "CLIPVisionLoader",
    "inputs": {
      "clip_name": "CLIP-ViT-H-14-laion2B-s32B-b79K.safetensors"
    }
  },
  "23": {
    "class_type": "IPAdapterAdvanced",
    "inputs": {
      "model": ["1", 0],
      "ipadapter": ["21", 0],
      "image": ["20", 0],
      "clip_vision": ["22", 0],
      "weight": 0.85,
      "weight_type": "linear",
      "combine_embeds": "concat",
      "start_at": 0.0,
      "end_at": 1.0
    }
  },
  "30": {
    "class_type": "KSampler",
    "inputs": {
      "model": ["23", 0],
      "positive": ["12", 0],
      "negative": ["12", 1],
      "latent_image": ["4", 0],
      "seed": "__SEED__",
      "steps": 28,
      "cfg": 6.5,
      "sampler_name": "dpmpp_2m",
      "scheduler": "karras",
      "denoise": 1.0
    }
  },
  "31": {
    "class_type": "VAEDecode",
    "inputs": {
      "samples": ["30", 0],
      "vae": ["1", 2]
    }
  },
  "32": {
    "class_type": "SaveImage",
    "inputs": {
      "images": ["31", 0],
      "filename_prefix": "exploded-character-assets"
    }
  }
}
