Nodes/PG Nodes/Lazy Prompt (ext)
ComfyUI Node

Lazy Prompt (ext)

The Lazy Prompt node that hands you back your own text

By GizmoR13·Created 11 months ago·Updated 11 months ago· 16
Lazy Prompt (ext)
  • clip
  • POS_OUT
  • NEG_OUT
  • pos_raw
  • neg_raw
positive
negative

Lazy Prompt (ext) is the version of PG Nodes' signature node that gives you your prompts back. The plain Lazy Prompt encodes your text and quietly saves every run to a global history file. This "ext" variant does the same thing, but it also exposes the exact strings it encoded as pos_raw and neg_raw outputs, so another node can read, transform, or log what actually went into the sampler.

That history is the real reason people reach for this pack at all. The author - GizmoR13 (Piotr Gredka), a ComfyUI newcomer who built these nodes for himself a couple months after starting - posted the pack to r/StableDiffusion in September 2025, and the comment that best sums up the reaction was: the value is "globally accessible prompt history" across all your workflows. Most ComfyUI setups keep prompts locked inside each workflow's textbox. Lazy Prompt flips that: every prompt you've ever run is one dropdown away in any future graph.

How it works

Under the hood it's just CLIPTextEncode with a save step. You feed it a clip and two multiline strings (positive, negative); it encodes both into conditioning and writes a JSON record - positive, negative, timestamp, hit count - to a history file on disk. Default location is custom_nodes\prompt_history.json, capped at 500 entries with an LRU trim. If both fields are empty, it skips the save, which is a nice touch.

Two things make it feel alive:

  • Inline randomizer. Write {red|blue|green} in your prompt and each run picks one. Nested braces work, and backslash escapes keep literal braces. Because a random result changes the output, the node marks itself changed on every queue when it detects choice syntax, so it reruns instead of caching.
  • The ext outputs. pos_raw and neg_raw are plain STRING outputs carrying the text after the randomizer expanded it - the literal string that got encoded. Feed them into a text display node, a logger, or another node that wants the actual prompt text. That's the whole point of "ext": interoperability.

The inputs that matter

There are exactly three, and you set all of them:

  • clip - your CLIP model, straight from a loader.
  • positive / negative - your prompts. Multiline, so paste freely.

Outputs: POS_OUT and NEG_OUT (conditioning) go into your sampler; pos_raw / neg_raw (strings) go wherever you need the text. It's an output node, so it marks the graph complete on its own.

Install

Install the pack once and every PG node comes with it:

ComfyUI Manager → search "PG Nodes" → Install → restart

or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/GizmoR13/PG-Nodes
# rename the folder to PG-nodes
# restart ComfyUI

No model downloads, no extra pip dependencies - the pack is pure Python on top of ComfyUI's own APIs. That's rarer than it should be in this ecosystem.

Common issues

  • History path or cap too small. Right-click the node (⋯) → context menu, and you can point the history file anywhere and raise max_entries. The cap default of 500 is fine until it isn't.
  • Prompt not saved. Both fields empty = no save. That's by design, not a bug.
  • Randomizer not re-rolling. The re-roll is on by default; the env var PG_REROLL=0 turns it off if you want deterministic behavior.
  • Config maps not loading. The lighting/lens/time maps live in PG_Lazy_Prompt_Config.json inside the pack folder; the env var PG_CFG_PATH overrides its location if you moved it.

One honest caveat: the "ext" strings reflect what you typed after expansion, so if you're logging raw input, grab them before the randomizer splits things. Minor, but it'll save you a confused five minutes.

CategoryPG

Inputs (3)

NameTypeDefaultDescription
clipCLIP
positiveSTRING
negativeSTRING

Outputs (4)

NameTypeDescription
POS_OUTCONDITIONING
NEG_OUTCONDITIONING
pos_rawSTRING
neg_rawSTRING