Files
cmeka-ComfyUI-WanMoEScheduler/README.md
T
2025-10-21 16:50:05 -04:00

167 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ComfyUI-WanMoEScheduler
A ComfyUI scheduler that automatically finds the optimal `shift` value to align your high and low sampling steps with a target sigma boundary. This eliminates the guesswork and manual calculations, and allows for precise control of the transition step.
## Core Sampling Concepts Explained
### What are Sigmas?
**Sigmas** (σ) represent the level of noise in the image during the diffusion process. A high sigma value means there is a lot of noise (early in the sampling process), while a low sigma value means there is little noise (late in the sampling process). A scheduler generates a sequence of sigma values to guide the model from a noisy state to a clean image.
### What is a Boundary?
The **boundary** is a specific sigma value that acts as a threshold between the high-noise and low-noise stages of your workflow. It determines where the initial high-noise stage ends and the low-noise stage begins.
For example:
* A boundary of `0.875` means that any sampling step with a sigma value greater than or equal to `0.875` is considered part of the "high-noise" stage. Steps with a sigma less than `0.875` are in the "low-noise" stage.
* WAN models, for instance, typically use a boundary of `0.90` for Image-to-Video (I2V) tasks and `0.875` for Text-to-Video (T2V) tasks.
### The Shift Problem
Many schedulers include a **shift** parameter that pushes the entire sigma distribution higher or lower. Finding the correct shift value is crucial for aligning the boundary with your desired number of steps:
* **Too low:** The boundary may fall in the wrong place, giving you an incorrect number of high or low steps.
* **Too high:** You might waste steps or experience a drop in quality.
* **Manual calculation:** Finding the right shift value often requires complex math or tedious trial and error.
This node solves the shift problem by automating the calculations.
## Features
- **Automatic Shift Calculation**: Automatically finds the optimal `shift` value to hit your target sigma boundary.
- **Flexible Step Control**: Use any combination of high and low steps without worrying about manual calculations.
- **Multi-Stage Outputs**: Provides separate sigma sequences for high-noise and low-noise sampling stages.
- **Broad Sampler Compatibility**: Works with most ComfyUI samplers.
- **Smart Scheduler Filtering**: Automatically excludes schedulers where the `shift` parameter has a minimal or no effect.
- **Denoise Support**: Fully compatible with partial denoising workflows.
## Installation
### Via ComfyUI Manager (Recommended)
1. Open **ComfyUI Manager**.
2. Search for "**ComfyUI-WanMoEScheduler**".
3. Click **Install**.
### Manual Installation
1. Navigate to your ComfyUI `custom_nodes` directory:
```bash
cd ComfyUI/custom_nodes
```
2. Clone this repository:
```bash
git clone https://github.com/cmeka/ComfyUI-WanMoEScheduler.git
```
3. Restart ComfyUI.
## Usage
### Key Benefits
The **WanMoEScheduler** node simplifies experimenting with different step counts, allowing you to balance speed and quality effortlessly:
- **Speed vs. Quality**: Quickly test configurations like 4 high steps for speed and 10 low steps for quality.
- **Experiment Freely**: Try any combination of steps (e.g., 4+4, 2+10, 8+6) without needing to recalculate the shift value.
- **Automatic Optimization**: The node handles the complex calculations to find the perfect shift for your setup.
### Node Overview
The **WanMoEScheduler** provides advanced sigma calculation for two-stage sampling workflows.
#### Input Parameters
- **`model`**: The model used for sigma calculations (can be either high or low, same result).
- **`scheduler`**: The sampling scheduler to use (the list is filtered to show only compatible schedulers).
- **`steps_high`**: The desired number of steps for the high-noise sampling stage (default: 4).
- **`steps_low`**: The desired number of steps for the low-noise sampling stage (default: 4).
- **`boundary`**: The target sigma value to separate the high and low stages (default: 0.875).
- **`interval`**: The step size for the shift search algorithm. A smaller value is more precise but slower (default: 0.01).
- **`denoise`**: The amount of noise to remove, from 0.0 (no change) to 1.0 (full denoise) (default: 1.0).
#### Output Parameters
- **`shift`**: The calculated optimal shift value.
- **`steps`**: The total number of sampling steps (`steps_high` + `steps_low`).
- **`steps_high`**: The number of high-noise steps (passthrough).
- **`steps_low`**: The number of low-noise steps (passthrough).
- **`sigmas`**: The complete sigma sequence for all steps.
- **`sigmas_high`**: The sigma sequence for the high-noise steps.
- **`sigmas_low`**: The sigma sequence for the low-noise steps.
### Recommended Settings
#### For WAN 2.2
- **Image-to-Video (I2V)**: `boundary` of `0.90`.
- **Text-to-Video (T2V)**: `boundary` of `0.875`.
#### Tips
- Use **`interval`**: `0.01` for high precision (slightly slower) or `0.1` for faster calculations (less precise).
- If using speed LoRAs, you may need to lower their strength when increasing the number of `steps_low`.
- The default `boundary` of `0.875` is a good starting point for many general workflows, however I've had good success with higher bounraries (0.930+) and a few more high noise steps.
## Workflow Integration
There are two primary ways to use this node's outputs: by feeding the `sigmas` directly into a custom sampler or by using the `shift` and `steps` with KSamplers.
### Method 1: Using `sigmas` (for Custom Samplers)
1. Connect your model (high or low) to the **WanMoEScheduler** node.
- If using WanVideoWrapper create a separate **Load Diffusion Model** or **Unet Loader** node and connect it (fast, won't use VRAM).
2. Connect the **`sigmas_high`** output to your first sampler (high-noise pass).
3. Connect the **`sigmas_low`** output to your second sampler (low-noise pass).
#### SamplerCustom Example
![SamplerCustom Example](examples/images/using-sigmas.png)
#### WanVideoWrapper Example
![WanVideoWrapper Example](examples/images/using-wanvideowrapper.png)
#### For More Than Two Stages
You can further divide the sampling process. For example, to split the high-noise stage:
1. Follow the steps above.
2. Connect the **`sigmas_high`** output to a `SplitSigmas` node.
3. Set the `step` parameter on the `SplitSigmas` node to your desired split point. This will give you two separate sigma sequences from the original high-noise portion.
### Method 2: Using `shift` and `steps` with KSampler (Advanced)
This method is common for standard two-pass workflows.
1. Connect your model (high or low) to the **WanMoEScheduler** node.
2. Connect the **`shift`** output to the **ModelSamplingSD3** nodes (high and low)
3. In your **first KSampler (Advanced)** node (for the high-noise stage):
- Connect **`steps_total`** to the `steps` input.
- Connect **`steps_high`** to the `end_at_step` input.
4. In your **second KSampler (Advanced)** node (for the low-noise stage):
- Connect **`steps_total`** to the `steps` input.
- Connect **`steps_high`** to the `start_at_step` input.
5. **Important**: Ensure the `scheduler` selected in **WanMoEScheduler** is the same one selected in your **KSampler (Advanced)** nodes.
#### KSampler Example
![KSampler Example](examples/images/using-ksampler.png)
#### For More Than Two Stages
1. Follow the steps above.
2. Connect **steps_high** to **end_at_step** of the **2nd stage high noise KSampler (Advanced)** node.
## Technical Details
### Supported Schedulers
The node automatically filters the scheduler list to include only those that are significantly affected by the `shift` parameter.
- **Excluded**: `karras`, `exponential`, `linear_quadratic`, `kl_optimal`, `bong_tangent`
- **Included**: All other standard ComfyUI schedulers.
### Performance
- **Search Time**: The time it takes to find the optimal shift is proportional to the `interval` value. A smaller interval is more precise but takes longer.
## Troubleshooting
**"Could not find shift" Error**
- **Decrease the `interval`**: A smaller interval may help find a valid shift value if the search space is narrow.
- **Check the `boundary`**: Your target boundary might be too high or low to be achievable with the given step counts. Try a value in the `0.875` to `0.93` range.
- **Verify Model Compatibility**: Ensure the selected model and scheduler work together as expected.
**Poor Quality Results**
- **Adjust `boundary`**: Experiment with different boundary values. The optimal value can depend on the model and desired outcome.
- **Change Step Ratios**: Try different combinations of `steps_high` and `steps_low`.
- **Tune LoRA Strength**: If using speed LoRAs, their strength may need to be adjusted to match the number of steps in each stage.
**WanVideoWrapper doesn't work**
- At this time only unipc, dpm++, and dpm++_sde work. The rest are "disabled" for custom schedulers/sigmas either by design or from a bug.
I've created a pull request to fix it here:
[Fix custom sigmas for supported schedulers #1510](https://github.com/kijai/ComfyUI-WanVideoWrapper/pull/1510)