JoyCaption2 (BizyAIR)
Auto-caption images via BizyAIR's cloud JoyCaption2
- image
- caption
Feed it an image, get back a written caption. easy joyCaption2API runs JoyCaption2 - a free, open, deliberately uncensored vision-language captioner that the community leans on for building LoRA training datasets - and turns your image into a description in whatever style you pick, from a plain paragraph to a booru tag list to a training prompt.
Here's the thing to understand before you wire it up, because it trips people: the "API" in the name is literal. This node does not run JoyCaption on your own GPU. It calls BizyAIR, a cloud service, and JoyCaption runs on their servers. That means it needs network access and a BizyAIR API key, and it bills against your BizyAIR account rather than your local hardware. That's the trade - you skip downloading and running a multi-gigabyte VLM locally, at the cost of a signup, a key, and a cloud dependency. If you'd rather keep everything on your machine, there are local JoyCaption nodes in other packs; this one is the hosted convenience version.
How it works
It uploads your image to BizyAIR's endpoint, which runs JoyCaption2 with the prompt style and length you configured, and returns the generated text. JoyCaption itself was built specifically for captioning training data - equal coverage of SFW and NSFW concepts, no coy euphemisms - which is why it's a community favorite for LoRA and finetune datasets where a mainstream captioner would refuse or hedge.
The inputs and outputs that matter
image- the image to caption.caption_type- the big one.Descriptive,Descriptive (Informal),Training Prompt,MidJourney,Booru tag list,Booru-like tag list,Art Critic,Product Listing, orSocial Media Post. For LoRA datasets on modern language-model-encoder bases,DescriptiveorTraining Prompt(natural language) is usually what you want; for anime/tag-based training, theBooruoptions.caption_length- fromvery shortup to explicit token counts. Controls how much text you get.temperature/do_sample/max_tokens- the usual generation knobs; higher temperature = more varied wording.custom_promptandextra_options- steer the captioner with your own instructions (e.g. "always mention the lighting").apikey_override(optional) - your BizyAIR key, if you're not setting it globally.
Output: caption (STRING). Route it into a save-text node to build a dataset, or into a prompt for a downstream generation.
How to install it
Part of ComfyUI-Easy-Use. ComfyUI Manager: search ComfyUI-Easy-Use, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Use
then install.bat (Windows) or pip install -r ComfyUI-Easy-Use/requirements.txt, and restart. No local model download - but you do need a BizyAIR account and API key for this node to work at all.
Common issues & troubleshooting
Auth / "no API key" errors. This is the number-one failure. The node calls a cloud service, so it needs a valid BizyAIR key - set it globally in your Easy-Use / BizyAIR config, or paste it into apikey_override. No key, no caption.
Nothing comes back, or it hangs. It's a network call. A dead connection, a rate limit, or a service outage on BizyAIR's side all look like "the node isn't working." Confirm you're online and your key has quota before assuming the node is broken.
It's not running locally, and it costs. Worth restating: unlike a local captioner, every caption is a billed API request. If you're captioning thousands of dataset images, that adds up - check BizyAIR's pricing, or use a local JoyCaption node for bulk work.
Wrong caption style for your trainer. A booru tag list on a Flux/Z-Image dataset (which want natural language) will hurt more than help, and vice versa on anime tag-based models. Match caption_type to the base you're training - natural-language styles for LLM-encoder models, tag lists for the danbooru-tagged lineage.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| do_sample | COMBO | 2 options: true, false | |
| temperature | FLOAT | 0.500–2 | — |
| max_tokens | INT | 25616–512 | — |
| caption_type | COMBO | 9 options: Descriptive, Descriptive (Informal), Training Prompt, MidJourney, Booru tag list, Booru-like tag list, +3 | |
| caption_length | COMBO | 31 options: any, very short, short, medium-length, long, very long, +25 | |
| extra_options | STRING | Extra options for the model | |
| name_input | STRING | Name input is only used if an Extra Option is selected that requires it. | |
| custom_prompt | STRING | — | |
| apikey_overrideopt | STRING | Override the API key in the local config |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| caption | STRING | — |