tessellate splits images into printable strips for thermal receipt printers, supporting all DIN formats (A0–A6) and custom banner sizes.
It’s ideal for large-format or experimental printing with standard receipt printers, roll printers, and thermal printers.
It exists as a python library and web interface.
Clone this repo and install dependencies:
pip install -r requirements.txtDIN format, vertical strips (A3, Floyd-Steinberg dither):
python3 tessellate.py tessellate img/thinker.jpg --din A1 --strip_mm 60 --direction vertical --dither_mode floydCustom size in centimeters (e.g., 55cm x 80cm, horizontal strips):
python tessellate.py tessellate img/trees.jpg --width_cm 55 --height_cm 80 --direction horizontal --dither_mode floyd --mode fillHalftone grid and inverted colours:
python tessellate.py tessellate img/palm.jpg --din A4 --invert --dither_mode halftoneOptions:
--output_folder Name of folder for image strips (default: tessellated_strips)
--strip_mm Width or height of each strip, in mm (default: 72.2)
--dither_mode floyd, halftone, or none
--direction vertical, horizontal or diagonal
--printer_dots_per_mm Print resolution (default: 8)
--halftone_cell_size Dot size for halftone (default: 8)
--mode How to resize: fit, fill, or stretch
--din Use a DIN size (e.g. A2, A4, etc)
--width_cm Custom width in centimeters (overrides DIN)
--height_cm Custom height in centimeters (overrides DIN)
--invert Invert the image (black <-> white)
See all available options:
python tessellate.py tessellate --helpDirect to USB receipt printer:
python tessellate.py print tessellated_strips --printer_name _0_0_0_0Or, using your system printer (via lpr):
python tessellate.py print tessellated_strips --printer_name YOUR_PRINTER_NAMEtessellate is also a web app built in Svelte. Runs entirely in the browser: load an image, set DIN/custom size and strip width, apply dithering (Floyd–Steinberg, Halftone, None, Invert), and export or print.
cd frontend
npm i
npm run dev
# open http://localhost:5173


