Files
DemonGatanjieuandClaude c9c9e5b21e Shorten the Ways panel, tell the ways from their own files, stop an LLLite that does not fit
- The Ways panel lists the ways that can run here as short rows that open,
  then the skills, and folds the ways lacking a pack or a model at the bottom.
- The staged_picture skill keeps the judgment only: the ways of its uses come
  from each block's "when", listed with the skill for what can run here. Its
  answer had passed the 3,800 bytes an AI app shows in the chat (3,991); a test
  keeps every skill under it.
- An Anima LLLite made for 28-block (2B) models stops a run on a 40-block
  (2.9B) one: lllite_fit counts both from the files' headers, the AI's run is
  refused with the nodes to change, and an example with a Tile opens on a model
  it fits. The warning written into four ways and two examples is removed.
- What holds for a model family is written once: the profile's notes go with
  each Anima example for an AI, the examples window says it once for the user;
  a pack two nodes come from is named once.
- The Tile upscale is want="tile", no longer the name of another use.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-11-10 16:25:22 +08:00

308 lines
10 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"job": "refine",
"want": "character",
"rank": 8,
"short": "character only",
"when": "another model redraws only the character, the scene kept to the pixel.",
"title": {
"zh": "换模型精修·只改人物",
"en": "Refine only the character"
},
"about": {
"zh": "自动抠出人物,换另一个模型只重画人物,边缘慢慢减弱,场景原样不动;Anima 上有 Tile 时照着原图的线条画,可以改得更多。另存一张。",
"en": "Cuts the character out; another model redraws only it, fading out at its edge, the scene left as it was; on Anima with the Tile it follows the picture's lines and may change more. Saved beside it."
},
"source": {
"zh": "常见的抠图加渐变遮罩局部重画(ComfyUI 自带的 Differential Diffusion),强度按 2026-11-10 的人物重画对照定",
"en": "The common cut-out with a graded-mask repaint (ComfyUI's own Differential Diffusion), its strength from a character redraw comparison of 2026-11-10"
},
"packs": {
"InspyrenetRembg": "comfyui-inspyrenet-rembg"
},
"extras": {
"AnimaLLLiteApply_sdscripts": "ComfyUI-Anima-LLLite"
},
"nodes": {
"second_model": {
"class_type": "CheckpointLoaderSimple",
"like": "$loader",
"inputs": {}
},
"second_positive": {
"class_type": "CLIPTextEncode",
"like": "$sampler.positive",
"inputs": {
"clip": ["second_model", 1]
}
},
"second_negative": {
"class_type": "CLIPTextEncode",
"like": "$sampler.negative",
"inputs": {
"clip": ["second_model", 1]
}
},
"cut": {
"class_type": "InspyrenetRembg",
"inputs": {
"image": ["$save.images", "*"],
"torchscript_jit": "default"
}
},
"solid": {
"class_type": "ThresholdMask",
"inputs": {
"mask": ["cut", 1],
"value": 0.5
}
},
"edge": {
"class_type": "GrowMask",
"inputs": {
"mask": ["solid", 0],
"expand": 12,
"tapered_corners": true
}
},
"as_picture": {
"class_type": "MaskToImage",
"inputs": {
"mask": ["edge", 0]
}
},
"fade": {
"class_type": "ImageBlur",
"inputs": {
"image": ["as_picture", 0],
"blur_radius": 31,
"sigma": 0.5
}
},
"area_mask": {
"class_type": "ImageToMask",
"inputs": {
"image": ["fade", 0],
"channel": "red"
}
},
"soft": {
"class_type": "DifferentialDiffusion",
"inputs": {
"model": ["second_model", 0]
}
},
"encode": {
"class_type": "VAEEncode",
"inputs": {
"pixels": ["$save.images", "*"],
"vae": ["second_model", 2]
}
},
"area": {
"class_type": "SetLatentNoiseMask",
"inputs": {
"samples": ["encode", 0],
"mask": ["area_mask", 0]
}
},
"redraw": {
"class_type": "KSampler",
"like": "$sampler",
"inputs": {
"model": ["soft", 0],
"positive": ["second_positive", 0],
"negative": ["second_negative", 0],
"latent_image": ["area", 0],
"denoise": 0.45
}
},
"decode": {
"class_type": "VAEDecode",
"inputs": {
"samples": ["redraw", 0],
"vae": ["second_model", 2]
}
},
"paste": {
"class_type": "ImageCompositeMasked",
"inputs": {
"destination": ["$save.images", "*"],
"source": ["decode", 0],
"x": 0,
"y": 0,
"resize_source": false,
"mask": ["area_mask", 0]
}
},
"save": {
"class_type": "SaveImage",
"inputs": {
"images": ["paste", 0],
"filename_prefix": "refined_character"
}
},
"look": {
"class_type": "PreviewImage",
"inputs": {
"images": ["fade", 0]
}
}
},
"after": "The redraw's loader (second_model) starts as the same checkpoint: set_model it to the model the user wants for the character (ask_user, search_models), add_lora a character or style LoRA onto it if they want one, and write its prompts (second_positive, second_negative, copied from the first) in that model's style. Then run_workflow; the picture is saved beside it (prefix refined_character), the scene the same to the pixel. Denoise 0.45: face, hair and clothes take the second model's look and the pose stays; 0.3 changes little; at 0.6 the face changes more and colours fade. The preview shows what is redrawn (white, fading at the edge): part of the character missing, or the background in it, say so.",
"gives": {
"sampler": "redraw",
"save": "save"
},
"own_model": {
"nodes": ["second_model"],
"copies_loras": false
},
"notes": "The character's mask grows 12 px and is blurred about 15 px, so the redraw fades out at its edge; Differential Diffusion makes the mask's grey a weaker redraw, and the paste-back keeps everything outside it as it was. In the 2026-11-10 comparison (an Anima picture, RealSkin redrawing the character) this way at 0.45 changed the character about 5.5% on average and the scene 0.03%; the coat stayed on the bench. A small character in a wide picture gets few pixels for its face: repaint it (inpaint_crop_stitch) instead. The cut-out takes what stands out in front, often with what the character sits on or holds (a bench, an umbrella, a bag): redrawn with it, so where they touch still fits. On Anima an animaTileRepair LLLite (strength 0.7, the first 80% of the steps, as the Tile upscale) holds the picture's lines: in a test of 2026-11-10 at denoise 0.70 without it the background's windows vanished and the bag was redrawn as another, with it they stayed (lines kept 61% to 85% in the background, 77% to 92% on the character), so it redraws at 0.7; without the Tile file the node goes and 0.45 is the strength. How much 0.7 changes follows the sampler: dpmpp_2m_sde (the Anima picture way's) about 8% on the character in that test, euler on a canvas there about 5%, the lines kept either way.",
"models": [],
"tested": {
"gpu": "RTX 4050 Laptop",
"vram_gb": 6,
"date": "2026-11-10",
"runs": [
{
"model": "Anima (Harem 2.9B, then RealSkin 1.3 on the character, the Tile, denoise 0.7)",
"size": "1440×1024",
"seconds": 250
}
]
},
"variants": {
"anima": {
"optional_lllite": {
"tile": "tile"
},
"nodes": {
"second_model": {
"class_type": "UNETLoader",
"like": "$loader",
"inputs": {}
},
"tile": {
"class_type": "AnimaLLLiteApply_sdscripts",
"optional": true,
"inputs": {
"model": ["second_model", 0],
"lllite_name": "$tile",
"image": ["$save.images", "*"],
"strength": 0.7,
"start_percent": 0.0,
"end_percent": 0.8,
"preserve_wrapper": true
}
},
"cut": {
"class_type": "InspyrenetRembg",
"inputs": {
"image": ["$save.images", "*"],
"torchscript_jit": "default"
}
},
"solid": {
"class_type": "ThresholdMask",
"inputs": {
"mask": ["cut", 1],
"value": 0.5
}
},
"edge": {
"class_type": "GrowMask",
"inputs": {
"mask": ["solid", 0],
"expand": 12,
"tapered_corners": true
}
},
"as_picture": {
"class_type": "MaskToImage",
"inputs": {
"mask": ["edge", 0]
}
},
"fade": {
"class_type": "ImageBlur",
"inputs": {
"image": ["as_picture", 0],
"blur_radius": 31,
"sigma": 0.5
}
},
"area_mask": {
"class_type": "ImageToMask",
"inputs": {
"image": ["fade", 0],
"channel": "red"
}
},
"soft": {
"class_type": "DifferentialDiffusion",
"inputs": {
"model": ["tile|second_model", 0]
}
},
"encode": {
"class_type": "VAEEncode",
"inputs": {
"pixels": ["$save.images", "*"],
"vae": ["$decode.vae", "*"]
}
},
"area": {
"class_type": "SetLatentNoiseMask",
"inputs": {
"samples": ["encode", 0],
"mask": ["area_mask", 0]
}
},
"redraw": {
"class_type": "KSampler",
"like": "$sampler",
"inputs": {
"model": ["soft", 0],
"positive": ["$sampler.positive", "*"],
"negative": ["$sampler.negative", "*"],
"latent_image": ["area", 0],
"denoise": 0.7
}
},
"decode": {
"class_type": "VAEDecode",
"inputs": {
"samples": ["redraw", 0],
"vae": ["$decode.vae", "*"]
}
},
"paste": {
"class_type": "ImageCompositeMasked",
"inputs": {
"destination": ["$save.images", "*"],
"source": ["decode", 0],
"x": 0,
"y": 0,
"resize_source": false,
"mask": ["area_mask", 0]
}
},
"save": {
"class_type": "SaveImage",
"inputs": {
"images": ["paste", 0],
"filename_prefix": "refined_character"
}
},
"look": {
"class_type": "PreviewImage",
"inputs": {
"images": ["fade", 0]
}
}
},
"after": "On this Anima model the redraw's loader (second_model) is a UNET loader that starts as the canvas's model; it reuses the canvas's text encoder, VAE and prompts. set_model it to the other Anima model the user wants for the character (ask_user, search_models); a LoRA on the first model is not on it: add_lora it onto second_model when the user wants that look kept. Then run_workflow; the picture is saved beside it (prefix refined_character), the scene the same to the pixel. The Tile (node tile) holds the picture's lines, so at denoise 0.7 the character takes the second model's look and nothing in it turns into something else (a bag stays that bag); without the tile node (no animaTileRepair file here) set redraw's denoise to 0.45. At this strength colours may drift (hair, a scarf): say so. The preview shows what is redrawn (white, fading at the edge): part of the character missing, or the background in it, say so."
}
}
}