Donut Prompt Injection
A style directory you can actually navigate
- prompt
- style_preview
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 FirstorPrompt Firstdecides whether your base prompt goes at the front or the style blocks lead. - separator (default
", ") - what joins the pieces. - seed - drives all the
Randompicks.
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.
Inputs (34)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| main_category | COMBO | None | 5 options: None, Random, Photorealistic, Illustrated/Painted, Digital and 3D |
| subcategory | COMBO | None | 5 options: None, Random, Photography, Cinematic, Aesthetic & Mood |
| style | COMBO | None | 35 options: None, Random, Vintage Kodak, Retro Polaroid, 70s Faded Film, Cinematic Kodachrome, +29 |
| camera | COMBO | None | 46 options: None, Random, Extreme Close-Up, Close-Up, Medium Close-Up, Medium Shot, +40 |
| lighting | COMBO | None | 32 options: None, Random, Rembrandt Lighting, Butterfly Lighting, Loop Lighting, Split Lighting, +26 |
| time_of_day | COMBO | None | 20 options: None, Random, Pre-Dawn, Dawn, Sunrise, Golden Hour Morning, +14 |
| weather | COMBO | None | 26 options: None, Random, Clear Sky, Sunny, Partly Cloudy, Overcast, +20 |
| color_grade | COMBO | None | 32 options: None, Random, Teal and Orange, Bleach Bypass, Cross-Processed, Cinematic LUT, +26 |
| climate | COMBO | None | 27 options: None, Random, Tropical, Rainforest, Savanna, Desert, +21 |
| pose | COMBO | None | 36 options: None, Random, Standing Casual, Standing Confident, Arms Crossed, Hands in Pockets, +30 |
| pose_with_props | COMBO | None | 22 options: None, Random, Sitting on Chair, Sitting on Stool, Sitting on Couch, Sitting on Floor Cushion, +16 |
| vibe | COMBO | None | 47 options: None, Random, Serene, Peaceful, Tranquil, Energetic, +41 |
| expression | COMBO | None | 62 options: None, Random, Smiling, Grinning, Laughing, Beaming, +56 |
| hair_color | COMBO | None | 25 options: None, Random, Black, Dark Brown, Brown, Light Brown, +19 |
| hairstyle_masculine | COMBO | None | 33 options: None, Random, Bald, Buzz Cut, Crew Cut, Fade, +27 |
| hairstyle_feminine | COMBO | None | 35 options: None, Random, Pixie Cut, Bob, Lob, Asymmetrical Bob, +29 |
| skin_tone | COMBO | None | 14 options: None, Random, Very Pale, Pale, Light, Light Medium, +8 |
| character_composition | COMBO | None | 24 options: None, Random, One Person, Solo Portrait, Romantic Couple, Two Friends, +18 |
| accessories | COMBO | None | 30 options: None, Random, Glasses, Sunglasses, Reading Glasses, Aviators, +24 |
| eye_color | COMBO | None | 12 options: None, Random, Brown, Dark Brown, Hazel, Green, +6 |
| age_appearance | COMBO | None | 12 options: None, Random, Infant, Toddler, Child, Pre-Teen, +6 |
| body_type | COMBO | None | 12 options: None, Random, Slim, Athletic, Average, Curvy, +6 |
| makeup_style | COMBO | None | 17 options: None, Random, Natural, No Makeup, Light Makeup, Glamorous, +11 |
| location_category | COMBO | None | 14 options: None, Random, Sports, Real Estate, Travel, Profession, +8 |
| location | COMBO | None | 17 options: None, Random, Stadium, Arena, Gymnasium, Basketball Court, +11 |
| outfit | COMBO | None | 29 options: None, Random, Casual Outfit, Sportswear, Business Casual, Formal Attire, +23 |
| outfit_masculine | COMBO | None | 14 options: None, Random, Suit and Tie, Dress Shirt and Slacks, Jeans and T-Shirt, Polo Shirt and Chinos, +8 |
| outfit_feminine | COMBO | None | 13 options: None, Random, Cocktail Dress, Sundress, Maxi Dress, Blouse and Skirt, +7 |
| order | COMBO | Style First | 2 options: Style First, Prompt First |
| separator | STRING | , | — |
| seed | INT | 00–18446744073709550000 | — |
| wildcard_depthopt | INT | 1281–1024 | — |
| missing_wildcardopt | COMBO | 3 options: error, keep, empty |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| style_preview | STRING | — |