Nodes/Kinburg-Nodes/Chimera (Multi-Sampler) 🦁
ComfyUI Node

Chimera (Multi-Sampler) 🦁

Multi-stage sampler: run two (or more) 'Sampler Settings' bundles over ONE image with an explicit step budget. 'continuous' handoff builds a single sigma schedule and gives each stage a slice of it β€” stage 2 resumes exactly where stage 1 stopped without re-noising (like chaining KSampler Advanced by start/end step), so each segment can use its own sampler, cfg and eta. Put the boundary where you like: from each stage's own steps, at a step number, at a percentage of the steps, or at a noise level (sigma). Also reports its OWN sampling time (per stage and total), measured inside the node β€” unlike Start/Stop Timer it can't be skewed by how ComfyUI schedules other branches of the graph. 'gen_extra_info' carries what it resolved at run time; wire it into a Generation Info node's 'extra' input to add it to that branch's settings dump.

By KinburgΒ·Created 2 months agoΒ·Updated 3 days agoΒ· 1
Chimera (Multi-Sampler) 🦁
  • model
  • positive
  • negative
  • latent_image
  • stage_a
  • stage_b
  • model_negative
  • guider
  • sigmas
  • model_b
  • positive_b
  • negative_b
  • latent
  • handoff_latent
  • handoff_denoised
  • report
  • gen_extra_info
  • time
  • seconds
β—„handoffcontinuousβ–Ί
β—„step_splitstage stepsβ–Ί
β—„total_steps0β–Ί
β—„handoff_step0β–Ί
β—„split_percent60β–Ί
β—„handoff_sigma0.50β–Ί
β—„verbosetrueβ–Ί
CategoryKinburg-Nodes/Bestiary/Chimera

Inputs (19)

NameTypeDefaultDescription
modelMODELβ€”
positiveCONDITIONINGβ€”
negativeCONDITIONINGβ€”
latent_imageLATENTβ€”
stage_aKINBURG_SAMPLER_CFGFirst stage — a 'Sampler Settings' bundle. Wire a second one into 'stage_b' for two-stage sampling (a chain of Sampler Settings also works and is flattened into stages, left→right). NOTE: 'seed_mode' / 'seed_step' on the Settings node are Ouroboros-loop dials and are ignored here — only 'seed' is used.
handoffCOMBOcontinuousHow stage 2+ picks up from stage 1. β€’ continuous (recommended) β€” ONE schedule is built and each stage runs a slice of it; later stages add NO fresh noise and resume exactly where the previous one stopped. The run is one honest traversal of one noise trajectory with different samplers/cfg/eta per segment. The shared curve takes its scheduler + denoise from STAGE A (a later stage's own denoise is ignored; a different scheduler is spliced in β€” see the report). β€’ restart β€” the classic 'two KSamplers' pattern: every stage builds its own schedule and adds its own noise, so stage 2+ NEEDS denoise<1 or it will destroy stage 1's image. A different effect (img2img refine), not a better or worse one.
step_splitCOMBOstage stepsWHERE the boundary between the stages falls. The last three are the same decision in different units β€” pick whichever unit you're thinking in. β€’ stage steps β€” each stage runs exactly the 'steps' it declares; the curve is their sum (unless total_steps overrides it). β€’ at step β€” cut total_steps at 'handoff_step': stage 1 gets that many steps, the rest gets the remainder. Same unit as above, but the boundary is on THIS node, so you can sweep it without editing the Sampler Settings. β€’ at percent β€” the same cut as a percentage OF THE STEPS: 60% of 30 steps β†’ 18 / 12. (It divides steps, not the sigma range.) β€’ at sigma β€” the cut lands where the NOISE LEVEL crosses 'handoff_sigma'. Use it when the stages run different schedulers, or to keep the boundary in the same place as you change the step count: step numbers aren't comparable across schedules, noise levels are. The last three ignore the 'steps' set inside the Sampler Settings nodes.
total_stepsINT00–10000Length of the shared schedule. 0 = auto (the sum of the stages' own 'steps'). In the 'stage steps' split, setting this LONGER than the sum leaves the tail of the curve unwalked, so the result keeps residual noise on purpose (reported). Shorter than the sum β†’ the last stages get clipped.
handoff_stepINT00–10000'at step' split only: how many steps the FIRST stage runs; everything left goes to the rest. 0 = halfway. Clamped so both sides always get at least one step.
split_percentFLOAT600–100'at percent' split only: the share OF THE STEPS given to the FIRST stage (60 β†’ 18/12 out of 30). Both sides always get at least one step.
handoff_sigmaFLOAT0.500–1000'at sigma' split only: hand over to the next stage once the noise level has fallen to this sigma. The scale is MODEL-dependent: flow-matching models (Flux / SD3 / Krea) run 1.0 β†’ 0, so the useful range is 0..1 and the 0.5 default sits mid-trajectory; SD / SDXL run from about 14.6, where you'd want single digits instead. The report prints the curve's actual range and the sigma the split landed on, so one run tells you the scale you're working in.
stage_boptKINBURG_SAMPLER_CFGSecond stage β€” another 'Sampler Settings' bundle. Leave empty to run stage A alone (a plain single-pass sampler).
model_negativeoptMODELSecond model for the UNCONDITIONAL (negative) pass β€” for checkpoints shipped as a model + uncond-model pair, such as Ideogram. The dual-model guider is built PER STAGE from that stage's conditioning and cfg, so 'positive_b' and per-stage cfg keep working (wiring a ready-made 'Dual Model CFG Guider' into 'guider' instead would freeze both). NOTE: at cfg 1.0 the guider skips the unconditional pass entirely and this model does nothing β€” use a cfg above 1.
guideroptGUIDEREscape hatch for ANY custom guider (Dual CFG, CFG++, a hand-rolled one…). It carries its own model, conditioning and cfg, so this node's 'positive' / 'negative' / 'positive_b' and every stage's cfg are IGNORED while it's wired (the report says so). The sigma curve is built from the guider's own model. Takes precedence over 'model_negative'. For the common Ideogram case use 'model_negative' instead β€” it keeps the per-stage prompts working.
sigmasoptSIGMASExternal noise schedule, replacing the one this node builds. 'total_steps' and every stage's scheduler and denoise are then IGNORED (reported) β€” the curve is given. Splitting still works exactly the same: all four 'step_split' modes just slice the supplied curve, so you can pair any scheduler node with staged sampling.
model_boptMODELOptional model for stage 2+ β€” a different LoRA stack or a refiner. It must share the noise schedule of the main model (same family): in 'continuous' handoff the shared curve is always built from the MAIN model, since that's the space the in-flight latent's noise level lives in.
positive_boptCONDITIONINGOptional positive conditioning for stage 2+ β€” e.g. polish on a shorter prompt, or without the style tokens. Falls back to 'positive'.
negative_boptCONDITIONINGOptional negative conditioning for stage 2+. Falls back to 'negative'.
verboseoptBOOLEANtruePrint the split report (curve, per-stage step ranges and sigma boundaries, warnings) to the console. The same text is always on the 'report' output.

Outputs (7)

NameTypeDescription
latentLATENTβ€”
handoff_latentLATENTβ€”
handoff_denoisedLATENTβ€”
reportSTRINGβ€”
gen_extra_infoGEN_INFOβ€”
timeSTRINGβ€”
secondsFLOATβ€”