Running a Small 3D Print Farm: Fleet Management, Job Queuing, and Spool Inventory with Spoolman
Somewhere between "one printer on the desk" and "a real print farm," a specific set of problems shows up that a single-printer workflow never has to deal with: which machine is free, which spool is loaded where, whether machine #4 finished three hours ago and has been sitting idle, and how much a given order actually cost in filament. None of this is hard individually, but without tooling it eats far more time than the printing itself. This guide covers the practical fleet-management stack for a small farm — roughly 3 to 15 printers — running Klipper or stock firmware, plus filament inventory tracking with Spoolman.
What Breaks First When You Scale Past One Printer
The first pain point is almost always visibility: with one printer you glance at it, with five you're walking around checking screens or tab-switching between browser windows. The second is filament tracking — "which spool is in printer 3" and "how much PETG do we have left" stop being answerable from memory once you're running more than a couple of materials across multiple machines. The third is job scheduling: knowing which machine is free and getting the next job queued on it without manually babysitting the process.
Choosing a Fleet Dashboard
ToolWorks WithBest For OctoFarmMultiple OctoPrint instancesCentralized dashboard, webcam grid, job queue across many OctoPrint printers Mainsail / Fluidd multi-instanceKlipper/Moonraker printersNative Klipper users who want per-printer control without a separate aggregator ObicoOctoPrint or Klipper (Moonraker plugin)Remote monitoring, AI-based failure detection, alerts when unattended SimplyprintCloud-connected slicer + printer agentSmall farms wanting a hosted dashboard with minimal self-hostingFor a Klipper-based farm, the simplest reliable setup is one Raspberry Pi (or a single more powerful host running multiple Klipper/Moonraker instances via Docker) per printer, each exposing Mainsail or Fluidd, with OctoFarm or Obico layered on top purely as an aggregated dashboard. See our Klipper install guide if you haven't already moved your printers off stock firmware — fleet tooling assumes Moonraker's API is available, which stock Marlin doesn't provide.
Networking the Farm
Give every printer's host a static IP or DHCP reservation — a fleet dashboard that has to rediscover printers after every router reboot is a fleet dashboard nobody trusts. If the farm shares a home network with everything else, put the printers on their own VLAN or at minimum their own SSID; a print farm generating constant local traffic (webcam streams especially) can noticeably affect other traffic on a modest home router. Label each printer's host with a hostname that matches its physical label (printer1.local, printer2.local) so troubleshooting doesn't require cross-referencing a spreadsheet.
Job Queuing and Automation
At small-farm scale, full lights-out automation (self-clearing beds, robotic part removal) is usually not worth the engineering effort; the practical middle ground is notification-driven semi-automation. Configure print-complete and print-failed webhooks (most fleet dashboards and Moonraker itself support this) to a phone notification or a Discord/Slack webhook, so a finished or failed job gets acted on within minutes instead of sitting idle until someone happens to walk by. If you're running unattended overnight, thermal runaway protection needs to be active and verified on every machine in the farm, not just the newest one — older converted printers are the ones most likely to have this disabled or misconfigured.
Spool Inventory with Spoolman
Spoolman is a self-hosted, open-source inventory tracker built specifically for filament: it tracks remaining weight per spool, cost per gram, and integrates directly with Moonraker so a Klipper printer can log grams consumed per print against the correct spool automatically, instead of you updating a spreadsheet after the fact.
- Deploy it. Spoolman ships as a Docker container; a single small instance (even on the same Pi hosting one of your printers, or a dedicated one) can serve the whole farm.
- Set up filaments and vendors. Enter your common materials with density and diameter so weight-to-length calculations are accurate.
- Add spools as inventory. Each physical spool gets an entry with starting weight; as prints consume it, remaining weight updates.
- Link it to Moonraker. The Spoolman Moonraker component reports consumption automatically per print when a spool is assigned to a printer, closing the loop without manual entry.
- Pull cost data. Once cost-per-gram is set per spool, per-print material cost becomes a real number instead of an estimate — useful the moment you're pricing jobs for anyone outside your own household. See our guide to making money with a 3D printer for pricing beyond raw material cost.
Maintenance Scheduling Across Many Machines
Track nozzle hours, belt tension checks, and bed-surface replacement per machine rather than per fleet — a shared maintenance log (even a simple spreadsheet keyed by printer hostname) prevents the common failure mode where the oldest, hardest-worked machine in the farm quietly becomes the least reliable one because it never gets singled out for attention.
When to Add the Next Printer
The economically defensible trigger for buying printer #2, #3, etc. is sustained queue depth — if jobs are consistently waiting more than a day for a free printer, another machine pays for itself faster than the queue backlog costs you in turnaround time. Buying capacity ahead of demonstrated demand is the single most common way small farms overspend.
None of this tooling changes what happens at the nozzle — it's about not losing track of what's happening across machines you're not standing in front of. A dashboard, a webhook, and an inventory tracker are a small time investment that pays off the first week you're running more printers than you have hands to check on.
Related Guides
- AI-Powered Failure Detection for 3D Printing: Obico, Spaghetti Detective, and Self-Hosted Alternatives
- Klipper Exclude Object: Canceling Failed Parts Mid-Print Without Losing the Whole Plate
- How to Install Klipper on Any 3D Printer: Complete Setup Guide
- Managing a Fleet of Raspberry Pis with Ansible: Automated Provisioning, Updates, and Config Management
- Klipper Macros: Writing Custom G-Code Macros, Conditionals, and Variables
- KlipperScreen: Building a Standalone Touchscreen UI for Your Klipper 3D Printer
- Moonraker, Mainsail, and Fluidd: Choosing and Configuring Your Klipper Web Interface
- Raspberry Pi — Klipper and Moonraker Quick Reference