Umi Prompt Preset
Your Best Prompt Fragment, Written Once
- prompt
- negative_prompt
- notes
Umi Prompt Preset applies one named fragment from prompt_presets.yaml to a prompt and a negative prompt, and hands both back. That's it. The reason to care is that your lighting boilerplate, your portrait scaffold, your negative defaults are all things you've typed forty times and edited into three slightly different versions. A preset file means there's one copy.
How the merge works
Two required inputs, preset and placement, plus optional prompt and negative_prompt (both text, so you can type into them or wire from elsewhere).
placement decides what happens to your positive prompt:
- append - your prompt, then the preset text (the default)
- prepend - preset text first, then yours
- replace - your prompt is thrown away and the preset is the whole positive
One rule that surprises people: the preset's negative is always appended to the incoming negative, whatever placement says. Placement only governs the positive half. If a preset carries worst quality, low quality, bad anatomy as its negative, that lands on top of whatever you typed.
The third output, notes, is a one-line confirmation - literally Preset applied: <name>. Wire it to a preview node if you want proof the widget is pointing where you think it is. If the preset name doesn't resolve, the node passes prompt and negative through untouched and notes comes back empty; it doesn't raise, which is exactly why that output is worth watching.
What ships in the file
Three presets out of the box, all modest on purpose: anime portrait base (1girl, solo, upper body, looking at viewer, detailed eyes with a small negative), studio lighting (soft studio lighting, clean background, balanced composition), and background detail (detailed background, environmental storytelling, coherent perspective, negative empty background, inconsistent perspective). Adding your own is the intended workflow:
# prompt_presets.yaml in the Comfy-UmiAI folder
night rain:
prompt: "rain-slicked street, neon reflections, night"
negative: "flat lighting"
description: "Wet neon night scene."
Restart ComfyUI (or reload the page) after editing - the dropdown is built when the node definition is read, so new names don't appear mid-session.
When to use this node instead of the widget
The Wildcard Processor already has prompt_preset and preset_placement widgets, and there's inline [preset:studio lighting] syntax you can drop anywhere in a prompt. So what's the standalone node for?
- Workflows without the processor. You're on a plain text-encode graph and still want managed fragments.
- Routing. Because placement is a widget, you can drive it from upstream logic - one branch prepends a style, another replaces the prompt outright.
- Preset chaining. Run two preset nodes in series when you want a base scaffold plus a lighting layer, rather than maintaining a preset that's the union of both.
The inline form is nicer inside a complex template, and it also supports [preset:name | include=negative] when you want only the negative half. The standalone node is the one to reach for when the preset choice itself needs to be a decision in the graph.
Install
No separate install - it's core, and the presets file ships with it. ComfyUI Manager (search the pack title) or:
cd ComfyUI/custom_nodes
git clone https://github.com/Tinuva88/Comfy-UmiAI
cd Comfy-UmiAI && pip install -r requirements.txt
pyyaml is mandatory; without it the YAML file doesn't parse and the preset list comes up empty, which looks exactly like "my presets vanished." Restart, then find the node under UmiAI/prompt.
Where people get burned
replace is destructive. It doesn't merge, it substitutes. If your prompt comes back as just soft studio lighting, clean background with your carefully built scene gone, that widget is why.
Preset negatives on distilled models. Appending worst quality, low quality is harmless but pointless at CFG 1, where the negative pass isn't computed at all. Don't spend time tuning preset negatives on a Turbo-style checkpoint; put the constraint in the positive instead.
A silently unknown name. Rename a preset in the YAML and the saved dropdown value from an old workflow no longer resolves. Nothing errors, the fragment just stops appearing - check notes.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| preset | COMBO | anime portrait base | 3 options: anime portrait base, background detail, studio lighting |
| placement | COMBO | append | 3 options: append, prepend, replace |
| promptopt | STRING | — | |
| negative_promptopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| negative_prompt | STRING | — |
| notes | STRING | — |