PromptDeckComposer
Stop typing prompts. Roll them instead.
- prompt
Type "forest ritual" into PromptDeckComposer and it hands you back a full scene description - a ritual priestess made of herbs surrounded by floating fragments in an abandoned temple, lit with soft volumetric light, in the voice of an artist you didn't pick. That's the whole pitch: the node treats prompting as a slot machine you pull instead of a paragraph you write, and it's aimed at the "I have no idea what I want, show me options" mood. For that it's genuinely handy - especially if you're feeding a modern model like Flux that wants dense natural-language descriptions rather than a comma bag of tags.
What it actually does
Under the hood it's a pool-picker with a random number generator and a pen. On startup it reads composer_deck.json, which ships with the pools: 25 primary subjects, 54 subject modifiers, 24 secondary subjects, 25 environments, 21 each of lighting/color/texture/mood/render layers, 42 artists (Caravaggio to Beeple), and 21+ full-sentence "style blocks" describing atmosphere, camera, and concept.
When you queue it, compose() builds a random.Random from your seed and walks the pools, picking each field with a probability that scales with CHAOS_LEVEL (0–1, default 0.5). Low chaos keeps the output tight and conventional; high chaos starts throwing in secondary subjects and style blocks you'd never think to combine. The picked values then get assembled by a prompt writer - there's a neutral, concise, cinematic, poetic, and technical TONE_PRESET that each phrase the same values completely differently, which is a nice touch. What comes out the prompt output is a single STRING you wire straight into your sampler's positive prompt.
The inputs that matter
The node looks intimidating - there are about seventy widgets. You really set a handful:
- randomize - the master switch. On (default) and it re-rolls on every queue, using
time.time_ns()as the seed when seed is 0, so you get a different prompt each run. Off, and it uses exactly the values you've selected in the widgets. - USER_PROMPT - your fixed anchor. It gets appended to whatever randomness produces, and unlike everything else it's never re-rolled. This is how you say "okay, but make it about this."
- CHAOS_LEVEL - how far the roll can wander. The one dial most people end up touching.
- The LOCK_ toggles* - one per field (LOCK_PRIMARY_SUBJECT, LOCK_ENVIRONMENT, LOCK_ARTIST_1, and friends). Flip the lock on the bits you like and let the rest keep rolling. This is the "evolve, don't rebuild" workflow the README talks about, and it works better than it has any right to.
- OLLAMA_ENABLE - the optional LLM expansion, off by default.
The Ollama bit
The built-in LLM hook is the most overhyped part, and also the safest one. With OLLAMA_ENABLE on, the node POSTs the composed prompt to http://127.0.0.1:11434/api/generate (the OLLAMA_URL, and OLLAMA_MODEL must name a model you've already pulled) and replaces the output with the model's expanded prose. The kicker: if Ollama isn't installed, isn't running, times out, or the model doesn't exist, it silently falls back to the structured prompt and reports the reason in OLLAMA_STATUS. The node never hard-fails on it. Where people get burned is expecting it to just work - Ollama is a separate program you have to install and run, and the default system prompt is written for Flux-style sentence prompting, so an SDXL checkpoint isn't going to love the output the same way.
Installing
No pip dependencies, no model downloads - the whole thing is pure Python stdlib plus its bundled JSON. Clone it in:
cd ComfyUI/custom_nodes
git clone https://github.com/chkeeho80/PromptDeckComposer
Then restart ComfyUI. You'll find it under prompt/PromptDeckComposer → PromptDeckComposer. It's new and obscure enough that ComfyUI Manager may or may not have it listed yet; the clone is the reliable path. The only optional extra is Ollama itself, which you install separately.
Gotchas
Two things trip people up. First, with randomize on and seed left at 0, your queue is different every single run - that's the feature, but if you land on a prompt you love and want it back, set a fixed seed or switch randomize off before you queue again. Second, the node's web UI does a lot of front-end work - reroll buttons, a saved-results list, refine/restyle/reimagine menus - and it stashes recent results and thumbnails inside its own folder (custom_nodes/PromptDeckComposer/). That's not a bug; it's just where your "kept" prompts live if you ever want to back them up.
If you want one perfect result, this isn't the node for you. If you want fifty interesting starting points in an afternoon, it's quietly excellent.
Inputs (80)
| Name | Type | Default | Description |
|---|---|---|---|
| randomize | BOOLEAN | true | — |
| seed | INT | 00–4294967295 | — |
| separator | STRING | , | — |
| PRIMARY_SUBJECT | COMBO | young woman | 25 options: young woman, young man, android, cyborg, forest spirit, mechanical being, +19 |
| SUBJECT_MODIFIER | COMBO | <none> | 54 options: <none>, made of herbs, wreathed in bioluminescent moss, covered in cracked porcelain, formed from smoke and wet ink, lit from within by blue circuitry, +48 |
| SECONDARY_SUBJECT_1 | COMBO | <none> | 24 options: <none>, mechanical raven, floating drone, small animal companion, glowing orb, holographic interface, +18 |
| SECONDARY_SUBJECT_2 | COMBO | <none> | 24 options: <none>, mechanical raven, floating drone, small animal companion, glowing orb, holographic interface, +18 |
| RELATIONSHIP | COMBO | <none> | 25 options: <none>, standing with, looking at, holding, surrounded by, emerging from, +19 |
| ENVIRONMENT | COMBO | <none> | 25 options: <none>, neon-lit alley, foggy forest, abandoned temple, cyberpunk cityscape, desert wasteland, +19 |
| LOCK_SCENE_STRUCTURE | BOOLEAN | false | — |
| LOCK_SUBJECT_MODIFIER | BOOLEAN | false | — |
| STYLE_RENDER | COMBO | <none> | 21 options: <none>, digital painting, photorealistic rendering, cinematic still, watercolor painting, oil painting, +15 |
| STYLE_LIGHTING | COMBO | <none> | 21 options: <none>, neon rim lighting, soft diffused lighting, dramatic chiaroscuro lighting, cinematic backlighting, low key lighting, +15 |
| STYLE_COLOR | COMBO | <none> | 21 options: <none>, teal and orange color grade, muted earth tones, high saturation palette, monochrome palette, pastel color palette, +15 |
| STYLE_TEXTURE | COMBO | <none> | 21 options: <none>, film grain, charcoal grain texture, watercolor paper texture, painterly brush strokes, impasto paint texture, +15 |
| STYLE_MOOD | COMBO | <none> | 21 options: <none>, melancholic, dreamlike, mysterious, ominous, serene, +15 |
| LOCK_STYLE_LAYERS | BOOLEAN | false | — |
| ARTIST_COUNT | COMBO | 2 | 4 options: 0, 1, 2, 3 |
| ARTIST_1 | COMBO | <none> | 42 options: <none>, Caravaggio, Gustav Klimt, H.R. Giger, Ash Thorp, Beeple, +36 |
| ARTIST_2 | COMBO | <none> | 42 options: <none>, Caravaggio, Gustav Klimt, H.R. Giger, Ash Thorp, Beeple, +36 |
| ARTIST_3 | COMBO | <none> | 42 options: <none>, Caravaggio, Gustav Klimt, H.R. Giger, Ash Thorp, Beeple, +36 |
| LOCK_ARTIST_MIX | BOOLEAN | false | — |
| STYLE_BLOCK_LIGHTING | COMBO | <none> | 21 options: <none>, The lighting fractures into multiple color spectrums, creating a surreal chromatic vibration across the subject., A subtle red halation blooms around the brightest light sources, giving the scene a vintage optical softness., Hard directional light carves deep shadows while faint ambient glow preserves delicate detail., Soft diffusion scatters the light evenly, creating a hazy, dreamlike visual field., Pockets of light drift through the environment, illuminating only fragments of the scene., +15 |
| STYLE_BLOCK_TEXTURE | COMBO | <none> | 21 options: <none>, Surface textures blend cracked stone, soft organic material, and worn metal into a unified tactile language., Fine grain and subtle imperfections give the image a raw, analog feel., Thick painterly marks create a sense of physical depth and pressure., Smooth surfaces contrast with areas of decay and erosion., Materials feel aged, weathered, and rich with history., +15 |
| STYLE_BLOCK_ATMOSPHERE | COMBO | <none> | 21 options: <none>, The atmosphere carries quiet narrative tension, as though something has just happened or is about to unfold., The scene feels suspended between memory and reality., A heavy sense of isolation permeates the environment., The space feels ceremonial, as if part of an unknown ritual., The environment suggests a larger unseen world beyond the frame., +15 |
| STYLE_BLOCK_CAMERA | COMBO | <none> | 21 options: <none>, The image feels captured through a vintage anamorphic lens with blooming highlights and deep blacks., A shallow depth of field isolates the subject against a blurred background., The composition emphasizes foreground framing and layered depth., The perspective feels slightly distorted, adding visual tension., The framing suggests a cinematic still rather than a static composition., +15 |
| STYLE_BLOCK_CONCEPT | COMBO | <none> | 23 options: <none>, Organic warmth clashes against artificial illumination, emphasizing the boundary between human and machine., The subject feels like a sacred object from a future civilization., The image transforms ordinary elements into something ritualistic and symbolic., The scene suggests a world where memory and technology are intertwined., The design feels both ancient and futuristic at the same time., +17 |
| LOCK_STYLE_BLOCKS | BOOLEAN | false | — |
| CHAOS_LEVEL | FLOAT | 0.500–1 | — |
| USER_PROMPT | STRING | — | |
| LOCK_PRIMARY_SUBJECT | BOOLEAN | false | — |
| LOCK_SECONDARY_SUBJECT_1 | BOOLEAN | false | — |
| LOCK_SECONDARY_SUBJECT_2 | BOOLEAN | false | — |
| LOCK_RELATIONSHIP | BOOLEAN | false | — |
| LOCK_ENVIRONMENT | BOOLEAN | false | — |
| LOCK_STYLE_RENDER | BOOLEAN | false | — |
| LOCK_STYLE_LIGHTING | BOOLEAN | false | — |
| LOCK_STYLE_COLOR | BOOLEAN | false | — |
| LOCK_STYLE_TEXTURE | BOOLEAN | false | — |
| LOCK_STYLE_MOOD | BOOLEAN | false | — |
| LOCK_ARTIST_COUNT | BOOLEAN | false | — |
| LOCK_ARTIST_1 | BOOLEAN | false | — |
| LOCK_ARTIST_2 | BOOLEAN | false | — |
| LOCK_ARTIST_3 | BOOLEAN | false | — |
| LOCK_STYLE_BLOCK_LIGHTING | BOOLEAN | false | — |
| LOCK_STYLE_BLOCK_TEXTURE | BOOLEAN | false | — |
| LOCK_STYLE_BLOCK_ATMOSPHERE | BOOLEAN | false | — |
| LOCK_STYLE_BLOCK_CAMERA | BOOLEAN | false | — |
| LOCK_STYLE_BLOCK_CONCEPT | BOOLEAN | false | — |
| STRUCTURED_MODE | BOOLEAN | true | — |
| TONE_PRESET | COMBO | neutral | 5 options: neutral, concise, cinematic, poetic, technical |
| TONE_PRESET_PRIMARY | COMBO | neutral | 5 options: neutral, concise, cinematic, poetic, technical |
| TONE_PRESET_SECONDARY | COMBO | none | 6 options: none, neutral, concise, cinematic, poetic, technical |
| TONE_MIX | FLOAT | 0.000–1 | — |
| RANDOM_TONE | BOOLEAN | false | — |
| LOCK_TONE | BOOLEAN | false | — |
| CONSISTENCY_MODE | BOOLEAN | false | — |
| CONSISTENCY_THEME | COMBO | any | 10 options: any, random, ancient, cyberpunk, organic, industrial, +4 |
| CONSISTENCY_STRENGTH | FLOAT | 0.650–1 | — |
| OLLAMA_ENABLE | BOOLEAN | false | — |
| OLLAMA_MODEL | STRING | — | |
| OLLAMA_TEMPERATURE | FLOAT | 0.750–2 | — |
| OLLAMA_STATUS | STRING | Ollama: OFF | — |
| OLLAMA_SYSTEM_PROMPT | STRING | You are a high-detail visual scene prompt generator for Flux-based image models. You will receive a 'Theme' input. LOGIC: If 'Theme' is empty: invent a dense, visually rich scene across any genre. If 'Theme' contains a concept: build the scene around that concept as the central anchor. MANDATORY VISUAL ELEMENTS: Subject: Define a clear primary subject appropriate to the theme. If human, include anatomy and skin detail. If non-human, emphasize material, structure, or form. Environment: Specify location, spatial context, and physical surroundings. Lighting: Use clear, physically grounded lighting descriptions (e.g., rim light, volumetric light, fluorescent flicker). Camera / Style: Use professional or cinematic framing (lens, focal length, perspective). Atmosphere: Include visual micro-details only (particles, dust, moisture, grain). SENSORY RESTRICTION: Describe only what is visually observable. Do not include sound, smell, or internal thoughts. FORMAT: Output one dense paragraph only. No introduction, no labels, no meta commentary. GENDER: Do not assume gender unless explicitly specified in the input. | — |
| OLLAMA_URL | STRING | http://127.0.0.1:11434 | — |
| OLLAMA_TIMEOUT | INT | 301–300 | — |
| RANDOM_CHAOS_LEVEL | BOOLEAN | false | — |
| RANDOM_CONSISTENCY_STRENGTH | BOOLEAN | false | — |
| CONSISTENCY_WORLD_THEME | COMBO | any | 26 options: any, random, urban, wilderness, desert, oceanic, +20 |
| CONSISTENCY_CULTURE_THEME | COMBO | any | 25 options: any, random, nomadic, monastic, aristocratic, mercantile, +19 |
| CONSISTENCY_MATERIAL_THEME | COMBO | any | 26 options: any, random, stone, metal, glass, porcelain, +20 |
| CONSISTENCY_CONCEPT_THEME | COMBO | any | 26 options: any, random, sacred, liminal, melancholy, uncanny, +20 |
| CONSISTENCY_WORLD_WEIGHT | FLOAT | 0.500–1 | — |
| CONSISTENCY_CULTURE_WEIGHT | FLOAT | 0.500–1 | — |
| CONSISTENCY_MATERIAL_WEIGHT | FLOAT | 0.500–1 | — |
| CONSISTENCY_CONCEPT_WEIGHT | FLOAT | 0.500–1 | — |
| world_weight_random | BOOLEAN | false | — |
| culture_weight_random | BOOLEAN | false | — |
| material_weight_random | BOOLEAN | false | — |
| concept_weight_random | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |