STL preparation toolkit for resin 3D printing: uniform scaling, bed packing, fill, autopack.
Project description
stlbench
STL preparation toolkit for resin 3D printing.
stlbench takes STL files and prepares them for SLA/DLP printers: uniform scaling to fit the build volume, packing parts onto rectangular print plates, filling the bed with copies, and combined scale-and-pack in one step. Supports are not generated -- use your slicer (Lychee, Chitubox, PrusaSlicer, etc.) after export.
Installation
pip install stlbench
(scipy is a required dependency for voxel hollowing with scale --hollow; install uses
binary wheels on supported Python versions — see PyPI.)
Development install
git clone https://github.com/NikitaDmitryuk/stlbench.git
cd stlbench
poetry install --with dev
Quick Start
Run stlbench --help for the same command cheatsheet (copy-paste friendly).
# Inspect model parts
stlbench info -i ./parts -c configs/mars5_ultra.toml
# Scale all parts to fit the printer
stlbench scale -i ./parts -o ./scaled -c configs/mars5_ultra.toml
# Pack scaled parts onto plates
stlbench layout -i ./scaled -o ./plates -c configs/mars5_ultra.toml
# Scale + pack all on one plate in one step
stlbench autopack -i ./parts -o ./packed -c configs/mars5_ultra.toml
# Fill the bed with copies of a single part
stlbench fill -i ./part.stl -o ./filled -c configs/mars5_ultra.toml
Or specify the printer inline without a config file:
stlbench scale -i ./parts -o ./scaled -p "153.36,77.76,165"
Commands
info -- Analyze models (read-only)
stlbench info -i ./parts -c configs/mars5_ultra.toml
Displays a table with AABB dimensions, volume, vertex/face counts, whether each
part fits the bed, maximum scale factor, and how many copies would fit (fill).
No files are written.
scale -- Uniform scaling
stlbench scale -i ./parts -o ./out -c configs/mars5_ultra.toml
Computes a single scale factor so that every part fits inside the printer
build volume. The largest part determines the factor; all parts share the same
scale. Supports two methods: sorted (default) and conservative.
Key options: --dry-run, --no-upscale, --method, --orientation free,
--hollow, --post-fit-scale.
layout -- Pack parts onto plates
stlbench layout -i ./scaled -o ./plates -c configs/mars5_ultra.toml
Arranges already-scaled STL files onto rectangular print plates using rectpack.
Exports plate_01.stl + plate_01.json with positions. Multiple plates are
created if parts do not fit on one.
Key options: --dry-run, --gap-mm, --algorithm shelf|rectpack.
autopack -- Scale + layout on one plate
stlbench autopack -i ./parts -o ./packed -c configs/mars5_ultra.toml
Binary-searches for the maximum scale factor at which all parts fit onto a
single plate simultaneously. Combines scale and layout into one step with a
different goal: all parts on one plate, not each part fitting individually.
Key options: --dry-run, --gap-mm, --margin, --post-fit-scale.
fill -- Maximum copies of one part
stlbench fill -i ./part.stl -o ./filled -c configs/mars5_ultra.toml
Packs as many copies of a single STL file as possible onto one plate. Useful for batch printing identical parts.
Key options: --scale (scale the part to fit before filling), --dry-run, --gap-mm.
hollow
stlbench hollow prints a short reminder: hollowing is optional and runs only with
scale ... --hollow plus [hollow] in the TOML.
config init -- Create a starter TOML
stlbench config init -o my_printer.toml
Writes a commented profile with the same defaults as configs/mars5_ultra.toml
(example resin printer sizes, scaling, gap, hollow params). Use --stdout to print
without saving, or --force to overwrite an existing file.
Configuration
Printer profiles are TOML files. See configs/mars5_ultra.toml
for a complete example (ELEGOO Mars 5 Ultra), or generate one with stlbench config init.
Key sections:
| Section | Purpose |
|---|---|
[printer] |
Build volume: width_mm, depth_mm, height_mm |
[scaling] |
bed_margin, post_fit_scale |
[packing] |
gap_mm between parts on the bed |
[hollow] |
wall_thickness_mm, voxel_mm for scale --hollow |
Orientation (axis / free) and rotation sample count are not in TOML: use
scale --orientation and scale --rotation-samples. With free, orientation matches the
same printer-axis search as layout (permutation × random rotations), but scale picks the
candidate that maximizes the group scale factor (layout still minimizes XY footprint for
packing). Plate placement is only in layout. Default layout algorithm (rectpack vs
shelf) is set via layout --algorithm.
Examples
See examples/README.md for a full walkthrough using the
included Gendalf model (3 parts tracked via Git LFS).
Package Structure
| Module | Purpose |
|---|---|
stlbench.cli |
Typer CLI application |
stlbench.core |
Scale factor computation and orientation |
stlbench.config |
Pydantic schema + TOML loader |
stlbench.packing |
Shelf and rectpack algorithms |
stlbench.export |
Plate STL assembly and JSON manifest |
stlbench.hollow |
Voxel shell hollowing (scale --hollow) |
stlbench.pipeline |
Command runners (scale, layout, fill, etc.) |
Limitations
- Boolean and voxel operations are sensitive to non-manifold STL. For complex models use a mesh repair tool first.
- Hollow shells in this package are a simplified voxel approach; for production use your slicer's built-in hollowing.
- Very new Python releases may lack a
scipywheel yet; use a version listed for your platform on PyPI or wait for upstream wheels.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file stlbench-0.2.2.tar.gz.
File metadata
- Download URL: stlbench-0.2.2.tar.gz
- Upload date:
- Size: 25.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9576afa2b27b3834797269d5d4eef73004c3992fb463df0e4783889ce58896e
|
|
| MD5 |
9cf6a6c4cab99453c92d93ba5e02ba94
|
|
| BLAKE2b-256 |
ce66f5f9bc02df5a60cf9ccc7e1a5f9dcf14dd12a0dc0c1277a9d7aea8d4b81d
|
Provenance
The following attestation bundles were made for stlbench-0.2.2.tar.gz:
Publisher:
publish.yml on NikitaDmitryuk/stlbench
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stlbench-0.2.2.tar.gz -
Subject digest:
d9576afa2b27b3834797269d5d4eef73004c3992fb463df0e4783889ce58896e - Sigstore transparency entry: 1235154982
- Sigstore integration time:
-
Permalink:
NikitaDmitryuk/stlbench@15c2558a5190d97bbb9135074be52f30ba36184c -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/NikitaDmitryuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@15c2558a5190d97bbb9135074be52f30ba36184c -
Trigger Event:
push
-
Statement type:
File details
Details for the file stlbench-0.2.2-py3-none-any.whl.
File metadata
- Download URL: stlbench-0.2.2-py3-none-any.whl
- Upload date:
- Size: 35.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8512f1ed8efec2690f42152d6aed6d2426f3d3a169ee41ed8e1e1daaa2fff03e
|
|
| MD5 |
c9d0f0af368aface517855cec2d5121e
|
|
| BLAKE2b-256 |
d54cb1fce699e97239a52fe5c9e276580efbd0834dbb42e980f264748425cc46
|
Provenance
The following attestation bundles were made for stlbench-0.2.2-py3-none-any.whl:
Publisher:
publish.yml on NikitaDmitryuk/stlbench
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stlbench-0.2.2-py3-none-any.whl -
Subject digest:
8512f1ed8efec2690f42152d6aed6d2426f3d3a169ee41ed8e1e1daaa2fff03e - Sigstore transparency entry: 1235155062
- Sigstore integration time:
-
Permalink:
NikitaDmitryuk/stlbench@15c2558a5190d97bbb9135074be52f30ba36184c -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/NikitaDmitryuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@15c2558a5190d97bbb9135074be52f30ba36184c -
Trigger Event:
push
-
Statement type: