A region is tileable if it has equal numbers of black and white triangles that can be perfectly matched.
Sampling Methods:
Weight Distributions:
Advanced:
Drawing Tools:
Region Tools:
Presets: Hexagon (a,b,c), Letters A-Z, Numbers 0-9, Shape of the Month
Visualization:
Export Options:
Performance: Uses WebGPU when available, falls back to multi-threaded WASM.
| 🖐 | Pan canvas |
| ✏️ | Draw triangles |
| 🧽 | Erase triangles |
| ⭕+ | Lasso fill |
| ⭕− | Lasso erase |
| 📐 | Snap to grid |
| Shift | Toggle draw ↔ erase |
| Cmd-click | Complete lasso |
| S | Perfect Sample (CFTP) |
| G | Start/Stop Glauber |
| Space | Pause/Resume Glauber |
| 3 | Toggle 3D view |
| R | Reset view |
| U | Scale Up region (2×) |
| + / - | Zoom in/out |
| C / Shift+C | Next/Previous palette |
| P | Permute colors |
| ← → | Previous/Next palette |
| Z | Undo |
| H | Toggle hole labels |
| L | Cycle render mode (3D) |
| Y | Redo |
| M | Make tileable |
| F | Toggle fullscreen |
| ? | Show this help |
| Esc | Close dialogs |
Link to code
(This simulation is interactive, written in JavaScript, see the source code of this page at the link)
Link to code
(C++ code for the simulation (compiled to WebAssembly))