Manual Sampler
Make Your Own Sampler Without Writing Any Code
- SAMPLER
"Creating a new sampler" usually means writing a k-diffusion function, tuning it until it NaNs, and reading stack traces at 1 a.m. Manual Sampler is the version where you don't. It wraps any sampler that's already registered in ComfyUI - the built-ins, RES4SHO's own hfe_*/hfx_* variants, even samplers from other packs like RES4LYF - hands you the knobs that actually matter, and saves the result as a named sampler that shows up in every dropdown. You get to make a sampler; the pack does the math.
It ships in RES4SHO, a high-frequency-detail sampling pack by WASasquatch - the same person who built the enormous WAS Node Suite (archived in 2025, still widely forked and used). RES4SHO is a much younger, far more niche thing: its hfe_* samplers re-inject high-frequency detail via a spatial high-pass, and its hfx_* modes sharpen in spatial, value, frequency, temporal and inter-stage domains. Don't confuse the pack with RES4LYF (that's ClownsharkBatwing's flow-matching solver collection) - though Manual Sampler can wrap RES4LYF samplers too, since they're all in the same registry.
Why you'd reach for it
Two reasons. First, RES4SHO's higher integration accuracy - stages 3 through 5 - is only reachable through this node. The old hfe3_*, hfe4_*, hfe5_* samplers were removed, and the pack now expects you to promote any hfe_* sampler here instead. Second, it's the supported way to create a new sampler. Pick a known-good integrator, dial in the knobs, save it under a name. The README says this is deliberate: every saved preset is guaranteed to be a sensible integrator that won't NaN, because there's no facility for hand-writing integrator code from a node.
How it works
The node keeps a list of every registered sampler (about 103 choices) and builds a thin wrapper around the chosen one's function in comfy.samplers.k_diffusion_sampling. The clever part is that it inspects that function's Python signature and only injects the parameters it actually accepts - and the frontend mirrors that on the widget side. Pick euler, and the stages widget disappears, because euler has no stages. Nothing gets force-fed into a function that would raise TypeError.
The inputs that matter
- base_sampler - any sampler in the registry. Defaults to
euler. - eta_override - the one people actually tune.
-1.0means "use the base sampler's default";0is fully deterministic;>0is noisier, and forhfe/hfxsamplers it acts as an HF amplification peak. - stages - 2–5, honored only by
hfe_*andhfe_auto. Higher stages mean more model evaluations per step but better ODE accuracy. - s_noise - noise scale for stochastic samplers.
- preset_data - the save/load JSON. The tooltip says it's not meant for direct entry, and it isn't; let the canvas widget handle it.
Output is a single SAMPLER, wired into the sampler input of SamplerCustom / SamplerCustomAdvanced.
Installing it
Via ComfyUI Manager (search "RES4SHO"), or the old-fashioned way:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/RES4SHO
Then restart ComfyUI. No pip dependencies and no model downloads - everything it needs ships with ComfyUI (it wants ComfyUI ≥ 1.0.0). Saved presets land in presets/manual_samplers.json and re-register as manual_sampler_<name> samplers on every startup.
Where people get burned
The stages field is silently dropped for samplers that don't accept it - set 5 on euler and you'll get 2, with no error at all. If stages seems to do nothing, check the widget is even visible; the UI hides it for non-hfe samplers, which is your honest signal. Presets appear in the dropdowns only after the frontend refreshes node defs, and names are restricted to alphanumerics, dashes, underscores and spaces. And if you're upgrading: old hfe3_*/hfe4_*/hfe5_* names are explicitly unregistered on load, so saved workflows that reference them need repointing at the current equivalents.
It's a niche node - barely any community chatter around it yet. But the one concrete usage worth knowing: an Anima realism finetune that got its best results from hfx_stochastic_s2 + atan_detail, tuned through exactly this kind of workflow. Start there if you want somewhere to point.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| base_sampler | COMBO | euler | 103 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +97 |
| stages | INT | 22–5 | Integrator stages for samplers that accept it (hfe / hfe_auto / hfe_s*). Higher = more model evaluations per step but better ODE accuracy. Hidden for samplers that don't expose stages. |
| eta_override | FLOAT | -1.00-1–5 | Stochasticity for ancestral / SDE samplers, or HF amplification peak for hfe/hfx. -1 = use the base sampler's default; 0 = deterministic; >0 = noisier / sharper. |
| s_noise | FLOAT | 1.000–5 | Noise scale for stochastic samplers. |
| preset_data | STRING | Edited via the canvas widget; JSON of the saved preset name and parameters. Not meant for direct entry. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SAMPLER | SAMPLER | — |