{
  "1": {
    "_meta": {
      "title": "Load single-plate morph control video"
    },
    "class_type": "LoadVideo",
    "inputs": {
      "file": "genvfx/outfit_morph/vace_control_single_plate_morph_121_1088.mp4"
    }
  },
  "2": {
    "_meta": {
      "title": "Extract control frames"
    },
    "class_type": "GetVideoComponents",
    "inputs": {
      "video": [
        "1",
        0
      ]
    }
  },
  "20": {
    "_meta": {
      "title": "Load VACE 14B"
    },
    "class_type": "UNETLoader",
    "inputs": {
      "unet_name": "wan2.1_vace_14B_fp16.safetensors",
      "weight_dtype": "default"
    }
  },
  "21": {
    "_meta": {
      "title": "Wan shift"
    },
    "class_type": "ModelSamplingSD3",
    "inputs": {
      "model": [
        "20",
        0
      ],
      "shift": 8.0
    }
  },
  "22": {
    "_meta": {
      "title": "Load Wan text encoder"
    },
    "class_type": "CLIPLoader",
    "inputs": {
      "clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
      "device": "default",
      "type": "wan"
    }
  },
  "23": {
    "_meta": {
      "title": "Positive prompt"
    },
    "class_type": "CLIPTextEncode",
    "inputs": {
      "clip": [
        "22",
        0
      ],
      "text": "A high-fashion cyber-70s punk woman in her 20s walks straight toward the camera on a gray studio catwalk. This is one continuous source performance, not a blend between two videos. For frames before the midpoint, preserve the translucent silver technical outfit from the source plate. At the exact midpoint, the wardrobe itself morphs continuously into an asymmetrical gray plaid cyber-punk jacket and black skirt outfit. After the midpoint, she keeps walking in the new gray plaid jacket and black skirt outfit. Only the clothing region transforms: panels slide over the body, seams crawl and reconnect, straps reroute, chrome buckles reshape, skirt panels form, fabric texture changes. Preserve the same face identity, blue-white mohawk hair, skin tone, hands, legs, boots, body scale, background, lighting direction, framing, and catwalk motion outside the wardrobe mask. The woman remains fully clothed for the entire shot. Sharp high detail fabric, clean VFX morph, stable face, stable motion, no pixelation."
    }
  },
  "24": {
    "_meta": {
      "title": "Negative prompt"
    },
    "class_type": "CLIPTextEncode",
    "inputs": {
      "clip": [
        "22",
        0
      ],
      "text": "crossfade, dissolve, video blend, blending between two videos, second performance, different walk, hard cut, scene cut, jump cut, static clothing layer, pasted garment, garment slides as flat overlay, outfit floats above body, rectangular patch, body rotation morph, spin transition, nude, naked, bare chest, underwear, bikini, base garment visible, disappearing clothes, clothing pops on only at the final frame, early full morph, late final-frame cut, duplicate person, extra people, extra limbs, deformed hands, face change, mouth distortion, old woman, cropped head, cropped feet, text, subtitles, logo, watermark, HUD, UI overlay, blurry, low quality, pixelated, compression artifacts, blocky artifacts, flicker, jitter"
    }
  },
  "25": {
    "_meta": {
      "title": "Load Wan VAE"
    },
    "class_type": "VAELoader",
    "inputs": {
      "vae_name": "wan_2.1_vae.safetensors"
    }
  },
  "26": {
    "_meta": {
      "title": "VACE single-source wardrobe morph 1088"
    },
    "class_type": "WanVaceToVideo",
    "inputs": {
      "batch_size": 1,
      "control_masks": [
        "7",
        0
      ],
      "control_video": [
        "2",
        0
      ],
      "height": 1088,
      "length": 121,
      "negative": [
        "24",
        0
      ],
      "positive": [
        "23",
        0
      ],
      "strength": 1.0,
      "vae": [
        "25",
        0
      ],
      "width": 1088
    }
  },
  "27": {
    "_meta": {
      "title": "Sample single-source outfit morph 1088 32 steps"
    },
    "class_type": "KSampler",
    "inputs": {
      "cfg": 6.0,
      "denoise": 1.0,
      "latent_image": [
        "26",
        2
      ],
      "model": [
        "21",
        0
      ],
      "negative": [
        "26",
        1
      ],
      "positive": [
        "26",
        0
      ],
      "sampler_name": "uni_pc",
      "scheduler": "simple",
      "seed": 8842190479,
      "steps": 32
    }
  },
  "28": {
    "_meta": {
      "title": "Trim latent"
    },
    "class_type": "TrimVideoLatent",
    "inputs": {
      "samples": [
        "27",
        0
      ],
      "trim_amount": [
        "26",
        3
      ]
    }
  },
  "29": {
    "_meta": {
      "title": "Decode frames"
    },
    "class_type": "VAEDecode",
    "inputs": {
      "samples": [
        "28",
        0
      ],
      "vae": [
        "25",
        0
      ]
    }
  },
  "30": {
    "_meta": {
      "title": "Create review MP4"
    },
    "class_type": "CreateVideo",
    "inputs": {
      "fps": 24.0,
      "images": [
        "29",
        0
      ]
    }
  },
  "31": {
    "_meta": {
      "title": "Save compressed review video"
    },
    "class_type": "SaveVideo",
    "inputs": {
      "codec": "h264",
      "filename_prefix": "genvfx/outfit_morph_single_plate_vace_1088_121_24fps_32steps",
      "format": "mp4",
      "video": [
        "30",
        0
      ]
    }
  },
  "32": {
    "_meta": {
      "title": "Save PNG frames for high bitrate master"
    },
    "class_type": "SaveImage",
    "inputs": {
      "filename_prefix": "genvfx/outfit_morph_single_plate_vace_1088_121_24fps_32steps_frames",
      "images": [
        "29",
        0
      ]
    }
  },
  "4": {
    "_meta": {
      "title": "Load single-plate morph mask video"
    },
    "class_type": "LoadVideo",
    "inputs": {
      "file": "genvfx/outfit_morph/vace_mask_single_plate_morph_121_1088.mp4"
    }
  },
  "5": {
    "_meta": {
      "title": "Extract mask frames"
    },
    "class_type": "GetVideoComponents",
    "inputs": {
      "video": [
        "4",
        0
      ]
    }
  },
  "7": {
    "_meta": {
      "title": "Control mask frames"
    },
    "class_type": "ImageToMask",
    "inputs": {
      "channel": "red",
      "image": [
        "5",
        0
      ]
    }
  }
}
