Label Designer

Design labels in the browser. The preview comes from the real print renderer — not a CSS approximation.

Designer canvas showing SSCC palette label with object tree, property panel and dot preview at 203 dpi

The Designer: object tree left, registry-generated properties right, Dot-Preview at 203 dpi. The linter flags a quiet-zone violation in real time.

What you see is what prints.

The preview in the Designer is not a drawing on screen — it comes from the same ZPL renderer that sends dots to your thermal printer. If you see it here, it will look exactly like that on paper.

  • Snap-to-grid keeps objects aligned without manual pixel-pushing
  • Full undo/redo means you can experiment safely
  • Complete keyboard operation — no mouse required for any action
  • Sample data bar shows your label with realistic values before printing
  • Linter catches GS1 violations (quiet zones, font size, overflow) as you type
Honest limits: The AI diff overlay is a review tool — it shows before/after but never auto-commits changes to approved labels.

Declarative JSON under the hood.

Labels are stored as label.json — schema-versioned, patchable, designed as an LLM tool-use target. No proprietary binary format.

label.json · excerpt
{
  "schemaVersion": "1.3",
  "kind": "label",
  "id": "lbl_tpl_gs1_palette",
  "media": { "widthMm": 148, "heightMm": 105 },
  "variables": [
    { "name": "sscc", "type": "string", "required": true }
  ],
  "objects": [
    {
      "type": "barcode",
      "symbology": "gs1-128",
      "value": "${gs1.ai('00', sscc)}",
      "moduleWidthMm": 0.33,
      "quietZone": { "enforce": true }
    }
  ]
}
Object types
7 from registry
Precision
mm (µm rounding)
Rotation
0/90/180/270°
Preview DPI
203 / 300 / 600
FeatureDetail
Seven object typesText, barcode, shape, image, line, box, rich text — all generated from the registry schema, not hard-coded UI panels.
Dot-Preview toggleSee the exact dot raster at 203, 300 or 600 dpi. Toggle off to see the clean vector view.
Linter panelGS1 check digits, quiet zones, minimum font sizes, label boundary overflow — with jump-to-object links.
AI diff overlaySide-by-side comparison of draft vs approved versions. Requires explicit accept/reject — no silent changes.
Approval workflowVier-Augen: the creator cannot approve their own design. Distribution follows approval automatically.
Try it in the beta → Read the format spec
Approval diff showing before and after label versions side by side

Freigabe-Diff: Vorher/Nachher mit Vier-Augen-Prinzip. Der Ersteller kann nicht selbst freigeben.

Roadmap · v1.x

AI Copilot: Describe the label. Review every dot.

Describe what you need — “GS1 palette label with SSCC, batch and best-before date” — and the copilot drafts the label as label.json. The preview comes from the real renderer at every iteration. Nothing goes live without your review.

1
LLM draft
Describe it
“Palette label 148×105, SSCC + charge + MHD” — or upload a photo of an existing label.
2
Deterministic
Rendered for real
label.json is validated against the schema and rastered by the same engine that drives your printers.
3
LLM check
Self-correction loop
The copilot compares its render to the spec and fixes itself before you ever see a draft.
4
You decide
Diff & approval
Every AI change arrives as a draft with pixel diff. Accept, reject, edit — the linter stays the truth.
The four AI invariants (from the architecture spec): (1) No LLM in the print path — what prints is deterministic. (2) The linter is the truth, the LLM is the explanation — a finding stands because the rule found it. (3) Every AI change arrives as a draft through versioning, approval and pixel diff — no write path bypasses review. (4) Data sovereignty — runners stay LLM-free; model choice is yours. Full AI documentation →

Shipped today: lint explanation and log Q&A. The copilots are designed, specified — and honestly marked v1.x.