OC Character Body Block
The block that says who your OC actually is
- oc_block
- prompt_preview
- debug_text
The name undersells it. OC Character Body Block isn't just about anatomy - it's the identity block. Its catalog covers the "who is this person" questions before you ever get to hair and clothes: subject (1boy, 1girl, multi-character counts), identity and role tags like ace_queen, age, skin, body build, plus the physical detail subcategories - shoulders, chest, waist, stomach, legs, feet, and wings. Roughly 275 options across 13 subcategories, all sourced from the pack's Danbooru-style tag dataset.
It's one of the block nodes that make up the "OC" side of this pack: you pick a fragment from a dropdown, the block resolves it into a real prompt tag, and OC Generator eventually sorts it into the Body position of the final string. Since earlier keywords carry more weight on the SDXL-lineage models this pack targets, the body block tends to land right after theme and before face and hair - near the front, where identity matters.
The controls that matter
Every block node in the pack shares the same three-part selection system, and this one is the biggest demo of how it behaves:
group- narrows selection to one subcategory (对象 / identity / age / wings, and so on). Default is__all_groups__, meaning the whole catalog.mode-fixed,randomize,increment, ordecrement.fixedkeeps your pick;randomizesamples the pool; the step modes cycle through it (useful for batch variations with thestepinput).option- the big static dropdown, all 275 entries. Entries read like对象 | 1男孩 -> 1boy, i.e.subcategory | Chinese label -> English tag.
That option dropdown is static - it does not shrink when you change group. The author is upfront about this in the code comments and the tooltips; there's no frontend magic to make the list filter live. What happens at execution is: if your chosen option isn't in the current group, the block silently falls back to the first valid item in that group and flags it in debug_text. So when randomize spits out something you didn't pick, the first suspect is a group/option mismatch.
Under the hood, randomize isn't really random. It hashes the block key, group, option label, and your seed into a stable index, so the same seed always gives the same pick - reproducible variations, which is exactly what you want when you're generating an OC concept sheet across different seeds. There's an enabled boolean too, so you can leave a body block in the graph and switch it off without deleting it.
The outputs
All three matter in this pack's rhythm:
oc_block- the structured block; wire it into OC Generator.prompt_preview- the resolved fragment (the1boy, theace_queen), so you can read your character without running anything.debug_text- execution details: which group, which index in the pool, whether a fallback happened. This is your debugging lifeline.
Installing it
Same pack, same install:
cd ComfyUI/custom_nodes
git clone https://github.com/Zhuozhuo-219/ComfyUI-OC-Generator
Restart ComfyUI, or use ComfyUI Manager (search ComfyUI-OC-Generator). No extra Python deps, no models - the tag catalog rides along inside the repo.
A note on expectations
This is a young, low-traffic pack; you won't find a mountain of community write-ups about it, and the catalog is a curated cut of Danbooru-style tags rather than a complete dump. The body block is one of the more capable nodes in the set, but it's still a dropdown over a fixed dataset - if your OC needs something the catalog doesn't cover, type it into OC Generator's prefix_prompt and move on.
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 | 对象 | 1男孩 -> 1boy | 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. |