Repo of the Day
GitHub - ysfchn/dymo-bluetooth: Print labels on DYMO LT-200B over Bluetooth.
Published: Nov 7, 2026
Open repository ↗Print labels on DYMO LT-200B over Bluetooth. Contribute to ysfchn/dymo-bluetooth development by creating an account on GitHub.
Summary
ysfchn/dymo-bluetooth is a Python library and CLI for printing 1-bit images on a DYMO LetraTag LT-200B over Bluetooth LE, without relying on the printer’s mobile app. It combines Bluetooth discovery and printing with Pillow-based image conversion and documents the underlying GATT protocol for engineers working at that level.
What it is useful for
The project fits workflows where labels must come from application data rather than manual entry in the vendor app. For example, a small internal script could render an asset ID, a message such as “Hello world,” or a barcode as a monochrome image and send it to the printer. The CLI suits existing image files, while the Python API fits automation that needs printer discovery or programmatic pixel construction.
The protocol reference is also useful for custom clients or debugging: it lists the service and characteristic UUIDs, command directives, header and checksum format, 500-byte chunking, and printer status replies.
Several limits matter. Compatibility is documented only for the LT-200B, text-to-image generation is not included, and status replies are inconsistent: a printer can report completion even when the lid is open or no cassette is inserted. The lid must be closed and all four batteries adequately charged. Labels are 12 mm high, but the printable area is only 30 pixels at 200 DPI, with speed up to 7 mm/s, so artwork must suit a narrow, low-resolution label.
How engineers can use it
Install the released package:
python -m pip install --upgrade dymo-bluetooth
The README targets Python 3.10 or newer and says 3.9 should work. Bluetooth support requires Linux with BlueZ 5.43+, macOS 10.11+, or Windows build 16299+.
Check the documented CLI:
python -m dymo_bluetooth --help
It prints images to the first printer discovered nearby. For a Python workflow, create a Canvas, set pixels, stretch it by at least two, discover printers, then connect and call print:
import asyncio
from dymo_bluetooth import discover_printers, Canvas
async def main():
canvas = Canvas()
canvas.set_pixel(0, 0, True)
canvas = canvas.stretch(2)
printers = await discover_printers()
printer = printers[0]
await printer.connect()
await printer.print(canvas)
asyncio.run(main())
For text, the README recommends preparing an image externally, for example:
convert -background white -fill black -font DejaVu-Sans -pointsize 20 label:"Hello world" -filter point -resize x30 -gravity center -extent x30 -threshold 50% -type bilevel my_label.png
The package depends on bleak and Pillow; python-barcode is optional for barcode output. Because the README does not show the complete CLI syntax for selecting and printing an image, use its CLI help for that step.