Nodes/MD Nodes/MD: PingPong FBG (Full Control)
ComfyUI Node

MD: PingPong FBG (Full Control)

The 60-knob sampler MD Nodes is built around

By MDMAchine·Created about a year ago·Updated 3 months ago· 15
MD: PingPong FBG (Full Control)
  • scheduler
  • SAMPLER
step_random_modeblock
step_size4
seed80085
first_ancestral_step0
last_ancestral_step-1
ancestral_noise_typegaussian
start_sigma_index0
end_sigma_index-1
enable_clamp_outputfalse
blend_modelerp
step_blend_modelerp
fbg_sampler_modeEULER
cfg_scale1.00
cfg_start_sigma1.00
cfg_end_sigma0.00
fbg_start_sigma1.00
fbg_end_sigma0.00
max_guidance_scale10.00
initial_guidance_scale1.00
fbg_guidance_multiplier1.00
guidance_max_change1000.00
pi0.50
t_00.50
t_10.40
fbg_temp0.00
fbg_offset0.00
fbg_eta0.00
fbg_s_noise1.00
max_posterior_scale3.00
log_posterior_initial_value0.00
log_posterior_ema_factor0.00
adaptive_noise_scalingfalse
noise_scale_factor1.00
progressive_blend_modefalse
conditional_blend_modefalse
conditional_blend_sigma_threshold0.50
conditional_blend_function_nameslerp
conditional_blend_on_changefalse
conditional_blend_change_threshold0.10
clamp_noise_normfalse
max_noise_norm1.00
gradient_norm_trackingfalse
enable_profilingfalse
debug_mode0
tensor_memory_optimizationfalse
early_exit_threshold0.00
ancestral_start_sigma1.00
ancestral_end_sigma0.00
sigma_range_presetCustom
enable_restartsfalse
yaml_settings_str
checkpoint_steps_str
restart_modebalanced
restart_noise_scale0.50
restart_s_noise1.00
restart_steps

If you landed on this page, you probably loaded a workflow and found a wall of ~60 sampler knobs staring back at you. PingPong FBG ("Full Control") is the flagship sampler of MD Nodes, originally built for ACE-Step audio generation and later borrowed for image and video texture work. It's a bidirectional ancestral sampler with a feedback-guidance loop, and it returns a plain SAMPLER that drops into a standard KSampler - the complexity is all inside.

What the mechanism actually is

