ComfyUI Node

VNCCS Character Generator

Pose, upscale and cut out a character in one node

By AHEKOT·Created 11 months ago·Updated about 21 hours ago· 1,546
VNCCS Character Generator
  • poses
  • character
  • pipe
  • sheet
  • faces
  • pose_generation
  • upscaled
prompt
backgroundGreen
widget_data{"common": {"target_size": 1024}, "upscaler": {"mode": "seedvr", "model": "seedvr2_3b_fp8_e4m3fn.safetensors", "vae": "ema_vae_fp16.safetensors", "gan_model": "", "device": "cuda:0", "offload_device": "cpu", "seed": 42, "inherit_pipe_seed": true, "resolution": 2048, "max_resolution": 3840, "batch_size": 1, "uniform_batch_size": false, "color_correction": "lab", "temporal_overlap": 0, "prepend_frames": 0, "input_noise_scale": 0, "latent_noise_scale": 0, "blocks_to_swap": 0, "swap_io_components": false, "cache_dit": true, "attention_mode": "sageattn_2", "attention_mode_manual": false, "encode_tiled": true, "encode_tile_size": 1024, "encode_tile_overlap": 128, "decode_tiled": true, "decode_tile_size": 1024, "decode_tile_overlap": 128, "tile_debug": "false", "cache_vae": false, "enable_debug": false}, "bg_remove": {"use_internal_rmbg": false, "preset": "balanced", "use_sam3_details_recovery": true, "use_preset_values": true, "tolerance": 0.15, "softness": 0.12, "despill_strength": 0.65, "edge_width": 3, "matte_cleanup": 0.1, "foreground_recover": 0.35, "edge_decontaminate": 0.75, "edge_choke": 0.08, "matte_method": "guided_edge", "screen_mode": "from_background", "output_mode": "straight_rgba", "sam3_model": "", "sam3_segmentor": "image", "sam3_device": "auto", "sam3_precision": "bf16", "sam3_prompt": "face, clothes, accessories, hat, boots, eyes", "sam3_threshold": 0.4, "sam3_add_background": "none", "sam3_detection_limit": -1, "sam3_erode_radius": 4, "sam3_min_foreground_overlap": 0.55}, "pose_generation": {"target_size": 1024, "upscale_method": "lanczos", "crop_method": "disabled", "image1_name": "image 1", "image2_name": "image 2", "image3_name": "image 3", "weight1": 1.0, "weight2": 1.0, "weight3": 1.0, "vl_size": 384, "background_color": "from_generator", "latent_image_index": 1, "instruction": "Describe the character and their key features (body shape, physical characteristics, clothing, items, accessories). Then explain how the user's text instruction should alter or modify the character. Generate a new image that meets the user's requirements while maintaining consistency with the original character where appropriate.", "qwen_2511": true}, "pose_sampler": {"inherit_pipe": true, "seed": 0, "steps": 20, "cfg": 1.0, "sampler_name": "euler", "scheduler": "simple", "denoise": 1.0}, "vae_decode": {"tile_size": 512, "overlap": 64, "temporal_size": 64, "temporal_overlap": 8}, "emotion_generation": {"task_batch_size": 0, "face_denoise": 0.55, "use_sam": true, "bbox_model": "bbox/face_yolov8m.pt", "segm_model": "bbox/face_yolov8m.pt", "sam_model": "sam_vit_b_01ec64.pth", "sam_device_mode": "AUTO", "guide_size": 1536, "guide_size_for": true, "max_size": 1536, "inherit_pipe_sampler": true, "sampler_name": "euler", "scheduler": "simple", "feather": 5, "noise_mask": true, "force_inpaint": true, "bbox_threshold": 0.5, "bbox_dilation": 10, "bbox_crop_factor": 3.0, "sam_detection_hint": "center-1", "sam_dilation": 0, "sam_threshold": 0.93, "sam_bbox_expansion": 0, "sam_mask_hint_threshold": 0.7, "sam_mask_hint_use_negative": "False", "drop_size": 10, "cycle": 1, "inpaint_model": false, "noise_mask_feather": 20, "tiled_encode": true, "tiled_decode": true, "matte_expand_radius": 8, "matte_feather_radius": 4, "chroma_context": 16}, "remove_clothes": {"prompt": "Dress character: White underwear", "target_size": 1024, "upscale_method": "lanczos", "crop_method": "disabled", "image1_name": "image 1", "image2_name": "image 2", "image3_name": "image 3", "weight1": 1.0, "weight2": 1.0, "weight3": 1.0, "vl_size": 384, "background_color": "White", "latent_image_index": 1, "instruction": "Describe the character and their key features (body shape, physical characteristics, clothing, items, accessories). Then explain how the user's text instruction should alter or modify the character. Generate a new image that meets the user's requirements while maintaining consistency with the original character where appropriate.", "qwen_2511": true}, "remove_clothes_sampler": {"inherit_pipe": true, "seed": 0, "steps": 20, "cfg": 1.0, "sampler_name": "euler", "scheduler": "simple", "denoise": 1.0}}
sheets_path

