OC Presentation Camera Block
Framing, lenses, and dutch angles without a camera vocabulary
- oc_block
- prompt_preview
- debug_text
"Shot from below, close-up, cinematic angle" is easy to want and annoyingly easy to typo into tags the model half-ignores. OC Presentation Camera Block fixes that the ComfyUI-OC-Generator way: fifty-one curated framing, lens, and angle options in a dropdown, and out comes a correctly-spelled prompt fragment. It's the part of an anime character prompt that most people write by feel - this node lets you write it by selection.
In the wider workflow this is one of the "presentation" blocks that describe how the character is shown rather than who they are. Its oc_block output wires into OC Generator (or OC Block Merge), which sorts everything into a stable prompt order - camera lands where it belongs, after pose, before rendering. Wire the prompt_preview output to a text viewer and you'll see plain English fragments like dutch angle, cowboy_shot, or ass_focus sitting alongside tags from the rest of your character.
The three controls that do everything
- option - a static dropdown covering the whole camera catalog, split by subgroup:
镜头(lens/framing like bust and cowboy shot),特写镜头(close-ups and focus shots), and镜头角度(angles like cinematic and dutch). - group - restricts the active pool to one subgroup. Note the warning baked into the tooltip: the dropdown itself doesn't visually shrink. Pick a group, and options outside it are still listed - they just fall back to the first valid item in your group if you select them.
- mode -
fixedkeeps your choice (when it's valid for the group);randomize,increment, anddecrementall operate inside the current group's pool.
The two optional inputs complete the picture: enabled (set to false to silence the block without deleting it) and seed/step for reproducible randomize or stepped browsing through the pool. The step input is a genuinely nice touch - set mode to increment with a step of 1 and each run walks the camera catalog in order, a poor man's batch experiment.
How it actually resolves
Every option in the catalog is a stored tag plus metadata (Chinese label, English prompt, group). At run time the node picks one via your mode, bundles it into an OC_BLOCK dict, and returns it alongside prompt_preview (the resolved fragment) and debug_text (which shows the selected group, mode, index in the pool, and whether a group mismatch forced a fallback). Selection is deterministic when a seed is set - the pack derives an index from a hash of the block, group, option, and seed, so the same settings always pick the same shot.
The usual suspects
The group/static-dropdown mismatch is the classic burn here. You set group to 特写镜头, leave the option on a non-close-up from a previous experiment, and the node quietly substitutes the first close-up in the pool. The clue is always in debug_text, which prints requested option not in current group; fallback applied. Read that output before you start suspecting your checkpoint.
Install is painless - ComfyUI Manager (search "ComfyUI-OC-Generator") or:
cd ComfyUI/custom_nodes
git clone https://github.com/Zhuozhuo-219/ComfyUI-OC-Generator
Restart, done. No models, no pip dependencies, just JSON catalogs and Python - this whole pack is a prompt-engineering layer for anime SDXL models, not a generator in its own right.
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 | 特写镜头 | 腋窝偷看 -> armpit_peek | 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. |