Ping-pong sampling runs a forward and backward pass inside each step (that's the "bounce"), which resolves fine detail that a one-directional solver blurs - the README's pitch is "hyper-detailed textures that standard samplers turn to mush." On top of that sits feedback guidance (FBG): it watches recent steps and tightens or loosens guidance dynamically, and it includes NaN recovery so a bad step degrades gracefully instead of nuking the latent.

The knobs cluster into a few ideas. Step randomization (step_random_mode: off / block / reset / step, with step_size) rotates the seed every N steps so repetitive texture doesn't lock in - block is the recommended default. Ancestral noise injection (first_ancestral_step, last_ancestral_step, ancestral_noise_type: gaussian / uniform / brownian) adds creativity mid-run, with brownian suggested for organic, analog texture. blend_mode controls how new noise mixes with the latent - lerp is fast, slerp preserves spherical structural integrity. enable_restarts plus restart_mode raises noise partway through so the model can fix detail mistakes, at the cost of render time.

What a beginner actually sets

Ignore most of the wall. You'll touch these:

  • scheduler (required) - wire in the SIGMA schedule from the pack's Hybrid, GITS, or Noise Decay scheduler.
  • seed, step_random_mode, step_size - texture variation.
  • first_ancestral_step / last_ancestral_step - leave at 0 / -1 (disabled) for deterministic diffusion; raise the first one to 3–5 if your initial composition is messy.
  • fbg_sampler_mode - EULER is recommended for standard ACE-Step audio; PINGPONG for the full bidirectional path.
  • enable_clamp_output - leave False; audio latents routinely exceed 1.0.
  • enable_restarts + restart_mode - the detail fixer.

For the curious, dynamic CFG lives here too (cfg_start/end_sigma, fbg_start/end_sigma, max_guidance_scale), along with posterior factors (pi, t_0, t_1). Two parameters - fbg_eta and fbg_s_noise - are marked DEPRECATED in the schema; ignore them. You can also override everything by feeding YAML into yaml_settings_str, which is where MD_YAML_Utils earns its keep.

The straight talk

Don't start with this node. PingPongSamplerNodeLite and Basic wrap the same core with sane presets (noise_behavior, a couple of toggles) - use those to learn, then graduate to FBG when you need the production control. It's genuinely the pack's production workhorse for ACE-Step audio, and the concept traces back to blepping's original PingPong sampler, which MDMAchine credits and has also contributed to the HOT-Step-CPP C++ runtime. But for a plain image person it's overkill, and its home turf - ACE-Step music generation - is a real but niche corner of the ecosystem. If that's your corner, this is the sampler to learn.

Installing it

cd path/to/ComfyUI/custom_nodes
git clone https://github.com/MDMAchine/ComfyUI_MD_Nodes.git
cd ComfyUI_MD_Nodes
pip install -r requirements.txt

Or search MD_Nodes in ComfyUI Manager and restart. The solver logic lives in the pack's core/ subpackage (source ships with the repo); if that import ever fails, the node returns a fallback dummy instead of crashing - so if sampling suddenly does nothing, check your ComfyUI console for a core import error.

CategoryMD_Nodes/Samplers

Inputs (57)

NameTypeDefaultDescription
step_random_modeCOMBOblockSTEP RANDOMIZATION MODE • Purpose: Controls how the seed evolves during sampling steps. • Options: off (static), block (periodic), reset (per-step), step (incremental). • Trade-offs: 'reset' is chaotic, 'off' is rigid. ⭐ Recommended: 'block' for best texture variation.
step_sizeINT41–100STEP SIZE INTERVAL • Purpose: Defines how many sampling steps occur before the seed rotates. ⭐ Recommended: 4-10 steps.
seedINT800850–9007199254740991RANDOM SEED • Purpose: Base JS-Safe seed for noise generation.
first_ancestral_stepINT0FIRST ANCESTRAL STEP • Purpose: The step index to begin injecting ancestral noise. ⭐ Recommended: Increase to 3-5 if initial structural composition is messy.
last_ancestral_stepINT-1LAST ANCESTRAL STEP • Purpose: The step index to stop injecting ancestral noise. ⭐ Recommended: -1 (Disable entirely) for standard deterministic diffusion.
ancestral_noise_typeCOMBOgaussianANCESTRAL NOISE TYPE • Purpose: The statistical distribution of the injected noise. • Options: Gaussian (standard bell), Uniform (flat limits), Brownian (correlated). ⭐ Recommended: Brownian for highly organic/analog textures.
start_sigma_indexINT0START SIGMA INDEX • Purpose: Skip early sampling steps (used for img2img routing).
end_sigma_indexINT-1END SIGMA INDEX • Purpose: Halt sampling early.
enable_clamp_outputBOOLEANfalseCLAMP OUTPUT • Purpose: Forces all output latent values strictly into the [-1, 1] range. ⭐ Recommended: False for audio generation (audio latents often exceed 1.0).
schedulerSCHEDULERSCHEDULER INPUT • Purpose: Connects the sigma schedule (from Basic/Hybrid/GITS node).
blend_modeCOMBOlerpBLEND MODE (PRIMARY) • Purpose: Mathematical approach for mixing new noise with the latent. ⭐ Recommended: 'lerp' for speed, 'slerp' for spherical structural integrity.
step_blend_modeCOMBOlerpSTEP BLEND MODE (SECONDARY) • Purpose: Interpolation used for internal dual-step calculations.
fbg_sampler_modeCOMBOEULERFBG INTERNAL MODE • Purpose: Defines the fundamental ODE solver step logic. ⭐ Recommended: EULER for standard Ace-Step audio models.
cfg_scaleFLOAT1.00-1000–1000CFG SCALE (BASE) • Purpose: Classifier-Free Guidance magnitude.
cfg_start_sigmaFLOAT1.00CFG START SIGMA
cfg_end_sigmaFLOAT0.00CFG END SIGMA
fbg_start_sigmaFLOAT1.00FBG START SIGMA
fbg_end_sigmaFLOAT0.00FBG END SIGMA
max_guidance_scaleFLOAT10.00MAX GUIDANCE CAP • Purpose: Hard ceiling limit for dynamic CFG scaling.
initial_guidance_scaleFLOAT1.00INITIAL GUIDANCE • Purpose: Starting CFG magnitude.
fbg_guidance_multiplierFLOAT1.00FBG MULTIPLIER • Purpose: Strength of the feedback loop correction.
guidance_max_changeFLOAT1000.00MAX CHANGE PER STEP • Purpose: Velocity limit for guidance scaling.
piFLOAT0.50PI (POSTERIOR FACTOR)
t_0FLOAT0.50T0 OFFSET
t_1FLOAT0.40T1 TEMP FACTOR
fbg_tempFLOAT0.00FBG TEMPERATURE
fbg_offsetFLOAT0.00FBG OFFSET
fbg_etaFLOAT0.00DEPRECATED: Legacy ETA parameter.
fbg_s_noiseFLOAT1.00DEPRECATED: Legacy noise scale.
max_posterior_scaleFLOAT3.00MAX POSTERIOR SCALE
log_posterior_initial_valueFLOAT0.00INITIAL LOG POSTERIOR
log_posterior_ema_factorFLOAT0.00POSTERIOR EMA
adaptive_noise_scalingBOOLEANfalseADAPTIVE NOISE SCALING
noise_scale_factorFLOAT1.00NOISE SCALE FACTOR
progressive_blend_modeBOOLEANfalsePROGRESSIVE BLEND
conditional_blend_modeBOOLEANfalseCONDITIONAL BLEND
conditional_blend_sigma_thresholdFLOAT0.50BLEND THRESHOLD
conditional_blend_function_nameCOMBOslerpCONDITIONAL BLEND FUNC
conditional_blend_on_changeBOOLEANfalseBLEND ON CHANGE
conditional_blend_change_thresholdFLOAT0.10CHANGE THRESHOLD
clamp_noise_normBOOLEANfalseCLAMP NOISE NORM
max_noise_normFLOAT1.00MAX NOISE NORM
gradient_norm_trackingBOOLEANfalseGRADIENT TRACKING: Unused.
enable_profilingBOOLEANfalseENABLE PROFILING
debug_modeINT00–2DEBUG MODE
tensor_memory_optimizationBOOLEANfalseMEMORY OPTIMIZATION
early_exit_thresholdFLOAT0.00EARLY EXIT THRESHOLD
ancestral_start_sigmaFLOAT1.00ANCESTRAL START
ancestral_end_sigmaFLOAT0.00ANCESTRAL END
sigma_range_presetCOMBOCustomSIGMA RANGE PRESET
enable_restartsBOOLEANfalseENABLE RES 2 RESTARTS
yaml_settings_stroptSTRINGYAML OVERRIDE
checkpoint_steps_stroptSTRINGCHECKPOINT STEPS
restart_modeoptCOMBObalancedRESTART MODE
restart_noise_scaleoptFLOAT0.50RESTART NOISE SCALE
restart_s_noiseoptFLOAT1.00RESTART S_NOISE
restart_stepsoptSTRINGCUSTOM RESTART STEPS

Outputs (1)

NameTypeDescription
SAMPLERSAMPLER