VNCCS Style Preview Test
Render all 40 sprite styles before you commit
- image
- prompt
What it actually does
VNCCS is the visual-novel sprite pipeline: you build one character, generate its poses, outfits and emotions, and it drops transparent PNGs into a folder you point Ren'Py at. Before any of that, you pick an art style for the whole set, and the style catalog is 40 entries in five groups - ten anime meta-styles (1970s through 2020s), sixteen studio/artist styles (Ghibli, Shinkai, Sailor Moon '90s, Toriyama, Arcane), ten Western animation entries, two decorative-art, two realistic.
A label like "Kyoto Animation / Violet Evergarden" tells you nothing until you see it next to "Hiroyuki Imaishi / Studio Trigger" rendered with your base model. That's the entire job of this node: it renders the whole catalog against one deliberately boring test character so you're choosing with your eyes.
It matters most if you're on Anima, whose default look is deliberately plain - the usual advice is to spend real time hunting artist styles before writing the model off. This does that hunt as a batch. It sits in VNCCS/Testing, and the author's own source docstring calls it a temporary standalone batch preview. Lab tool, not part of the sprite pipeline.
How it works
It's an output node with no inputs and no outputs - queue it and it generates. There's no seed box and no prompt box because both are pinned: every image uses the same skeleton (adult female, cowboy shot, black long hair, plain face), and the seed is hard-coded to 0, so the only thing changing across the 40 images is the style reference text.
Each catalog entry is a paragraph - style name, a couple of named references, a visual description - swapped into that skeleton. On the Anima path (30 steps, CFG 4, er_sde, Qwen3-0.6B encoder, Qwen-Image VAE) the style text goes straight into the conditioning. On the QI2 path (Qwen Image 2.1, 25 steps, CFG 3, euler, Qwen3-VL 8B encoder) the prompt is rewritten by the text encoder first and the style reference is appended verbatim afterwards, which is how QI2 handles styles everywhere in the pack.
Turbo is force-disabled in both paths. Fair comparison, but you pay full step counts, 40 times.
Output lands in ComfyUI/output/VNCCS/style_previews/, one PNG per style, named {model}_{style_id}_0001.png - anima_ghibli_miyazaki_0001.png is self-documenting. They also show in the node's own image preview.
The three widgets
- model -
AnimaorQI2. Use the base model you'll actually generate sprites with; a style that sings on Anima can look nothing like the same label on Qwen Image 2.1. Those two are the whole list because the pack's 3.0 pipeline was built on Qwen-Image-Edit 2511 and 3.2 swapped that engine for QI2. - scale_mp - a rough megapixel budget for a square canvas.
1.0is 1024×1024,1.5is 1256×1256,4.0tops out at 2048×2048. Style differences live in line work and shading, so 1.0 is usually enough. - background_color -
Green,BlueorTransparent. Match whatever your real run will use so the previews look like the sprites you'll get.Transparentis QI2-only and errors on Anima, because native alpha is a QI2 feature.
Install
Search VNCCS - Visual Novel Character Creation Suite in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/AHEKOT/ComfyUI_VNCCS.git
One README wart: the manual steps say cd ComfyUI_VNCCS_Utils before pip install -r requirements.txt. That folder belongs to the older VNCCS-Utils project - in 3.x requirements.txt sits at the repo root, so install from there. Then launch ComfyUI, open Manager and click "Install missing custom nodes". Complete first-timers should use the author's VNCCS Easy Install instead.
This is not a light dependency set: opencv-python, kornia, pymatting, transparent-background, transformers, timm and llama-cpp-python>=0.3.16 - llama-cpp being the one that bites, especially without a build toolchain. The node downloads nothing itself. Feed it from the VNCCS Control Center, whose Download button pulls qwen_image_2.1_int8_convrot.safetensors plus its Qwen3-VL encoder and VAE for QI2, and anima-base-v1.0.safetensors plus the Qwen 3 0.6B encoder and Qwen-Image VAE for Anima.
Where people get burned
It re-renders everything, every queue. The node reports itself as always-changed, so ComfyUI never caches it. Press Queue twice and you get a second full pass of 40 images, written as _0002 files rather than overwriting. It won't clobber your first run; it will eat your evening. Anima at these settings runs over a minute per image on a mid-range card, so a catalog pass is a coffee break at best.
"No ANIMA diffusion model found in ComfyUI diffusion_models." The node wants anima-base-v1.0.safetensors, and otherwise accepts any diffusion model whose filename contains "anima" but not "turbo". QI2 mirrors that (qwen_image_2.1… or qi2). Wrong folder or a filename that dodges the pattern gets you this error - Control Center's download fixes it.
Out of VRAM at high scale_mp. Push 4.0 on an 8GB card and a 40-image batch will find the ceiling. Compare at 1.0, then run the real sprites at your final resolution. And note the QI2 path reloads its text encoder between images to keep memory sane - slower per style, lighter on VRAM, a deliberate trade rather than a bug.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | 2 options: Anima, QI2 | |
| scale_mp | FLOAT | 1.01–4 | — |
| background_color | COMBO | 3 options: Green, Blue, Transparent | |
| turbo_enabledopt | BOOLEAN | false | — |
| anima_style_overrideopt | BOOLEAN | false | Use one exact @artist from the Anima override list. Ignored for QI2. |
| age_minopt | INT | 181–100 | — |
| age_maxopt | INT | 401–100 | — |
| randomize_sexopt | BOOLEAN | true | Choose new values each run. When disabled, use the preview default. |
| randomize_ageopt | BOOLEAN | true | Choose new values each run. When disabled, use the preview default. |
| randomize_framingopt | BOOLEAN | true | Legacy control for workflows without framing_mode. The framing selector takes precedence. |
| randomize_raceopt | BOOLEAN | true | Choose new values each run. When disabled, use the preview default. |
| randomize_skin_coloropt | BOOLEAN | true | Choose new values each run. When disabled, use the preview default. |
| randomize_hairopt | BOOLEAN | true | Choose new values each run. When disabled, use the preview default. |
| randomize_eyesopt | BOOLEAN | true | Choose new values each run. When disabled, use the preview default. |
| randomize_faceopt | BOOLEAN | true | Choose new values each run. When disabled, use the preview default. |
| randomize_bodyopt | BOOLEAN | true | Choose new values each run. When disabled, use the preview default. |
| randomize_additional_detailsopt | BOOLEAN | true | Choose new values each run. When disabled, use the preview default. |
| randomize_styleopt | BOOLEAN | true | Choose new values each run. When disabled, use the preview default. |
| nsfw_modeopt | COMBO | SFW | Clothing mode. NSFW is restricted to adults; Random uses SFW for characters under 18. |
| framing_modeopt | COMBO | Random | Fixed crop or a new random crop each run. Overrides the legacy randomize_framing control. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| prompt | STRING | — |