* feat(resolver): trace multi-stage chains through pass-through nodes The inspection resolver (server and local Inspect) now compares a sampler with the earlier sampler its latent continues through image-space pass-through nodes: decode, image filter, model upscale, scale and encode, listed in a new validated `lineage` section of the semantics table. Equal prompts resolve (hires-fix, refiner); different prompts are multistage-differs. A later stage whose positive adds conditioning to the shared base prompt through an additive composite (ConditioningCombine or Concat) keeps the base pair, the text legacy linked (three-stage Flux). Image-edit batches stay ambiguous and run-time text stays untraceable. Ingestion keeps the default profile (D1). A card no longer shows a seed when the inspector names a chain stage whose seed differs from the parser's pick. * feat(resolver): leave out run-time PromptManager parts, labelled Maintainer option A: when a PromptManager prepend_text or append_text is fed directly by a node whose output is decided at run time (LoraManager's TriggerWord Toggle, now a runtime class, or PromptSearchList), the prompt resolves to the node's own text, as legacy showed. The side's source is runtime-parts-omitted and the resolved reason says that text added at run time, such as trigger words, is not included; the prompt block shows that line (D-NEW-R1). The toggle's output is never computed. Literal and traced parts are combined as before; an indirect run-time part, a run-time main text or an unknown feeder keep their outcome. The browser port changes identically. Ingestion is unchanged. * fix(resolver): keep run-time and added-conditioning labels honest A text that left out a run-time PromptManager part is now labelled when any node on its traced path omitted it, so the label survives encoders, concatenations and chained PromptManagers. Comparisons include what a text leaves out, so a partial prompt never equals a complete one: a branch with trigger words and one without stay ambiguous, and such stages are multistage-differs. Only classes listed as run time are left out. The added-conditioning floor labels its positive (D126, "Conditioning added at a later stage is not included."); the run-time line is D125. A card hides its seed only when the stage the inspector names reads a different seed than the parser; an agreeing seed is kept, as on main. The browser port moves its lineage, latent and part helpers into local-resolver-stages.mjs, keeping parity.
285 lines
12 KiB
JSON
285 lines
12 KiB
JSON
{
|
|
"schema": 1,
|
|
"samplers": {
|
|
"KSampler": {
|
|
"strategy": "ksampler",
|
|
"conditioning": { "positive": "positive", "negative": "negative" },
|
|
"latent": "latent_image",
|
|
"facts": "ksampler"
|
|
},
|
|
"KSamplerAdvanced": {
|
|
"strategy": "ksampler",
|
|
"conditioning": { "positive": "positive", "negative": "negative" },
|
|
"latent": "latent_image",
|
|
"facts": "ksampler"
|
|
},
|
|
"SamplerCustom": {
|
|
"strategy": "ksampler",
|
|
"conditioning": { "positive": "positive", "negative": "negative" },
|
|
"latent": "latent_image",
|
|
"facts": "custom"
|
|
},
|
|
"SamplerCustomAdvanced": {
|
|
"strategy": "custom-advanced",
|
|
"conditioning": { "guider": "guider" },
|
|
"latent": "latent_image",
|
|
"facts": "custom-advanced"
|
|
},
|
|
"FaceDetailer": {
|
|
"strategy": "detailer-stage",
|
|
"conditioning": { "positive": "positive", "negative": "negative" },
|
|
"image_stage": "image",
|
|
"facts": "ksampler",
|
|
"prompt_overrides": ["wildcard"]
|
|
},
|
|
"DetailerForEach": {
|
|
"strategy": "detailer-stage",
|
|
"conditioning": { "positive": "positive", "negative": "negative" },
|
|
"image_stage": "image",
|
|
"facts": "ksampler",
|
|
"prompt_overrides": ["wildcard"]
|
|
},
|
|
"UltimateSDUpscale": {
|
|
"strategy": "detailer-stage",
|
|
"conditioning": { "positive": "positive", "negative": "negative" },
|
|
"image_stage": "image",
|
|
"facts": "ksampler"
|
|
},
|
|
"UltimateSDUpscaleNoUpscale": {
|
|
"strategy": "detailer-stage",
|
|
"conditioning": { "positive": "positive", "negative": "negative" },
|
|
"image_stage": "upscaled_image",
|
|
"facts": "ksampler"
|
|
},
|
|
"ClownsharKSampler_Beta": {
|
|
"strategy": "ksampler",
|
|
"conditioning": { "positive": "positive", "negative": "negative" },
|
|
"latent": "latent_image",
|
|
"facts": "ksampler",
|
|
"prompt_overrides": ["options"],
|
|
"fact_overrides": ["options", "sigmas"]
|
|
},
|
|
"KSampler (Efficient)": {
|
|
"strategy": "ksampler",
|
|
"conditioning": { "positive": "positive", "negative": "negative" },
|
|
"latent": "latent_image",
|
|
"facts": "ksampler",
|
|
"prompt_overrides": ["script"],
|
|
"fact_overrides": ["script"]
|
|
},
|
|
"ttN KSampler_v2": {
|
|
"strategy": "ksampler",
|
|
"conditioning": { "positive": "positive", "negative": "negative" },
|
|
"latent": "latent",
|
|
"facts": "ksampler",
|
|
"prompt_overrides": ["adv_xyPlot"],
|
|
"fact_overrides": ["adv_xyPlot"]
|
|
}
|
|
},
|
|
"guiders": {
|
|
"CFGGuider": { "strategy": "cfg", "positive": "positive", "negative": "negative" },
|
|
"BasicGuider": {
|
|
"strategy": "basic",
|
|
"positive": "conditioning",
|
|
"absent_reason": "Guider has no negative input"
|
|
}
|
|
},
|
|
"conditioning": [
|
|
{ "class": "FluxGuidance", "slot": 0, "strategy": "passthrough", "input": "conditioning" },
|
|
{ "class": "ReferenceLatent", "slot": 0, "strategy": "passthrough", "input": "conditioning" },
|
|
{ "class": "ConditioningSetArea", "slot": 0, "strategy": "passthrough", "input": "conditioning" },
|
|
{ "class": "ConditioningSetAreaPercentage", "slot": 0, "strategy": "passthrough", "input": "conditioning" },
|
|
{ "class": "ConditioningSetAreaStrength", "slot": 0, "strategy": "passthrough", "input": "conditioning" },
|
|
{ "class": "ConditioningSetMask", "slot": 0, "strategy": "passthrough", "input": "conditioning" },
|
|
{ "class": "ConditioningSetTimestepRange", "slot": 0, "strategy": "passthrough", "input": "conditioning" },
|
|
{ "class": "ControlNetApply", "slot": 0, "strategy": "passthrough", "input": "conditioning" },
|
|
{ "class": "ControlNetApplyAdvanced", "slot": 0, "strategy": "passthrough", "input": "positive" },
|
|
{ "class": "ControlNetApplyAdvanced", "slot": 1, "strategy": "passthrough", "input": "negative" },
|
|
{ "class": "ControlNetApplySD3", "slot": 0, "strategy": "passthrough", "input": "positive" },
|
|
{ "class": "ControlNetApplySD3", "slot": 1, "strategy": "passthrough", "input": "negative" },
|
|
{ "class": "InpaintModelConditioning", "slot": 0, "strategy": "passthrough", "input": "positive" },
|
|
{ "class": "InpaintModelConditioning", "slot": 1, "strategy": "passthrough", "input": "negative" },
|
|
{ "class": "WanImageToVideo", "slot": 0, "strategy": "passthrough", "input": "positive" },
|
|
{ "class": "WanImageToVideo", "slot": 1, "strategy": "passthrough", "input": "negative" },
|
|
{ "class": "ControlNetInpaintingAliMamaApply", "slot": 0, "strategy": "passthrough", "input": "positive" },
|
|
{ "class": "ControlNetInpaintingAliMamaApply", "slot": 1, "strategy": "passthrough", "input": "negative" },
|
|
{ "class": "LTXVConditioning", "slot": 0, "strategy": "passthrough", "input": "positive" },
|
|
{ "class": "LTXVConditioning", "slot": 1, "strategy": "passthrough", "input": "negative" },
|
|
{ "class": "FluxKontextMultiReferenceLatentMethod", "slot": 0, "strategy": "passthrough", "input": "conditioning" },
|
|
{ "class": "SeedVarianceEnhancer", "slot": 0, "strategy": "passthrough", "input": "conditioning" },
|
|
{ "class": "ApplyInstantIDAdvanced", "slot": 1, "strategy": "passthrough", "input": "positive" },
|
|
{ "class": "ApplyInstantIDAdvanced", "slot": 2, "strategy": "passthrough", "input": "negative" },
|
|
{ "class": "ConditioningZeroOut", "slot": 0, "strategy": "zeroed", "input": "conditioning" }
|
|
],
|
|
"selectors": {
|
|
"easy ifElse": {
|
|
"strategy": "boolean-select",
|
|
"condition": "boolean",
|
|
"branches": { "true": "on_true", "false": "on_false" }
|
|
},
|
|
"Switch conditioning [Crystools]": {
|
|
"strategy": "boolean-select",
|
|
"condition": "boolean",
|
|
"branches": { "true": "on_true", "false": "on_false" }
|
|
}
|
|
},
|
|
"composites": {
|
|
"ConditioningCombine": { "strategy": "combine", "inputs": ["conditioning_1", "conditioning_2"], "additive": true },
|
|
"ConditioningConcat": { "strategy": "combine", "inputs": ["conditioning_to", "conditioning_from"], "additive": true },
|
|
"ConditioningAverage": { "strategy": "combine", "inputs": ["conditioning_to", "conditioning_from"] }
|
|
},
|
|
"encoders": [
|
|
{ "class": "CLIPTextEncode", "slot": 0, "strategy": "single", "inputs": ["text"] },
|
|
{ "class": "CLIPTextEncodeSDXL", "slot": 0, "strategy": "parts-equal", "inputs": ["text_g", "text_l"] },
|
|
{ "class": "CLIPTextEncodeFlux", "slot": 0, "strategy": "parts-equal", "inputs": ["clip_l", "t5xxl"] },
|
|
{ "class": "CLIPTextEncodeSD3", "slot": 0, "strategy": "parts-equal", "inputs": ["clip_l", "clip_g", "t5xxl"] },
|
|
{ "class": "TextEncodeQwenImageEdit", "slot": 0, "strategy": "single", "inputs": ["prompt"] },
|
|
{ "class": "TextEncodeQwenImageEditPlus", "slot": 0, "strategy": "single", "inputs": ["prompt"] },
|
|
{ "class": "TextEncodeQwenImage21", "slot": 0, "strategy": "single", "inputs": ["prompt"] },
|
|
{ "class": "TextEncodeQwenImage21", "slot": 1, "strategy": "single", "inputs": ["negative_prompt"] },
|
|
{ "class": "KikoTextEncode", "slot": 0, "strategy": "single", "inputs": ["text"] },
|
|
{ "class": "Text to Conditioning", "slot": 0, "strategy": "single", "inputs": ["text"] },
|
|
{
|
|
"class": "smZ CLIPTextEncode",
|
|
"slot": 0,
|
|
"strategy": "flag-parts",
|
|
"inputs": ["text", "text_g", "text_l"],
|
|
"params": { "flag": "with_SDXL" }
|
|
}
|
|
],
|
|
"strings": [
|
|
{ "class": "StringConstant", "slot": 0, "strategy": "literal", "inputs": ["string"] },
|
|
{ "class": "TextInput", "slot": 0, "strategy": "literal", "inputs": ["text"] },
|
|
{ "class": "DisplayText", "slot": 0, "strategy": "literal", "inputs": ["text"] },
|
|
{ "class": "ttN text", "slot": 0, "strategy": "literal", "inputs": ["text"] },
|
|
{ "class": "CR Text", "slot": 0, "strategy": "literal", "inputs": ["text"] },
|
|
{ "class": "CR Prompt Text", "slot": 0, "strategy": "literal", "inputs": ["prompt"] },
|
|
{ "class": "TextBoxMira", "slot": 0, "strategy": "literal", "inputs": ["text"] },
|
|
{
|
|
"class": "StringConstantMultiline",
|
|
"slot": 0,
|
|
"strategy": "strip-newlines",
|
|
"inputs": ["string"],
|
|
"params": { "flag": "strip_newlines" }
|
|
},
|
|
{
|
|
"class": "JoinStringMulti",
|
|
"slot": 0,
|
|
"strategy": "join-multi",
|
|
"inputs": ["string_1"],
|
|
"params": {
|
|
"count": "inputcount",
|
|
"delimiter": "delimiter",
|
|
"list_flag": "return_list",
|
|
"input_prefix": "string_"
|
|
}
|
|
}
|
|
],
|
|
"runtime": ["PromptSearchList", "TriggerWord Toggle (LoraManager)"],
|
|
"savers": {
|
|
"SaveImage": {
|
|
"strategy": "comfy-counter",
|
|
"prefix_input": "filename_prefix",
|
|
"image_input": "images",
|
|
"pattern": "{name}_{counter:05}_.{ext}"
|
|
},
|
|
"SaveAnimatedWEBP": {
|
|
"strategy": "comfy-counter",
|
|
"prefix_input": "filename_prefix",
|
|
"image_input": "images",
|
|
"pattern": "{name}_{counter:05}_.{ext}"
|
|
},
|
|
"SaveAnimatedPNG": {
|
|
"strategy": "comfy-counter",
|
|
"prefix_input": "filename_prefix",
|
|
"image_input": "images",
|
|
"pattern": "{name}_{counter:05}_.{ext}"
|
|
},
|
|
"SaveVideo": {
|
|
"strategy": "comfy-counter",
|
|
"prefix_input": "filename_prefix",
|
|
"image_input": "video",
|
|
"pattern": "{name}_{counter:05}_.{ext}"
|
|
},
|
|
"SaveWEBM": {
|
|
"strategy": "comfy-counter",
|
|
"prefix_input": "filename_prefix",
|
|
"image_input": "images",
|
|
"pattern": "{name}_{counter:05}_.{ext}"
|
|
},
|
|
"VHS_VideoCombine": {
|
|
"strategy": "vhs-counter",
|
|
"prefix_input": "filename_prefix",
|
|
"image_input": "images",
|
|
"pattern": "{name}_{counter:05}.{ext}"
|
|
}
|
|
},
|
|
"non_file_outputs": ["PreviewImage", "PreviewAny", "SaveImageWebsocket", "Image Comparer (rgthree)"],
|
|
"lineage": [
|
|
{ "class": "VAEDecode", "slot": 0, "strategy": "continue", "input": "samples" },
|
|
{ "class": "VAEDecodeTiled", "slot": 0, "strategy": "continue", "input": "samples" },
|
|
{ "class": "VAEEncode", "slot": 0, "strategy": "continue", "input": "pixels" },
|
|
{ "class": "VAEEncodeTiled", "slot": 0, "strategy": "continue", "input": "pixels" },
|
|
{ "class": "ImageUpscaleWithModel", "slot": 0, "strategy": "continue", "input": "image" },
|
|
{ "class": "ImageScale", "slot": 0, "strategy": "continue", "input": "image" },
|
|
{ "class": "ImageScaleBy", "slot": 0, "strategy": "continue", "input": "image" },
|
|
{ "class": "ImageScaleToTotalPixels", "slot": 0, "strategy": "continue", "input": "image" },
|
|
{ "class": "LatentUpscale", "slot": 0, "strategy": "continue", "input": "samples" },
|
|
{ "class": "LatentUpscaleBy", "slot": 0, "strategy": "continue", "input": "samples" },
|
|
{ "class": "Image Filter", "slot": 0, "strategy": "continue", "input": "images" },
|
|
{ "class": "Image Filter", "slot": 1, "strategy": "continue", "input": "latents" }
|
|
],
|
|
"stage_inputs": {
|
|
"shaped": [
|
|
"latent_image",
|
|
"guider",
|
|
"positive",
|
|
"negative",
|
|
"pipe",
|
|
"basic_pipe",
|
|
"detailer_pipe",
|
|
"sampler",
|
|
"sigmas",
|
|
"noise",
|
|
"text_embeds",
|
|
"hyvid_embeds"
|
|
],
|
|
"with_model": ["conditioning", "neg_conditioning", "samples", "latent"]
|
|
},
|
|
"facts": {
|
|
"configuration_outputs": {
|
|
"RandomNoise": { "kind": "noise", "fields": ["noise_seed"] },
|
|
"KSamplerSelect": { "kind": "sampler", "fields": ["sampler_name"] },
|
|
"BasicScheduler": { "kind": "sigmas", "fields": ["steps", "scheduler"] },
|
|
"Flux2Scheduler": { "kind": "sigmas", "fields": ["steps"], "type_fields": ["scheduler"] },
|
|
"CFGGuider": { "kind": "guider", "fields": ["cfg", "model"] },
|
|
"BasicGuider": { "kind": "guider", "fields": ["model"] }
|
|
},
|
|
"model_outputs": {
|
|
"CheckpointLoader": "ckpt_name",
|
|
"CheckpointLoaderSimple": "ckpt_name",
|
|
"unCLIPCheckpointLoader": "ckpt_name",
|
|
"UNETLoader": "unet_name"
|
|
},
|
|
"model_passthroughs": [
|
|
"LoraLoader",
|
|
"LoraLoaderModelOnly",
|
|
"ModelSamplingFlux",
|
|
"ModelSamplingAuraFlow",
|
|
"ModelSamplingSD3",
|
|
"Lora Loader (LoraManager)",
|
|
"Power Lora Loader (rgthree)",
|
|
"ModelPatchTorchSettings",
|
|
"CFGNorm",
|
|
"PerturbedAttentionGuidance",
|
|
"CR Apply LoRA Stack"
|
|
],
|
|
"scalar_outputs": {
|
|
"PrimitiveInt": "number",
|
|
"PrimitiveFloat": "number",
|
|
"PrimitiveString": "string",
|
|
"PrimitiveStringMultiline": "string"
|
|
}
|
|
}
|
|
}
|