Modern filament winding planner, simulator, and G-code toolkit.
Project description
FiberPath is a next-generation system for planning, simulating, and executing filament-winding jobs on cylindrical mandrels to produce high-quality, repeatable composite parts. The repository contains four coordinated components:
- Core Engine (
fiberpath/) – deterministic planning pipelines, geometry utilities, and G-code emission. - CLI (
fiberpath_cli/) – Typer-based command-line interface offeringplan,plot,simulate, andstream. - API (
fiberpath_api/) – FastAPI service exposing planning and simulation routes. - Desktop GUI (
fiberpath_gui/) – Tauri + React application that wraps the CLI for a unified user experience.
Download
📦 Latest Release: v0.5.0
- Desktop GUI – Windows (.msi/.exe), macOS (.dmg), Linux (.deb/.AppImage)
- Python CLI/API –
pip install fiberpathoruv pip install fiberpath
📚 Documentation: cameronbrooks11.github.io/fiberpath
Local Development
uv pip install -e .[dev,cli,api]
fiberpath --help
pytest
After installation, the fiberpath command is available on your PATH. For development, use -e for editable install.
See uv docs for installation instructions or replace
uvwithpipif you prefer the standard installer.
Plotting Quick Preview
fiberpath plan examples/simple_cylinder/input.wind -o simple.gcode
fiberpath plot simple.gcode --output simple.png --scale 0.8
The plot command unwraps mandrel coordinates into a PNG so you can visually inspect a toolpath before streaming it to hardware. Plotting extracts mandrel/tow settings from the ; Parameters ... header emitted by plan.
Axis Format Selection
FiberPath supports configurable axis mapping to work with different machine configurations:
-
XAB (Standard Rotational) - Default format using true rotational axes:
X= Carriage (linear, mm)A= Mandrel rotation (rotational, degrees)B= Delivery head rotation (rotational, degrees)
-
XYZ (Legacy) - Compatibility format for systems where rotational axes are configured as linear:
X= Carriage (linear, mm)Y= Mandrel rotation (treated as linear, degrees)Z= Delivery head rotation (treated as linear, degrees)
Use --axis-format xab (default) for new projects. The legacy format is retained for backward compatibility with existing systems like Cyclone.
# Generate G-code with standard XAB axes (default)
fiberpath plan input.wind -o output.gcode
# Generate G-code with legacy XYZ axes
fiberpath plan input.wind -o output.gcode --axis-format xyz
Desktop GUI
A cross-platform Tauri + React application for planning, plotting, simulating, and streaming G-code to Marlin hardware.
Prerequisites: Node.js 18+, Rust toolchain, and fiberpath CLI installed (uv pip install -e . from repository root).
cd fiberpath_gui
npm install
npm run tauri dev
The GUI provides two tabs:
- Main Tab – Layer editor, parameter forms, and 3D visualization canvas
- Stream Tab – Serial port connection, manual G-code commands, and file streaming with pause/resume
The GUI calls the same CLI commands for planning and simulation. Streaming uses a persistent Python subprocess for direct serial communication with Marlin controllers.
Hardware Testing
Before deploying to production hardware:
- Generate G-code:
fiberpath plan input.wind -o output.gcode - Verify motion:
fiberpath simulate output.gcodeor GUI simulation - Test streaming with
--dry-run:- CLI:
fiberpath stream output.gcode --dry-run - GUI: Stream Tab with dry-run mode enabled
- CLI:
- Connect to hardware:
- CLI:
fiberpath stream output.gcode --port COM5 --baud-rate 250000 - GUI: Stream Tab → select port → Connect → Start Stream
- CLI:
- Archive results (CLI
--jsonoutput or GUI summaries) for validation
Streaming to Marlin
fiberpath stream simple.gcode --port COM5 --baud-rate 250000
FiberPath automatically waits for Marlin's startup sequence to complete before streaming commands. This handles the ~10-20 line configuration banner that Marlin outputs on connection (typically ending with settings like M92, M203, M206, etc.).
Use --dry-run to preview streaming without opening a serial port. --verbose prints each dequeued G-code command and Marlin's startup messages. The run operation streams one command at a time, waits for ok, and lets you pause with Ctrl+C (FiberPath issues M0 and resumes via M108).
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 fiberpath-0.5.0.tar.gz.
File metadata
- Download URL: fiberpath-0.5.0.tar.gz
- Upload date:
- Size: 1.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1da8fd7d1519ebb6199395e8ac813ab6bc10dfd5fff0a37b44f37b6113fecb6
|
|
| MD5 |
4e3151729929231a6ed4f702507a8978
|
|
| BLAKE2b-256 |
5daeff9097766b46a37ad216614b69e8946b47517da237f875cd3d0b6350686a
|
Provenance
The following attestation bundles were made for fiberpath-0.5.0.tar.gz:
Publisher:
release.yml on CameronBrooks11/fiberpath
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fiberpath-0.5.0.tar.gz -
Subject digest:
a1da8fd7d1519ebb6199395e8ac813ab6bc10dfd5fff0a37b44f37b6113fecb6 - Sigstore transparency entry: 815681740
- Sigstore integration time:
-
Permalink:
CameronBrooks11/fiberpath@09456ccbc1c61d28e5c7645ad839d6507c85476c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/CameronBrooks11
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@09456ccbc1c61d28e5c7645ad839d6507c85476c -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file fiberpath-0.5.0-py3-none-any.whl.
File metadata
- Download URL: fiberpath-0.5.0-py3-none-any.whl
- Upload date:
- Size: 68.6 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 |
f1725211dfd1f2e987b6d88d0f48b0097d3d65f5e16932d21e2765cf0eaad1de
|
|
| MD5 |
15440fd9d2a5131df6a5253ea2a59f49
|
|
| BLAKE2b-256 |
c676e4d9e97da344ed07bc8b123b4a0e547c12af7b85c2dc54663e7cf9a93f80
|
Provenance
The following attestation bundles were made for fiberpath-0.5.0-py3-none-any.whl:
Publisher:
release.yml on CameronBrooks11/fiberpath
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fiberpath-0.5.0-py3-none-any.whl -
Subject digest:
f1725211dfd1f2e987b6d88d0f48b0097d3d65f5e16932d21e2765cf0eaad1de - Sigstore transparency entry: 815681742
- Sigstore integration time:
-
Permalink:
CameronBrooks11/fiberpath@09456ccbc1c61d28e5c7645ad839d6507c85476c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/CameronBrooks11
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@09456ccbc1c61d28e5c7645ad839d6507c85476c -
Trigger Event:
workflow_dispatch
-
Statement type: