🩺 3DPrint Doctor
The complete 3D printing assistant — check, quote, monitor, and diagnose.
One CLI that covers a print's full lifecycle: pre-flight printability check and cost quoting, real-time defect monitoring while printing, and photo-based defect diagnosis after a failure.
Analyze STL/3MF models before you waste filament, quote prints for customers, catch failures while they happen, and figure out what went wrong after.
Why you need it
- Netfabb shut down. Autodesk retired its mesh-repair tool and there is no modern free replacement for printability pre-check — until now.
- "Upload and print" fails. Non-manifold meshes, thin walls, overhangs and holes waste hours of print time and filament.
- Print shops quote by hand. Weight, time, material, electricity and labor estimated manually — slow and inconsistent.
- Failed prints stay a mystery. Stringing? Warping? Z-band? New users stare at a failed part and don't know which knob to turn.
Print Doctor answers all three: is this model printable? what does it cost? what went wrong?
One CLI, three moments of a print
| Moment | Command | What it does |
|---|---|---|
| 🛠 Before | print-doctor check |
8 printability checks, 0-100 score, cost quote |
| 👁 During | print-doctor watch |
real-time defect alerts (camera / webcam URL) |
| 🔍 After | print-doctor diagnose |
ML photo diagnosis + root-cause fixes |
Showcase
| Check & quote (before printing) | Diagnose (after a failure) |
| Watch (during printing) | |
Features
Printability check (check)
Detects non-watertight meshes, non-manifold edges, inverted normals, degenerate faces, thin walls (ray-cast), overhangs, self-intersections, isolated components and sliver triangles — each with a severity level and an actionable fix. Outputs a 0-100 score.
Cost quoting (check --quote, quote-sheet)
Full shop pricing: material, electricity, machine depreciation, labor, waste allowance and a suggested retail price. Emits Markdown, HTML, or machine-readable JSON — print-shop ready.
Real-time monitoring (watch)
Samples a webcam, a watched directory, or a Moonraker (Klipper) snapshot
URL, classifies each frame with ML, and alerts on defects — saving an
evidence screenshot and optionally POSTing a webhook. Ships with an
OctoPrint plugin (octoprint-print-doctor/) that can pause the print on
defect.
Photo diagnosis (diagnose)
Trained on 600 real photos from 3D Printing StackExchange. Classifies stringing, warping, layer shift, under/over-extrusion and first-layer failure, then explains why and what to change. Measured: 0% false positives on healthy prints, 90-100% per-class accuracy.
Shop & batch workflows
check-batch— analyze directories, sortable comparison table--json— stable machine-readable schema (integration / APIs)quote-sheet— customer-facing printable HTML quote- Exit codes for CI (critical issues → exit 1; defects → exit 2)
Quick start
pip install print-doctor
# Check a model (printability score + cost estimate)
print-doctor check model.stl
# Diagnose a failed print from a photo
print-doctor diagnose failed_print.jpg
# Monitor your printer's webcam in real time
print-doctor watch 0
Requires Python 3.11+. Diagnosis needs OpenCV: pip install print-doctor[vision].
How it compares
| Capability | Print Doctor | Netfabb (retired) | Orca/Prusa slicers |
|---|---|---|---|
| Pre-print printability check | ✅ | ✅ (gone) | ⚠ basic |
| Cost / shop quoting | ✅ | ❌ | ⚠ partial |
| Real-time defect alerts | ✅ | ❌ | ❌ |
| Photo defect diagnosis | ✅ | ❌ | ❌ |
| Batch / API integration | ✅ | ❌ | ❌ |
| Free & open source | ✅ | ❌ | ✅ |
Full usage
Check a model
print-doctor check model.stl # analysis + cost (PLA)
print-doctor check model.stl -m PETG -p 30 # pick material/price
print-doctor check model.stl -o report.md # save report
print-doctor check model.stl --html -o r.html # HTML report
print-doctor check model.stl --json # machine-readable JSON
print-doctor check model.stl --quote # full shop pricing
Exit code 1 when the model has critical issues → CI friendly.
Diagnose a failed print
print-doctor diagnose print_1.jpg
print-doctor diagnose top.jpg side.jpg -m PLA --temperature 210
print-doctor diagnose failed_print.jpg -o diagnosis.md
Exit code 2 when defects are detected.
Monitor in real time
print-doctor watch 0 # webcam
print-doctor watch ./snapshots -i 5 # photo dir
print-doctor watch "http://printer:7125/server/webcams/snapshot?name=webcam" \
-i 5 -e ./evidence -w https://hooks.example.com/alert # Moonraker
Quote for a customer
print-doctor quote-sheet model.stl --shop "My Print Shop" \
--customer "Alice" --quote-number Q-001 -o quote.html
Batch analysis
print-doctor check-batch ./models/ --quote --json -o summary.json
Python API
from print_doctor import check, estimate_cost, diagnose
analysis = check("model.stl") # MeshAnalysis
est = estimate_cost(14.6, PrintConfig(material_type="PLA"), 25.0, 0.12, 200.0)
diag = diagnose(["photo.jpg"], hints={"material": "PLA"})
Reproducing the ML classifier
Trained on 600 real photos (URLs + weak labels in
data/stackexchange_manifest.json):
python scripts/fetch_dataset.py --out /tmp/dataset/stackexchange
python scripts/train_classifier.py --data /tmp/dataset/stackexchange --augment
Healthy-vs-defect detection is ~100% accurate with 0% false positives; per-defect-class accuracy 90-100% (weak labels → more/cleaner data improves it).
Print-farm integration
- OctoPrint — see
octoprint-print-doctor/for a plugin (monitor on print start, tab alerts, optional pause-on-defect). - Klipper / Moonraker — point
watchat the webcam snapshot URL (seeoctoprint-print-doctor/README.md).
Development
uv sync --group vision
uv run pytest
uv run python tests/generate_fixtures.py
uv run python tests/generate_diagnose_fixtures.py
License
MIT License
Metadata
Release files for print-doctor 0.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| print_doctor-0.7.0.tar.gz | 31.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| print_doctor-0.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 66.1 kB
Release files / print_doctor-0.7.0.tar.gz
| Download URL | print_doctor-0.7.0.tar.gz |
|---|---|
| Size | 31.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
988c6e181fdf9766d5179006eb3fda3db16f0e429a83ed0e6825ab58eda5bfeb
|
|
BLAKE2b-256 checksum How to use checksums |
10e9c945f439252548cf732614cac569846c56acbfa025ac1a3b7425df51a9e9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / print_doctor-0.7.0-py3-none-any.whl
| Download URL | print_doctor-0.7.0-py3-none-any.whl |
|---|---|
| Size | 34.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
98536e6f30288f897e937fffd758b2b97f96968d4df7eb252bfbc52fa95bbea0
|
|
BLAKE2b-256 checksum How to use checksums |
72b0cc10f6cf755c7a7554b7580bda61c3610efdcdc8255007cf4d022522eb8d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|