๐ Aesthetic Alchemist
Blend two aesthetics into one prompt, with weights
- aesthetic
Aesthetic Alchemist is the node that answers "what happens if I cross Gothic Glam with Cottagecore?" It's a style blender: pick two aesthetics, dial their strengths independently, and it hands back a combined prompt phrase that carries both vibes. If Quality Queen is your baseline and Scene Seductress is your camera, this is your fashion sense.
The styles are genuinely curated rather than random tag soup - Alt Streetwear, Provocative Nightlife, Cyberpunk, Nu-Goth, Grunge, Y2K, Academia, Innocent, Mesh & Fishnets, and a dozen more, each defined as a hand-written phrase list in feature_lists/aesthetic_alchemist.yaml. That curation is the whole value proposition: you get 18 coherent aesthetics without hunting through wildcard files.
How it works
The node loads its style definitions from YAML at startup and, on each run, looks up the two styles you selected and concatenates their text. Two details make it worth understanding:
- fem/masc pools. Every aesthetic has both a feminine and masculine variant (
aesthetic_1_fem/aesthetic_2_femselect which list a style draws from). Same style name, different phrasing, so the gender framing actually shows up in the prompt text rather than being implied. - Weighted blending. Each style has a strength slider from 0.0 to 2.0. A strength of exactly 1.0 emits the phrase bare; anything else wraps it in SD weight syntax -
(base:0.6)to soften,(base:1.4)to push it harder. Setting a strength to 0 skips that style entirely, which is a clean way to run single-aesthetic mode.
Random handling is polite, too: if both aesthetics are Random, the second pick deliberately avoids duplicating the first, so you get a genuine blend rather than one style twice.
The fields that matter
aesthetic_1/aesthetic_2- the two styles. One of the two is usually enough to start; leave the other atNoneorRandom.aesthetic_1_strength/aesthetic_2_strength- 0.0โ2.0 weighting per style.aesthetic_1_fem/aesthetic_2_fem- fem vs masc phrasing pool.extra- custom text, wildcard-capable;extra_inputchains another node's output in front of it.
Output is aesthetic (an AESTHETIC_STRING), which feeds the aesthetic input on ๐งฌ Encoding Enchantress. As with the rest of the pack, that's the supported destination - these typed strings aren't meant for a stock CLIP Text Encode node.
The caveat about weights
Same story as Scene Seductress: the (base:weight) syntax is respected by the SDXL lineage and ignored by Flux-class LLM-encoded models. So on a modern model, strength below 1 vs above 1 is effectively no-op, and the blending becomes "two phrases concatenated" rather than "weighted blend." On anime SDXL models the sliders do real work - that's where this node earns its keep.
Installing it
It's part of ComfyUI-Violet-Tools, so install the pack once - via ComfyUI Manager (search Violet Tools) or:
cd ComfyUI/custom_nodes
git clone https://github.com/leylahviolet/ComfyUI-Violet-Tools.git
Restart ComfyUI; the node sits under Violet Tools ๐
โ Prompt. No model files, no API keys. Dependencies are PyYAML, rapidfuzz, and requests, which Manager handles.
Where people get tripped up
The most common confusion is expecting a strength of 2.0 to "double" the style - it doesn't, it's a linear weight multiplier on one phrase. And because Random re-rolls every execution, a workflow you saved with "Random" in both slots will produce a different blend on every queue. Pin the aesthetics you care about; that's also how you keep a character's style consistent across a batch. If you're on a non-SDXL model, set both strengths to 1.0 and treat the sliders as irrelevant.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| aesthetic_1 | COMBO | Random | 18 options: None, Random, Alt Streetwear, Provocative Nightlife, Cottagecore, Innocent, +12 |
| aesthetic_1_fem | COMBO | fem | Choose list for aesthetic_1 |
| aesthetic_1_strength | FLOAT | 1.000โ2 | โ |
| aesthetic_2 | COMBO | Alt Streetwear | 18 options: None, Random, Alt Streetwear, Provocative Nightlife, Cottagecore, Innocent, +12 |
| aesthetic_2_fem | COMBO | fem | Choose list for aesthetic_2 |
| aesthetic_2_strength | FLOAT | 1.000โ2 | โ |
| extra | STRING | โ | |
| extra_inputopt | STRING | Optional chained input - will be prepended to extra field with ', ' |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| aesthetic | AESTHETIC_STRING | โ |