ComfyUI Node

OCS Group

The scheduler-switching node that makes sampler mashups possible

By blepping·Created 2 years ago·Updated 2 months ago· 30
OCS Group
  • substeps
  • groups_opt
  • params_opt
  • OCS_GROUPS
merge_method
time_mode
time_start0.0
time_end999.0
parameters

The whole point of the Overly Complicated Sampling pack is doing more than one thing during a single sampling pass, and OCS Group is the node that makes that possible. It's the "when" switch in the OCS stack: it decides which set of substeps runs at which step of the denoise, so you can run euler for the first few steps, switch to dpmpp_sde in the middle, and finish on something stable. Stock ComfyUI can't do that without hacky custom_sampling patches; OCS gives it to you as a chain of ordinary nodes.

What it is

A OCS Group sits between the sampler and the substeps: OCS SamplerOCS GroupOCS Substeps. The group defines a window of time during sampling and a way of merging its substeps. Groups chain together through the optional groups_opt input, and matching starts with the group furthest from the sampler node - the first one in the chain wins for a given step.

The inputs that matter

You'll actually set three of these:

  • merge_method - how multiple substeps combine into one step. simple (default) runs a single substep per step. divide splits the step into a linear schedule of substeps, one model call each. supreme_avg runs the substeps sharing the first model call and averages the results. overshoot samples ahead and then restarts back to the expected step - this is the one most people try first, and it's where OCS's built-in restart support comes in. lookahead and pingpong are experimental variants of the same idea. dynamic lets an expression pick the method per step.
  • time_mode + time_start / time_end - step (default), step_pct, or sigma. Matches are inclusive, and steps start at 0. step mode is by far the easiest to reason about.
  • substeps (required) - connect the OCS Substeps node here.

Outputs are OCS_GROUPS, which you feed either to another Group's groups_opt or straight into the OCS Sampler. Optional params_opt and the parameters text block work like everywhere else in OCS - the text block is where pre_filter and post_filter live, along with preview_mode and the when expression for time-based gating beyond the simple range.

A concrete example

Want euler for the first three steps and dpmpp_2m afterward? Make two groups. The first has time_start: 0, time_end: 3, and a Substeps node set to euler. The second has time_start: 4, time_end: 999, and a Substeps node set to dpmpp_2m. Chain Group1 -> Group2 -> Sampler, and the sampler picks per step. That's the entire skill: groups are just time-gated wrappers.

Installing and gotchas

Installed as part of the pack - ComfyUI Manager → search "Overly Complicated Sampling", or git clone https://github.com/blepping/comfyui_overly_complicated_sampling into ComfyUI/custom_nodes and restart. No models, no mandatory pip deps.

Two things bite people. First, supreme_avg doesn't work well with non-ancestral samplers (anything with eta: 0), and it's pointless to run identical substeps since they share the first model call anyway. Second, the pack's restart-based merge methods (overshoot, lookahead) don't work with rectified-flow models like Flux. And remember the pack is "in flux" - merge methods are exactly the kind of thing that changes between versions, so re-check saved workflows after updates.

Categorysampling/custom_sampling/OCS

Inputs (8)

NameTypeDefaultDescription
merge_methodCOMBOThe merge method determines how multiple substeps are combined together during sampling.
time_modeCOMBOThe time mode controls how the time_start and time_end parameters are interpreted. The default of step is generally easiest to use.
time_startFLOAT0.0The start time this group will be active (inclusive).
time_endFLOAT999.0The group will become inactive when the current time is GREATER than the specified end time.
substepsOCS_SUBSTEPSConnect output from an OCS Substeps node here.
groups_optoptOCS_GROUPSYou may optionally connect the output from another OCS Group node here. Only one group per step is used, matching (based on time or other constraints) starts with the OCS Group node furthest from the OCS Sampler.
params_optoptOCS_PARAMSOptionally connect parameters like custom noise here. Output from the OCS Param or OCS MultiParam nodes.
parametersoptSTRINGThe text parameter block allows setting custom parameters using YAML (recommended) or JSON. Optional, may be left blank.

Outputs (1)

NameTypeDescription
OCS_GROUPSOCS_GROUPSThis output can be connect to another OCS Group node or an OCS Sampler node.