-
Notifications
You must be signed in to change notification settings - Fork 0
Spoolman Integration
Print 3D-printer filament spool labels from Spoolman.
Status: design specification. Implementation tracked in issue #16.
Spoolman does not offer outbound webhooks for spool events. Integration is therefore pull-mode only — you operate from inside the hub UI:
- Open the hub (e.g. on your phone)
- Switch to the Spoolman tab on a printer
- Search for a spool by ID, name, vendor, material, or partial match — the hub queries Spoolman's REST API
- Pick the spool from the results
- Choose a layout from the dropdown (see layouts below) and the tape size if not auto-set
- Hit Print → label prints
You / phone Hub Spoolman
───────────── ───── ─────────
1. Open hub UI ─────►
2. Switch to Spoolman tab
3. Search "PLA black" ─────► /api/lookup/spoolman/search?q=PLA+black
─────► GET /api/v1/spool?filament_name=PLA…
◄───── matching spools
◄────── search results
4. Click the spool ─────► /api/lookup/spoolman/<id>
─────► GET /api/v1/spool/<id>
◄───── full spool detail
◄────── LabelData
5. Choose layout
Click Print ─────► /api/print/<printer>?layout_id=<id>
──► PrintQueue worker → printer
◄── live status via SSE
There is no automatic / triggered printing in Spoolman integration. If you need that, file a feature request in Spoolman upstream — the hub would happily consume a webhook if Spoolman adds one.
Per ADR 0012, every label has a layout — a saved recipe describing what the printed label looks like. You can:
- Use a seeded default (e.g.
spoolman-spool-12mm) - Save your own custom layout for Spoolman (e.g. "vendor + material + colour swatch + remaining weight")
- Pick which layout to use for each print job
- Set a different default per
(integration, tape_mm)combination
Available Spoolman fields you can put on a layout (extends as Spoolman API evolves):
| Field path | Example value |
|---|---|
title |
"PLA Black" (resolved from filament.name) |
primary_id |
"42" (the spool ID) |
qr_payload |
https://<your-host>/spool/42 |
secondary[0] |
filament material, e.g. "PLA"
|
secondary[1] |
filament vendor, e.g. "Polymaker"
|
extras.weight |
initial spool weight in g |
extras.remaining_weight |
current remaining weight in g |
extras.color_hex |
filament colour as hex code (for colour swatch element) |
extras.first_used |
first-use date |
Seed layouts shipped:
-
spoolman-spool-12mm(default for 12mm tape) — QR + name + material -
spoolman-spool-with-vendor-24mm(default for 24mm tape) — QR + name + material + vendor + remaining weight
Create your own via POST /api/layouts — see the API reference at /redoc on a running hub.
If your Spoolman is open (default), no credential setup is needed.
Hub .env:
SPOOLMAN_URL=https://spoolman.example.com
# Optional, only if your Spoolman has authentication enabled
# SPOOLMAN_API_TOKEN=<your-token>Restart the backend container:
docker compose restart backendOpen the hub UI → switch to the Spoolman tab → type part of a spool name → matching results appear in 1-2 s.
- Pull-only — no auto-print on spool changes (Spoolman doesn't support outbound webhooks)
- Bulk print of multiple spools — out of scope for MVP. Possible future feature if requested
- The hub doesn't write back to Spoolman (no "marked as labelled" status). Read-only by design.
- Real-time spool inventory (Spoolman's running-out alerts) is out of scope — that's Spoolman's domain
| Symptom | Likely cause | Fix |
|---|---|---|
| Spoolman tab empty | Hub can't reach SPOOLMAN_URL
|
From the backend container: curl -fI $SPOOLMAN_URL
|
| 401 from Spoolman | API token expired or wrong | Set or refresh SPOOLMAN_API_TOKEN
|
| Search times out | Spoolman API slow / large dataset | Add filter terms; check Spoolman performance |
| Hub UI shows spool but printer fails | Tape size mismatch or printer offline | Check printer status page |
| Print runs but label looks wrong | Layout chosen doesn't fit the data shape | Pick a different layout, or create a custom one tailored to your fields |
- Spoolman REST API
- ADR 0012 — label-layout management
- Architecture: Pull-mode flow
- Issue #16 —
AppLookupServicedesign - Issue #17 — visual layout editor (post-MVP)
Getting Started
Integrations
Workflows
Help
Repo