In the user's tests Codex's FLUX-Fill redraw of one crop per hand did better. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
271 lines
8.5 KiB
JSON
271 lines
8.5 KiB
JSON
{
|
||
"job": "detail",
|
||
"want": "hands",
|
||
"rank": 2,
|
||
"short": "enlarge, then hands (fallback)",
|
||
"enlarge": {
|
||
"megapixels": 4.2,
|
||
"most": 2.0,
|
||
"unknown": 1.5
|
||
},
|
||
"title": {
|
||
"zh": "修手·先放大再修(备选)",
|
||
"en": "Fix hands: enlarge, then fix (fallback)"
|
||
},
|
||
"about": {
|
||
"zh": "整张图放大到约 400 万像素(小图 2 倍)轻轻重画,让手变大;再找出每只手,放大重画后贴回去。",
|
||
"en": "The whole picture is enlarged to about 4 megapixels (2× for a small one) and redrawn lightly, so the hands grow; then each hand is found, redrawn larger and pasted back."
|
||
},
|
||
"source": {
|
||
"zh": "参考作者的「先放大重画」和「手部精修」两步合在一起,2026-10-29 在 RTX 4050 上试出这组数",
|
||
"en": "The reference author's light redraw after enlarging and his hand detailing, put together; these numbers tried on an RTX 4050 on 2026-10-29"
|
||
},
|
||
"packs": {
|
||
"FaceDetailer": "ComfyUI-Impact-Pack",
|
||
"UltralyticsDetectorProvider": "ComfyUI-Impact-Subpack"
|
||
},
|
||
"takes": "picture",
|
||
"detectors": {
|
||
"hand": "hand_yolov8"
|
||
},
|
||
"roles": {
|
||
"sampler": {
|
||
"denoise": 0.4
|
||
}
|
||
},
|
||
"nodes": {
|
||
"picture": {
|
||
"class_type": "LoadImage",
|
||
"inputs": {
|
||
"image": "$image"
|
||
}
|
||
},
|
||
"bigger": {
|
||
"class_type": "ImageScaleBy",
|
||
"inputs": {
|
||
"image": [
|
||
"picture",
|
||
0
|
||
],
|
||
"upscale_method": "lanczos",
|
||
"scale_by": "$enlarge"
|
||
}
|
||
},
|
||
"encode": {
|
||
"class_type": "VAEEncode",
|
||
"inputs": {
|
||
"pixels": [
|
||
"bigger",
|
||
0
|
||
],
|
||
"vae": [
|
||
"$decode.vae",
|
||
"*"
|
||
]
|
||
},
|
||
"wire_to": "$sampler"
|
||
},
|
||
"hand_finder": {
|
||
"class_type": "UltralyticsDetectorProvider",
|
||
"inputs": {
|
||
"model_name": "$hand"
|
||
}
|
||
},
|
||
"hands": {
|
||
"class_type": "FaceDetailer",
|
||
"like": "$sampler",
|
||
"inputs": {
|
||
"image": [
|
||
"$decode",
|
||
0
|
||
],
|
||
"model": [
|
||
"$sampler.model",
|
||
"*"
|
||
],
|
||
"clip": [
|
||
"$sampler.positive.clip",
|
||
"*"
|
||
],
|
||
"vae": [
|
||
"$decode.vae",
|
||
"*"
|
||
],
|
||
"positive": [
|
||
"$sampler.positive",
|
||
"*"
|
||
],
|
||
"negative": [
|
||
"$sampler.negative",
|
||
"*"
|
||
],
|
||
"bbox_detector": [
|
||
"hand_finder",
|
||
0
|
||
],
|
||
"guide_size": 768,
|
||
"max_size": 1024,
|
||
"denoise": 0.45,
|
||
"bbox_threshold": 0.3,
|
||
"bbox_crop_factor": 2.0,
|
||
"feather": 5,
|
||
"drop_size": 10,
|
||
"wildcard": "detailed hand"
|
||
}
|
||
},
|
||
"save": {
|
||
"class_type": "SaveImage",
|
||
"inputs": {
|
||
"images": [
|
||
"hands",
|
||
"image"
|
||
],
|
||
"filename_prefix": "hands_fixed"
|
||
}
|
||
}
|
||
},
|
||
"after": "A fallback: a FLUX-Fill redraw of one square crop around each hand did better in the user's tests; use that when you have it. The picture is enlarged to about 4 megapixels (2× for one of about 1 megapixel, at most 2×, not at all for a large one) and drawn again lightly (the sampler now takes it, at denoise 0.4), then every hand found is redrawn larger (hands, denoise 0.45) and saved with prefix hands_fixed; the enlarged one is saved too, without the hand pass. About 3 tries in 4 give a good hand: run_workflow with batch 4 (each try its own seed), then check them before the user does: zoom_image each hands_fixed picture on the hand, compare_with the old picture, and drop a hand with the wrong number of fingers, fused or melted fingers, or one far bigger or smaller than its arm. None good: run_workflow batch 4 again, at most twice. Then a picks panel zoomed on the hand lets the user choose among the good ones.",
|
||
"notes": "Tried on the Codex test picture (1280×832, three characters, the hand about 110×78 px): the hand pass alone gave a good hand in about half the seeds whatever its size (512 or 768) and denoise (0.45 or 0.55); enlarging 1.5× first gave good hands in 3 of 4, 2× gave sharper fingers in the same seeds (about 105 s instead of 75 s). Denoise 0.4 for the enlarged redraw kept the layout; faces and splashes change a little.",
|
||
"models": [
|
||
"hand_yolov8s",
|
||
"anima_turbo_lora"
|
||
],
|
||
"tested": {
|
||
"gpu": "RTX 4050 Laptop",
|
||
"vram_gb": 6,
|
||
"date": "2026-10-29",
|
||
"runs": [
|
||
{
|
||
"model": "Anima (Kirazuri v4, Turbo LoRA)",
|
||
"size": "1280×832 → 2560×1664",
|
||
"seconds": 105
|
||
}
|
||
]
|
||
},
|
||
"variants": {
|
||
"anima": {
|
||
"loras": {
|
||
"turbo": "anima-turbo-lora"
|
||
},
|
||
"without_loras": "On an Anima model the Anima Turbo LoRA (anima-turbo-lora-v0.2, the user can get it in the ways panel) makes this about three times faster: 10 steps at CFG 1.",
|
||
"roles": {
|
||
"sampler": {
|
||
"denoise": 0.4,
|
||
"steps": 10,
|
||
"cfg": 1.0,
|
||
"sampler_name": "euler_ancestral",
|
||
"scheduler": "normal"
|
||
}
|
||
},
|
||
"nodes": {
|
||
"picture": {
|
||
"class_type": "LoadImage",
|
||
"inputs": {
|
||
"image": "$image"
|
||
}
|
||
},
|
||
"turbo": {
|
||
"class_type": "LoraLoaderModelOnly",
|
||
"inputs": {
|
||
"model": [
|
||
"$sampler.model",
|
||
"*"
|
||
],
|
||
"lora_name": "$turbo",
|
||
"strength_model": 0.7
|
||
},
|
||
"wire_to": "$sampler"
|
||
},
|
||
"bigger": {
|
||
"class_type": "ImageScaleBy",
|
||
"inputs": {
|
||
"image": [
|
||
"picture",
|
||
0
|
||
],
|
||
"upscale_method": "lanczos",
|
||
"scale_by": "$enlarge"
|
||
}
|
||
},
|
||
"encode": {
|
||
"class_type": "VAEEncode",
|
||
"inputs": {
|
||
"pixels": [
|
||
"bigger",
|
||
0
|
||
],
|
||
"vae": [
|
||
"$decode.vae",
|
||
"*"
|
||
]
|
||
},
|
||
"wire_to": "$sampler"
|
||
},
|
||
"hand_finder": {
|
||
"class_type": "UltralyticsDetectorProvider",
|
||
"inputs": {
|
||
"model_name": "$hand"
|
||
}
|
||
},
|
||
"hands": {
|
||
"class_type": "FaceDetailer",
|
||
"like": "$sampler",
|
||
"inputs": {
|
||
"image": [
|
||
"$decode",
|
||
0
|
||
],
|
||
"model": [
|
||
"turbo",
|
||
0
|
||
],
|
||
"clip": [
|
||
"$sampler.positive.clip",
|
||
"*"
|
||
],
|
||
"vae": [
|
||
"$decode.vae",
|
||
"*"
|
||
],
|
||
"positive": [
|
||
"$sampler.positive",
|
||
"*"
|
||
],
|
||
"negative": [
|
||
"$sampler.negative",
|
||
"*"
|
||
],
|
||
"bbox_detector": [
|
||
"hand_finder",
|
||
0
|
||
],
|
||
"guide_size": 768,
|
||
"max_size": 1024,
|
||
"steps": 10,
|
||
"cfg": 1.0,
|
||
"sampler_name": "euler_ancestral",
|
||
"scheduler": "normal",
|
||
"denoise": 0.45,
|
||
"bbox_threshold": 0.3,
|
||
"bbox_crop_factor": 2.0,
|
||
"feather": 5,
|
||
"drop_size": 10,
|
||
"wildcard": "detailed hand"
|
||
}
|
||
},
|
||
"save": {
|
||
"class_type": "SaveImage",
|
||
"inputs": {
|
||
"images": [
|
||
"hands",
|
||
"image"
|
||
],
|
||
"filename_prefix": "hands_fixed"
|
||
}
|
||
}
|
||
},
|
||
"after": "A fallback: a FLUX-Fill redraw of one square crop around each hand did better in the user's tests; use that when you have it. On this Anima model the Anima Turbo LoRA (0.7) makes both passes 10 steps at CFG 1, about 105 s for 1280×832 (2×) on a 6 GB card. The picture is enlarged to about 4 megapixels (2× for one of about 1 megapixel, at most 2×, not at all for a large one) and drawn again lightly (the sampler now takes it, at denoise 0.4), then every hand found is redrawn larger (hands, denoise 0.45) and saved with prefix hands_fixed; the enlarged one is saved too, without the hand pass. About 3 tries in 4 give a good hand: run_workflow with batch 4 (each try its own seed), then check them before the user does: zoom_image each hands_fixed picture on the hand, compare_with the old picture, and drop a hand with the wrong number of fingers, fused or melted fingers, or one far bigger or smaller than its arm. None good: run_workflow batch 4 again, at most twice. Then a picks panel zoomed on the hand lets the user choose among the good ones."
|
||
}
|
||
}
|
||
}
|