Painter Seed
One seed for every sampler, plus a dice button that runs it
- seed
You have a seed and it needs to reach three places: the sampler, the second sampler on your upscale pass, and maybe a note node or a filename. Type it into each widget separately and the first time you forget one you get a silent mismatch - two passes of the same workflow on different noise, and no error message telling you why they don't look alike.
Painter Seed is the smallest possible fix for that: one INT input, one INT output, nothing else. It's the value-node pattern from the plumbing layer of ComfyUI, and this particular one is a pure passthrough with a small trick attached.
The one input, the one output
seed (default 0, max 1125899906842624) in, seed out. That upper bound isn't arbitrary - it's 2^50, deliberately inside the range ComfyUI samplers and JavaScript's float handling can carry without losing precision at the edges.
Wiring it is the part people miss. On each sampler, right-click the seed field and pick Convert widget to input (or drag off the widget in newer frontends), then connect that new socket to this node's output. Once it's a wire, the number comes from the wire: the samplers' own widgets stop being the source of truth, so you set the seed once, here, and every sampler downstream obeys. The node also declares control_after_generate, so the standard fixed / increment / decrement / randomize dropdown rides along on the widget.
The dice button
The pack ships a front-end script that adds a 🎲 Painter Random Seed button under the seed field. Clicking it does three things in one gesture: it flips the control dropdown to fixed, rolls a fresh random seed, and queues a run. So it's a randomize-and-generate button, not just a randomize button - which is exactly what you want when you're farming seeds and don't want a confirmation click in the loop. It also links itself to the seed widget so it stays attached when the node rearranges.
Where it fits, and what else does this
If you already run rgthree, its Seed node does the same fan-out plus a history of what the last seeds were - genuinely nicer when you're trying to get back to a good one. Core ComfyUI's PrimitiveInt does the value-sharing job with no extras at all. Painter Seed is worth installing for one specific reason: the roll-and-run button, and the fact that it arrives free with a pack you may already have for its video nodes.
The case where a shared seed node is not optional is a two-sampler chain - a low-res pass and a hires or latent-upscale refine. If those two samplers roll their own noise independently, the second pass is re-interpreting a different image than the first one built, and the result looks like the first pass was never finished.
The trap that has nothing to do with this node
Whatever node holds your seed, set ComfyUI's widget control mode to Before in the settings once, at install time. By default the auto-generate control fires after the run, which means the number displayed is the one that will be used next rather than the one that just produced the image in front of you. Find a great result, flip the dropdown to fixed to keep the seed, and you've already lost it. That's a global setting, not a Painter Seed bug, but it's the same wound.
If you do lose a seed, the recovery is the usual one: drag the output PNG back onto the canvas and the workflow - seed included - comes back with it.
Install
Search PainterNodes in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/princepainter/ComfyUI-PainterNodes
cd ComfyUI-PainterNodes && pip install -r requirements.txt
Restart. The node needs nothing beyond that - no models, no ffmpeg, no extra packages. It's a passthrough, so it also can't fail in interesting ways: if the seed isn't changing between runs, the problem is on the sampler side (the widget wasn't actually converted into an input, or something else is still feeding it).
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–1125899906842624 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| seed | INT | — |