print-farm-ops · Category: Robotics & Manufacturing / 3D Print Farm & Slicer Queue Ops
3D Print Farm & Slicer Queue Ops — Catch the wrong-temperature plate, the empty spool and the money-losing SKU before the printers run.
Your OrcaSlicer, Bambu Studio and PrusaSlicer projects, your spool ledger and your storefront SKU table already hold the answers. This auditor reads them offline, checks nozzle, temperature, infill and enclosure safety for PLA-CF, PAHT-CF, PETG, TPU and more, tracks filament BOM and drying hygiene, prices every part (filament, power, machine, labour), and schedules the next production run across your printers from SKU sales velocity, across 4 deterministic buckets. It never contacts a printer and never edits a project file.
SKU: print-farm-ops · Skills: print-farm-ops-setup + print-farm-ops · Runtime: 2,165 lines stdlib Python · Price: $29.00 USD one-time · card, Apple Pay or Google Pay
What It Does: The 4-Bucket Technical Breakdown
- Local-only inputs: OrcaSlicer, Bambu Studio and PrusaSlicer / SuperSlicer
.3mfand.gcode.3mfprojects, plain.gcode, and optional CSV / JSON spool, SKU and printer tables. 3MF archives are opened with hardened ZIP limits. - 4 deterministic audit buckets:
.3mf/.gcodeSlicer Profile & Thermal/Mechanical Safety Audit: nozzle and bed temperatures against each material's envelope and degradation limit (THERMAL_RUNAWAY_OR_OUT_OF_RANGE,TEMP_MATERIAL_MISMATCH), abrasive CF/GF filament on a brass nozzle or a nozzle under 0.4 mm (ABRASIVE_FILAMENT_BRASS_NOZZLE,ABRASIVE_CLOG_RISK_SMALL_NOZZLE), PAHT / PA / ABS on an open-frame printer (ENCLOSURE_REQUIRED_OPEN_FRAME), TPU volumetric speed, layer height against nozzle diameter, and weak infill pattern, thin walls or low infill on structural parts (WEAK_INFILL_PATTERN_STRUCTURAL,STRUCTURAL_UNDER_WALLED). Unsafe archives (ARCHIVE_SAFETY_VIOLATION) and embedded printer API keys (EMBEDDED_PRINTER_CREDENTIAL, value never shown) are flagged.- Spool Inventory & Moisture Hygiene: remaining grams against each material's queued demand with a scrap buffer (
SPOOL_INSUFFICIENT_FOR_QUEUE,SPOOL_LOW_STOCK), drying cadence for hygroscopic spools such as PAHT-CF, PA, TPU and PETG (HYGROSCOPIC_DRYING_OVERDUE) and desiccant age (DESICCANT_CHANGE_OVERDUE). - Unit Economics & Per-Part BOM Margin Audit: filament, electricity, machine time and labour per unit, net of marketplace fee and shipping, with a gross-margin check (
SKU_NEGATIVE_MARGIN,SKU_CRITICAL_MARGIN_COMPRESSION,SKU_BELOW_TARGET_MARGIN) and a table-versus-slice BOM comparison (PLATE_BOM_MISMATCH). - Storefront SKU Run-Rate & Multi-Printer Queue Scheduler: days of supply from sales velocity, lead time and safety stock (
SKU_BACKORDER_DEFICIT,SKU_STOCKOUT_IMMINENT,SKU_REORDER_TRIGGER), a greedy earliest-finish schedule across your printers honouring nozzle, temperature and enclosure limits (NO_COMPATIBLE_PRINTER_FOR_JOB,FARM_CAPACITY_OVERLOAD), written to a priority CSV with--queue-csv.
- Recurring delta mode (
--state PATH --delta): tracks spool draw-down (SPOOL_DEPLETED), SKU supply drops (SKU_DAYS_OF_SUPPLY_DROP) and slicer profile drift (PROFILE_DRIFT_DETECTED) between runs, suited to a scheduledUpdateRoutine.
How It Runs (5 Steps)
.wattcoin_license_check.py --sku print-farm-ops must return "state": "OK" before every run.print_farm_ops.py and bot_common.py against the pinned values; any mismatch stops the run.--3mf / --dir slicer files, then --spools, --orders and --printers; credentials in tables are refused.--queue-csv, optional --state --delta events, and a fail-closed exit code.Real Sample Audit: 4-printer composite & functional-part farm
Sample disclosure: this is a representative sample, not a customer report. It was produced against public or fictional test targets; account and credential values are placeholders or redacted (for example wck_<REDACTED>), and no private keys, seed phrases or secrets are ever shown. Your own report will differ in content and length.
Excerpt from --format markdown on a synthetic farm (Bambu X1C, P1S, A1 and a Voron 2.4; 8 plates, 6 spools, 6 SKUs). All spools, prices and plates are fabricated for illustration and no printer was contacted. Output is unedited; omitted parts are marked. Exit 3: the worst finding is CRITICAL at the default --fail-on medium.
# 3D Print Farm & Slicer Queue Ops Report ``` snapshot 2026-10-27 00:00:00 UTC | tool=print-farm-ops endpoints local-files ``` **Inputs:** 8 slicer file(s) / 8 plate(s), 6 spool(s), 6 SKU(s), 4 printer(s) ## Summary | critical | high | medium | low | info | worst | |---|---|---|---|---|---| | 9 | 11 | 6 | 1 | 0 | CRITICAL | ## Bucket 1 - Slicer profile & thermal / mechanical safety | file | plate | slicer | printer | nozzle | material | layer | walls | infill | N/B C | hrs | g | |---|---|---|---|---|---|---|---|---|---|---|---| | bracket_placf.gcode.3mf | 1 | BambuStudio | Bambu Lab X1 Carbon | 0.40 hardened_steel | PLA-CF | 0.20 | 2 | 10% grid | 230/55 | 3.00 | 62.0 | | calibration_pla_hot.gcode.3mf | 1 | BambuStudio | Voron 2.4 350 | 0.40 tungsten_carbide | PLA | 0.20 | 3 | 20% gyroid | 265/55 | 0.60 | 6.0 | | fanduct_placf_a1.gcode.3mf | 1 | BambuStudio | Bambu Lab A1 | 0.40 brass | PLA-CF | 0.20 | 3 | 20% gyroid | 230/55 | 1.80 | 21.0 | | gear_pahtcf.gcode.3mf | 1 | BambuStudio | Bambu Lab P1S | 0.60 hardened_steel | PAHT-CF | 0.28 | 4 | 30% gyroid | 210/55 | 5.50 | 88.0 | [... 4 more plate rows omitted ...] - **CRITICAL** `ABRASIVE_FILAMENT_BRASS_NOZZLE` fanduct_placf_a1.gcode.3mf: abrasive filament PLA-CF sliced for a brass nozzle (slicer file); it will wear through it, use a hardened / tungsten nozzle - **CRITICAL** `THERMAL_RUNAWAY_OR_OUT_OF_RANGE` calibration_pla_hot.gcode.3mf: PLA sliced at 265 C exceeds its 250 C degradation limit (charring, heat-creep jams, fumes) - **HIGH** `STRUCTURAL_UNDER_WALLED` bracket_placf.gcode.3mf: structural part is under-built: infill 10% (<15%), 2 wall loops (<3) - **HIGH** `TEMP_MATERIAL_MISMATCH` gear_pahtcf.gcode.3mf: PAHT-CF sliced with nozzle 210 C (envelope 270-315 C) and bed 55 C (envelope 80-115 C); the filament preset was probably not switched - **HIGH** `WEAK_INFILL_PATTERN_STRUCTURAL` bracket_placf.gcode.3mf: grid infill on a structural part: the nozzle re-crosses infill lines and shear strength is poor; use gyroid, cross_hatch or cubic - **MEDIUM** `ABRASIVE_CLOG_RISK_SMALL_NOZZLE` pulley_pa6cf.gcode.3mf: heavily filled PA6-CF on a 0.4 mm nozzle clogs often; a 0.6 mm hardened nozzle is recommended - **MEDIUM** `TPU_HIGH_VOLUMETRIC_SPEED` gasket_tpu.gcode.3mf: TPU max volumetric speed 9 mm3/s exceeds 6.0 (extruder gear buckling / jams) ## Bucket 2 - Spool inventory, moisture hygiene & BOM depletion [... spool ledger and per-material demand tables omitted ...] - **CRITICAL** `SPOOL_INSUFFICIENT_FOR_QUEUE` PA6-CF: queue needs 27 g (incl. scrap buffer) but 0 g on hand across 0 spool(s); short by 27 g - **CRITICAL** `SPOOL_INSUFFICIENT_FOR_QUEUE` PAHT-CF: queue needs 458 g (incl. scrap buffer) but only 310 g on hand across 1 spool(s); short by 148 g - **CRITICAL** `SPOOL_INSUFFICIENT_FOR_QUEUE` PLA-CF: queue needs 1634 g (incl. scrap buffer) but only 520 g on hand across 1 spool(s); short by 1114 g - **HIGH** `HYGROSCOPIC_DRYING_OVERDUE` spool S-PAHT-1 (PAHT-CF) drying overdue: last dried 26 days ago (limit 7 days); wet filament strings, bubbles and loses strength - **HIGH** `HYGROSCOPIC_DRYING_OVERDUE` spool S-TPU-1 (TPU) drying overdue: no dried_at recorded (limit 7 days); wet filament strings, bubbles and loses strength - **HIGH** `SPOOL_LOW_STOCK` spool S-PETG-2 (Polymaker PETG) has 130 g left (<= 150 g floor); swap before a long print - **LOW** `DESICCANT_CHANGE_OVERDUE` spool S-PAHT-1 desiccant last changed 87 days ago (limit 60) ## Bucket 3 - Unit economics & per-part BOM | sku | material | filament | power | machine | labor | COGS | price | net rev | profit | margin | |---|---|---|---|---|---|---|---|---|---|---| | BRK-CF-01 | PLA-CF | $0.73 | $0.03 | $0.78 | $2.20 | $3.73 | $18.00 | $10.26 | $6.53 | 36.3% | | GEAR-PAHT-02 | PAHT-CF | $4.35 | $0.07 | $2.29 | $3.67 | $10.38 | $24.00 | $16.08 | $5.70 | 23.8% | | CLIP-PETG-03 | PETG | $0.06 | $0.00 | $0.11 | $1.10 | $1.28 | $7.50 | $6.53 | $5.25 | 69.9% | | GASKET-TPU-04 | TPU | $0.15 | $0.02 | $0.45 | $1.47 | $2.08 | $4.50 | $3.92 | $1.83 | 40.7% | | VASE-PLA-05 | PLA | $1.88 | $0.20 | $5.75 | $1.83 | $9.65 | $16.00 | $8.72 | -$0.93 | -5.8% | | MINI-PLA-06 | PLA | $0.36 | $0.10 | $3.54 | $1.83 | $5.83 | $12.00 | $6.44 | $0.61 | 5.1% | [... unlinked-plate cost table omitted ...] - **CRITICAL** `SKU_NEGATIVE_MARGIN` VASE-PLA-05 loses $0.93 per unit (COGS $9.65 vs net revenue $8.72) - **HIGH** `SKU_CRITICAL_MARGIN_COMPRESSION` GEAR-PAHT-02 gross margin 23.8% is under 25% (profit $5.70 on $24.00) - **HIGH** `SKU_CRITICAL_MARGIN_COMPRESSION` MINI-PLA-06 gross margin 5.1% is under 25% (profit $0.61 on $12.00) - **MEDIUM** `PLATE_BOM_MISMATCH` GASKET-TPU-04 vs gasket_tpu.gcode.3mf#1: hours/unit table 0.50 vs sliced 0.37 (-27%); costs and queue hours use the table values - **MEDIUM** `SKU_BELOW_TARGET_MARGIN` BRK-CF-01 gross margin 36.3% is below the 45.0% target - **MEDIUM** `SKU_BELOW_TARGET_MARGIN` GASKET-TPU-04 gross margin 40.7% is below the 45.0% target ## Bucket 4 - SKU run-rate & multi-printer queue [... run-rate table and printer load table omitted ...] Scheduled queue (greedy earliest-finish): | # | tier | sku | material | plates | units | printer | hrs | grams | COGS | margin | days supply | |---|---|---|---|---|---|---|---|---|---|---|---| | 1 | 1_BACKORDER | BRK-CF-01 | PLA-CF | 11 | 44 | voron-01 | 33.0 | 709 | $3.73 | 36.3% | 0.0 | | 1 | 1_BACKORDER | BRK-CF-01 | PLA-CF | 14 | 55 | x1c-01 | 42.0 | 903 | $3.73 | 36.3% | 0.0 | | 2 | 1_BACKORDER | MINI-PLA-06 | PLA | 5 | 5 | UNASSIGNED | 20.0 | 94 | $5.83 | 5.1% | 0.0 | | 3 | 2_STOCKOUT_RISK | GASKET-TPU-04 | TPU | 1 | 3 | a1-01 | 3.0 | 25 | $2.08 | 40.7% | 1.2 | | 4 | 2_STOCKOUT_RISK | GEAR-PAHT-02 | PAHT-CF | 5 | 10 | p1s-01 | 27.5 | 458 | $10.38 | 23.8% | 2.7 | | 5 | 3_SAFETY_REPLENISH | CLIP-PETG-03 | PETG | 1 | 6 | a1-01 | 1.5 | 31 | $1.28 | 69.9% | 4.0 | - **CRITICAL** `NO_COMPATIBLE_PRINTER_FOR_JOB` MINI-PLA-06 (PLA) needs [0.2 mm nozzle, 215 C hotend, 55 C bed] but no online printer provides: 0.2 mm nozzle - **CRITICAL** `SKU_BACKORDER_DEFICIT` BRK-CF-01: 3 on hand vs 90 open orders; 87 customer unit(s) are waiting on the print queue - **CRITICAL** `SKU_BACKORDER_DEFICIT` MINI-PLA-06: 0 on hand vs 2 open orders; 2 customer unit(s) are waiting on the print queue - **HIGH** `FARM_CAPACITY_OVERLOAD` farm capacity overload: 1 urgent job(s) would finish after their lead time (BRK-CF-01) - **HIGH** `SKU_STOCKOUT_IMMINENT` GASKET-TPU-04: 1.2 days of supply is below the 2 day lead time; it will stock out before a reprint lands - **HIGH** `SKU_STOCKOUT_IMMINENT` GEAR-PAHT-02: 2.7 days of supply is below the 6 day lead time; it will stock out before a reprint lands - **MEDIUM** `SKU_REORDER_TRIGGER` CLIP-PETG-03: 4.0 days of supply is below lead time + safety stock (5 days); queue 1 plate(s) ## Delta since baseline baseline run: 27 finding(s) recorded as NEW; no prior state exit_code 3 (fail-on=medium) --- [... SCOPE_NOTE omitted (printed in full with every report) ...]
CLI Reference: Flags & Exit Codes
| Flag | Meaning |
|---|---|
PATH ... / --3mf PATH | Slicer files (.3mf, .gcode.3mf, .gcode) or directories; --3mf audits one file. |
--dir DIR | Recursively discover slicer files (max 500; skips node_modules, .git, virtualenvs, dist, build). |
--spools PATH | Spool ledger (CSV or JSON): material, remaining grams, reorder threshold, drying and desiccant dates, cost per kg. |
--orders PATH / --inventory PATH | Storefront SKU table: plate file, grams and hours per unit, on-hand, open orders, daily velocity, lead time, price, fees, shipping. |
--printers PATH | Printer table: nozzle diameter and type, enclosure, temperature limits, capacity hours, loaded materials. |
--kwh-rate / --printer-watts | Electricity price per kWh and average printer draw for the power cost line. |
--machine-rate-hr / --labor-rate-hr | Machine overhead and labour USD per hour for the cost stack. |
--failure-rate-pct | Scrap / failed-print allowance added to filament demand and cost. |
--margin-target-pct | Gross-margin target (0–100) for SKU_BELOW_TARGET_MARGIN. |
--queue-csv PATH | Write the scheduled multi-printer queue as a new CSV (refuses inputs and .3mf / .gcode targets). |
--state PATH --delta | Store a snapshot (0600) and report events, new, changed and resolved findings against it. Degraded runs never overwrite it. |
--format {text,markdown,json} / --json / --out PATH | Report format and destination. |
--fail-on {none,info,low,medium,high,critical} | Exit threshold (default medium). |
--now ISO | Override the report clock for reproducible runs and drying-age maths. |
| Exit code | Meaning |
|---|---|
0 | Completed with nothing at or above --fail-on. |
1 | Worst finding is MEDIUM (or LOW/INFO with a lower threshold). |
2 | Worst finding is HIGH. |
3 | Worst finding is CRITICAL. |
10 | Bad input or refusal: missing file, bad flag, --delta without --state, a credential or access code in arguments or tables. |
11 | Degraded: unreadable, malformed or unsafe input, or nothing to audit. Never a clean result. |
Mandatory Refusal Boundaries
- Offline and read-only. No network request: no Bambu Cloud, MQTT, Moonraker, Klipper, OctoPrint or PrusaLink call. It never sends G-code, starts, stops or heats a printer, and never modifies or overwrites a
.3mfor.gcodefile.--queue-csvonly writes a new CSV. - No credentials. API keys, seed phrases and printer LAN access codes in arguments or tables are refused (exit
10) and never echoed. A slicer file with an embedded printer key raisesEMBEDDED_PRINTER_CREDENTIALwithout showing the value. - Your files only. It audits projects and tables you own or are authorised to review, and will not bypass thermal-runaway protection or recommend running unattended against a CRITICAL finding.
- Heuristic, not certification. Thermal and structural findings are checks of slicer metadata, not mechanical-engineering certification and not a substitute for hardware fire-safety protection. Cost, margin and reorder figures are arithmetic on the numbers you supply, not financial, tax or accounting advice.
Scope note (printed with every report): 100% offline, local, read-only inspection of slicer files and the spool, order and printer tables you supply; no network request, no G-code sent, no print started, stopped or heated, no project file modified; credentials and printer access codes refused; heuristic checks; not engineering certification or financial advice.
Pinned Runtime Hashes (SHA-256 Verified)
https://botappstore.com/runtime/print_farm_ops.py— 2,165 lines — SHA-256:29edc5e8664be0b6823edc6ea985467fba83430f03d5781cd6fe341684abb669https://botappstore.com/runtime/bot_common.py— 274 lines — SHA-256:d1941b61b95ca664e4c1286c3bf1918c00e976c2c1601199b19200257650e526
Runtime URLs are license-gated: send X-License-Key: wcl_... or X-Agent-Key: wck_... (unauthenticated requests get 401). The served file carries a per-license watermark block (5 lines), so compare the X-Canonical-SHA256 response header (or the SHA-256 after stripping the block) against the pins above. The recommended path is the setup skill installer:
python3 /workspace/.wattcoin_license_check.py --sku print-farm-ops --install-runtime ... --expected-sha256 29edc5e8664be0b6823edc6ea985467fba83430f03d5781cd6fe341684abb669
The setup and audit skills verify both canonical digests before every run and refuse to execute either file on a mismatch. Both are locked at chmod 500. The runtime is stdlib-only Python and is covered by 393 unit tests.
Technical FAQ
Which slicers and file types does it read?
Does it connect to my printers or start prints?
What tables does it need for the spool, margin and queue buckets?
How is the production queue scheduled?
What does delta mode watch?
What does it refuse to do?
Licensing & Setup
$29.00 USD one-time, paid by card, Apple Pay or Google Pay, with up to 3 workspace-reset rebinds and no subscription. On Turn 1 the print-farm-ops-setup skill installs the read-only license helper (0500), verifies and installs the SHA-256-pinned runtime, registers and activates your agent key, binds your wcl_... code through stdin, runs a self-check audit on a built-in unsafe spool and SKU table, and offers a first audit of your own farm plus an optional scheduled queue and spool delta routine. The license code is never printed in chat.
One wcl_... key, two runtimes. Your license key works inside Grok Bot and from any local terminal or IDE agent (Cursor, Claude Code, Windsurf, CI/CD) via the standalone single-file Python 3 CLI (/runtime/print_farm_ops.py) — Python 3.10+ standard library only, zero pip install dependencies, with --json / --markdown output.