/catprinter

🐱🖨

Primary LanguagePythonMIT LicenseMIT

Cat Printer

Cat printer is a portable thermal printer sold on AliExpress for around $20.

This repository contains Python code for talking to the cat printer over Bluetooth Low Energy (BLE). The code has been reverse engineered from the official Android app.

Installation

# Clone the repository.
$ git clone git@github.com:rbaron/catprinter.git
$ cd catprinter
# Create a virtualenv on venv/ and activate it.
$ virtualenv --python=python3 venv
$ source venv/bin/activate
# Install requirements from requirements.txt.
$ pip install -r requirements.txt

Usage

$ python print.py --help
usage: print.py [-h] [--log-level {debug,info,warn,error}] [--img-binarization-algo {mean-threshold,floyd-steinberg,halftone}]
                [--show-preview] [--devicename DEVICENAME] [--darker]
                filename

prints an image on your cat thermal printer

positional arguments:
  filename

options:
  -h, --help            show this help message and exit
  --log-level {debug,info,warn,error}
  --img-binarization-algo {mean-threshold,floyd-steinberg,halftone}
                        Which image binarization algorithm to use.
  --show-preview        If set, displays the final image and asks the user for confirmation before printing.
  --devicename DEVICENAME
                        Specify the Bluetooth Low Energy (BLE) device name to search for. If not specified, the script will try to
                        auto discover the printer based on its advertised BLE service UUIDs. Common names are similar to "GT01",
                        "GB02", "GB03".
  --darker              Print the image in text mode. This leads to more contrast, but slower speed.

Example

% python print.py --show-preview test.png
⏳ Applying Floyd-Steinberg dithering to image...
✅ Done.
ℹ️ Displaying preview.
🤔 Go ahead with print? [Y/n]?
✅ Read image: (42, 384) (h, w) pixels
✅ Generated BLE commands: 2353 bytes
⏳ Looking for a BLE device named GT01...
✅ Got it. Address: 09480C21-65B5-477B-B475-C797CD0D6B1C: GT01
⏳ Connecting to 09480C21-65B5-477B-B475-C797CD0D6B1C: GT01...
✅ Connected: True; MTU: 104
⏳ Sending 2353 bytes of data in chunks of 101 bytes...
✅ Done.

Different Algorithms

Mean Threshold: Mean threshold

Floyd Steinberg (default) Floyd Steinberg

Halftone dithering Halftone