9.9 KiB
LabelPi – User guide
1. Basics
Top bar: printer (only shown if several are connected) · roll · length (continuous rolls only) · rotated · copies · dithering · auto-cut (models with a cutter only) · cut mark · Print.
- The roll selected here must match the roll that is loaded. LabelPi asks if you change the roll compared with the last print.
- rotated: On continuous rolls the length is shown horizontally and the label is rotated by 90° when printing, so you read it like on screen.
- Dithering: Only useful for photos/greys. Keep it off for text, QR codes and barcodes.
- Cut mark (continuous rolls without a cutter): prints a dashed line at the end of the label so you cut in the right place by hand (e.g. QL-500).
Working in the designer
- View: By default only the most important functions are shown. Advanced view (bar at the top right) adds rotate, dithering, auto-cut, cut mark, series, grid and zoom. More elements (PDF, shapes, symbols) are in the + More … menu, saving/export under File ▾.
- Add elements from the toolbar, tap = select, drag = move, bottom-right corner = resize.
- The properties are in the bar at the bottom, which always stays visible. It also has buttons to align the element to the label.
- Elements snap to the edge, centre and other elements while moving (pink guide lines).
- ↶ / ↷ undo and redo (last 25 steps).
2. Elements
| Element | Notes |
|---|---|
| Text | Multi-line. Auto size fills the box with the largest possible font (set the box height). |
| Symbol | Warning, hazard, recycling signs etc. – they are text in a symbol font, so freely scalable. |
| QR code | Any text or link; placeholders allowed. The QR assistant builds Wi-Fi, vCard, email … for you. |
| Barcode | Choose a type (see below). With invalid content a red warning appears and nothing is printed. |
| Image | Photo/logo from your device. Switch dithering on for photos. |
| The page size selects the matching roll. Multi-page PDFs can be printed as a series (one page per label). | |
| Shapes | Circle, line, arrow, triangle – filled or outline, rotatable in 45° steps (properties → Rotation). |
| Table | See section 3. |
Barcode types
| Type | Input |
|---|---|
| Code 128 | Any characters |
| EAN-13 | 12 digits (check digit is added) |
| EAN-8 | 7 digits |
| Code 39 | Capital letters, digits, - . $ / + % and space |
| GS1-128 | With brackets, e.g. (01)09501101530003(17)271231(10)AB12 |
| Data Matrix | Any text, square |
3. Tables
- Tap a cell = select it (blue). Double-click or double-tap = type directly into the cell. Enter accepts, Tab jumps to the next cell, Esc cancels.
- In the properties: add/remove rows and columns, font, line width, first row bold.
- Table border: all lines · outside only · row lines · none.
- Border of a single cell: select the cell and tick top / bottom / left / right. This is in addition to the table border – with “none (cell borders only)” just the marked cells get lines (e.g. a single underline).
- Texts that are too long shrink automatically to fit the cell.
- You can also edit the content as text: one line per table row, columns separated by
;.
4. Placeholders
Placeholders work in text, QR codes, barcodes and table cells. The names are German; English short forms exist.
| Placeholder | Meaning | Example |
|---|---|---|
{n} |
Counter within the series | 1, 2, 3 … |
{n:5} |
Counter, 5 digits with leading zeros | 00001 |
{gesamt} / {total} |
Number of labels in the series | {n}/{gesamt} → 3/10 |
{lfd}, {lfd:5} |
Running counter that remembers (stored on the Pi, survives restarts and device changes) | 1001, 1002 … |
{lfd.invoice} |
Named counter, as many as you like | independent of {lfd} |
{datum} / {date} |
Today's date | 24.10.2026 |
{datum:JJJJ-MM-TT} |
Date with a custom format (JJJJ/YYYY, JJ/YY, MM, TT/DD) |
2026-10-24 |
{datum+30} |
Date plus 30 days (also -7; units d days, w weeks, m months, j/y years) |
23.11.2026 · {datum+6m:MM/JJJJ} → 04/2027 |
{zeit}, {zeit:HH:MM:SS} |
Time | 14:35 |
{jahr} {monat} {tag} |
Single date parts (also with offset, e.g. {jahr+1j}) |
2026 · 10 · 24 |
{kw} / {cw} |
ISO calendar week (e.g. {kw+2w} = week in two weeks) |
43 |
{wochentag} {monatname} |
Name in the interface language | Saturday |
{zufall:8} / {random:8} |
Random code (8 characters, without easily confused ones like 0/O and 1/I); every label of a series gets a different one | K7HT3QWZ |
{uuid} |
Random UUID | 3f2a9c1e-… |
{ColumnName} |
Value from the CSV column (CSV series only) | {Name} |
English short forms: {date} {time} {year} {month} {day} {weekday} {cw} {random} {total} {seq}.
Filters (append with |, combinable): {Name|gross} UPPERCASE · {Name|klein} lowercase · {Name|titel} Title Case (English: |upper |lower |title) · {n:8|luhn} appends a Luhn check digit · {n:12|gtin} appends the EAN/GTIN check digit.
Notes
- Date and time come from the device you print from. Unknown placeholders are left unchanged.
{lfd}reserves the numbers when printing. If printing fails the counter is reset (no gaps). You see the next value in the preview and under Settings → Counter, where you can also change it.- Examples:
SN-{jahr}-{lfd:4}→SN-2026-0001·Best before {datum+30}·CW {kw}/{jahr}·{n:11|gtin}as EAN content.
5. Series (“Series…”)
- Counter: set start, step and count. Example: start 100, step 5, count 10 → 100, 105, …, 145.
- CSV file: first row = column names, then one label per row. Separator
;or,, UTF-8.UseName;Item;Number Miller;Screw M4;1001 Smith;Nut M4;1002{Name},{Item},{Number}in the designer. - PDF pages: created when you import a multi-page PDF.
- Copies apply per label of the series. Printing happens in blocks; the history only shows the first label of the series.
- The preview first shows label 1; use ‹ › next to “Series…” to page through all labels.
6. Grid (“Grid…”)
Continuous rolls only. Several labels side by side and below each other on one strip:
- Set the label width in mm (e.g. 28 mm on a 62 mm roll for two columns).
- Set columns × rows and gap.
- When printing, consecutive labels (copies or series) fill the grid. If the grid does not fit the roll an error appears.
7. Templates, history, export, backup
- Templates: save with “Save as template”, sort into folders, edit (name/folder) and export.
- History: every print and every “Save” ends up here. Print again, Edit, or use Select to delete/export several.
- Export/import: labels and templates as a JSON file, e.g. to share. ⬇ PNG/PDF exports the current label as an image or PDF.
- Backup: Settings → Save database stores everything (including printers and password), Restore backup puts it back.
8. Printers and security
- USB printers are detected automatically. Several identical models are told apart by their USB port.
- Network printers (LAN/Wi-Fi): Settings → Add network printer (name, IP, model).
- Password protection: Settings → Password protection. Without it anyone on the network can print – use it only in trusted networks.
9. Form mode, QR assistant
- Form mode: every template has an Form button. It shows only a small form with one field per custom placeholder (e.g.
{Name},{Room}), a preview and the number of copies – no designer. Ideal for colleagues who only need to print. - QR assistant: select the QR code and click QR assistant… in the properties. Types: link, Wi-Fi access, contact (vCard), email, phone, SMS, location, free text. You fill in the fields and the content is built correctly. Placeholders are allowed here too.
9a. Keyboard shortcuts
| Key | Action |
|---|---|
Del |
Delete the selected element |
Ctrl+Z |
Undo |
Ctrl+Y or Ctrl+Shift+Z |
Redo |
Enter / Tab / Esc |
In a table cell: accept / next cell / cancel |
10. Common problems
| Problem | Solution |
|---|---|
| Label cut off or misplaced | Is the roll in the app the same as the loaded one? Check “rotated”. |
| Barcode is not printed | Check the input (e.g. EAN-13 needs 12 digits). |
| Text looks different on paper | Dithering off; font not too small (below about 6 pt). |
| Page not reachable | Pi and device on the same network? Use the IP instead of labelpi.local. |
| More help | docs/INSTALL.md (installation, troubleshooting) |
11. Languages
The interface is available in German and English. Choose the language in the bar at the top right; it is remembered per device (the browser language is used on first start).
Adding a new language
- Settings → Languages → Download template for a new language (
neue-sprache.json). - Open the file: the German text on the left must not be changed, enter your translation on the right.
{}are placeholders for numbers/names and must stay in the same number and order. Empty entries are shown in German. - Set
"_name"at the top to the name of the language, e.g."Français". - Save the file as languagecode.json, e.g.
fr.json. - Add language file (.json) – or put the file into the
lang/folder on the Pi. Custom files survive updates and take precedence over built-in ones.
Translating this guide (optional): put it into the lang/ folder (or docs/) as ANLEITUNG.fr.md – it is then shown under Help when that language is active. Without a translation the German guide is shown.
Placeholders such as {datum} keep their names; English short forms exist ({date} …). Dates, weekdays and month names appear in the selected language. If you would like to share your translation, the project welcomes a pull request.