⚙️ Prompt Property Extractor
Prompt Property Extractor — ComfyUI Node Guide
- model
- clip
- vae
- MODEL
- CLIP
- VAE
- positive
- negative
- latent
- seed
- steps
- cfg
- sampler
- denoise
- start_step
- end_step
- positive
- negative
- other_tags
- resolved_string
- width
- height
The most ambitious node in this pack, and the one its own author calls out as unusually useful without much exaggeration: it lets you describe an entire generation - checkpoint, LoRAs, sampler settings, resolution, even the negative prompt - as tags embedded directly inside a single block of text, then parses that text back out into every wired connection a KSampler needs. Announcing it on r/StableDiffusion, the pack's author described the point of it as letting you drive "the Prompt Property Extractor node, and the KSampler only" for a full image, and the reason it's worth building at all is combining it with wildcards: once your whole configuration lives inside one string, randomizing any part of a generation - not just the prompt, but the checkpoint, the step count, the CFG - becomes exactly as easy as randomizing prompt text with a {a|b|c} wildcard.
The tag vocabulary is long, and the tooltip lists it exhaustively: <checkpoint:name> (or <model:name> / <ckpt:name>), <clip:name>, <vae:name>, <lora:name:weight>, <cfg:value>, <steps:value>, <sampler:name>, <denoise:value>, <width:value> / <height:value> / <resolution:WxH>, <seed:value>, <start_step:value> / <end_step:value>, and <pos:value> / <neg:value> for positive and negative prompt content - multiple <pos> or <neg> tags in one string get joined together with commas. Anything you write outside a recognized tag becomes your prompt text; anything inside an unrecognized tag format gets passed through untouched to the other_tags output instead of silently dropped.
Model-loading priority is the one thing worth reading carefully before you rely on it, because it isn't simply "the tag wins." For CLIP: a <clip:name> tag always wins outright; failing that, if a <checkpoint:name> tag is present and load_clip_from_checkpoint is true, the checkpoint's own CLIP is used; only if neither applies does the wired clip input pin get used. VAE follows the identical three-tier logic with its own load_vae_from_checkpoint toggle. This matters in practice whenever you're mixing a wired-in checkpoint with a <checkpoint:> tag in the text - the tag doesn't just add to what's connected, it can override CLIP and VAE too, depending on those two boolean settings.
Fields a beginner actually sets: input_string is where all the work happens - everything else in the required list (cfg, steps, sampler_name, denoise, width, height, seed, start_step, end_step) is just the default value used whenever the matching tag is absent from your text. load_clip_from_checkpoint and load_vae_from_checkpoint are the two toggles from the priority logic above. The optional model/clip/vae inputs are your fallback sources, lowest priority in the chain described above.
Outputs are dense, and worth reading closely because two pairs share a name across different types: there's a positive output that's a CONDITIONING (the CLIP-encoded version, ready for a sampler) and a separate positive output that's a plain STRING (the same text with tags stripped, for anything that wants the raw prompt rather than an encoding) - same story for negative. Wire by type, not by trusting the label alone. Beyond those, you get the fully resolved MODEL/CLIP/VAE, a latent sized to your resolved width/height, every numeric setting resolved (seed, steps, cfg, sampler, denoise, start_step, end_step), other_tags for anything unrecognized, and resolved_string - wildcards resolved but all tags still present, distinct from the STRING positive output which has tags stripped out entirely.
One honest limitation, straight from the author: in the post introducing this node, its creator flagged that "the only one that doesn't work properly is the Scheduler" - the sampler tags work, but scheduler selection through this parsing path is a known rough edge rather than something fully reliable yet. Worth knowing before you build a workflow that depends on tag-driven scheduler switching specifically.
Installing it: ComfyUI Manager, search "ComfyUI-mnemic-nodes," or git clone https://github.com/MNeMoNiCuZ/ComfyUI-mnemic-nodes into custom_nodes, then restart. No external dependencies beyond what the rest of the pack already needs.
Where it trips people up beyond the scheduler caveat: the model-loading priority order above is genuinely easy to get backwards the first time - if your wired model input doesn't seem to be taking effect, check whether a <checkpoint:> tag is quietly present somewhere in your input_string and overriding it. LoRA tags follow the same fuzzy-matching-by-filename rules as the rest of the pack, so a typo'd LoRA name fails silently rather than throwing an error. And if you need a literal > character inside a tag's value, the tooltip notes you have to escape it as \> or it'll be read as the tag's closing bracket.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| input_string | STRING | Input string with property tags. Supported tags: - <checkpoint:name> | <model:name> | <ckpt:name> - <clip:name> - <vae:name> - <lora:name:weight> - <cfg:value> - <steps:value> | <step:value> - <sampler:name> | <sampler_name:name> - <denoise:value> - <width:value> - <height:value> - <resolution:WxH> | <res:WxH> (e.g. 1024x768) - <seed:value> - <start_step:value> | <start:value> | <start_at_step:value> - <end_step:value> | <end:value> | <end_at_step:value> - <pos:value> | <positive:value> (Positive Prompt - multiple allowed) - <neg:value> | <negative:value> (Negative Prompt - multiple allowed) Note: Multiple <pos> and <neg> tags are combined with ', '. Note: Use \> to include a literal > in tag values (e.g. <neg:(cat:1.5)\, ugly>) | |
| load_clip_from_checkpoint | BOOLEAN | true | Determines CLIP source priority: 1. <clip:name> tag (Highest Priority) 2. Checkpoint CLIP (if <checkpoint> tag exists AND this is True) 3. Input CLIP pin (Lowest Priority) If no <checkpoint> tag is found, this setting is ignored and the Input CLIP is used. |
| load_vae_from_checkpoint | BOOLEAN | true | Determines VAE source priority: 1. <vae:name> tag (Highest Priority) 2. Checkpoint VAE (if <checkpoint> tag exists AND this is True) 3. Input VAE pin (Lowest Priority) If no <checkpoint> tag is found, this setting is ignored and the Input VAE is used. |
| cfg | FLOAT | 8.000–100 | Default CFG scale. Can be overridden by a <cfg:value> tag. |
| steps | INT | 201–10000 | Default number of steps. Can be overridden by a <steps:value> tag. |
| sampler_name | COMBO | Default sampler. Can be overridden by a <sampler:name> tag. | |
| denoise | FLOAT | 1.000–1 | Default denoise value. Can be overridden by a <denoise:value> tag. |
| width | INT | 51264–4096 | Default image width. Can be overridden by a <width:value> tag. |
| height | INT | 51264–4096 | Default image height. Can be overridden by a <height:value> tag. |
| seed | INT | 00–18446744073709550000 | Default seed. Can be overridden by a <seed:value> tag. |
| start_step | INT | 00–10000 | Default start step for KSampler. Can be overridden by a <start_step:value> tag. |
| end_step | INT | 100000–10000 | Default end step for KSampler. Can be overridden by a <end_step:value> tag. |
| modelopt | MODEL | Default MODEL input (Lowest Priority). Overridden by: 1. <checkpoint:name> tag (Highest Priority) | |
| clipopt | CLIP | Default CLIP input (Lowest Priority). Overridden by: 1. <clip:name> tag (Highest Priority) 2. <checkpoint:name> tag CLIP (if load_clip_from_checkpoint is True) | |
| vaeopt | VAE | Default VAE input (Lowest Priority). Overridden by: 1. <vae:name> tag (Highest Priority) 2. <checkpoint:name> tag VAE (if load_vae_from_checkpoint is True) |
Outputs (19)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | The final loaded model after applying checkpoint and LoRA tags. |
| CLIP | CLIP | The final loaded CLIP after applying checkpoint and LoRA tags. |
| VAE | VAE | The final loaded VAE after applying checkpoint and VAE tags. |
| positive | CONDITIONING | The positive conditioning (CLIP encoding of the cleaned string). |
| negative | CONDITIONING | The negative conditioning (CLIP encoding of the <neg:value> or <negative:value> tag). |
| latent | LATENT | A latent tensor with dimensions based on the selected width and height. |
| seed | INT | The final seed value. Tag: <seed:value> |
| steps | INT | The final number of steps. Tags: <steps:value>, <step:value> |
| cfg | FLOAT | The final CFG scale value. Tag: <cfg:value> |
| sampler | euler,euler_cfg_pp,euler_ancestral,euler_ancestral_cfg_pp,heun,heunpp2,exp_heun_2_x0,exp_heun_2_x0_sde,dpm_2,dpm_2_ancestral,lms,dpm_fast,dpm_adaptive,dpmpp_2s_ancestral,dpmpp_2s_ancestral_cfg_pp,dpmpp_sde,dpmpp_sde_gpu,dpmpp_2m,dpmpp_2m_cfg_pp,dpmpp_2m_sde,dpmpp_2m_sde_gpu,dpmpp_2m_sde_heun,dpmpp_2m_sde_heun_gpu,dpmpp_3m_sde,dpmpp_3m_sde_gpu,ddpm,lcm,ipndm,ipndm_v,deis,res_multistep,res_multistep_cfg_pp,res_multistep_ancestral,res_multistep_ancestral_cfg_pp,gradient_estimation,gradient_estimation_cfg_pp,er_sde,seeds_2,seeds_3,sa_solver,sa_solver_pece,ddim,uni_pc,uni_pc_bh2 | The final sampler name. Tags: <sampler:name>, <sampler_name:name> |
| denoise | FLOAT | The final denoise value. Tag: <denoise:value> |
| start_step | INT | The final start_step for KSampler. Tags: <start_step:value>, <start:value>, <start_at_step:value> |
| end_step | INT | The final end_step for KSampler. Tags: <end_step:value>, <end:value>, <end_at_step:value> |
| positive | STRING | The input string with all recognized property tags removed. Wildcard content is included in this string. (Positive Prompt) |
| negative | STRING | The negative prompt string extracted from <neg:value> or <negative:value> tags. |
| other_tags | STRING | A string containing any tags that were not recognized by the parser. |
| resolved_string | STRING | The input string with wildcards resolved but ALL tags still present. |
| width | INT | The final image width. Tags: <width:value>, <resolution:WxH>, <res:WxH> |
| height | INT | The final image height. Tags: <height:value>, <resolution:WxH>, <res:WxH> |