ComfyUI Node

VNCCS Emotions Generator

The Step-3 node that turns one calm face into a whole expression set

By AHEKOT·Created 11 months ago·Updated 25 days ago· 1,446
VNCCS Emotions Generator
  • images
  • pipe
  • sprites
  • faces
emotion_data
widget_data{"common": {"target_size": 1024}, "upscaler": {"mode": "seedvr", "model": "seedvr2_ema_3b-Q4_K_M.gguf", "vae": "ema_vae_fp16.safetensors", "gan_model": "", "device": "cuda:0", "offload_device": "cpu", "seed": 42, "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}, "pose_generation": {"target_size": 1024}, "emotion_generation": {"face_denoise": 0.55, "use_sam": true, "bbox_threshold": 0.1, "bbox_dilation": 10, "sam_dilation": 25, "sam_threshold": 0.93, "sam_bbox_expansion": 0}, "remove_clothes": {"prompt": "Dress character: White underwear"}}

Every VNCCS character starts with a single calm expression across all their poses and outfits - that's the base you build in Steps 1 and 2. Emotions Generator is the node that takes that base and produces the rest of the set: angry, happy, surprised, whatever you picked in Emotion Studio, applied consistently across every costume you selected. It's described in the pack itself as replacing the old Step 3 emotion workflow with a single node, and it's the biggest, busiest node in VNCCS - most of its configuration lives in one large JSON blob rather than a dozen separate widgets.

What it's actually doing

Under the hood this is a face-detailer-style inpaint: it re-renders the face region at a controlled denoise strength, guided by a text description of the target emotion, while the rest of the sprite (body, outfit, pose) stays put. That's the same fundamental tradeoff every identity-preserving edit deals with - the character-consistency writeup covers this at length: more denoise gives you a stronger, more obvious emotion but risks the face drifting away from the character; less denoise keeps the character recognizable but can undersell the expression. VNCCS 3.0's pipeline runs on Qwen-Image-Edit 2511 under the hood - the pack's author said as much directly when asked what powers it ("it's almost pure Qwen Image Edit 2511 with loras") - and that model's own documented weak spot is exactly this: identity drift across a chain of edits (see qwen-image-edit). Face Detailer denoise is the one knob standing between you and that failure mode.

The inputs that matter

  • images - the base sprite(s) to generate emotions from.
  • pipe - a VNCCS_PIPE bundle (model, clip, vae, conditioning, sampler settings) built upstream by a VNCCS Pipe node.
  • emotion_data - which emotions to generate, populated by Emotion Studio's selection UI upstream rather than typed by hand.
  • widget_data - the big one. A JSON blob covering everything from target resolution and the upscaler backend (SeedVR2 by default) to background-removal settings and, critically, the emotion-generation block: face_denoise (default 0.55 - the exact knob described above), plus SAM-based face masking controls (use_sam, bbox_threshold, bbox_dilation, sam_dilation, sam_threshold) that decide how tightly the face region gets isolated before the detailer touches it.

Two outputs: sprites, the finished set with the new emotions baked in, and faces, presumably a closer crop for reviewing just the face results before you commit a whole batch. It's also flagged as an output node, so it can terminate a workflow branch on its own.

How to install it

Part of the main pack:

  • ComfyUI Manager - search VNCCS - Visual Novel Character Creation Suite, install, restart.
  • Manual - cd ComfyUI/custom_nodes && git clone https://github.com/AHEKOT/ComfyUI_VNCCS.git, then cd ComfyUI_VNCCS_Utils && pip install -r requirements.txt, restart, then let Comfy Manager install missing dependencies once.

Model-wise, this node leans on whichever checkpoint tier (Q4/Q5/Q8) you fetched through VNCCS's Control Center downloader - heavier quantizations give visibly better emotion results at the cost of VRAM and generation time, per the README's own advice.

Common issues

Faces come out smeared, with streaky "makeup" artifacts. This is a real, reported problem - a user on the VNCCS release thread described exactly this on the final face-detailer pass and asked whether lowering denoise would help. It generally does: drop face_denoise a notch before touching anything else. The pack author's own reply confirmed that the tag content in your character's head and face fields (set back in Character Creator and Clothes) feeds straight into this detailer pass, so a costume note like "glasses" living in the wrong field is worth checking too.

One bad emotion forces a full rerun of the whole batch. Fix your seed on the upstream Creator/Selector node before you generate. With a fixed seed, you can tweak widget_data or the emotion selection and resume from that point instead of regenerating every costume and emotion from scratch - a tip straight from the node's author.

First runs are slow or heavy. Don't select every costume and every emotion on your first pass with a new character. Find settings you're happy with on a small selection first, then go wide - the README says as much, and it's good advice given how much this node does per emotion generated.

CategoryVNCCS

Inputs (4)

NameTypeDefaultDescription
imagesIMAGE
pipeVNCCS_PIPE
emotion_dataSTRING
widget_dataSTRING{"common": {"target_size": 1024}, "upscaler": {"mode": "seedvr", "model": "seedvr2_ema_3b-Q4_K_M.gguf", "vae": "ema_vae_fp16.safetensors", "gan_model": "", "device": "cuda:0", "offload_device": "cpu", "seed": 42, "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}, "pose_generation": {"target_size": 1024}, "emotion_generation": {"face_denoise": 0.55, "use_sam": true, "bbox_threshold": 0.1, "bbox_dilation": 10, "sam_dilation": 25, "sam_threshold": 0.93, "sam_bbox_expansion": 0}, "remove_clothes": {"prompt": "Dress character: White underwear"}}

Outputs (2)

NameTypeDescription
spritesIMAGE
facesIMAGE