Nodes/ComfyUI-DonutNodes/Donut Prompt Injection
ComfyUI Node

Donut Prompt Injection

A style directory you can actually navigate

By DonutsDelivery·Created about a year ago·Updated about 13 hours ago· 25
Donut Prompt Injection
    • prompt
    • style_preview
    prompt
    main_categoryNone
    subcategoryNone
    styleNone
    cameraNone
    lightingNone
    time_of_dayNone
    weatherNone
    color_gradeNone
    climateNone
    poseNone
    pose_with_propsNone
    vibeNone
    expressionNone
    hair_colorNone
    hairstyle_masculineNone
    hairstyle_feminineNone
    skin_toneNone
    character_compositionNone
    accessoriesNone
    eye_colorNone
    age_appearanceNone
    body_typeNone
    makeup_styleNone
    location_categoryNone
    locationNone
    outfitNone
    outfit_masculineNone
    outfit_feminineNone
    orderStyle First
    separator,
    seed0
    wildcard_depth128
    missing_wildcard

    Every serious prompt-writer keeps a scratchpad of the phrases that reliably work - "Kodak Portra 400," "Rembrandt lighting," "golden hour morning." DonutPromptInjection is that scratchpad turned into a node: instead of remembering the exact wording, you pick from dropdowns organized like a photography production sheet - main category, subcategory, style, camera, lighting, time of day, weather, color grade, climate, pose, expression, hair, skin tone, outfit, location, vibe, and about a dozen more. It assembles the final prompt, in your chosen order, and hands it to your CLIP encode. It's prompt engineering as a form you fill out.

    The name "injection" is doing a lot of work: it's about injecting style into a base prompt, not the security meaning. And it's chainable - feed its output into another copy and you can layer styles.

    How it works

    Each category is an enum where the value is either a specific choice, Random, or None (skip). The choices map to curated prompt phrases stored in the pack - "Vintage Kodak" becomes a full "vintage Kodak Portra 400 film photograph, creamy skin tones, soft grain…" string, and so on through dozens of styles, 60+ expressions, 40+ camera shots. If you pick Random, it picks from that category using the seed input, so randomness is reproducible - set a seed, get the same random look every run.

    The assembly knobs:

    • order - Style First or Prompt First decides whether your base prompt goes at the front or the style blocks lead.
    • separator (default ", ") - what joins the pieces.
    • seed - drives all the Random picks.

    Two outputs: prompt (the assembled string for your encode) and style_preview (a separate string showing just the injected style block, so you can see what was added and tweak it without reading the whole prompt).

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/DonutsDelivery/ComfyUI-DonutNodes.git donutnodes
    cd donutnodes
    python -m pip install -r requirements.txt
    

    or ComfyUI Manager → "DonutNodes," restart.

    Using it well - and the honest caveat

    The real value is the Random + seed combination: it's a cheap exploration tool - randomize style/lighting/camera on a fixed image-to-image pass and sweep a bunch of looks deterministically. But there's a 2026-model trap the KB calls out hard: on LLM-encoded models (Krea 2, Z-Image, Klein), your prompt is an instruction to a language model, not a token bag. These curated photographic phrases were written the SDXL way and mostly transfer as natural-language description - that's fine, even good - but don't expect Random to be tasteful, and if you're on an SDXL-lineage model, the comma-separated style lists this produces are exactly in their wheelhouse. Which model you're on decides whether this node's output reads as magic or as decoration.

    Categorydonutnodes

    Inputs (34)

    NameTypeDefaultDescription
    promptSTRING
    main_categoryCOMBONone5 options: None, Random, Photorealistic, Illustrated/Painted, Digital and 3D
    subcategoryCOMBONone5 options: None, Random, Photography, Cinematic, Aesthetic & Mood
    styleCOMBONone35 options: None, Random, Vintage Kodak, Retro Polaroid, 70s Faded Film, Cinematic Kodachrome, +29
    cameraCOMBONone46 options: None, Random, Extreme Close-Up, Close-Up, Medium Close-Up, Medium Shot, +40
    lightingCOMBONone32 options: None, Random, Rembrandt Lighting, Butterfly Lighting, Loop Lighting, Split Lighting, +26
    time_of_dayCOMBONone20 options: None, Random, Pre-Dawn, Dawn, Sunrise, Golden Hour Morning, +14
    weatherCOMBONone26 options: None, Random, Clear Sky, Sunny, Partly Cloudy, Overcast, +20
    color_gradeCOMBONone32 options: None, Random, Teal and Orange, Bleach Bypass, Cross-Processed, Cinematic LUT, +26
    climateCOMBONone27 options: None, Random, Tropical, Rainforest, Savanna, Desert, +21
    poseCOMBONone36 options: None, Random, Standing Casual, Standing Confident, Arms Crossed, Hands in Pockets, +30
    pose_with_propsCOMBONone22 options: None, Random, Sitting on Chair, Sitting on Stool, Sitting on Couch, Sitting on Floor Cushion, +16
    vibeCOMBONone47 options: None, Random, Serene, Peaceful, Tranquil, Energetic, +41
    expressionCOMBONone62 options: None, Random, Smiling, Grinning, Laughing, Beaming, +56
    hair_colorCOMBONone25 options: None, Random, Black, Dark Brown, Brown, Light Brown, +19
    hairstyle_masculineCOMBONone33 options: None, Random, Bald, Buzz Cut, Crew Cut, Fade, +27
    hairstyle_feminineCOMBONone35 options: None, Random, Pixie Cut, Bob, Lob, Asymmetrical Bob, +29
    skin_toneCOMBONone14 options: None, Random, Very Pale, Pale, Light, Light Medium, +8
    character_compositionCOMBONone24 options: None, Random, One Person, Solo Portrait, Romantic Couple, Two Friends, +18
    accessoriesCOMBONone30 options: None, Random, Glasses, Sunglasses, Reading Glasses, Aviators, +24
    eye_colorCOMBONone12 options: None, Random, Brown, Dark Brown, Hazel, Green, +6
    age_appearanceCOMBONone12 options: None, Random, Infant, Toddler, Child, Pre-Teen, +6
    body_typeCOMBONone12 options: None, Random, Slim, Athletic, Average, Curvy, +6
    makeup_styleCOMBONone17 options: None, Random, Natural, No Makeup, Light Makeup, Glamorous, +11
    location_categoryCOMBONone14 options: None, Random, Sports, Real Estate, Travel, Profession, +8
    locationCOMBONone17 options: None, Random, Stadium, Arena, Gymnasium, Basketball Court, +11
    outfitCOMBONone29 options: None, Random, Casual Outfit, Sportswear, Business Casual, Formal Attire, +23
    outfit_masculineCOMBONone14 options: None, Random, Suit and Tie, Dress Shirt and Slacks, Jeans and T-Shirt, Polo Shirt and Chinos, +8
    outfit_feminineCOMBONone13 options: None, Random, Cocktail Dress, Sundress, Maxi Dress, Blouse and Skirt, +7
    orderCOMBOStyle First2 options: Style First, Prompt First
    separatorSTRING,
    seedINT00–18446744073709550000
    wildcard_depthoptINT1281–1024
    missing_wildcardoptCOMBO3 options: error, keep, empty

    Outputs (2)

    NameTypeDescription
    promptSTRING
    style_previewSTRING