PromptEngine Full (All Dimensions)
One node, twenty-one dropdowns, a whole prompt out
- prompt_out
If you want a complete, structured prompt without turning your canvas into a string of ten tiny nodes, this is the one you open. PromptEngine Full ("PromptEngine Full (All Dimensions)" in the node list) is the single-node version of the ComfyUI-PromptEngine pack's idea: pick one phrase for each of 21 visual dimensions in one place, leave the ones you don't care about on the dice, and a finished comma-separated prompt comes out of prompt_out. No API, no key, no model download. It's pure dictionary lookups plus a bit of RNG.
The 21 dimensions
The node exposes a style dropdown for every dimension the pack knows: ethnicity, gender, age_appearance, subject_appearance, hair_style, hair_color, outfit, accessories, pose, body_direction, expression, gaze, location_type, background_props, atmosphere, shot_angle, shot_distance, composition, lighting, color_grade, visual_style.
That order isn't arbitrary - it's the order the output is always assembled in, subject first, then pose, then scene, then camera, lighting, and style last. Keeping one fixed order is the reason prompts from this thing stay readable and diffable across runs, and it lines up with the general 2026 prompting advice that structured, block-by-block prompts beat a token bag, especially on models with an LLM text encoder.
The inputs that actually matter
Each <dimension>_style dropdown shows three kinds of values: "🎲 Random Style", "── (skip) ──", and the dictionary's cluster names for that dimension. Random picks a cluster; skip drops the dimension from the output entirely.
- variation - the one toggle worth understanding. Off (default), you get each cluster's
canonical_phrase. On, the node randomly picks from the cluster'ssamplesinstead. Off is stable and readable; on is where the "unlimited prompts" pitch lives. - seed - controls every random pick in the node, so the same seed and same selections reproduce. The
control_after_generatewidget rides along automatically, the same one that bites everyone on a KSampler. - custom_text - a free-text prefix (the source calls it "Optional prefix (e.g. LoRA trigger words)"). Useful for tag words that live outside the dictionary system. Note it's a prefix here, unlike the single-dimension node where it's a per-dimension override.
Two merges worth knowing before you're surprised: gender is hardcoded to man/woman (no dictionary for it), and it gets fused into the ethnicity phrase - "Aboriginal Australian woman" style - rather than a separate clause. Same for hair_color + hair_style: "black long wavy hair" as one chunk instead of two.
Installing it
The pack installs like any custom node:
cd ComfyUI/custom_nodes
git clone https://github.com/jinxishe/ComfyUI-PromptEngine
pip install -r requirements.txt
Then restart ComfyUI. Or use ComfyUI Manager and search "ComfyUI-PromptEngine". Core deps are just openai and tqdm - you don't touch the heavier Step 1-3 stack (sentence-transformers, torch, hdbscan) unless you run the dictionary-generation toolchain.
Where people get tripped up
- The dropdown looks huge in the API schema - the backend validates against a union of ~5,482 values, so schema dumps show an absurd list. The frontend trims each dropdown to its own dimension's clusters, so in practice it's fine. Don't panic at the number.
- New dictionary entries don't appear until you refresh the page. The backend re-reads dictionaries on the fly, but the frontend caches the dropdown list until reload. This matters once you've run the Step 3 toolchain.
- It's not modular. Everything is inside one node, which is great for presets and quick look iteration, but there's no graph branching between dimensions. If you want reusable subchains or per-dimension wiring, that's what
PromptEngineNodeis for - same pack, one dimension per node, chained together.
One honest caveat: this is a very new pack (first public release early 2026) with essentially no community track record yet, so treat the bundled dictionaries as a starting point rather than a canon. The whole point of the pack is that you can grow them with your own data.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| ethnicity_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| gender_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| age_appearance_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| subject_appearance_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| hair_style_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| hair_color_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| outfit_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| accessories_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| pose_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| body_direction_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| expression_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| gaze_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| location_type_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| background_props_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| atmosphere_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| shot_angle_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| shot_distance_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| composition_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| lighting_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| color_grade_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| visual_style_style | COMBO | 🎲 Random Style | 5482 options: candid 肖像柔胶片, intense 品红粉色光晕, muted 大地色系配黑, 1990s film aesthetic, 1990s film photography, 1990s_film_aesthetic, +5476 |
| variation | BOOLEAN | false | — |
| seed | INT | 00–2147483647 | — |
| custom_textopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| prompt_out | STRING | — |