PettyPaintArguments
Bundle every sampler setting into one wire
- skip
- PETTYARGS
A KSampler has eleven settings you care about - seed, steps, cfg, sampler, scheduler, denoise, noise behavior, start/end steps - and every workflow you copy has them scattered across three nodes with different defaults. PettyPaintArguments collects the whole sampler config into a single bundle: eleven inputs in, one PETTYARGS output out. That bundle is exactly what the pack's PPKSamplerAdvanced node expects, so the pair forms a "configure sampling in one place, sample in another" pattern.
It's an arguments-object pattern ported to the graph, and it shines in two situations. First, when you have one settings source that multiple sampler branches should share - change the steps once, every KSampler picks it up. Second, when a workflow is driven from a hub like the pack's PettyPaintComponent, which outputs steps and denoise picked in the web app; you can wire those into this node and let everything else stay as defaults.
How it works
It's a pure data collector - no sampling happens here. Every input is optional, every one has a sensible default (steps 20, cfg 8.0, denoise 1.0, add_noise/return_with_leftover_noise "enable"), and the node stuffs them all into one dict under the PETTYARGS wildcard type. The sampler downstream unpacks that dict. Because all the inputs are forceInput, you're meant to wire values in from constant nodes or other nodes rather than rely on typing - which is annoying when you just want to tweak a number, but it's what makes the bundle actually sharable across branches.
The inputs that matter
steps(1–10000),cfg(0–100),denoise(0–1) - the three you'll touch constantly.sampler_nameandscheduler- dropdowns listing the full ComfyUI sampler/scheduler menus (euler, dpmpp_2m, lcm, and all the rest; normal, karras, exponential, …).noise_seed,start_at_step,end_at_step- for advanced/partial sampling.skip- a wildcard passthrough that rides along in the bundle; wire anything through it if you need the sampler branch to carry extra data.- Output:
PETTYARGS(*), feeding PPKSamplerAdvanced.
Installing it
It ships in the petty-paint pack:
cd ComfyUI/custom_nodes
git clone https://github.com/mephisto83/petty-paint-comfyui-node
Restart ComfyUI, or install via ComfyUI Manager searching "petty-paint-comfyui-node". Declared dependency: Flask==2.1.2, unused here.
Common issues
The trap is expecting this node to sample anything - it doesn't. Wire PETTYARGS into the pack's PPKSamplerAdvanced (or a compatible sampler) or you'll get nothing. Second: every input being forceInput means unwired optional inputs can throw validation errors in some ComfyUI versions, so it's easiest to feed the whole bundle from a small set of constant nodes rather than mix typed values with wired ones. And don't confuse it with PettyPaintKSamplerAdvanced, which does sample and takes a PETTYARGS - this node makes the bundle, that one spends it.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| add_noiseopt | STRING | enable | — |
| skipopt | * | — | |
| noise_seedopt | INT | 00–18446744073709550000 | — |
| stepsopt | INT | 201–10000 | — |
| cfgopt | FLOAT | 8.00–100 | — |
| sampler_nameopt | COMBO | 34 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +28 | |
| scheduleropt | COMBO | 9 options: normal, karras, exponential, sgm_uniform, simple, ddim_uniform, +3 | |
| start_at_stepopt | INT | 00–10000 | — |
| end_at_stepopt | INT | 100000–10000 | — |
| return_with_leftover_noiseopt | STRING | enable | — |
| denoiseopt | FLOAT | 1.000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| PETTYARGS | * | — |