Nodes/ComfyUI-mnemic-nodes/⚙️ Prompt Property Extractor
ComfyUI Node

⚙️ Prompt Property Extractor

Prompt Property Extractor — ComfyUI Node Guide

By MNeMoNiCuZ·Created 3 years ago·Updated 23 days ago· 105
⚙️ Prompt Property Extractor
  • 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
input_string
load_clip_from_checkpointtrue
load_vae_from_checkpointtrue
cfg8.00
steps20
sampler_name
denoise1.00
width512
height512
seed0
start_step0
end_step10000

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.

Category⚡ MNeMiC Nodes

Inputs (15)

NameTypeDefaultDescription
input_stringSTRINGInput 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_checkpointBOOLEANtrueDetermines 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_checkpointBOOLEANtrueDetermines 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.
cfgFLOAT8.000–100Default CFG scale. Can be overridden by a <cfg:value> tag.
stepsINT201–10000Default number of steps. Can be overridden by a <steps:value> tag.
sampler_nameCOMBODefault sampler. Can be overridden by a <sampler:name> tag.
denoiseFLOAT1.000–1Default denoise value. Can be overridden by a <denoise:value> tag.
widthINT51264–4096Default image width. Can be overridden by a <width:value> tag.
heightINT51264–4096Default image height. Can be overridden by a <height:value> tag.
seedINT00–18446744073709550000Default seed. Can be overridden by a <seed:value> tag.
start_stepINT00–10000Default start step for KSampler. Can be overridden by a <start_step:value> tag.
end_stepINT100000–10000Default end step for KSampler. Can be overridden by a <end_step:value> tag.
modeloptMODELDefault MODEL input (Lowest Priority). Overridden by: 1. <checkpoint:name> tag (Highest Priority)
clipoptCLIPDefault CLIP input (Lowest Priority). Overridden by: 1. <clip:name> tag (Highest Priority) 2. <checkpoint:name> tag CLIP (if load_clip_from_checkpoint is True)
vaeoptVAEDefault 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)

NameTypeDescription
MODELMODELThe final loaded model after applying checkpoint and LoRA tags.
CLIPCLIPThe final loaded CLIP after applying checkpoint and LoRA tags.
VAEVAEThe final loaded VAE after applying checkpoint and VAE tags.
positiveCONDITIONINGThe positive conditioning (CLIP encoding of the cleaned string).
negativeCONDITIONINGThe negative conditioning (CLIP encoding of the <neg:value> or <negative:value> tag).
latentLATENTA latent tensor with dimensions based on the selected width and height.
seedINTThe final seed value. Tag: <seed:value>
stepsINTThe final number of steps. Tags: <steps:value>, <step:value>
cfgFLOATThe final CFG scale value. Tag: <cfg:value>
samplereuler,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_bh2The final sampler name. Tags: <sampler:name>, <sampler_name:name>
denoiseFLOATThe final denoise value. Tag: <denoise:value>
start_stepINTThe final start_step for KSampler. Tags: <start_step:value>, <start:value>, <start_at_step:value>
end_stepINTThe final end_step for KSampler. Tags: <end_step:value>, <end:value>, <end_at_step:value>
positiveSTRINGThe input string with all recognized property tags removed. Wildcard content is included in this string. (Positive Prompt)
negativeSTRINGThe negative prompt string extracted from <neg:value> or <negative:value> tags.
other_tagsSTRINGA string containing any tags that were not recognized by the parser.
resolved_stringSTRINGThe input string with wildcards resolved but ALL tags still present.
widthINTThe final image width. Tags: <width:value>, <resolution:WxH>, <res:WxH>
heightINTThe final image height. Tags: <height:value>, <resolution:WxH>, <res:WxH>