The node description tells you exactly what this replaces: "Replacement for VNCCS Pose Generation, Upscaler, and BG Remove subgraphs." Earlier VNCCS versions strung three separate subgraphs together to get from a character sheet to a finished, transparent sprite set. Character Generator collapses all three into one node - same job, fewer wires to keep track of.

What it does and where it sits

This is the base-character sibling of VNCCS_ClothesGenerator (which does the same thing for clothing outfits). You feed it a character source and a pose set, and it runs the generated poses through an upscale pass, then background removal, and hands you back a finished sheet. It's the node that actually turns "I designed a character" into "I have a sprite set I can drop into a game engine." It's is_output_node: true, so it writes to ComfyUI\output\VNCCS\Characters\ as part of running.

Inputs and outputs that matter

  • poses and character (IMAGE) - pose set from Pose Studio, and the character source.
  • pipe (VNCCS_PIPE) - comes from VNCCS Control Center. No downloaded models, no generation.
  • background (enum: Green / Blue / White / Alpha) - chroma-key colour for the cutout. Pick the colour least present in your character's design so the key doesn't eat real detail.
  • prompt (STRING) - additional text guidance on top of whatever the character/pose combo already implies.
  • widget_data (STRING, JSON) - same shape as the Clothes Generator's: upscaler mode and quant (defaults to a Q4 GGUF build of SeedVR2), background-removal preset, SAM3 Details Recovery toggle, target resolution. Edit it through the node's widget UI rather than by hand.
  • Optional sheets_path (STRING) - repoint at an existing character folder to regenerate in place instead of starting over.
  • Outputs: sheet (the finished character sheet) and faces (cropped face outputs, useful for the emotion-generation stage later), plus the intermediates pose_generation and upscaled so you can see which stage produced a bad frame.

Notice it outputs sheet where Clothes Generator outputs sprites - same shape, different name, because one produces a character base and the other an outfit.

Installing it

ComfyUI Manager: search "VNCCS - Visual Novel Character Creation Suite", install, restart. Manually, clone https://github.com/AHEKOT/ComfyUI_VNCCS.git into custom_nodes, restart, then use Manager's Install missing custom nodes - Pose Studio, which feeds this node's poses input, lives in the author's separate VNCCS-Utils repo and needs installing too.

Common issues & troubleshooting

Generation errors with nothing obviously wrong in your inputs. Start at VNCCS Control Center. Every generator node in this pack depends on its pipe output, and a partially downloaded model set fails downstream in confusing ways rather than at the source.

Upscale quality is disappointing on a mid-range card. The default upscaler quant is the light option, not the good one. It's the same GGUF trade-off you'd see on any large model - smaller file, some fidelity given up. If you have VRAM to spare, step it up to a heavier quant in Control Center.

Clothing or eye colour bleeds into the removed background. Turn on SAM3 Details Recovery in widget_data - it's slower but specifically fixes this. If it fails to run at all, check for Triton on Windows; that's the known blocker for SAM3 support in this generation of node packs.

You only need to fix one pose in a batch. Use sheets_path to point back at the existing output folder instead of rerunning the whole set - this node (and its Clothes Generator sibling) is built to regenerate into an existing character folder.

CategoryVNCCS

Inputs (7)

