TTP_ExtraOptionsNode
Turn caption instructions on and off without a wall of toggles
- extra_options_str
ExtraOptionsNode (shown as TTP_ExtraOptionsNode) doesn't caption anything. It's the remote control for the pack's Alpha Two captioner: a small node that compiles a bundle of instruction sentences into a single string you feed into JoyCaption2_simple. If you've used the Full JoyCaption2 node, every one of these booleans is already familiar - this just moves them somewhere tidier.
What it does
Under the hood the pack ships a JSON file (extra_option.json) mapping each option name to a prompt sentence - "Include information about lighting", "Do NOT mention the image's resolution", "If it is a photo you MUST include information about what camera was likely used…", and so on. This node reads that file, shows you each option as a boolean input, and for every one you check it appends the matching sentence to its output. enable_extra_options is the master switch: flip it off and the output is empty, which is handy for bypassing the whole extras concept in one click.
Two things make it more than a dumb toggle rack. First, character_name - when you enable replace_character_names and type a name, the node substitutes it into the "refer to them as {name}" instruction before sending. Second, the output extra_options_str is a plain STRING, so you can inspect it, log it, or feed in a completely custom string instead of using the booleans at all.
Why bother, when Full exists
The Full node has these same 17 toggles baked in. The standalone version wins when you have more than one captioning setup, or you're captioning in a loop and want the options somewhere you can reach without un-collapsing a giant node. Pair it like this:
image → JoyCaption2_simple (text out)
ExtraOptionsNode (extra_options_str) → JoyCaption2_simple.extra_options_node
That's the intended wiring: the caption node stays clean, and the extras live on a node you can collapse to a dot. One trap - don't feed ExtraOptionsNode into JoyCaption2 (the Full node) too, because the Full node already applies those same options internally and you'll get doubled instructions in the prompt.
Install
It's part of the same pack, so no separate install:
cd ComfyUI/custom_nodes
git clone https://github.com/TTPlanetPig/Comfyui_JC2
(Or ComfyUI Manager → search Comfyui_JC2.) It's pure Python - no models, no weights, no heavy dependencies beyond the pack's requirements. The inputs are all optional in practice: enable_extra_options defaults on, everything else defaults off. If you're using the Beta One captioner instead, grab ExtraOptionsNode_Beta - it's this idea, updated for the newer model's longer option list.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| enable_extra_options | BOOLEAN | true | — |
| replace_character_names | BOOLEAN | false | — |
| exclude_unchangeable_attributes | BOOLEAN | false | — |
| include_lighting_details | BOOLEAN | false | — |
| include_camera_angle | BOOLEAN | false | — |
| mention_watermark_presence | BOOLEAN | false | — |
| note_jpeg_artifacts | BOOLEAN | false | — |
| include_exif_data | BOOLEAN | false | — |
| exclude_sexual_content | BOOLEAN | false | — |
| exclude_image_resolution | BOOLEAN | false | — |
| describe_aesthetic_quality | BOOLEAN | false | — |
| include_composition_style | BOOLEAN | false | — |
| exclude_text_elements | BOOLEAN | false | — |
| specify_depth_of_field | BOOLEAN | false | — |
| specify_lighting_sources | BOOLEAN | false | — |
| avoid_ambiguous_language | BOOLEAN | false | — |
| classify_image_as_sfw_nsfw | BOOLEAN | false | — |
| describe_key_elements_only | BOOLEAN | false | — |
| character_name | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| extra_options_str | STRING | — |