1212
GitHub - Janez76/spool-tag-propus: Spool Propus - Filament Tag Manager for 3D Printing. Read/write NFC tags, QR codes, slicer profiles, drying database. Self-hosted via Docker. Β· GitHub
Skip to content

Janez76/spool-tag-propus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🧡 Spool Tag Propus

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!

Buy Me a Coffee


✨ Features

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

πŸ–ΌοΈ Screenshots

Coming soon


πŸš€ Quick Start (Docker)

Prerequisites

  • Docker & Docker Compose
  • (Optional) A Spoolman instance for filament imports

1. Clone the repository

git clone https://github.com/Janez76/spool-tag-propus.git
cd spool-propus

2. Start with Docker Compose

docker compose up -d

This starts two containers:

Container Port Description
spool-propus 8090 Nginx frontend
spool-propus-api 5000 Flask backend (API + data sync)

3. Open in browser

http://localhost:8090

For NFC support on mobile, HTTPS is required. See the HTTPS Setup section.


πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   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)

πŸ”§ Configuration

Environment Variables (Backend)

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).

HTTPS Setup

Web NFC requires a secure context. Options:

  1. Cloudflare Tunnel (recommended): Expose your local instance via a tunnel β€” automatic HTTPS
  2. Self-signed certificate: Mount your certificate into the Nginx container and use port 8443
  3. Reverse proxy: Use Traefik, Caddy, or another reverse proxy with Let's Encrypt

Spoolman Integration

Enter your Spoolman server URL in the app (e.g., http://192.168.1.x:7912) to import spools directly.


πŸ“ Project Structure

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

πŸ› οΈ Development

Frontend

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 8080

Backend

cd backend
pip install -r requirements.txt
python app.py

The backend starts on port 5000 and automatically begins syncing slicer profiles and filament data.


πŸ“‹ Supported NFC Tag Formats

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 Support

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.


πŸ“„ License

This project is licensed under the MIT License β€” see LICENSE for details.


🀝 Contributing

Contributions are welcome! Feel free to open issues or pull requests.


β˜• Support

If you find this project useful, consider buying me a coffee!

About

Spool Propus - Filament Tag Manager for 3D Printing. Read/write NFC tags, QR codes, slicer profiles, drying database. Self-hosted via Docker.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors