A small Windows desktop app for the Luck Jingle L13 / DP-L13 mini label maker (sold under many names: AiYin L13, SilverCrest 5890, Tronic 6326, "Fichero" / "Pocket Printer" egg printer) with firmware V3.08. It talks to the printer directly over Classic Bluetooth (RFCOMM) so no vendor app is required. It renders text or an image to the printer's 96‑dot head, and prints it with a live preview and progress bar.
It grew out of a reverse‑engineering session. The full protocol write‑up is in
docs/PROTOCOL.md. This project is in great parts vibe-coded using Opus 4.8 (Extra).
| Main window | Border / edge test | Printer info |
|---|---|---|
![]() |
![]() |
![]() |
- Live preview: WYSIWYG, showing the label as it prints (held with the edge that exits first on the right).
- Auto‑fit typography: largest font that fits, never below 12 px; text that won't fit on one line wraps to two.
- Centering: horizontal and vertical, on the printable label body.
- Border test: draw a rectangle around the whole printable area to check edge coverage.
- Image / logo mode: scaled, centered and thresholded to 1‑bit.
- Background printing: responsive UI with a progress bar and cancel.
- Printer info: model, firmware, serial, battery and status.
Grab the latest build from the Releases page, unzip
and run L13Printer.exe. It's self-contained, so no .NET install is required.
On first launch, Windows SmartScreen may warn about an "unknown publisher" (the build isn't code-signed). Click More info → Run anyway.
- To run the release: Windows 10/11 (x64). Nothing else; the download bundles the runtime.
- To build from source: .NET 10 SDK; Visual Studio 2026 optional (the solution uses the
.slnxformat). - A Bluetooth adapter (the app connects directly, no manual Windows pairing needed).
cd L13Printer
dotnet build
dotnet run --project src/L13.AppOr open L13Printer.slnx in Visual Studio 2026 and run L13.App.
The app needs the printer's Bluetooth MAC (e.g. 55:55:09:22:3F:9B). Enter it in
the Printer MAC field; both 55:55:09:22:3F:9B and 555509223F9B are accepted.
You do not need to pair the printer in Windows first. The app opens its own RFCOMM connection and Windows pairs the device automatically on the first connection (accept the pairing prompt if one appears), the same way the vendor app connects, you just supply the MAC.
Get the MAC with any of these:
Press the printer's button twice: it prints a small label with a QR code that
holds its pairing info (this is how the official app discovers it). Point your
phone's camera / any QR scanner at it; the decoded text contains the MAC (look for
the 55:55:09:22:3F:9B‑style value). Type that into the app.
Get-PnpDevice -Class Bluetooth |
Where-Object FriendlyName -eq 'ML Printer' |
ForEach-Object { ($_ | Get-PnpDeviceProperty -KeyName 'DEVPKEY_Bluetooth_DeviceAddress').Data }This prints the 12 hex digits, e.g. 555509223f9b. Add colons if you like.
Device Manager → Bluetooth → right‑click ML Printer → Properties → Details tab → Property: Bluetooth device address.
The channel is fixed at RFCOMM 1 for this model; you shouldn't need to change it.
- Enter your printer's MAC and click Printer info to confirm the connection. On the very first connection Windows may show a pairing prompt for you to accept.
- Type your text (or pick an image), adjust font / rotation / length as needed.
- Watch the preview; when it looks right, click Print.
Notes on the label geometry:
- The head is 96 dots (~12 mm) wide, which sits ~1 mm inside each edge of a 14 mm label (this is fixed hardware).
- Body length defaults to 28 mm (the printable body; 30 mm labels count the inter‑label gap in the pitch).
- After printing, the firmware seeks to the next label border (IR gap sensor); an eject feed (default 6 mm) advances it to the tear edge.
The printer speaks a mostly proprietary command set with an ESC/POS‑style raster
command (GS v 0). The essentials:
- Enable
10 FF F1 03, send raster bands1D 76 30 00 …(≤ 24 rows each), stop10 FF F1 45 - Seek to the next label border with a bare form feed
0C; fine‑feed with1B 4A nn - Status/info via
10 FF 40,10 FF 20 F0/F1/F2,10 FF 50 F1
The full reverse‑engineering write‑up (gap detection, parameter decoding, geometry,
orientation derivation) is in docs/PROTOCOL.md.
L13Printer.slnx
└─ src/
├─ L13.Core/ UI-agnostic engine (no WinForms dependency)
│ ├─ Bluetooth/ RfcommClient · NativeMethods (Ws2_32) · BluetoothAddress
│ ├─ Rendering/ LabelRenderer · RasterPacker · RenderOptions/Result
│ └─ Printing/ L13LabelPrinter · PrintOptions · PrinterStatus/DeviceInfo
└─ L13.App/ WinForms front end (MainForm, Program)
L13.Core has no UI dependency, so the same engine can back the GUI or a future
CLI. It uses the Windows Desktop framework only for GDI+ (System.Drawing).
Reverse‑engineering of this printer family builds on prior work by:
- atctwo — Reverse Engineering a Thermal Label Printer (the same DP‑L13)
- 0xMH — fichero-printer protocol notes
Not affiliated with the manufacturer. Use at your own risk. "Bluetooth" and any product names are trademarks of their respective owners.
Released into the public domain under The Unlicense. Do whatever you like with it. Give a present to the two authors atctwo and 0xMH if you find this useful, I can't claim any credit for their work.





0 comments
log in to comment.