Model Scale HiDream-O1-Image
Scale a pixel-space model that has no VAE and no text encoder
- model
- MODEL
HiDream-O1 is the weird one in the family: an 8B pixel-space transformer with no VAE and no text encoder, one model that does text-to-image, editing, and long-text rendering at up to 2048×2048. It's a niche tool - a genuinely good recursive editor, and a mediocre generator nobody fine-tuned. If you're in the small club of people using O1-Image seriously, Model Scale HiDream-O1-Image is the scaler built for its UiT architecture, and it handles a couple of things the other scale nodes don't have to worry about.
The description is unusually explicit about semantics here: scale = 1.0 leaves things unchanged, 0.0 zeroes out a layer, above 1.0 amplifies. All sliders default to 1.0, so the node is a pass-through until you move something.
How it works, and why it's different
Under the hood it does the standard clone-and-patch dance, but with two architecture-aware details. First, it auto-detects the key prefix - it tries diffusion_model. then model. and uses whichever actually matches, because O1's load path doesn't always use the conventional prefix. Second, it operates through the model's patcher (model.patcher when present) and reconstructs the result with clone_with_patcher, avoiding deep copies of a pixel-space transformer that can be gigabytes in a single tensor. In plain terms: it's built so that scaling O1 doesn't turn into an OOM event.
The inputs, grouped
The widget list covers the whole UiT stack:
x_embedder,t_embedder1- image and timestep inputs.language_model.layers.0–language_model.layers.35- the 36 LLM-style layers. This is O1's text/instruction understanding, the part that makes it a good editor; it's also the biggest chunk of the model.visual.blocks.0–visual.blocks.26,visual.merger,visual.patch_embed,visual.pos_embed- the vision tower.final_layer2,lm_head,visual.deepstack_merger_list- the output side.lm_headis the pixel-output head; scaling it radically changes the raw output scale, so treat it carefully.
What's actually worth doing
O1's reputation is "good editor, heavy, minutes per image." If you're scaling it, the sensible targets are the language-model layers for instruction-following behavior in edits (nudge the middle band), or the visual blocks for output coherence. Since the model is pixel-space, there's no VAE round-trip to compensate for scale changes - what you set in the weights shows up directly in the pixels, so small moves and multiple seeds are the discipline. Honestly, for most people the correct use of this node is curiosity: O1 is niche, and this is the scaler that makes experimenting with it possible.
Install
Search Easygoing in the ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/easygoing0114/ComfyUI-easygoing-nodes.git
Restart ComfyUI. No pip extras; needs a current ComfyUI with the V3 node API.
What to watch
The auto-detected prefix handling means it usually "just works" where a hardcoded-prefix scaler would silently no-op - but if your O1 variant was renamed or re-saved, verify with Key Name Inspector anyway. And keep expectations set: O1 is a two-week-wonder model that went quiet fast. This node is for the people still using it, not a reason to start.
Inputs (72)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| x_embedder. | FLOAT | 1.000–2 | — |
| t_embedder1. | FLOAT | 1.000–2 | — |
| final_layer2. | FLOAT | 1.000–2 | — |
| lm_head. | FLOAT | 1.000–2 | — |
| language_model.layers.0. | FLOAT | 1.000–2 | — |
| language_model.layers.1. | FLOAT | 1.000–2 | — |
| language_model.layers.2. | FLOAT | 1.000–2 | — |
| language_model.layers.3. | FLOAT | 1.000–2 | — |
| language_model.layers.4. | FLOAT | 1.000–2 | — |
| language_model.layers.5. | FLOAT | 1.000–2 | — |
| language_model.layers.6. | FLOAT | 1.000–2 | — |
| language_model.layers.7. | FLOAT | 1.000–2 | — |
| language_model.layers.8. | FLOAT | 1.000–2 | — |
| language_model.layers.9. | FLOAT | 1.000–2 | — |
| language_model.layers.10. | FLOAT | 1.000–2 | — |
| language_model.layers.11. | FLOAT | 1.000–2 | — |
| language_model.layers.12. | FLOAT | 1.000–2 | — |
| language_model.layers.13. | FLOAT | 1.000–2 | — |
| language_model.layers.14. | FLOAT | 1.000–2 | — |
| language_model.layers.15. | FLOAT | 1.000–2 | — |
| language_model.layers.16. | FLOAT | 1.000–2 | — |
| language_model.layers.17. | FLOAT | 1.000–2 | — |
| language_model.layers.18. | FLOAT | 1.000–2 | — |
| language_model.layers.19. | FLOAT | 1.000–2 | — |
| language_model.layers.20. | FLOAT | 1.000–2 | — |
| language_model.layers.21. | FLOAT | 1.000–2 | — |
| language_model.layers.22. | FLOAT | 1.000–2 | — |
| language_model.layers.23. | FLOAT | 1.000–2 | — |
| language_model.layers.24. | FLOAT | 1.000–2 | — |
| language_model.layers.25. | FLOAT | 1.000–2 | — |
| language_model.layers.26. | FLOAT | 1.000–2 | — |
| language_model.layers.27. | FLOAT | 1.000–2 | — |
| language_model.layers.28. | FLOAT | 1.000–2 | — |
| language_model.layers.29. | FLOAT | 1.000–2 | — |
| language_model.layers.30. | FLOAT | 1.000–2 | — |
| language_model.layers.31. | FLOAT | 1.000–2 | — |
| language_model.layers.32. | FLOAT | 1.000–2 | — |
| language_model.layers.33. | FLOAT | 1.000–2 | — |
| language_model.layers.34. | FLOAT | 1.000–2 | — |
| language_model.layers.35. | FLOAT | 1.000–2 | — |
| visual.blocks.0. | FLOAT | 1.000–2 | — |
| visual.blocks.1. | FLOAT | 1.000–2 | — |
| visual.blocks.2. | FLOAT | 1.000–2 | — |
| visual.blocks.3. | FLOAT | 1.000–2 | — |
| visual.blocks.4. | FLOAT | 1.000–2 | — |
| visual.blocks.5. | FLOAT | 1.000–2 | — |
| visual.blocks.6. | FLOAT | 1.000–2 | — |
| visual.blocks.7. | FLOAT | 1.000–2 | — |
| visual.blocks.8. | FLOAT | 1.000–2 | — |
| visual.blocks.9. | FLOAT | 1.000–2 | — |
| visual.blocks.10. | FLOAT | 1.000–2 | — |
| visual.blocks.11. | FLOAT | 1.000–2 | — |
| visual.blocks.12. | FLOAT | 1.000–2 | — |
| visual.blocks.13. | FLOAT | 1.000–2 | — |
| visual.blocks.14. | FLOAT | 1.000–2 | — |
| visual.blocks.15. | FLOAT | 1.000–2 | — |
| visual.blocks.16. | FLOAT | 1.000–2 | — |
| visual.blocks.17. | FLOAT | 1.000–2 | — |
| visual.blocks.18. | FLOAT | 1.000–2 | — |
| visual.blocks.19. | FLOAT | 1.000–2 | — |
| visual.blocks.20. | FLOAT | 1.000–2 | — |
| visual.blocks.21. | FLOAT | 1.000–2 | — |
| visual.blocks.22. | FLOAT | 1.000–2 | — |
| visual.blocks.23. | FLOAT | 1.000–2 | — |
| visual.blocks.24. | FLOAT | 1.000–2 | — |
| visual.blocks.25. | FLOAT | 1.000–2 | — |
| visual.blocks.26. | FLOAT | 1.000–2 | — |
| visual.merger. | FLOAT | 1.000–2 | — |
| visual.deepstack_merger_list. | FLOAT | 1.000–2 | — |
| visual.patch_embed. | FLOAT | 1.000–2 | — |
| visual.pos_embed. | FLOAT | 1.000–2 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |