Comfy-Org / Comfy-Org/ComfyUI

Bug: Mutable default arguments cause state pollution across model loads

Open
#11,657 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
133k
Forks
15.7k
Avg merge
1d 7h
Merged PRs (30d)
158

Description

## Summary

Multiple functions use mutable default arguments (`{}` or `[]`), causing unexpected state pollution when loading multiple models in sequence.

## Problem

When loading checkpoints sequentially, settings like `quantization_metadata` from a previously loaded model leak into subsequent loads:

```
# Load 1: WanTEModel with quantization
SDClipModel.__init__ quant_config={'mixed_ops': True}

# Load 2: FluxClipModel WITHOUT quantization (but polluted!)
SDClipModel.__init__ quant_config={'mixed_ops': True} # ← Wrong!
```

## Root Cause

Python mutable defaults are created once and shared across all calls:

```python
def func(options={}): # Same dict object every call
options["key"] = "value"

func() # options is now {"key": "value"}
func() # Still {"key": "value"} - polluted!
```

## Affected Files

- `comfy/sd.py`: `CLIP.__init__`, `load_clip`, `load_text_encoder_state_dicts`, `load_checkpoint_guess_config`, `load_state_dict_guess_config`, `load_diffusion_model_state_dict`, `load_diffusion_model`
- `comfy/sd1_clip.py`: `SDClipModel.__init__`, `SDTokenizer.__init__`, `SD1Tokenizer.__init__`, `SD1CheckpointClipModel.__init__`, `SD1ClipModel.__init__`
- `comfy/text_encoders/flux.py`: `FluxClipModel.__init__`, `FluxClipModel_.__init__`, etc.
- `comfy/text_encoders/sd3_clip.py`: `T5XXLModel.__init__`, `SD3ClipModel.__init__`, etc.
- `comfy/text_encoders/wan.py`: `UMT5XXlModel.__init__`, `WanT5Model.__init__`, `WanTEModel.__init__`, etc.

## Solution

Replace mutable defaults with `None`:

```python
# Before
def load_checkpoint_guess_config(..., model_options={}):

# After
def load_checkpoint_guess_config(..., model_options=None):
if model_options is None:
model_options = {}
```

## References

- https://docs.python.org/3/tutorial/controlflow.html#default-argument-values

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.