Print Doctor
3D printing pre-flight check and cost estimation tool. Analyze STL/3MF models for printability issues before you waste filament, get a cost estimate for print shops, and generate readable Markdown reports.
Features
- Printability check — detects thin walls, overhangs, self-intersections, non-watertight meshes, degenerate faces and inverted normals
- Printability score — 0-100 weighted score based on detected issues
- Cost estimation — weight, print time, material/electricity cost and suggested retail price based on real print configuration
- Markdown reports — human-readable output with severity levels and actionable suggestions, saveable to file
- CLI exit codes — critical issues exit non-zero, ready for CI integration
Installation
Requires Python 3.11+.
# with Poetry
poetry install
poetry run print-doctor version
# or with uv
uv sync
uv run print-doctor version
Usage
Check a model
# Basic analysis with cost estimation (PLA defaults)
print-doctor check model.stl
# Choose material and price
print-doctor check model.stl -m PETG -p 30
# Save report to file
print-doctor check model.stl -o report.md
# Skip cost estimation
print-doctor check model.stl --no-cost
Exit code is 1 when the model has critical (error-level) issues, making it
suitable for CI pipelines.
Supported file formats
- STL (stereolithography)
- 3MF (3D Manufacturing Format)
Materials
PLA, PETG, ABS, TPU, Nylon — with built-in density and default price tables
(see config/materials.yaml and src/print_doctor/cost.py).
Example output
# Print Doctor Report: model.stl
## Printability Score: 85.0/100
## Mesh Information
- **Watertight:** yes
- **Manifold:** yes
- **Triangles:** 1,234
- **Volume:** 12.34 cm3
- **Surface Area:** 45.67 cm2
- **Bounding Box:** 10.0 x 20.0 x 30.0 mm
## Issues Found
### [WARNING] thin_wall
- **Description:** Found thin wall regions: 45/500 sample points (9.0%) ...
- **Location:** 9.0% of sampled surface
- **Suggestion:** Increase wall thickness to at least 0.80mm ...
## Cost Estimate
- **Weight:** 15.3g
- **Print Time:** 1.2 hours
- **Material Cost:** $0.38
- **Electricity Cost:** $0.03
- **Total Cost:** $0.41
- **Suggested Price:** $0.82
Development
poetry install --with dev
poetry run pytest
Generate E2E fixture models:
python tests/generate_fixtures.py
License
MIT License
Metadata
Release files for print-doctor 0.1.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.1.0.tar.gz | 9.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| print_doctor-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.1 kB
Release files / print_doctor-0.1.0.tar.gz
| Download URL | print_doctor-0.1.0.tar.gz |
|---|---|
| Size | 9.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
69d493a8b0a0aaefdb8a299671077389067deba05eff39a5188edacfc9bf7c94
|
|
BLAKE2b-256 checksum How to use checksums |
fa1a960a53a5280865f16bb495295434a04279ffccb7ee5d746c2e38124483a7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / print_doctor-0.1.0-py3-none-any.whl
| Download URL | print_doctor-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c8992c9b0d4a70cfb808fdf3e1235bc671667c4990e2536df6ac282eba81c287
|
|
BLAKE2b-256 checksum How to use checksums |
61cb54d1fefa8ef3b00157a774d01ebc4f780d8244d4d822ae503e8b1f11213a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|