JoyCaption Beta One (External LLaMA)
JoyCaption Beta One, run through your own llama.cpp — the dataset-captioning workhorse
- image
- caption
- prompt
- extra_options_examples
If you've captioned any sizeable dataset in the last couple of years, you already know JoyCaption: it's the open, uncensored vision-language model built specifically for writing training captions, and it's still the community favorite for it - our lora-training notes count 133 mentions in just the first half of 2026. What this node does is give you JoyCaption Beta One through a llama.cpp server you run yourself, with the full preset menu bolted on.
The "External LLaMA" in the display name is the whole architecture in two words: ComfyUI doesn't load the model. You run llama-server with the JoyCaption GGUF plus its vision projector, the node base64-encodes your image and POSTs it to http://127.0.0.1:58080/chat/completions, and a caption comes back. No key, no hosted API, no extra VRAM inside the graph. It's your GPU doing the work, and the model lives wherever your server is.
What the presets give you
The node ships the full JoyCaption Beta One CAPTION_TYPE_MAP, so one node covers a surprising amount of ground:
- Descriptive / Descriptive (Casual) - the classic natural-language captions for general training.
- Straightforward - concise, definite, no speculation; good for photoreal data.
- Stable Diffusion Prompt / MidJourney - caption shaped like an actual diffusion prompt.
- Danbooru / e621 / Booru-like tag lists - comma-separated tags with proper
1girl,artist:,character:prefixes. This is the one you reach for if you train on booru-tagged style data. - Art Critic / Product Listing / Social Media Post - narrower, occasionally useful extras.
caption_length takes any through very long, or an exact number (20–260) for a word budget. And extra_options defaults to the famous JoyCaption instruction block - "refer to people as {name}", "include lighting, camera angle, watermark info", the works. Leave it as-is for stock behavior or trim it to taste. The third output, extra_options_examples, just hands you that block as a string so you can edit a copy.
The model and the server
The GGUF and mmproj come from concedo's conversion on Hugging Face:
llama-server.exe -m "llama-joycaption-beta-one-hf-llava.Q8_0.gguf" \
--mmproj "llama-joycaption-beta-one-llava-mmproj-model-f16.gguf" \
-ngl 33 -c 4096 --port 58080 --image-min-tokens 2048
Q8_0 of this model is essentially fp16 at half the size - if it fits, just use it. The --mmproj flag is non-negotiable; without the projector, the server can't see the image. And note this node's default URL is /chat/completions with no /v1/ prefix, unlike the Qwen3VL sibling in the same pack - if you move servers around, check that path.
The inputs you'll actually touch day to day are caption_type, caption_length, extra_options, and maybe max_tokens (default 512). temperature (0.6 default) and top_p (0.9) are fine where they are.
Install
Manager search "MiraSubPack", or:
cd ComfyUI/custom_nodes
git clone https://github.com/mirabarukaso/ComfyUI_MiraSubPack
Restart, and you're done - the pack carries no requirements.txt, and requests is already in ComfyUI. The real install is the llama.cpp server, which is on you.
Troubleshooting
Error:text in the caption output. The node returns connection failures as caption strings. Check the server's up, the port matches, and the model loaded with--mmproj.- Captions that ignore image content. Almost always a vision-context problem - bump
--image-min-tokensand check-c 4096isn't being squeezed. - Slow. One request at a time, no batching, and each image waits. Batch your captioning overnight and walk away.
A word on expectations: it's a "test node" from the ComfyUI_Mira author's side pack, so it's functional but unpolished - no parallel requests, errors-as-text, and the default extra_options includes the stock NSFW-style option list, which is exactly what JoyCaption's model card ships. If you want the stripped-down version with just a custom prompt, the pack's JoyCaptionBetaOneSimple node is right next to it.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| caption_type | COMBO | Descriptive | 11 options: Descriptive, Descriptive (Casual), Straightforward, Stable Diffusion Prompt, MidJourney, Danbooru tag list, +5 |
| caption_length | COMBO | long | 31 options: any, very short, short, medium-length, long, very long, +25 |
| extra_options | STRING | If there is a person/character in the image you must refer to them as {name}. NOT include information about people/characters that cannot be changed (like ethnicity, gender, etc), but do still include changeable attributes (like hair style). Include information about lighting. Include information about camera angle. Include information about whether there is a watermark or not. Include information about whether there are JPEG artifacts or not. If it is a photo you MUST include information about what camera was likely used and details such as aperture, shutter speed, ISO, etc. Do NOT include anything sexual; keep it PG. Do NOT mention the image's resolution. You MUST include information about the subjective aesthetic quality of the image from low to very high. Include information on the image's composition style, such as leading lines, rule of thirds, or symmetry. Do NOT mention any text that is in the image. Specify the depth of field and whether the background is in focus or blurred. If applicable, mention the likely use of artificial or natural lighting sources. Do NOT use any ambiguous language. Include whether the image is sfw, suggestive, or nsfw. ONLY describe the most important elements of the image. If it is a work of art, do not include the artist's name or the title of the work. Identify the image orientation (portrait, landscape, or square) and aspect ratio if obvious. Use vulgar slang and profanity, such as (but not limited to) "fucking," "slut," "cock," etc. Do NOT use polite euphemisms—lean into blunt, casual phrasing. Include information about the ages of any people/characters when applicable. Mention whether the image depicts an extreme close-up, close-up, medium close-up, medium shot, cowboy shot, medium wide shot, wide shot, or extreme wide shot. Do not mention the mood/feeling/etc of the image. Explicitly specify the vantage height (eye-level, low-angle worm’s-eye, bird’s-eye, drone, rooftop, etc.). If there is a watermark, you must mention it. Your response will be used by a text-to-image model, so avoid useless meta phrases like “This image shows…”, "You are looking at...", etc. | |
| temperature | FLOAT | 0.600–2 | Higher = more random, lower = more deterministic |
| top_p | FLOAT | 0.900–1 | Nucleus sampling parameter |
| max_tokens | INT | 5121–2048 | Maximum number of tokens to generate |
| llama_url | STRING | http://127.0.0.1:58080/chat/completions | External LLaMA service URL |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| caption | STRING | Generated image caption |
| prompt | STRING | Prompt used for caption generation |
| extra_options_examples | STRING | Examples of extra options that can be used |