Nodes/Joy Caption Two - PixelaiLabs Edition/Simple LLM Caption (Advanced)
ComfyUI Node

Simple LLM Caption (Advanced)

Same Joy Caption engine, now with sampling dials and a ready-made negative prompt

By Pixelailabs·Created 11 months ago·Updated 10 months ago· 12
Simple LLM Caption (Advanced)
  • pipeline
  • image
  • positive_prompt
  • negative_prompt
caption_type
caption_lengthmedium
temperature0.7
top_p0.90
max_new_tokens300
append_to_caption
negative_prompt
lora_trigger
gender_age_replacement
hair_replacement
body_size_replacement
remove_tattoosfalse
remove_jewelryfalse
prefix
suffix

When the basic node isn't enough

SimpleLLMCaptionAdvanced is SimpleLLMCaption with the training wheels off. Same Joy Caption Alpha Two pipeline, same seven caption types, same text processing - but you get control over the generation itself, and instead of one string you get two outputs: positive_prompt and negative_prompt. That pair is the whole point. You can build a caption-to-image loop where the caption this node writes is your prompt, and its negative_prompt output feeds the negative prompt input, no extra wiring.

The dials aren't just for tinkerers. Captioning a training set and want output that stays on the rails? Drop the temperature toward 0.5. Generating social media or MidJourney captions and want variety? Crank it up. Same engine, different temperament.

The inputs that changed

On top of the basic node's pipeline, image, caption_type, and caption_length, you get:

  • temperature (0.1-2.0, default 0.7) and top_p (0.1-1.0, default 0.9) - the standard sampling knobs. The basic node doesn't even expose these; it just runs with defaults.
  • max_new_tokens (50-1000, default 300) - the hard ceiling on caption length. The "very short" to "very long" enum works by steering the prompt text, not by capping tokens; this is your actual limit.
  • append_to_caption - free text glued to the very end of the caption, after everything else. Handy for stamping a consistent suffix, like a style tag, onto every output.
  • negative_prompt - a pass-through, not generated. Whatever you type here is returned verbatim on the negative_prompt output, and it's an empty string if you leave it blank, which is fine.

Plus the extras: prefix / suffix wrap the caption before append_to_caption is added, and you still get lora_trigger, the three replacement fields (gender_age_replacement, hair_replacement, body_size_replacement), and remove_tattoos / remove_jewelry.

Outputs: positive_prompt (STRING) and negative_prompt (STRING). Both wire straight into any checkpoint's prompt and negative inputs.

What stays the same

Mechanically it's the same pipeline: SigLIP features → image adapter → spliced into the Llama template → LoRA-tuned generation. It also unloads models from VRAM after each call and reloads before the next, and it force re-runs whenever you change an input (parameter hashing beats ComfyUI's cache). First use still triggers the multi-gigabyte auto-downloads - but if you've already run the basic node, the loader has everything cached and this one is instant.

Install

Same pack, same deal:

cd ComfyUI/custom_nodes
git clone https://github.com/Pixelailabs/Joy_Caption_Two_PixelaiLabs.git
cd Joy_Caption_Two_PixelaiLabs
pip install -r requirements.txt

Restart and it appears under image/captioning. ComfyUI Manager search "Joy Caption Two" works too.

Where people trip

  • The Advanced node doesn't improve caption quality by default - temperature 0.7 and top_p 0.9 are close to what Joy Caption already uses. The gain is the negative-prompt output and the hard token cap, not magic.
  • Crank temperature too high and training captions start hallucinating details. For dataset work, sit at 0.5-0.6 and keep max_new_tokens tight.
  • Remember the negative output is your text or nothing - it is not the model telling you what to avoid. Beginners assume it's generated; it isn't.
Categoryimage/captioning

Inputs (17)

NameTypeDefaultDescription
pipelineLLM_PIPELINE
imageIMAGE
caption_typeCOMBO7 options: Descriptive, Descriptive (Informal), Training Prompt, MidJourney, Booru Tags, Art Critic, +1
caption_lengthCOMBOmedium6 options: any, very short, short, medium-length, long, very long
temperatureFLOAT0.70.1–2
top_pFLOAT0.900.1–1
max_new_tokensINT30050–1000
append_to_captionoptSTRING
negative_promptoptSTRING
lora_triggeroptSTRING
gender_age_replacementoptSTRING
hair_replacementoptSTRING
body_size_replacementoptSTRING
remove_tattoosoptBOOLEANfalse
remove_jewelryoptBOOLEANfalse
prefixoptSTRING
suffixoptSTRING

Outputs (2)

NameTypeDescription
positive_promptSTRING
negative_promptSTRING