Filament Tag Manager for 3D Printing β Read, write, and manage NFC tags on filament spools using the OpenSpool (JSON) and OpenPrintTag (CBOR) standards.
β οΈ Beta β Actively developed. Feedback and contributions welcome!
| Feature | Description |
|---|---|
| NFC Tag Read/Write | Read and write filament data to NFC tags via Web NFC (Android Chrome) |
| OpenSpool & OpenPrintTag | Full support for both open standards |
| Slicer Profile Database | Browse and download Orca Slicer & Bambu Studio profiles from all manufacturers |
| Filament Database | Searchable database of filaments, synced from the Open Filament Database |
| Spoolman Integration | Import filament data directly from your Spoolman instance |
| QR Code Generator | Generate QR codes with filament data to label spools |
| QR Code Scanner | Scan QR codes with your camera to read filament info |
| Drying Profiles | Recommended drying temperatures and times for 20+ materials |
| Brand-Filtered Palettes | Material and color options filtered by manufacturer |
| Light/Dark Mode | Toggle between light and dark themes |
| PWA | Installable as a Progressive Web App on mobile and desktop |
| Self-Hosted | Run entirely on your own hardware via Docker |
Coming soon
- Docker & Docker Compose
- (Optional) A Spoolman instance for filament imports
git clone https://github.com/Janez76/spool-tag-propus.git
cd spool-propusdocker compose up -dThis starts two containers:
| Container | Port | Description |
|---|---|---|
spool-propus |
8090 |
Nginx frontend |
spool-propus-api |
5000 |
Flask backend (API + data sync) |
http://localhost:8090
For NFC support on mobile, HTTPS is required. See the HTTPS Setup section.
ββββββββββββββββ βββββββββββββββββββββ
β Browser ββββββΆβ Nginx (Frontend) β
β (PWA) β β :8090 / :8443 β
ββββββββββββββββ ββββββββββ¬βββββββββββ
β /api/*
ββββββββββΌβββββββββββ
β Flask (Backend) β
β :5000 β
β ββββββββββββββββ β
β β SQLite DB β β
β ββββββββββββββββ β
ββββββββββ¬βββββββββββ
β Sync (every 24h)
ββββββββββββββββΌβββββββββββββββ
βΌ βΌ βΌ
GitHub Repos Open Filament Spoolman
(Orca/Bambu) Database API (optional)
| Variable | Default | Description |
|---|---|---|
DB_PATH |
/data/spool_propus.db |
Path to the SQLite database |
SYNC_INTERVAL |
24 |
Hours between automatic data syncs |
GITHUB_TOKEN |
β | Optional: GitHub Personal Access Token for creating issues from error reports |
GITHUB_REPO |
β | Optional: Repository in owner/repo format (e.g. Janez76/spool-tag-propus) |
If both GITHUB_TOKEN and GITHUB_REPO are set, error reports submitted via "Fehler melden" will automatically create a GitHub issue. Create a token at GitHub Settings β Developer settings β Personal access tokens with repo scope (or fine-grained: Issues write access).
Web NFC requires a secure context. Options:
- Cloudflare Tunnel (recommended): Expose your local instance via a tunnel β automatic HTTPS
- Self-signed certificate: Mount your certificate into the Nginx container and use port
8443 - Reverse proxy: Use Traefik, Caddy, or another reverse proxy with Let's Encrypt
Enter your Spoolman server URL in the app (e.g., http://192.168.1.x:7912) to import spools directly.
Mehrere Propus/Spool-Projekte auf deiner NAS? Siehe docs/PROJECT_STRUCTURE.md fΓΌr die Γbersicht und VerknΓΌpfungen.
βββ public/ # Frontend (static files)
β βββ index.html # Main application (HTML + CSS)
β βββ app.js # Core application logic
β βββ openspool.js # OpenSpool format encoder/decoder
β βββ openprinttag.js # OpenPrintTag (CBOR) encoder/decoder
β βββ cbor.js # CBOR library
β βββ ndef.js # NDEF record handling
β βββ formats.js # Format detection and routing
β βββ color.js # Filament color palette
β βββ filamentdb.js # Filament database integration
β βββ profiledb.js # Slicer profile browser
β βββ drying.js # Drying profile data
β βββ qr.js # QR code generation/scanning
β βββ sw.js # Service Worker (PWA caching)
β βββ manifest.json # PWA manifest
βββ backend/ # Backend API
β βββ app.py # Flask application
β βββ database.py # SQLite database setup
β βββ sync.py # Data synchronization (GitHub, Open Filament DB)
β βββ requirements.txt # Python dependencies
β βββ Dockerfile # Backend container
βββ nginx.conf # Nginx configuration
βββ docker-compose.yml # Docker Compose stack
βββ README.md
The frontend is pure HTML/CSS/JavaScript β no build step required. Simply serve the public/ folder with any web server:
cd public
python -m http.server 8080cd backend
pip install -r requirements.txt
python app.pyThe backend starts on port 5000 and automatically begins syncing slicer profiles and filament data.
| Format | Encoding | Standard |
|---|---|---|
| OpenSpool | JSON (NDEF Text Record) | spuder/OpenSpool |
| OpenPrintTag | CBOR (NDEF MIME Record) | OpenPrintTag |
Both formats store filament metadata (brand, material, color, temperatures, etc.) on standard NTAG213/215/216 NFC tags.
| Platform | NFC Read | NFC Write | QR Code | PWA |
|---|---|---|---|---|
| Android Chrome | β | β | β | β |
| iOS Safari | β | β | β | β |
| Desktop Chrome | β | β | β | β |
| Desktop Firefox | β | β | β | β |
Web NFC is only available on Android Chrome. For other platforms, use the QR code feature as an alternative.
This project is licensed under the MIT License β see LICENSE for details.
Contributions are welcome! Feel free to open issues or pull requests.
If you find this project useful, consider buying me a coffee!