⚗ Alchemica · Prompt enhancer (text encoder) [1.0, use Alchemica Prompt Enhancer (Krea 2 text encoder)]
Krea 2's own text encoder writes your prompt — no Ollama, no API key, no copy-paste
- clip
- immagine
- scena
- dettaglio
- negativo
- report
Every "prompt enhancer" node you've seen either phones an API or wants you to run a 7B instruct model alongside your sampler. This one cheats: the text encoder you already load for Krea 2 is a language model - Qwen3-VL-4B - so it can write the prompt on its way to encoding it. No Ollama, no key, no second download.
How it works
You give it an idea, in any language, a few words is fine. It calls the text encoder's generate path, the model writes an English prompt, and the node returns three strings split by role:
- scena - subject, pose, framing, setting, light, colours, style.
- dettaglio - the rendering half: skin, fabric, material, optics.
- negativo - the things to avoid, for NAG.
- report - what happened, including which sentences a rule filter removed.
The split isn't decoration, it's the same scene/detail logic the ⚗ Two-phase prompt node formalises. And because Qwen3-VL is a vision-language model, it can work from a reference image too: connect anything to the optional immagine input and leave idea empty, and it describes the picture instead of illustrating your sentence.
The fields you'll touch
idea - multiline, any language. Empty + no image is an error ("write an idea or connect an image"), not an empty prompt.
stile - eight presets that steer the register: foto realistica, ritratto, still life / laboratorio, paesaggio, architettura, cinematografico, illustrazione, libero. libero (free) is the one that lets the model do what it wants.
parole - target length of the SCENE, 30–200, default 80. The detail text comes out about a third of that.
creativita - 0 to 1.5, default 0. At 0 the enhancer is deterministic: same idea, same text, every run. That's the setting you want while you're tuning a sampler, because otherwise you can't tell whether a change came from your settings or from the prompt being rewritten. At 0.6–0.9 you get variations - and then seed starts mattering. Bump the seed for a different take.
immagine (optional) - visual reference.
What's baked into its rules
The prompt it produces is constrained, and the constraints come out of the author's measurements rather than taste. No words that paint water drops on skin. No "imperfections" (they render as bumps). No negations in the positive text - at CFG 1 a negation drags in the thing it negates. Consistent optics. A filter drops any generated sentence that breaks a rule, and the report output tells you what got removed, which is genuinely useful the first few times because it teaches you the model's blind spots.
Wiring
⚗ Load Krea 2 · clip → ⚗ Prompt enhancer · clip
scena ──────────→ ⚗ Two-phase prompt · scena
dettaglio ──────→ ⚗ Two-phase prompt · dettaglio
negativo ───────→ ⚗ Text / NAG · negativo
You can also feed scena straight into a single-prompt sampler if you're not using two-phase, or read the strings in a text preview node. The report output is a STRING; hook it to ShowText if you want to see the filter's work.
Installing
Part of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Nessuno76/ComfyUI-AlchemicaSampler
Restart the ComfyUI server. The hard requirement here is ComfyUI 0.36.0 or newer - the enhancer uses CLIP.generate, which older builds don't expose. If the pack's "complete" nodes fail to load, __init__.py catches the error and prints Pro nodes NOT loaded / complete-package nodes NOT loaded to the console with the traceback; that message is your first place to look.
Traps
First run feels broken. It isn't - the text encoder has to load and write the prompt, and after that the model reloads for sampling. Later runs reuse the cached text. The pack's own quick start calls this out because it looks exactly like a hang.
Changing the idea invalidates the cache. The prompt is cached until the idea changes. Editing one word means paying the generation cost again.
Creativity above 0 without a fixed seed. You'll get a new prompt and a new image, and you'll never be able to attribute either. Set creativita to 0 for anything reproducible.
Explicit ideas. Qwen3-VL's instruct variant carries the usual assistant refusals, and it's the same encoder being asked to write rather than merely embed - so a subject it declines to describe is a real failure mode. The community's answer to this in captioning work is abliterated Qwen3-VL builds; here you're stuck with the encoder Krea 2 ships. Keep the idea specific rather than loaded with keywords and it behaves.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | Krea 2's text encoder: it writes the prompt, then encodes it | |
| idea | STRING | Any language, a few words are enough. Empty + image = describes the image | |
| stile | COMBO | foto realistica | 8 options: foto realistica, ritratto, still life / laboratorio, paesaggio, architettura, cinematografico, +2 |
| parole | INT | 8030–200 | Length of the SCENE (the detail is about 30-50% of it) |
| creativita | FLOAT | 0.000–1.5 | 0 = deterministic (same text every run). 0.6-0.9 = variations; change the seed |
| seed | INT | 00–18446744073709550000 | Only matters when creativita (creativity) > 0 |
| immagineopt | IMAGE | Visual reference: the model looks at it (Qwen3-VL is a vision-language model) | |
| pelleopt | COMBO | liscia (senza peluria) | Skin rendering in the DETAIL. smooth = no body/vellus hair (also added to the negative); natural = fine vellus hair (the 1.0.0 behaviour); model decides = hair not mentioned |
| istruzioniopt | STRING | Your own extra instructions for the enhancer, any language. They are added to its rules and win when they conflict. E.g. 'Skin: smooth, tanned. Always golden hour light.' |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| scena | STRING | — |
| dettaglio | STRING | — |
| negativo | STRING | — |
| report | STRING | — |