Zebra GX430t label printer¶
Direct-thermal / thermal-transfer desktop label printer, 300 dpi, on the LAN at 192.168.5.16 (Cow Robot production profile; the README example says .20 and is wrong), raw ZPL on
TCP 9100 (the Universal Tester's production profile prints bag labels to it that way:
Universal_Tester_003/host/universal_tester/printers/zebra_gx430t.py, ZebraGX430T — renders a bitmap,
encodes it as a ^GFA raster, sends over a socket). The server prints the same way; no CUPS, no driver.
First label printed from the server 2026-09-14 20:5x (Bin 03 location label).
Stock loaded (2026-09-14)¶
- 2 × 1.5 in (50.8 × 38.1 mm) labels — the size for the opening stock count (SOP-023).
Templates in the ERP¶
Sources are kept in hardware/labels/ in this vault (the ERP copy is the live one; edit here, upload with
PATCH /api/label/template/<pk>/ multipart template=). The QR encodes the public ERP page URL
(https://erp.embeddedera.com/stock/item/<pk>/ or /stock/location/<pk>/), so a phone camera opens the
record behind the Access login; InvenTree's stock INVENTREE_BASE_URL setting was erp.lan and is now the
public host, which is what base_url in a template renders to.
- EmbeddedEra Stock Label 2x1.5 in (Zebra GX430t) — template pk 9, stock items: QR, IPN,
description, lot, location, qty, MPN, item id, date. Source: label/ee_stock_label_2x1_5.html
in the InvenTree media volume.
- EmbeddedEra Location Label 2x1.5 in (Zebra GX430t) — pk 10, bins/shelves.
- EmbeddedEra Part Label 2x1.5 in (Zebra GX430t) — pk 11, one part number regardless of lot.
- The 62 × 29 mm and 25 × 25 mm templates are for the Brother QL; do not send them here.
Reprints¶
Scan a label on the same page: photograph any label — ours (URL QR), InvenTree short codes, a DigiKey/Mouser
Data Matrix, an LCSC QR, or a factory Code 128 MPN;order;qty;site — and the matching bin/item/part row appears with
its Print button (POST /labels/api/scan, zxing-cpp server-side, photo kept in memory only).
home → Production tools tile (/tools, Production + Administration; /labels redirects): Bin / Item / Part search, copies 1–10, prints
straight to the printer through labelprint.py + zebra.py. PDF fallback when the printer is off.
Printing¶
From the Stock count queue (/stock): the Item label / Bin label buttons render the ERP template
to a 300 dpi bitmap and send it straight to the printer (ZEBRA_HOST in ~/.config/zebra/env). Fallback:
the same PDF link, printed from a browser at 100 % scale, no fit-to-page, paper size 2 × 1.5 in.
Bulk from the ERP: Stock → filter → select all → Print Label → GX430t template → one PDF, one label per page.
The web tool considers the printer ready only when it answers the harmless ZPL ~HS host-status command.
The sender also waits for TCP acknowledgement of the full raster and uses a bounded send buffer/timeout, so a
wedged network card cannot be reported as a successful print. The stock-count queue retains its PDF fallback;
Production Tools reports the direct-print failure without creating a PDF. If the printer accepts TCP but does not
answer ~HS, power-cycle it before retrying; a power cycle discards its old TCP sessions.
Production Tools has two explicit item actions. Reprint inventory label renders the existing ERP label and
shows the ERP quantity. Print box labels sends direct ZPL: quantity-on-each-label plus number-of-labels, with
the Zebra ^PQ copy count. Box labels do not write to the ERP, track or number boxes, split stock, or create a
PDF. Direct-print failure is reported on the page.
Later¶
inventreelabelmachine's Zebra driver could replace our sender (same IP:port), which would let any ERP
page print directly. Not needed while the stock queue is the only bulk printer.