Introduction
O.D.I.N. (Orchestrated Dispatch & Inventory Network) is a self-hosted 3D print farm management platform. It connects every printer in your fleet to a single dashboard -- regardless of brand or protocol -- and gives you real-time telemetry, job scheduling, AI failure detection, inventory tracking, and order-to-ship workflow.
One Docker container. One dashboard. Every printer.
Key Capabilities
Multi-Protocol Printer Support
O.D.I.N. speaks four printer protocols natively:
| Protocol | Printers | Connection |
|---|---|---|
| Bambu MQTT | X1C, P1S, P1P, A1, A1 Mini, H2D | MQTT subscription to device telemetry |
| Klipper / Moonraker | Any Klipper-based printer | REST polling (3-second interval) |
| PrusaLink | Prusa MK4, MK3.9, XL, Mini | HTTP polling via PrusaLink API |
| Elegoo SDCP | Saturn, Mars, and other Elegoo printers | Smart Device Communication Protocol |
All protocols provide real-time status, temperature monitoring, print progress, and remote control (start, pause, resume, cancel).
Camera Streaming
WebRTC camera streaming via go2rtc with sub-second latency. Supports RTSP, USB, and IP cameras. View live feeds from the dashboard, arrange multi-camera grids, or use the dedicated TV dashboard for wall-mounted displays.
Vigil AI -- Print Failure Detection
On-device ONNX inference detects print failures in real time:
- Spaghetti detection -- filament extruding into air
- Detachment -- print separating from the bed
- First-layer issues -- poor adhesion or warping
- Build plate detection -- verify plate readiness before prints
Failures trigger configurable actions: auto-pause the printer, send push notifications, fire webhooks, or alert via Discord/Slack/Telegram.
Job Scheduling
Queue jobs across your fleet with intelligent scheduling:
- Color-match scoring -- automatically assigns jobs to printers with the right filament loaded
- Time slot allocation -- schedule jobs around blackout hours and quiet periods
- Load balancing -- distribute work evenly across available printers
- Approval workflows -- optional job approval before printing starts
Order-to-Ship Workflow
Manage the full lifecycle from order to shipment:
- Products with bill-of-materials (BOM) linking models to required prints
- Orders with line items, status tracking, and scheduling
- Invoicing with PDF generation
- Consumables inventory with low-stock alerts
Spool & Filament Inventory
Track every spool in your fleet:
- Weight tracking with manual or scale-based updates
- QR code labels for scan-to-assign workflows
- Drying session logging
- Spoolman integration for existing inventories
- Automatic AMS sync for Bambu printers
Enterprise Security
- RBAC -- admin, operator, and viewer roles with granular per-endpoint permissions
- MFA -- TOTP-based multi-factor authentication
- OIDC SSO -- integrate with Google, Okta, Authentik, or any OIDC provider
- Audit logs -- full request logging with export
- Session management -- view and revoke active sessions
- API tokens -- scoped tokens for automation
- IP allowlisting -- restrict access by source IP
System Requirements
| Requirement | Minimum |
|---|---|
| Docker Engine | 20.10+ |
| Docker Compose | v2+ |
| RAM | 2 GB (typical runtime ~256 MB) |
| Disk | 10 GB |
| Architecture | amd64 or arm64 |
O.D.I.N. runs as a single Docker container with 7 supervised processes. There are no external dependencies -- no Redis, no PostgreSQL, no message broker. SQLite in WAL mode handles all persistence.
Stack
- Backend: Python 3.11, FastAPI
- Frontend: React 18, Vite, TailwindCSS
- Database: SQLite (WAL mode)
- Streaming: go2rtc (WebRTC / HLS)
- AI: ONNX Runtime for inference
- Deployment: Docker with supervisord
License
O.D.I.N. is licensed under the Business Source License 1.1 (BSL 1.1). The license converts to Apache 2.0 on February 7, 2029. You can self-host and use it freely; the BSL restriction only prevents offering O.D.I.N. as a hosted service to third parties.
Next Steps
- Installation -- get O.D.I.N. running in under a minute
- First Login & Setup -- create your admin account and add printers
- GitHub -- source code and issue tracker
- Discord -- community support and discussion