OTR DMD Restart Sampler (predict-x0 + renoise)
A sampler for distilled few-step models that aren't an ODE march
- SAMPLER
This is the most "inside baseball" node in the whole pack, and also the easiest to explain once you know what it's for. OTR_DMDRestartSamplerSelect emits a SAMPLER object that implements the DMD / Self-Forcing restart transition - the sampling recipe used by distilled few-step video models. You plug it into SamplerCustom.sampler exactly like a KSamplerSelect, pair it with ManualSigmas, and the sampler does the thing no stock ComfyUI sampler does.
Here's the mechanism, in one breath: at every non-terminal step, it predicts x0, then re-noises that x0 to the next timestep with fresh noise, with zero carry-over of the previous latent. That's the reference behavior in FastVideo's DmdDenoisingStage and the Self-Forcing pipelines - and it is not an ODE march. Stock sample_euler is deterministic (it just integrates the step), and sample_euler_ancestral_RF retains a fraction of the previous latent. Feed the right sigma coordinates to the wrong transition and you get something that looks plausible while silently using a recipe nobody trained the model for. This node exists so that doesn't happen.
Why it's a node with no inputs
The node takes no widgets at all - that's deliberate. The schedule lives in the sigmas, and the guidance lives in SamplerCustom.cfg, so each knob has exactly one owner and nothing here can drift. You wire ManualSigmas carrying the reference denoising-step list divided by 1000, as a comma-separated string - "1.0, 0.757, 0.522, 0.0" - not a tuple. Output is a single SAMPLER.
The re-noise uses the loaded model's own model_sampling.noise_scaling, read from the model, never reimplemented. For a rectified-flow const sampler that's sigma*noise + (1-sigma)*x0 - but if the model exposes no usable model_sampling, the node refuses before step 1 (DmdModelSamplingError) instead of falling back to an inline approximation. That refusal is the point: a receipt that says "dmd3" has to mean the model's own noise scaling actually ran.
Why it's in a radio-drama pack
This is the seam where the pack's video lanes render distilled few-step video models (the engine registry is model-agnostic - HuMo, LTX, Wan, AnimateDiff, MiniMax H3 are all pluggable). When one of those lanes needs a DMD-style restart sampler, this node is the single registered implementation - the pack moved it out of a diagnostic bench script precisely because a production engine can't depend on a helper that might get deleted. If you're not running one of those distilled lanes, you'll never touch it; if you are, it's the only correct transition available.
Install and gotchas
Pack-level install (ComfyUI Manager → ComfyUI-OldTimeRadio, restart; the v2.0-alpha branch). No model downloads - it's a pure sampler wrapper around the loaded model. The classic mistake is feeding ManualSigmas a tuple instead of the comma-separated string, or using it with a non-distilled model expecting stock results - this transition is for the DMD/Self-Forcing class, not for vanilla sampling. And if you hit DmdModelSamplingError, the model genuinely doesn't expose the sampling interface the transition needs; that's the guard working, not a broken install.
Inputs (0)
No inputs
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SAMPLER | SAMPLER | — |