Prompto Recipe
One saved prompt, nine wires into your KSampler
- positive
- negative
- seed
- steps
- cfg
- width
- height
- sampler
- scheduler
You don't strictly need this node to make an image. You need it the fourth time you rebuild the same prompt - the masterpiece, best quality, very aesthetic opener, the negative you finally got right, the 832×1216 that this model actually likes - from memory, because last week's version was better and you can't remember what changed.
Prompto Recipe turns one entry from a prompt library into a node. Its prompt, negative, seed, steps, CFG, sampler, scheduler and size all come out as separate outputs, so the whole recipe is one block you drop in front of any KSampler and stop hand-editing.
What it is
This is the anchor node of ComfyUI-Prompto, the ComfyUI half of Prompto: a Chrome extension for collecting prompts, image recipes and character tags. The library lives in the browser; the extension syncs a snapshot down, and these nodes read it. That framing matters, because a prompt library is the thing people keep half-solving with sticky notes and one workflow per idea, then hitting the point where they're staring at an old render asking which of those workflows had that prompt in it.
Prompto Recipe answers that by making the recipe portable. Same recipe, any workflow.
How it works
At queue time the node looks up the item in the library snapshot Prompto last pushed - ComfyUI/user/prompto/library.json, read-only on the ComfyUI side. Nothing is fetched, no API, no key. The dropdown options are built when ComfyUI loads node definitions, which is why pressing R (or refreshing the page) is how new recipes appear after you add something in Chrome.
roll is the wildcard seed, not the image seed. It expands {a|b} choices and __snippet__ references in the prompt, and it expands the negative at roll + 1 - a small detail that stops both halves of the prompt changing in lockstep.
Renaming a recipe in Chrome doesn't break saved workflows. The snapshot carries the earlier labels of anything renamed (up to 500 per kind), and the node resolves the name it was saved with. Deleted items are different: the node runs and then raises a plain ValueError telling you it can't find the recipe and to press R - it deliberately skips ComfyUI's validation stage so a browser-side rename never blocks your queue.
The inputs that actually matter
Three, and you'll touch two of them:
- recipe - the numbered entry,
No. 001 · Rainy neon alleystyle. The number is the recipe's own numbering from Prompto, so it survives retitling. - roll - pinned to
fixedby default. That's deliberate: a saved workflow keeps the roll it had. Put it onrandomizewhen you want a fresh variation each queue. - profile - leave it on
(recipe's own)and you get the recipe as written. Pick a model profile and the node rewrites it for that model: the profile's prompt and sampler settings, the recipe's seed. More on that in Prompto Profile.
Outputs: positive and negative (into your CLIP Text Encode nodes), seed, steps, cfg (into the KSampler), width and height (into an Empty Latent), and sampler / scheduler as properly typed dropdown values. Nine wires, one source of truth.
Install
It's on the Comfy Registry, so ComfyUI Manager → search Prompto works. The README's preferred route is the manual one, and it's the one that can't go wrong:
cd ComfyUI/custom_nodes
git clone https://github.com/EY4O/ComfyUI-Prompto.git
Restart ComfyUI. There are no Python dependencies past ComfyUI itself - pyproject.toml declares an empty dependency list, so there's no requirements step and no build to wait on. No model downloads either.
You can run it before you've installed anything from Chrome: the pack ships four sample recipes in samples.json, and the example workflows in example_workflows/ use them.
Where people get burned
Sampler names that aren't installed fall back silently. The node checks the recipe's sampler against comfy.samplers.KSampler.SAMPLERS and, if it isn't there, hands you the first entry in that list without complaint. Your recipe says one thing, your graph quietly does another. If a recipe looks like it's rendering differently than it should, check the sampler that actually landed on the KSampler.
The extension is the library. Prompto isn't published yet, so you load it unpacked (chrome://extensions → Developer mode → Load unpacked). Without it, you're on the samples forever and the sample recipe names are all you get in the dropdown.
Press R. Nine out of ten "my new recipe isn't in the list" reports are this. The node's options were frozen when the page loaded; the sync happened after.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| recipe | COMBO | 4 options: No. 001 · Rainy neon alley, No. 002 · Greenhouse morning, No. 003 · Hand-painted shop sign, No. 004 · Deck of the Gull | |
| roll | INT | 10–4294967295 | Seed for {a|b} and __snippet__ wildcards in the recipe |
| profile | COMBO | Write the recipe for another model: that profile's prompt and sampler settings, the recipe's seed |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| positive | STRING | — |
| negative | STRING | — |
| seed | INT | — |
| steps | INT | — |
| cfg | FLOAT | — |
| width | INT | — |
| height | INT | — |
| sampler | euler,euler_cfg_pp,euler_ancestral,euler_ancestral_cfg_pp,heun,heunpp2,exp_heun_2_x0,exp_heun_2_x0_sde,dpm_2,dpm_2_ancestral,lms,dpm_fast,dpm_adaptive,dpmpp_2s_ancestral,dpmpp_2s_ancestral_cfg_pp,dpmpp_sde,dpmpp_sde_gpu,dpmpp_2m,dpmpp_2m_cfg_pp,dpmpp_2m_sde,dpmpp_2m_sde_gpu,dpmpp_2m_sde_heun,dpmpp_2m_sde_heun_gpu,dpmpp_3m_sde,dpmpp_3m_sde_gpu,ddpm,lcm,ipndm,ipndm_v,deis,res_multistep,res_multistep_cfg_pp,res_multistep_ancestral,res_multistep_ancestral_cfg_pp,gradient_estimation,gradient_estimation_cfg_pp,er_sde,seeds_2,seeds_3,sa_solver,sa_solver_pece,ddim,uni_pc,uni_pc_bh2 | — |
| scheduler | simple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal | — |