Nodes/ComfyUI-Artist-Tester/πŸ‘‰ 2. Artist Prompt Station (Template)
ComfyUI Node

πŸ‘‰ 2. Artist Prompt Station (Template)

One base prompt, a hundred artist variants, one template

By g7b2Β·Created 9 months agoΒ·Updated 9 months agoΒ· 0
πŸ‘‰ 2. Artist Prompt Station (Template)
  • clip
  • positive
  • negative
  • final_text
β—„positive_basemasterpiece, best quality, 1girl, solo, portraitβ–Ί
β—„artist_tagβ–Ί
β—„prompt_template{base}, {artist}β–Ί
β—„negative_promptlowres, 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β–Ί

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.

Category🎨 Artist Tester

Inputs (5)

NameTypeDefaultDescription
clipCLIPβ€”
positive_baseSTRINGmasterpiece, best quality, 1girl, solo, portraitβ€”
artist_tagSTRINGβ€”
prompt_templateSTRING{base}, {artist}β€”
negative_promptSTRINGlowres, 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)

NameTypeDescription
positiveCONDITIONINGβ€”
negativeCONDITIONINGβ€”
final_textSTRINGβ€”