OC Character Accessories Block
The body-add-on block
- oc_block
- prompt_preview
- debug_text
OC Character Accessories Block covers the stuff your character wears on their body that isn't clothes: piercings, earrings, and tattoos. The pack's own description calls it "non-clothing body add-ons," and that's the boundary that keeps it distinct from the outfit layer - if it's a piece of clothing, it belongs to the outfit parts; if it's metal in your skin or ink on it, it's this block.
There are 58 options across the group's subcategories: body piercings (ear_piercing, barbell_piercing, animal-ear and bow earrings, crescent_earrings, cross_earrings), tattoos (arm_tattoo, back_tattoo, breast_tattoo, barcode_tattoo), and the general piercing/ring set. It's a genuinely useful slice of Danbooru vocabulary for character design - the kind of tags that make an OC feel designed instead of generated, and that models in the Illustrious/NoobAI lineage understand precisely because they were trained on exactly this tag vocabulary.
How it works
Standard block-node controls:
group- filter to one subgroup (穿刺、穿环、纹身 / 纹身for tattoos,/ 耳环for earrings,/ 身体穿刺for piercings). Default__all_groups__shows everything.mode-fixed/randomize/increment/decrement. The step modes cycle through the group's pool.option- static dropdown over all 58, formattedsubcategory | Chinese label -> English tag(e.g.穿刺、穿环、纹身 / 耳环 | 蝴蝶结耳环 -> bow_earrings).
And the pack-wide gotcha, which this block demonstrates nicely: the option dropdown is static and doesn't shrink when you change group. Pick arm_tattoo, switch group to the piercing subgroup, and execution finds the tattoo isn't in that pool - it silently falls back to the first piercing and logs it in debug_text. Every block in this pack behaves this way; it's the single most common source of "why did it pick that?" confusion.
Two of the three outputs matter every run: oc_block (wire into OC Generator, which sorts it into the Accessories position), prompt_preview (the resolved tag), and debug_text (fallback and pool-index detail) for when things go sideways.
Where it sits in the workflow
Accessories lands late in OC Generator's sort order - after hair and outfit, before pose and camera - which is roughly right for how tag ordering works on this model family. If you're building a full OC, run the body block first (identity), then face, hair, outfit, and let this block add the finishing non-clothing details. There's real overlap with the outfit's jewelry part (earrings appear in both catalogs) - that's fine, dedupe on the downstream nodes handles the double-insertion of the same tag.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/Zhuozhuo-219/ComfyUI-OC-Generator
Restart ComfyUI, or use ComfyUI Manager and search ComfyUI-OC-Generator. No PyPI dependencies beyond the host ComfyUI runtime, no model downloads, and the tag catalog ships in-repo so the dropdown populates offline.
Fair warning: this is a young, quiet pack with no real community trail yet, and 58 options is a curated cut rather than the full Danbooru list. If your OC needs a specific tattoo the catalog doesn't have, type it into OC Generator's prefix_prompt - the block handles the common cases, the prefix handles the bespoke ones.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| group | COMBO | __all_groups__ | Limit selection to one subgroup. The option dropdown itself is static and will not visually shrink when group changes. |
| mode | COMBO | fixed | fixed keeps the chosen option when valid for the current group. randomize / increment / decrement operate only within the selected group pool. |
| option | COMBO | 穿刺、穿环、纹身 / 身体穿刺 | 动物耳穿刺 -> animal_ear_piercing | Static dropdown for the whole catalog. If the chosen option does not belong to the current group, execution falls back to the first valid item in that group. |
| enabledopt | BOOLEAN | true | Disable this block without deleting it from the workflow. |
| seedopt | INT | 00–4294967295 | Seed used by randomize mode to get reproducible results inside the current group pool. |
| stepopt | INT | 11–1024 | Step size for increment / decrement mode inside the current group pool. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| oc_block | OC_BLOCK | Structured OC block data for downstream aggregation in OC Generator. |
| prompt_preview | STRING | The prompt fragment resolved by this dimension node. |
| debug_text | STRING | Execution details, including group filtering and selection behavior. |