NameTypeDefaultDescription
posesIMAGE
characterIMAGE
pipeVNCCS_PIPE
promptSTRING
backgroundCOMBOGreen4 options: Green, Blue, White, Alpha
widget_dataSTRING{"common": {"target_size": 1024}, "upscaler": {"mode": "seedvr", "model": "seedvr2_3b_fp8_e4m3fn.safetensors", "vae": "ema_vae_fp16.safetensors", "gan_model": "", "device": "cuda:0", "offload_device": "cpu", "seed": 42, "inherit_pipe_seed": true, "resolution": 2048, "max_resolution": 3840, "batch_size": 1, "uniform_batch_size": false, "color_correction": "lab", "temporal_overlap": 0, "prepend_frames": 0, "input_noise_scale": 0, "latent_noise_scale": 0, "blocks_to_swap": 0, "swap_io_components": false, "cache_dit": true, "attention_mode": "sageattn_2", "attention_mode_manual": false, "encode_tiled": true, "encode_tile_size": 1024, "encode_tile_overlap": 128, "decode_tiled": true, "decode_tile_size": 1024, "decode_tile_overlap": 128, "tile_debug": "false", "cache_vae": false, "enable_debug": false}, "bg_remove": {"use_internal_rmbg": false, "preset": "balanced", "use_sam3_details_recovery": true, "use_preset_values": true, "tolerance": 0.15, "softness": 0.12, "despill_strength": 0.65, "edge_width": 3, "matte_cleanup": 0.1, "foreground_recover": 0.35, "edge_decontaminate": 0.75, "edge_choke": 0.08, "matte_method": "guided_edge", "screen_mode": "from_background", "output_mode": "straight_rgba", "sam3_model": "", "sam3_segmentor": "image", "sam3_device": "auto", "sam3_precision": "bf16", "sam3_prompt": "face, clothes, accessories, hat, boots, eyes", "sam3_threshold": 0.4, "sam3_add_background": "none", "sam3_detection_limit": -1, "sam3_erode_radius": 4, "sam3_min_foreground_overlap": 0.55}, "pose_generation": {"target_size": 1024, "upscale_method": "lanczos", "crop_method": "disabled", "image1_name": "image 1", "image2_name": "image 2", "image3_name": "image 3", "weight1": 1.0, "weight2": 1.0, "weight3": 1.0, "vl_size": 384, "background_color": "from_generator", "latent_image_index": 1, "instruction": "Describe the character and their key features (body shape, physical characteristics, clothing, items, accessories). Then explain how the user's text instruction should alter or modify the character. Generate a new image that meets the user's requirements while maintaining consistency with the original character where appropriate.", "qwen_2511": true}, "pose_sampler": {"inherit_pipe": true, "seed": 0, "steps": 20, "cfg": 1.0, "sampler_name": "euler", "scheduler": "simple", "denoise": 1.0}, "vae_decode": {"tile_size": 512, "overlap": 64, "temporal_size": 64, "temporal_overlap": 8}, "emotion_generation": {"task_batch_size": 0, "face_denoise": 0.55, "use_sam": true, "bbox_model": "bbox/face_yolov8m.pt", "segm_model": "bbox/face_yolov8m.pt", "sam_model": "sam_vit_b_01ec64.pth", "sam_device_mode": "AUTO", "guide_size": 1536, "guide_size_for": true, "max_size": 1536, "inherit_pipe_sampler": true, "sampler_name": "euler", "scheduler": "simple", "feather": 5, "noise_mask": true, "force_inpaint": true, "bbox_threshold": 0.5, "bbox_dilation": 10, "bbox_crop_factor": 3.0, "sam_detection_hint": "center-1", "sam_dilation": 0, "sam_threshold": 0.93, "sam_bbox_expansion": 0, "sam_mask_hint_threshold": 0.7, "sam_mask_hint_use_negative": "False", "drop_size": 10, "cycle": 1, "inpaint_model": false, "noise_mask_feather": 20, "tiled_encode": true, "tiled_decode": true, "matte_expand_radius": 8, "matte_feather_radius": 4, "chroma_context": 16}, "remove_clothes": {"prompt": "Dress character: White underwear", "target_size": 1024, "upscale_method": "lanczos", "crop_method": "disabled", "image1_name": "image 1", "image2_name": "image 2", "image3_name": "image 3", "weight1": 1.0, "weight2": 1.0, "weight3": 1.0, "vl_size": 384, "background_color": "White", "latent_image_index": 1, "instruction": "Describe the character and their key features (body shape, physical characteristics, clothing, items, accessories). Then explain how the user's text instruction should alter or modify the character. Generate a new image that meets the user's requirements while maintaining consistency with the original character where appropriate.", "qwen_2511": true}, "remove_clothes_sampler": {"inherit_pipe": true, "seed": 0, "steps": 20, "cfg": 1.0, "sampler_name": "euler", "scheduler": "simple", "denoise": 1.0}}
sheets_pathoptSTRING

Outputs (4)

NameTypeDescription
sheetIMAGE
facesIMAGE
pose_generationIMAGE
upscaledIMAGE