LayerUtility: JoyCaption2 Extra Options(Advance)
The checklist that tells JoyCaption2 what to mention
- extra_option
This node doesn't process an image or generate any text itself - it's a settings bundle. JoyCaption2ExtraOptions is a wall of toggles that you configure once and feed into the JoyCaption2 node's extra_options input, controlling exactly which details JoyCaption2's captions should or shouldn't mention. Think of it as the difference between "describe this image" and a genuinely specific captioning brief.
JoyCaption2 (the alpha-two model, run locally via Llama 3.1 8B) is a local vision-language captioner built specifically for tagging training data, and this options node exists because caption style matters a lot for that job - you often want very particular inclusions or exclusions depending on what you're training. Worth knowing if you're searching for this: LayerStyle Advance also ships a newer JoyCaptionBetaOne model with its own, larger options node (JoyCaptionBeta1ExtraOptions, which adds more toggles on top of everything here). This node is specifically for the older JoyCaption2 node, not Beta One - if your workflow uses the newer model, you want that sibling node instead.
The inputs that matter
Seventeen boolean toggles, all default off, plus one string field. Rather than list all seventeen (their names are genuinely self-explanatory - include_lighting, include_camera_angle, exclude_text, and so on, each one directly controlling whether that detail shows up in the caption), the ones worth knowing about specifically:
refer_character_name+character_name(default"Huluwa"- a placeholder, not a real default you're meant to keep) - pair these together when captioning a recurring named character or subject; the caption will refer to them by that name instead of generically.exclude_sexual- keeps captions PG. Useful default-on for general-purpose datasets.include_nsfw- the opposite direction: explicitly asks the model to rate content as sfw / suggestive / nsfw in the caption. These two aren't mutually exclusive in the schema, but combining them doesn't make much sense - pick a lane.only_describe_most_important_elements- trims verbose captions down to the essentials, useful if downstream token limits are tight.do_not_use_ambiguous_language- pushes JoyCaption2 toward concrete, unhedged descriptions rather than "appears to be" phrasing, which matters more than it sounds for training-caption consistency.
Everything else follows the same on/off pattern: flip on the details you want mentioned (lighting, camera angle, watermark presence, JPEG artifacts, EXIF-style camera guesses, aesthetic quality, composition style, depth of field, lighting source) or exclude the ones you don't (people's unchangeable traits, image resolution mentions, text in the image).
Output is a single extra_option (type JoyCaption2ExtraOption) - it only does anything wired into JoyCaption2's matching input.
Installing it
ComfyUI Manager: search "ComfyUI Layer Style Advance". Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/chflame163/ComfyUI_LayerStyle_Advance.git
Run install_requirements.bat (portable) or install requirements.txt yourself, then restart. This node needs nothing beyond the base pack - no model, no API key. The heavy install (Llama 3.1 8B weights, SigLIP, the JoyCaption LoRA files) belongs to JoyCaption2 itself, not this options node.
Common issues
Toggles have no visible effect. Confirm the extra_option output is actually wired into JoyCaption2's extra_options input - this node produces nothing usable on its own, it's pure configuration for its sibling.
character_name shows up in captions when you didn't want it to. refer_character_name has to be on for character_name to matter; if you're seeing an unwanted reference, check that toggle first.
Contradictory-feeling combinations do exactly what you told them to. Turning on both exclude_sexual and include_nsfw, for instance, is a genuinely odd combination and the model's behavior in that case isn't something to rely on - pick one goal per caption run rather than stacking conflicting instructions.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| refer_character_name | BOOLEAN | false | — |
| exclude_people_info | BOOLEAN | false | — |
| include_lighting | BOOLEAN | false | — |
| include_camera_angle | BOOLEAN | false | — |
| include_watermark | BOOLEAN | false | — |
| include_JPEG_artifacts | BOOLEAN | false | — |
| include_exif | BOOLEAN | false | — |
| exclude_sexual | BOOLEAN | false | — |
| exclude_image_resolution | BOOLEAN | false | — |
| include_aesthetic_quality | BOOLEAN | false | — |
| include_composition_style | BOOLEAN | false | — |
| exclude_text | BOOLEAN | false | — |
| specify_depth_field | BOOLEAN | false | — |
| specify_lighting_sources | BOOLEAN | false | — |
| do_not_use_ambiguous_language | BOOLEAN | false | — |
| include_nsfw | BOOLEAN | false | — |
| only_describe_most_important_elements | BOOLEAN | false | — |
| character_name | STRING | Huluwa | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| extra_option | JoyCaption2ExtraOption | — |