π 2. Artist Prompt Station (Template)
One base prompt, a hundred artist variants, one template
- clip
- positive
- negative
- final_text
ArtistPromptComposer is the second node in the Artist-Tester pack, and it's the one that makes the iterator's output actually useful. It takes your base prompt, an artist tag, and a template, then does all the CLIP encoding for you - positive and negative - and hands you conditioning ready for the KSampler. In a stock graph this replaces a CLIP Text Encode (Prompt) node plus the string-concat dance you'd otherwise do by hand.
What it actually does
Wire in a clip, a positive_base, and an artist_tag, and it builds a prompt like {base}, {artist}, which by default comes out as "masterpiece, best quality, 1girl, solo, portrait, artist:wlop". Then it tokenizes and encodes that with ComfyUI's standard clip.tokenize / encode_from_tokens path - the same thing the built-in text-encode node does under the hood - encodes the negative_prompt separately, and returns both conditionings.
The genuinely nice bit is prompt_template. It's simple string replacement with two placeholders: {base} and {artist}. The README's examples show the point:
{base}, {artist}- artist last, no special treatment{base}, (style of {artist}:1.2)- artist emphasized and weighted(artist:{artist}), {base}- artist up front, locked in as a subject
Because it's just text substitution, you can move the artist anywhere and apply any syntax your model's encoder understands. Leave the template empty and it falls back to {base}, {artist}.
The inputs that matter
clip- required, no default. Wire the CLIP output from your checkpoint loader or CLIPLoader; forget it and the node won't even build.positive_base- your normal prompt, defaulting to the classic "masterpiece, best quality, 1girl, solo, portrait".artist_tag- where the iterator's output lands.prompt_template- discussed above.negative_prompt- the default is the standard SDXL-era blocklist (lowres, bad anatomy, bad hands, watermarkβ¦), a perfectly fine starting point.
Outputs
positive and negative (both CONDITIONING) go straight into your KSampler, and final_text is the fully composed prompt string - that's what you feed to Save Image (Smart Name) as its filename_prefix, so every saved file is named after the artist it was generated with.
The catch: this node lives or dies by your text encoder
This is where the pack shows its target audience. The (style of {artist}:1.2) weight syntax is passed through verbatim and only does anything on CLIP-encoded models - SD 1.5, SDXL, Illustrious, NoobAI, Pony. On the LLM-encoded family (Flux, Anima, Klein, Z-Image), (word:1.3) is silently discarded and the negative prompt is largely ignored, so this composer's whole approach - tag-style prompts with weights and a separate negative - is a CLIP-era tool. If you're on an LLM-encoded model, you'd get more from structured instructions than from this template. For the tag-model crowd it's exactly right, and the negative prompt stays very much alive there.
Installing
Same pack as the iterator: ComfyUI Manager β search "ComfyUI-Artist-Tester", or clone https://github.com/g7b2/ComfyUI-Artist-Tester.git into ComfyUI/custom_nodes and restart. No dependencies, no model downloads - it leans only on ComfyUI's own CLIP encoding. It lives under the "π¨ Artist Tester" category.
Wiring it up
The full loop: ArtistListIterator β artist_tag into this node β positive/negative into KSampler β decode β Save Image (Smart Name) with filename_prefix β final_text. That's a complete artist batch in five nodes, and nothing about the template is hidden state - the composed string is right there in final_text if you ever want to see exactly what you sent the sampler.
One last thing: it's not smart. There's no LLM and no guesswork - {artist} gets replaced with whatever text arrives, so a typo in your list is a typo in your render. For a batch tool, that's a feature: predictable beats clever when you're comparing forty outputs.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | β | |
| positive_base | STRING | masterpiece, best quality, 1girl, solo, portrait | β |
| artist_tag | STRING | β | |
| prompt_template | STRING | {base}, {artist} | β |
| negative_prompt | STRING | lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry | β |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | β |
| negative | CONDITIONING | β |
| final_text | STRING | β |