Nodes/ComfyUI-StylePromptLibrary/🎨 Style Prompt Library
ComfyUI Node

🎨 Style Prompt Library

377 hand-written styles in a dropdown — the no-model style library that feeds your LLM prompt node

By lunaaispace-eng·Created 3 months ago·Updated 8 days ago· 0
🎨 Style Prompt Library
    • style_guide
    ◄category▾►
    ◄subcategory▾►
    ◄style▾►
    â—„searchâ–º
    â—„enabledtrueâ–º
    â—„strength1.00â–º
    â—„strength_modeinstructionâ–º

    This node is a dropdown with a whole style library behind it. 🎨 Style Prompt Library (class StylePromptLibrary) ships hundreds of hand-written style descriptions - "Film Noir," "Synthwave & Vaporwave," "Watercolor," a dozen kinds of portrait - and hands you the one you pick as a clean text block. No model file, no API key, no GPU work. It's a glorified JSON picker, and that's exactly why it's useful.

    The name is a bit misleading, in a good way: it isn't a library in the LoRA-folder sense. It's a text library. What it does is remove the worst part of the now-routine LLM-prompt workflow - describing a style in the few words a local prompt node will actually honor. If you've got a small LLM writing structured prompts for your checkpoint, telling it "make it film noir" is a coin flip. Hand it this node's pre-written block - "film noir cinematography, high-contrast black and white, hard chiaroscuro lighting…" - and the LLM has something concrete to weave in. Same idea as the style input on any good LLM prompt node, minus the improvising.

    How it works

    Every *.json file in the pack's styles/ folder is loaded on startup and merged into one lookup table (three packs in the current build - general, realism, and an NSFW cinematic one - for 377 total styles; the README's counts are already stale). The node then exposes two local server routes, /style_prompt_library/tree and /style_prompt_library/content, that its bundled frontend JavaScript uses to populate cascading dropdowns, live search, and a read-only preview of the selected style.

    The clever bit is that the style widget value - not the JavaScript - is the source of truth; the node works headless with the frontend missing, which keeps it API-safe. It even implements IS_CHANGED using the style-pack file mtimes, so editing a JSON file invalidates the cache instead of fighting ComfyUI's caching.

    The inputs that matter

    • category → subcategory → style - the three required dropdowns. Pick a category, it narrows the subcategory list, which narrows the styles. 13 categories, 82 subcategories, 377 styles in the current build.
    • search - type to filter the whole library by name; when text is present it overrides the category/subcategory narrowing in the UI.
    • enabled - the master switch. Off means the node outputs an empty string, i.e. "no style at all." Flip it to A/B a style with one click. Underrated.
    • strength - a weight from 0 to 2, "like a LoRA." 0 → empty string, 1.0 → style text unchanged, >1 pushes harder.
    • strength_mode - the one that'll burn you. instruction (default) wraps the text in a plain-English directive ("Apply the following style as the dominant visual treatment: …") meant for LLM prompt nodes. emphasis wraps it as CLIP attention syntax, (style text:1.25), for a CLIP Text Encode.

    The output is a single style_guide string. Wire it into your LLM prompt node's style input, a prompt builder, or (only when you know what you're doing) a CLIP Text Encode.

    Here's where people get burned: emphasis mode only makes sense on a CLIP-based checkpoint like SD 1.5 or SDXL. On the LLM-encoded models everyone runs in 2026 - Flux, Z-Image, anything with a Qwen or T5 encoder - (text:1.25) is passed through as literal punctuation or silently discarded, which is worse than nothing. If you feed an LLM prompt node, leave strength_mode on instruction.

    Install

    Zero dependencies - no requirements.txt, just the ComfyUI server that's already there. Via ComfyUI Manager, search the pack title "StylePromptLibrary"; or clone it directly:

    cd ComfyUI/custom_nodes
    git clone https://github.com/lunaaispace-eng/ComfyUI-StylePromptLibrary
    

    Restart ComfyUI, then Ctrl+F5 the browser so the frontend JavaScript reloads. Add it under Add Node → Style Prompt Library.

    Troubleshooting

    • Dropdowns look flat/empty - the frontend JS didn't reload. Ctrl+F5 and try again.
    • New styles don't appear after editing JSON - restart ComfyUI; the library loads at import time.
    • Node outputs an error string - the selected entry's content field is empty, or the pack didn't load. Check the JSON you edited.
    • NSFW styles show up uninvited - delete the nsfw_*.json pack from styles/ and restart; the adult entries are a separate file for exactly this reason.

    For a brand-new pack (first commit August 2026, effectively zero community footprint yet), it's refreshingly boring: no hidden downloads, no network calls, just text. If you live in an LLM-prompt workflow, it's one of the rare utility nodes that saves you real typing every single run.

    CategoryStyle Prompt Library

    Inputs (7)

    NameTypeDefaultDescription
    categoryCOMBO13 options: All, Photography, Fashion, Sci-Fi & Futurism, Illustration, Painting, +7
    subcategoryCOMBO82 options: All, Cinematic, Realistic, Realistic - Female Figure, Fine Art & B&W, Night & Long Exposure, +76
    styleCOMBO377 options: 3D Layered Plywood Wall Art, Abstract, Abstract Expressionism, Abstract Fluid Dynamics, Abstract Soft Forms, Acrylic, +371
    searchoptSTRING—
    enabledoptBOOLEANtrueMaster switch. When OFF, this node outputs an empty string so no style is applied — lets you A/B with one click.
    strengthoptFLOAT1.000–2Style weight, like a LoRA. 1.0 = normal (text unchanged), 0 = no style at all, >1 pushes it harder. See strength_mode for how the weight is applied.
    strength_modeoptCOMBOinstructioninstruction: expresses the weight as a directive for an LLM prompt node (use when this feeds your LLM node). emphasis: wraps as (text:weight) attention syntax for a CLIP Text Encode (use only when feeding CLIP directly).

    Outputs (1)

    NameTypeDescription
    style_guideSTRING—