`register_to_config` mislabels positional `__init__` args as `_use_default_values`, so `from_config` round trips silently revert them to defaults
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 78/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Quiet
- Tech stack
- python
- Domain
- developer-experience
Research direction
Start in src/diffusers/configuration_utils.py around inner_init at lines 725-726 and inspect extract_init_dict around lines 499-501. Run the reproduction and add the regression coverage in tests/others/test_config.py. Done means positional and keyword constructor arguments both preserve their explicit values through from_config round trips.
Written by the indexing model from the issue text.
Description
Describe the bug
@register_to_config computes _use_default_values as set(new_kwargs) - set(init_kwargs), but init_kwargs only contains keyword arguments (src/diffusers/configuration_utils.py:725-726). Any constructor argument passed positionally is mislabeled as "used default value", and extract_init_dict then strips it on every from_config round trip (configuration_utils.py:500-501).
- Expected: per the comment at
configuration_utils.py:499("Skip keys that were not present in the original config, so default__init__values were used") and the design intent in https://github.com/huggingface/diffusers/pull/3929#issuecomment-1618919655,_use_default_valuesshould only contain parameters the caller did not provide — positional and keyword calls should round-trip identically. - Actual: the config displays the explicitly-set value, but
from_config(obj.config)(the documented scheduler-swap pattern) silently reverts it to the class default. Affects everyConfigMixinsubclass.
I'd be happy to open a PR: exclude positionally-bound parameter names from the _use_default_values computation in inner_init (a two-line change), plus a regression test in tests/others/test_config.py — once a maintainer acks, per the AI-assisted contributions guidelines.
Reproduction
from diffusers import DDIMScheduler, EulerDiscreteScheduler
s = DDIMScheduler(500) # positional, explicit non-default value
print(s.config.num_train_timesteps) # 500
print("num_train_timesteps" in s.config["_use_default_values"]) # True <-- mislabeled
print(DDIMScheduler.from_config(s.config).config.num_train_timesteps) # 1000, expected 500
print(EulerDiscreteScheduler.from_config(s.config).config.num_train_timesteps) # 1000, expected 500
k = DDIMScheduler(num_train_timesteps=500) # keyword control group
print(DDIMScheduler.from_config(k.config).config.num_train_timesteps) # 500, correct
Logs
(no traceback — the failure mode is a silently wrong value)
System Info
- 🤗 Diffusers version: 0.40.0.dev0 (
main@ 614ae4b) - Platform: macOS-26.5.2-arm64-arm-64bit-Mach-O
- Python version: 3.13.3
- PyTorch version (GPU?): 2.13.0 (False)
- Huggingface_hub version: 1.27.0
- Transformers version: 5.15.0
- Safetensors version: 0.8.0
- Using GPU in script?: No
Who can help?
No response
Disclosure: this report was prepared with AI assistance; I reproduced the issue locally and reviewed every claim myself.
- Dominant language
- Python
- Stars
- 34.6k
- Forks
- 7.3k
- Avg merge
- 3d 16h
- Merged PRs (30d)
- 74
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from huggingface/diffusers
-
bug needs-env-info pipelines
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
huggingface/diffusers#14794 ·
-
bug needs-code-example needs-env-info pipelines
Difficulty 1/5 Under an hour Newbie friendliness 86/100
huggingface/diffusers#14780 · 1 comment ·
-
bug pipelines
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
huggingface/diffusers#14769 · 1 comment ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
huggingface/diffusers#14639 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
huggingface/diffusers#14616 ·
All issues in huggingface/diffusers
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100