My Jigsaw Puzzle Effect
Turn any ComfyUI image into a jigsaw puzzle — no models, no GPU
- image
- IMAGE
The name is honest: MyJigsawPuzzleEffect turns any image in your graph into a jigsaw puzzle. You feed it an IMAGE from a VAE decode or LoadImage, and it hands back the same image sliced into puzzle pieces with little tabs and blanks, gray outlines, and an optional few pieces missing. That's the whole job. No model weights, no API key, no CUDA - it's pure PIL and numpy running on CPU, done in well under a second. If you've ever wanted a "coming soon" teaser, a puzzle thumbnail, or a placeholder that reads as intentionally unfinished, this is the cheap way to get it.
It's a novelty node, and it knows it. This is one of those single-trick custom packs that ComfyUI's ecosystem is full of - the fun stuff you add after the quality pipeline, not part of the quality pipeline. ComfyUI core doesn't include this sort of stylization, which is exactly why small effect packs keep appearing. There's no deep magic to learn; the interesting part is knowing what the knobs actually do.
How it works
The source is refreshingly small. The node takes your tensor, converts it to a PIL image, and tiles it into piece_size squares. Each square gets a classic puzzle "tab" on two edges and a matching "blank" on the others, drawn as smooth bezier-style curves - that's the interlocking look. A few pieces are then randomly removed if you asked for missing ones, the surviving pieces get pasted back onto a white background, and an emboss-style gradient plus a gray outline gives each piece a slightly raised feel.
Two things worth knowing before you get surprised:
num_missingpicks pieces at random with no seed input. Run it twice and different pieces vanish. If that matters, don't rerun and expect the same result - and there's no way to fix it from the node.- Only the first frame of a batch is processed (
image[0]in the source). Feed it a 4-frame batch and you get the puzzle of frame one. Keep it on single images.
The inputs that matter
All five inputs are in required, and only the image is a tensor:
piece_size(20–200, default 50) - how big each puzzle tile is. Lower = finer, more pieces; at 20 you get a dense grid, at 200 a chunky few-tile puzzle.num_missing(0–20, default 0) - how many pieces randomly disappear, leaving white gaps. At 0 it's just a puzzle-edged image with every piece in place.emboss_strength(0–1, default 0.8) - the shadow/highlight shading on each piece. Crank it for a chunky raised look, drop it for flat.stroke_opacity(0–1, default 0.8) - here's the honest caveat: in the current source this parameter is accepted but never actually used. The outline is always drawn at a fixed light gray, and adjusting this slider changes nothing visible. If it's a dead knob in your copy too, you're not doing anything wrong.image- yourIMAGEtensor.
The single output is an IMAGE; wire it straight into PreviewImage or SaveImage.
Installing it
The pack is Jigsaw Puzzle Effect Plugin (comfyui-PuzzleCrack-Effect). Try ComfyUI Manager first - search "Puzzle" and install from the list, then restart. One honest caveat: this one's publisher ID is blank in its pyproject, so it may not show up in Manager's registry at all. If Manager can't find it, the direct route always works:
cd ComfyUI/custom_nodes
git clone https://github.com/111496583yzy/comfyui-PuzzleCrack-Effect
Then restart ComfyUI. The pack only needs numpy, Pillow, and torch - all of which ComfyUI already has - so there are no extra model downloads and, unusually, no real dependency friction.
Troubleshooting
Because it's so small, there isn't much to go wrong. The realistic issues are the two quirks above: batch inputs silently collapse to frame one, and num_missing is unseeded so gaps move between runs. If you get nothing out, check that you're feeding a plain IMAGE (not a latent) and that you're not expecting the dead stroke_opacity slider to do something. Both nodes in this pack share the same install and the same "small single-purpose effect" vibe - it's the sibling MyRegionBoundaryEffect you'd grab if you wanted white region outlines instead of puzzle cuts.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| piece_size | INT | 5020–200 | — |
| num_missing | INT | 00–20 | — |
| stroke_opacity | FLOAT | 0.80–1 | — |
| emboss_strength | FLOAT | 0.80–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |