Skip to main content

Immutable 3D print pipeline: arrange, slice, and print

Project description

fabprint

PyPI version CI Python 3.11+ License: Apache 2.0

Reproducible 3D print pipeline: define parts, slicer settings, and printer targets in a TOML file — arrange, slice, and print from the command line.

fabprint pipeline

Why fabprint?

Code-CAD tools like build123d, OpenSCAD and cadquery let you define parts in code — parametric, testable, version-controlled. But the moment you print, that breaks: open a slicer GUI, drag in files, fiddle with settings. No diffs, no reproducibility.

fabprint closes the gap:

  • Everything is text — TOML config, git-friendly, diffable
  • Pinned profiles — lock exact slicer, filament, and process profiles in your repo
  • Slicer overrides — tweak support, bed type, wall count without touching profile files
  • Versioned Docker slicing — pin OrcaSlicer version for identical gcode across machines
  • One commandfabprint run goes from STL files to a running print

Quick start

pip install fabprint                # STL + 3MF support, LAN + cloud printing
pip install "fabprint[step]"        # add STEP file support (build123d)

Generate a config with the interactive wizard, or dump a commented template:

fabprint init                       # interactive wizard — discovers profiles and CAD files
fabprint init --template            # dump a commented template to stdout
fabprint init --template > fabprint.toml   # save template and edit manually

Or create fabprint.toml by hand (see full config reference):

[pipeline]
stages = ["load", "arrange", "plate", "slice", "print"]

[printer]
mode = "cloud-bridge"
name = "workshop"       # references ~/.config/fabprint/credentials.toml

[plate]
size = [256, 256]       # build plate dimensions in mm
padding = 5.0

[slicer]
engine = "orca"
version = "2.3.1"       # pin OrcaSlicer version for reproducibility
printer = "Bambu Lab P1S 0.4 nozzle"
process = "0.20mm Standard @BBL X1C"

[slicer.overrides]
enable_support = 1
curr_bed_type = "Textured PEI Plate"

[[parts]]
file = "frame.stl"
rotate = [180, 0, 0]    # flip so mounting plate faces down
filament = "Generic PETG-CF @base"

[[parts]]
file = "wheel.stl"
copies = 5
orient = "upright"
filament = "Generic PETG-CF @base"

Run it (see full CLI reference):

fabprint run                   # arrange, slice and send to printer
fabprint run --until plate     # stop after plating
fabprint run --until slice     # stop after slicing
fabprint run --dry-run         # full pipeline without sending to printer

The plate stage generates a plate_preview.3mf — open it in any 3MF viewer to check placement:

plate preview

Reproducibility

Pin profiles into your repo so builds are identical across machines:

fabprint profiles pin          # copies slicer profiles into ./profiles/
git add profiles/              # commit to lock them

Combined with version = "2.3.1" in [slicer] (which pins the Docker image), the same config always produces the same gcode.

CLI overview

fabprint init                        # interactive config wizard
fabprint init --template             # dump commented TOML template
fabprint validate                    # check config for issues
fabprint run                         # full pipeline
fabprint run --until plate           # stop after plating
fabprint run --only slice            # run just one stage
fabprint run --dry-run               # everything except sending to printer
fabprint login                       # log in to Bambu Cloud
fabprint watch                       # live printer dashboard
fabprint status                      # query printer status
fabprint profiles list               # list available slicer profiles
fabprint profiles pin                # pin profiles for reproducible builds

fabprint watch

Documentation

License

Apache 2.0

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

fabprint-0.1.45.tar.gz (6.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fabprint-0.1.45-py3-none-any.whl (70.2 kB view details)

Uploaded Python 3

File details

Details for the file fabprint-0.1.45.tar.gz.

File metadata

  • Download URL: fabprint-0.1.45.tar.gz
  • Upload date:
  • Size: 6.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fabprint-0.1.45.tar.gz
Algorithm Hash digest
SHA256 4f90de68274bac3be7710d242e625c4a4536b16fff331228b48af2eeebf45283
MD5 472d1a9e649fa21b12fa3c6f7205146b
BLAKE2b-256 b05e18d6506c435ab725cdeff8511f289f48d024458e025edf2527a8723de806

See more details on using hashes here.

Provenance

The following attestation bundles were made for fabprint-0.1.45.tar.gz:

Publisher: publish-cloud-bridge.yml on pzfreo/fabprint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fabprint-0.1.45-py3-none-any.whl.

File metadata

  • Download URL: fabprint-0.1.45-py3-none-any.whl
  • Upload date:
  • Size: 70.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fabprint-0.1.45-py3-none-any.whl
Algorithm Hash digest
SHA256 7b691a54d785c847423b0994ba2e84ddd85b0b25d42f8e9dc2c88eb4053ba537
MD5 2baa6c67488d42183350f1130c38c92d
BLAKE2b-256 8c593764b622c498dace3b12f64eaf443935de63d96a3606190c5043fdb1ce71

See more details on using hashes here.

Provenance

The following attestation bundles were made for fabprint-0.1.45-py3-none-any.whl:

Publisher: publish-cloud-bridge.yml on pzfreo/fabprint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page