RunningHub Step1X Edit
GPT-4o-style image editing at home, minus the API key
- ref_image
- image
If you saw Step1X-Edit drop in spring 2025 and thought "finally, local GPT-4o image editing," this is the node that actually makes it work in ComfyUI. RunningHub - the Chinese cloud-workflow platform - shipped it as a first-party wrapper around stepfun-ai's open Step-1X Edit model. The "RunningHub" in the name is a brand hint, not a requirement: this node calls no API, needs no account, and runs entirely on your GPU.
What it actually is
Step1X-Edit is stepfun-ai's take on conversational image editing: you hand it a reference photo and a plain-language instruction ("make it sunset", "change the shirt to denim") and it re-renders the image accordingly. It's a big multimodal DiT, roughly 5% larger than Flux, but the interesting part is the conditioner: it uses the full Qwen2.5-VL-7B-Instruct vision-language model to fuse your prompt and the reference image before the diffusion network denoises. That's why it can understand "the person on the left" in a way plain CLIP conditioning can't.
So the "node" is really a whole pipeline in one box. When you drop RunningHub Step1X Edit into your graph it builds the Qwen encoder, the VAE, and the diffusion model, encodes your ref image, runs a CFG denoise loop, decodes, and resizes the result back to the original dimensions. It wires up like one node but behaves like a mini app.
Fair warning on expectations: the launch hype said "GPT-4o image editing at home," and the Reddit consensus was that the results don't quite live up to that marketing - instructions sometimes need to be very literal. It's a real, workable model, not a miracle.
The inputs that matter
- ref_image - your input photo (IMAGE).
- prompt - the edit instruction, multiline. This is the whole game; be specific.
- num_steps (28) and cfg_guidance (6) - standard diffusion knobs. More steps costs more of your life; 28 is the tested default.
- size_level (1024) - target pixel count the ref is resized toward before editing (kept aspect-ratio safe, snapped to /16).
- use_fp8 (true) - the memory lever. It quantizes the DiT weights to float8 at runtime, which is what makes "Step1X Edit in 24G" believable.
- seed - for reproducibility.
Output is a single image (IMAGE) - wire it into a Save Image / Preview node like anything else. This is an output node with no Model/Pipe inputs: it's self-contained.
Install and the real gotcha: the models
Install is routine - ComfyUI Manager (search "ComfyUI_RH_Step1XEdit") or:
cd ComfyUI/custom_nodes
git clone https://github.com/HM-RunningHub/ComfyUI_RH_Step1XEdit.git
cd ComfyUI_RH_Step1XEdit
pip install -r requirements.txt
Then restart ComfyUI. Dependencies are standard (torch, transformers, accelerate, einops, safetensors); flash-attn and liger-kernel are optional comments, not required.
The actual hurdle is the downloads. The node loads everything from ComfyUI/models/step-1/, and you need all three pieces or it just fails to build:
step1x-edit-i1258.safetensors- the diffusion modelvae.safetensorsQwen2.5-VL-7B-Instruct/- the entire HuggingFace repo, ~15GB+. This is the chunk people underestimate.
The README's one-click Python script has a bug - it references an undefined step-1 variable instead of a real path, so it'll crash. Either fix that line to point at ComfyUI/models/step-1, or grab the three pieces manually from stepfun-ai/Step1X-Edit and Qwen/Qwen2.5-VL-7B-Instruct and keep the folder name exact. All told you're moving 20GB+ of weights, so plan for it.
Where people get burned
First run loads the whole stack (VAE + DiT + a 7B VLM), which takes a while before you see anything - that's normal. The 24GB figure is basically the floor; on a 4090 the README quotes ~100 seconds per image, so this is a "make coffee" node, not a "play with the seed" node. If you're under 24GB, use_fp8 is your only real lever. And since the models load the moment the node is constructed, don't expect it to be gentle on startup memory.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| ref_image | IMAGE | — | |
| prompt | STRING | — | |
| num_steps | INT | 281–18446744073709550000 | — |
| cfg_guidance | FLOAT | 6.00 | — |
| size_level | INT | 1024 | — |
| seed | INT | 420–18446744073709550000 | The random seed used for creating the noise. |
| use_fp8 | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |