Workflow Config WAN2.2
Save a whole Wan 2.2 setup as one dropdown
- unet_high
- unet_low
- vae
- clip
- image
- audio
- width
- height
- steps
- split_step
- seed
- master_prmt
- pos_prompt
- neg_prompt
- is_relay_prompt
- cfg_high
- cfg_low
- total_frames
- fps
- lora_1_high
- lora_1_low
- lora_2_high
- lora_2_low
- lora_3_high
- lora_3_low
- lora_4_high
- lora_4_low
- filename
- unet_stack_high
- unet_stack_low
- shift_high
- shift_low
- is_t2v
- flag_1
- flag_2
- flag_3
- custom_1
- custom_2
Wan 2.2 workflows are the worst kind of complicated: two-pass, with a separate high-noise and low-noise model, four-plus LoRAs, per-pass CFG and timestep shift, and a prompt setup that changes per shot. Change one scene and you're hunting through twenty nodes for the model dropdown that lives on the wrong one. Workflow Config WAN2.2 exists to make that entire bundle - models, VAE, CLIP, LoRAs, prompts, dimensions, sampler settings - one saved thing you switch with a single dropdown. It's the closest thing this ecosystem has to a proper scene file.
The movie / scene / take model
Configs are stored as JSON in ComfyUI/user/default/workflows/.dx_mgr/, and the mental model is a film shoot:
- A movie is a config file (
dx_*.json). Drop more than one in the folder and a movie dropdown appears, so you can split setups by project or client. - Each movie holds scenes - named presets with a
Name,Group,Type(I2V / T2V / MULTI), a note, and a reference image. - Each scene holds takes: numbered versions of the same scene's settings. That's your iteration system - change the prompt or swap a LoRA, hit "+ Version", and the old take survives for comparison.
Hit NEW (or Edit / double-click) to open the full-screen editor. Save writes the current take; Duplicate, Delete Version, and Del All handle the rest. There's also a preset library (dx_workflow_presets.json) so you can save a model-and-parameters template and apply it to any scene of the same class instead of rebuilding from scratch.
Inputs and the outputs that matter
The node's own inputs are just the three selectors: movie, scene, take. Everything else flows out.
The two outputs you actually wire into the sampler are unet_stack_high and unet_stack_low. These are the star of the show: ready-to-use model stacks for each pass with all enabled LoRAs applied and the timestep shift already patched in. Wan 2.2's two-pass architecture means the high-noise pass carries motion and composition while the low-noise pass refines detail - the node applies 4 LoRA slots to each, and split_step is where the sampler hands off. shift_high/shift_low default to 5.0 and behave like ComfyUI's ModelSamplingSD3 node, so you don't need a separate patch node.
Then there's the plumbing: vae, clip, image and audio (a reference audio path decodes straight to the audio output), width, height, steps, seed, total_frames, fps, cfg_high/cfg_low, master_prmt/pos_prompt/neg_prompt, is_relay_prompt, is_t2v, plus filename and three flag_* toggles you can relabel for routing. The custom_1/custom_2 string outputs are free-form pass-throughs.
One prompt detail worth knowing: Smart type expects the positive prompt split into pipe-separated frame-range segments (text [0-20] | text [21-40]) for a downstream Prompt Relay node - the node has a sibling pack node for that. Simple is a flat string, Beats aligns segments to seconds. For Simple and Beats, the master prompt is prepended automatically.
Installing it
Same shared install as the rest of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/denyazzolin/comfyui-daz-tools
Restart ComfyUI. No Python dependencies beyond ComfyUI itself. If you want GGUF-quantized unets in the model dropdown, you need the separate ComfyUI-GGUF pack (city96) - the node detects the .gguf file, checks a read-only gguf flag, and loads through GGUF's unet loader automatically.
Gotchas
- GGUF without ComfyUI-GGUF is a hard error, on purpose. No silent fallback - install the pack or don't pick
.gguffiles. - Missing model files raise at run time ("diffusion model not found"). The scene is saved; the file isn't. Check the model names in the editor.
- Randomize on the seed isn't a lie: each run picks a new seed and writes it back into the config JSON, so the take you reloaded keeps its last-used seed.
- Configs live in
user/default/workflows/.dx_mgr/- back that folder up with your models. You can relocate it by dropping adx_root_dir_config.json(key"workflows_root_dir") intocustom_nodes/comfyui-daz-tools/.
The one honest grumble: like any heavily custom-UI node, this one is sensitive to ComfyUI's frontend churn - if the editor panel misbehaves after a big ComfyUI update, check whether the Nodes 2.0 canvas feature got enabled, since that's the ecosystem-wide breaker for custom node UIs. Turn it off and the node tends to come back to life.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| movie | COMBO | 1 options: (default) | |
| scene | COMBO | 1 options: (no configs) | |
| take | COMBO | 1 options: 1 |
Outputs (38)
| Name | Type | Description |
|---|---|---|
| unet_high | MODEL | — |
| unet_low | MODEL | — |
| vae | VAE | — |
| clip | CLIP | — |
| image | IMAGE | — |
| audio | AUDIO | — |
| width | INT | — |
| height | INT | — |
| steps | INT | — |
| split_step | INT | — |
| seed | INT | — |
| master_prmt | STRING | — |
| pos_prompt | STRING | — |
| neg_prompt | STRING | — |
| is_relay_prompt | BOOLEAN | — |
| cfg_high | FLOAT | — |
| cfg_low | FLOAT | — |
| total_frames | INT | — |
| fps | FLOAT | — |
| lora_1_high | LORA | — |
| lora_1_low | LORA | — |
| lora_2_high | LORA | — |
| lora_2_low | LORA | — |
| lora_3_high | LORA | — |
| lora_3_low | LORA | — |
| lora_4_high | LORA | — |
| lora_4_low | LORA | — |
| filename | STRING | — |
| unet_stack_high | MODEL | — |
| unet_stack_low | MODEL | — |
| shift_high | FLOAT | — |
| shift_low | FLOAT | — |
| is_t2v | BOOLEAN | — |
| flag_1 | BOOLEAN | — |
| flag_2 | BOOLEAN | — |
| flag_3 | BOOLEAN | — |
| custom_1 | STRING | — |
| custom_2 | STRING | — |