ComfyUI Node

JoyCaption Ollama Extra Options

Steering your Ollama captioner without leaving ComfyUI

By judian17·Created about a year ago·Updated about a year ago· 7
JoyCaption Ollama Extra Options
    • extra_options_ollama
    ◄refer_character_namefalse►
    ◄exclude_people_infofalse►
    ◄include_lightingfalse►
    ◄include_camera_anglefalse►
    ◄include_watermark_infofalse►
    ◄include_JPEG_artifactsfalse►
    ◄include_exiffalse►
    ◄exclude_sexualfalse►
    ◄exclude_image_resolutionfalse►
    ◄include_aesthetic_qualityfalse►
    ◄include_composition_stylefalse►
    ◄exclude_textfalse►
    ◄specify_depth_fieldfalse►
    ◄specify_lighting_sourcesfalse►
    ◄do_not_use_ambiguous_languagefalse►
    ◄include_nsfw_ratingfalse►
    ◄only_describe_most_important_elementsfalse►
    ◄do_not_include_artist_name_or_titlefalse►
    ◄identify_image_orientationfalse►
    ◄use_vulgar_slang_and_profanityfalse►
    ◄do_not_use_polite_euphemismsfalse►
    ◄include_character_agefalse►
    ◄include_camera_shot_typefalse►
    ◄exclude_mood_feelingfalse►
    ◄include_camera_vantage_heightfalse►
    ◄mention_watermark_explicitlyfalse►
    ◄avoid_meta_descriptive_phrasesfalse►
    ◄character_name►

    JoyCaption Beta One is the community's favorite image captioner - the thing people reach for when they're building a LoRA dataset and want natural-language captions instead of tags. The catch has always been the plumbing: judian17's original node ran the model through llama-cpp-python, and building that with GPU support is a genuinely miserable afternoon. So the author's fix was to push the GGUF onto Ollama and split the prompt-building half out into this pack. The JoyCaption Ollama Extra Options node is that half's front panel: twenty-eight toggles, one name field, and no inference at all. It's a config bundle, nothing more.

    What it actually does

    Flip a switch, and the node tacks one instruction sentence onto an internal list. Flip include_lighting and the bundle carries "Include information about lighting." Flip include_camera_shot_type and the model gets told to say whether the image is an extreme close-up or a cowboy shot. Every toggle is the same trick - these are the exact instruction strings from fancyfeast's original JoyCaption prompt, preserved verbatim. The bundle leaves the node as a JJC_OLLAMA_EXTRA_OPTION output called extra_options_ollama, and the only thing that knows how to read it is the sibling JoyCaptionOllamaPrompter node in this same pack.

    That means the node does literally nothing on its own. Wire it to nothing and it silently builds a bundle nobody consumes. It's a steering wheel, not a car.

    The switches that actually matter

    All 28 default to off, so don't panic at the wall of booleans. The ones you'll realistically flip:

    • include_lighting and include_camera_angle - the two I'd turn on first for photography or realism LoRAs. Together they push captions toward the details a trained model can actually learn.
    • exclude_sexual - keeps the output PG. Worth knowing the model describes what's in the image; if your dataset has any spicy frames, flip this.
    • avoid_meta_descriptive_phrases - this is the anti-"This image shows…" switch, and it matters more than it sounds. Captions that start with meta commentary are worse training material for natural-language models.
    • refer_character_name + character_name - for character datasets. Turn on the toggle and type the name (placeholder example is Skywalker), and the model is instructed to call the character by name instead of describing generic "person."
    • identify_image_orientation, include_character_age, include_camera_vantage_height - niche but handy once you've run a few batches and realize the model keeps skipping exactly those details.

    Everything else - EXIF, JPEG artifacts, aesthetic quality, "use vulgar slang and profanity" (yes, that's a real toggle, no I won't use it) - is there because the original JoyCaption prompt had it. Flip one at a time to see what each actually changes in the output.

    Wiring it in

    The output plugs into the extra_options_input port on JoyCaptionOllamaPrompter, which then folds your instructions into the user prompt it sends downstream to OllamaGenerateV2. The pack ships a complete workflow file (ollama-joycaption-beta.json) showing the whole chain: LoadImage → OllamaConnectivityV2 → OllamaOptionsV2 → Extra Options → Prompter → OllamaGenerateV2. Load that and you can't get the wiring wrong.

    Install and gotchas

    Install via ComfyUI Manager (search "JoyCaption-beta-one-hf-llava-Prompt_node") or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/judian17/ComfyUI-JoyCaption-beta-one-hf-llava-Prompt_node
    

    Then restart ComfyUI. Good news: this pack is pure Python, no dependencies, no model downloads of its own. The heavy lifting lives elsewhere - you still need Ollama running, the aha2025/llama-joycaption-beta-one-hf-llava model pulled, and stavsap's ComfyUI-Ollama nodes installed for the actual generation. This node just decides what the model gets told.

    The one trap: character_name only takes effect when refer_character_name is switched on. Type a name, forget the toggle, and you'll wonder why the captioner never uses it.

    CategoryJoyCaption/Ollama

    Inputs (28)

    NameTypeDefaultDescription
    refer_character_nameBOOLEANfalse—
    exclude_people_infoBOOLEANfalse—
    include_lightingBOOLEANfalse—
    include_camera_angleBOOLEANfalse—
    include_watermark_infoBOOLEANfalse—
    include_JPEG_artifactsBOOLEANfalse—
    include_exifBOOLEANfalse—
    exclude_sexualBOOLEANfalse—
    exclude_image_resolutionBOOLEANfalse—
    include_aesthetic_qualityBOOLEANfalse—
    include_composition_styleBOOLEANfalse—
    exclude_textBOOLEANfalse—
    specify_depth_fieldBOOLEANfalse—
    specify_lighting_sourcesBOOLEANfalse—
    do_not_use_ambiguous_languageBOOLEANfalse—
    include_nsfw_ratingBOOLEANfalse—
    only_describe_most_important_elementsBOOLEANfalse—
    do_not_include_artist_name_or_titleBOOLEANfalse—
    identify_image_orientationBOOLEANfalse—
    use_vulgar_slang_and_profanityBOOLEANfalse—
    do_not_use_polite_euphemismsBOOLEANfalse—
    include_character_ageBOOLEANfalse—
    include_camera_shot_typeBOOLEANfalse—
    exclude_mood_feelingBOOLEANfalse—
    include_camera_vantage_heightBOOLEANfalse—
    mention_watermark_explicitlyBOOLEANfalse—
    avoid_meta_descriptive_phrasesBOOLEANfalse—
    character_nameSTRING—

    Outputs (1)

    NameTypeDescription
    extra_options_ollamaJJC_OLLAMA_EXTRA_OPTION—