{ "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." } } }