OCS Sampler
The node that makes the default sampler dropdown feel tiny
- groups
- params_opt
- SAMPLER
If you install this pack for one node, this is it. OCS Sampler is the flagship: a drop-in replacement for the sampler you normally pick in the KSampler dropdown, except instead of one algorithm it can run a different algorithm every few steps, restart the schedule, use immiscible noise, and filter almost anything mid-sampling. The README calls the pack "experimental and mathematically unsound (but fun!)" - read that as the tone for everything below. This is not the node you reach for when you want a quiet reliable euler run; it's the node you reach for when you want to know how far sampling can be bent.
What it is
OCS doesn't plug into a KSampler. It emits a SAMPLER that you wire into a SamplerCustom (or anything that accepts a SAMPLER input). Structurally it's the top of a three-node stack: OCS Sampler ← OCS Group ← OCS Substeps. The Group nodes decide when something runs, the Substeps nodes decide what sampler runs, and the Sampler node holds the global config - noise handling, restart, model options - plus everything the groups couldn't express.
How it works
The sampler node turns your chain of groups into a single custom KSAMPLER. Every step, it asks the group chain "who matches this step?" and runs that group's substeps. Matching is time-based and starts with the group furthest from the sampler node, so later groups in the chain are tried first. The heavy lifting lives in a YAML/JSON text block where you can set the noise block (cpu_noise, set_seed, seed_offset, normalize_noise), the restart block (enabled plus its own s_noise and immiscible config), and the model block - the one beginners actually need.
The model block's cfg1_uncond_optimization is the Flux switch. Flux doesn't use CFG, so setting this to true skips generating the uncond (negative prompt) pass entirely, saving time. The flip side: CFG++ and alt CFG++ features don't work with Flux, and restarts don't work with rectified-flow models like Flux at all.
The inputs that matter
The node is refreshingly simple at the wire level:
groups(required) - connect yourOCS Groupchain here.params_opt(optional) - output fromOCS Param/OCS MultiParamfor things that need a real input, like custom noise.parameters(optional) - the big YAML text block where all the tuning happens.
The single output, SAMPLER, goes into SamplerCustom. From there it behaves like any sampler: add_noise, start_at_step, and so on are handled by the SamplerCustom node.
Installing it
From ComfyUI Manager, search for Overly Complicated Sampling. Or clone it manually:
cd ComfyUI/custom_nodes
git clone https://github.com/blepping/comfyui_overly_complicated_sampling
Restart ComfyUI. There are no model files to download and no mandatory pip dependencies - the optional solver backends (diffrax, torchdiffeq, torchode, torchsde) are only imported if you pick those step methods. The author strongly recommends installing ComfyUI-bleh and ComfyUI-sonar alongside, since they unlock extra blend modes and noise types.
Common issues
The pack's own status is "in flux, may be useful but likely to change/break workflows frequently." Treat saved workflows from old versions as fragile - an update can silently change a default. The YAML block has "essentially no error handling," so a typo surfaces as a confusing traceback rather than a friendly message. And if you're on Flux, remember the cfg1_uncond_optimization note above before you start diagnosing weird slowness. This is a power-user tool that rewards you only if you're willing to read the README's YAML reference; if you just want DPM++ 2M Karras with fewer steps, the built-in samplers are still your friend.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| groups | OCS_GROUPS | Connect OCS substep groups here which are output from the OCS Group node. | |
| params_optopt | OCS_PARAMS | Optionally connect parameters like custom noise here. Output from the OCS Param or OCS MultiParam nodes. | |
| parametersopt | STRING | The text parameter block allows setting custom parameters using YAML (recommended) or JSON. Optional, may be left blank. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SAMPLER | SAMPLER | SAMPLER that can be connected to a SamplerCustom or other sampler node that supports a SAMPLER input. |