Jurdn's Model Sculptor (Flux)
The cheapest custom model you'll ever make
- model
- model
The name is doing a lot of work. There's no model merging here, no LoRA, no training, no new file on your disk. You feed Jurdn's Model Sculptor (Flux) your loaded Flux.1 model, it multiplies different transformer blocks by different amounts, and hands back a patched copy that behaves like a subtly different model. That's the whole trick, and it costs you maybe ten minutes to try.
It sits in the models/advanced category, and in the graph it slots between Load Diffusion Model and your KSampler. The pitch: one checkpoint, multiple behaviors. Apply one gradient curve and your base handles portraits with more bite; apply another and it goes soft and stylized. The author's stated use case is iterative upscaling - put one shape on the first detail pass, a different one on the second - which lines up with how two-pass upscaling actually works: the second pass is where you want a model that invents coherent detail rather than just resampling pixels. Fair warning before you get invested: this pack is tiny and basically unknown. The Flux node has three search impressions to its name. There's no community track record to lean on, so judge it purely by what it does to your output.
What actually happens
The mechanism is simple once you see it. The node clones your loaded model, grabs the weights of every layer under diffusion_model., generates a curve with one value per target group, then applies each value as a per-layer weight scale. Because of how ComfyUI patches work, each affected layer's weights end up multiplied by roughly 1 + (curve value × strength). At the default strength of 0.1, a "Spike (Gaussian)" boosts the middle blocks by about 10% and leaves the edges almost untouched. Peaks and valleys of influence, exactly as the README promises. Negative strength flips the curve, so a descending shape becomes ascending and a spike becomes a dip.
The inputs that matter
There are only four, all required, so there's not much to get lost in.
- model - wire this straight from Load Diffusion Model.
- gradient_shape - ten options: the linears, Ease In/Out (Quadratic and Sine), Spike (Gaussian), Dip (Inverse Gaussian), Steps up/down, and Random (Noise). This defines the curve; start with Spike or Linear.
- strength - default 0.1, range −2 to 2. Remember it's a multiplier: 0.3 is a 30% weight boost on the affected layers, so the README's "start at 0.1, stay under 0.3" is not being timid.
- target_blocks - for Flux:
in_layers(the input encoders: img_in, time_in, guidance_in, vector_in, txt_in),double_blocks0–18 (the main transformer),single_blocks0–37 (the streamlined blocks), or Double & Single (Synced Shape). "all" covers the lot.
The output is a single MODEL that replaces the loader's connection into your sampler. One wire, done.
Install
Same pack as the SDXL and SD3 variants, so this covers all three:
cd ComfyUI/custom_nodes
git clone https://github.com/jurdnf/ComfyUI-JurdnsModelSculptor.git
Then restart ComfyUI. It's also in ComfyUI Manager under "ComfyUI-JurdnsModelSculptor". The refreshing part: there's no requirements.txt. Zero extra pip packages, no model files to download - just torch and numpy, which ComfyUI already runs on.
Where people get burned
- Wrong architecture. If you feed a non-Flux model in, the console prints
Found 0 patches matching target prefixesand the node silently passes your model through unchanged. Check the terminal output if nothing seems to happen. - Wiring it after other nodes. The README insists you connect directly from the model loader, and it's right: the node patches a clone, so chaining sculptors or sculpting after a LoRA stacks effects you didn't plan for.
- Random (Noise). It uses an unseeded
numpy.random- a different sculpt every run. Fun for exploration, useless for a reproducible workflow. Reach for one of the deterministic shapes. - Schnell and guidance_in. The
guidance_inlayer only exists on Flux.1 dev (and dev finetunes), not schnell. Targetingin_layerson schnell just finds fewer layers; harmless, but your curve covers less than you think.
Worth a shot in a two-pass upscale: Dip on the first pass, Spike on the detail pass. Ten minutes, no downloads, and your checkpoint file never gets touched.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| gradient_shape | COMBO | 10 options: Linear (Ascending), Linear (Descending), Ease In (Quadratic), Ease Out (Quadratic), Ease In/Out (Sine), Spike (Gaussian), +4 | |
| strength | FLOAT | 0.10-2–2 | — |
| target_blocks | COMBO | 5 options: all, in_layers, double_blocks, single_blocks, Double & Single (Synced Shape) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |