Jigsaw Pattern Generator
Generate customizable jigsaw puzzle cutting patterns with adjustable tabs, jitter, and offsets. Export as SVG or PNG for laser cutting or printing.
About
Jigsaw puzzle cutting patterns require precise geometric construction. Each interior edge must form a tab-and-socket pair using cubic Bézier curves, where control point placement determines whether pieces interlock without overlap or gap. Miscalculated offsets or excessive jitter produce tabs that collide with adjacent edges, rendering the pattern unusable for laser cutting or die manufacturing. This generator computes a full grid of edges with configurable tabSize, jitter, and tabOffset parameters, applying a seeded pseudo-random number generator so any pattern is fully reproducible. Boundary edges remain straight. The tool approximates ideal interlocking geometry assuming uniform rectangular tiles. Note: extreme parameter combinations (high jitter with large tab size) can produce self-intersecting paths. Inspect your output at the extremes before committing to physical production.
Formulas
Each jigsaw edge is constructed from a sequence of cubic Bézier curve segments. Given an edge of length L running from point A to point B, the tab protrudes perpendicular to the edge direction by a depth of d:
The tab center is located at the midpoint of the edge, shifted by tabOffset:
where δ ∈ {−1, +1} is chosen randomly per edge. Jitter displaces each Bézier control point by a vector whose components are drawn from [−jitter × L, +jitter × L]. The tab direction (protrusion vs. socket) is assigned a random sign s ∈ {−1, +1} per edge. The PRNG uses a Mulberry32 algorithm seeded from the user-provided seed value:
where state is a 32-bit unsigned integer. This guarantees identical output for identical seeds across all platforms.
Variable legend: L = edge length, d = tab depth, tabSize = tab size parameter (0.1 - 0.5), tabOffset = positional shift fraction (0 - 0.15), jitter = control point noise fraction, δ = random direction sign, s = tab polarity.
Reference Data
| Parameter | Range | Default | Effect |
|---|---|---|---|
| Columns | 2 - 50 | 10 | Number of horizontal tile divisions |
| Rows | 2 - 50 | 8 | Number of vertical tile divisions |
| Tile Width | 20 - 200 px | 80 | Width of each puzzle piece |
| Tile Height | 20 - 200 px | 80 | Height of each puzzle piece |
| Tab Size | 0.1 - 0.5 | 0.3 | Fraction of edge length used for tab protrusion depth |
| Jitter | 0.0 - 0.15 | 0.04 | Random displacement of Bézier control points as fraction of edge length |
| Tab Offset | 0.0 - 0.15 | 0.0 | Shifts tab center away from midpoint of edge (random direction per edge) |
| Seed | 0 - 999999 | 42 | Deterministic PRNG seed for reproducible patterns |
| Randomize Jitter | On / Off | Off | Each edge gets a random jitter value between 0 and the max jitter |
| Randomize Offset | On / Off | Off | Each edge gets a random offset between 0 and the max offset |
| Stroke Width | 0.5 - 5.0 px | 1.5 | Line thickness of the cut path |
| Show Grid | On / Off | Off | Overlay faint grid lines showing tile boundaries |