vfab: FSM plotter manager (headless-first) with vpype + per-session recording
Project description
vfab
Headless-first FSM plotter manager with vpype optimization, smart multi-pen detection, and per-session recording (IP feed v1; native v4l2 later).
📚 Documentation
- Quickstart Guide - 🚀 Get your first plot running in 5 minutes!
- Cheat Sheets - ⭐ Quick reference for common tasks
- Installation Guide - Multi-platform setup instructions
- User Guide - Complete usage documentation
- vpype-vfab Integration Guide - Bridge creative tools with vfab production
- API Reference - Developer documentation and integration
- Troubleshooting - Common issues and solutions
- Changelog - Version history and release notes
Archived Documentation: Historical development status, reports, and old release notes are available in .github/docs-archive/ for reference.
🚀 Performance Highlights (v0.8.0)
- Enterprise-Grade Performance: 114,087 jobs/second database throughput
- Memory Efficient: Peak 7.4KB usage, no memory leaks detected
- Lightning Fast CLI: All commands respond in < 0.5 seconds
- Cross-Platform: Full Linux/macOS/Windows compatibility
- Load Tested: Handles 500+ concurrent jobs without issues
Quick Start
Prerequisites
# install uv (Arch)
pacman -Qi uv >/dev/null 2>&1 || curl -LsSf https://astral.sh/uv/install.sh | sh
# ensure Python 3.11+ available (uv can manage it too)
uv python install 3.12
Installation
For Planning & Simulation (no AxiDraw hardware):
# create venv + install project in editable mode
uv venv
source .venv/bin/activate
uv pip install -e ".[dev,vpype]"
# DB migrate + smoke test
uv run alembic upgrade head
uv run pytest -q
# try CLI
uv run vfab --help
For AxiDraw Hardware Support:
# install with AxiDraw integration
uv pip install -e ".[dev,vpype,axidraw]"
# DB migrate + smoke test
uv run alembic upgrade head
uv run pytest -q
# try CLI
uv run vfab --help
Note: vfab works perfectly without AxiDraw hardware for planning, optimization, and simulation. Install axidraw extra only if you have physical hardware.
AxiDraw Integration
vfab provides smart AxiDraw integration with automatic multipen detection and graceful degradation.
Installation
# Install with AxiDraw support
uv pip install -e ".[dev,vpype,axidraw]"
Important: vfab works without AxiDraw hardware for planning and simulation. The axidraw extra is only needed for physical plotting.
AxiDraw CLI Commands
# Plan a job with smart multipen detection
uv run vfab plan <job_id> --interactive
# Plot a job with AxiDraw (supports multipen)
uv run vfab plot <job_id>
# Preview plot without moving pen
uv run vfab plot <job_id> --preview
# Interactive XY control
uv run vfab interactive
# Test pen up/down movement
uv run vfab check servo
# List available pens from database
uv run vfab list pens
# Add new pen to database
uv run vfab setup
Smart Multipen Detection
vfab automatically detects layers in your SVG files and provides:
- 🎨 Color-coded layer overview with element counts
- 🚫 Hidden layer filtering (skips Inkscape hidden layers and
%documentation layers) - 🖊️ Interactive pen mapping for multi-layer designs
- ⚡ Automatic mode selection (single-pen vs multi-pen)
vpype Optimization Presets
vfab includes vpype presets for different optimization levels with dynamic paper sizing:
# config/vpype-presets.yaml
presets:
fast:
pipe: "read {src} pagesize {pagesize} crop 0 0 {width_mm:g}mm {height_mm:g}mm linemerge linesort write {dst}"
hq:
pipe: "read {src} pagesize {pagesize} crop 0 0 {width_mm:g}mm {height_mm:g}mm linemerge linesort linesimplify write {dst}"
Available presets:
fast: Quick optimization (linemerge + linesort) - defaulthq: High quality (adds linesimplify for segment reduction)
Dynamic paper sizing: Presets automatically use the paper size from your config:
# config/config.yaml
vpype:
preset: fast # or hq
presets_file: "config/vpype-presets.yaml"
paper:
default_size: A4 # A3, A4, Letter, etc.
default_margin_mm: 10.0
default_orientation: portrait
The {pagesize}, {width_mm}, and {height_mm} placeholders are automatically replaced with your configured paper size, so you don't need separate presets for different paper sizes!
AxiDraw Configuration
Add AxiDraw device configuration to your config:
device:
port: /dev/ttyUSB0 # or COM3 on Windows, auto-detect if None
model: 1 # 1=V2/V3/SE/A4, 2=V3/A3/SE/A3, etc.
pen_pos_up: 60 # 0-100, higher = more up
pen_pos_down: 40 # 0-100, lower = more down
speed_pendown: 25 # 1-100, percentage of max speed
speed_penup: 75 # 1-100, percentage of max speed
units: inches # mm, cm, or inches
Error Handling
If AxiDraw support is not installed, vfab provides clear guidance:
❌ AxiDraw support not available. Install with: uv pip install -e '.[axidraw]'
All non-AxiDraw features (planning, optimization, simulation) work without the axidraw extra.
AxiDraw CLI Commands
# Check system readiness including AxiDraw
uv run vfab check ready
# Check servo operation (pen up/down)
uv run vfab check servo
# Plot a job with AxiDraw (with time estimation)
uv run vfab plot <job_id>
# Preview plot without moving pen
uv run vfab plot <job_id> --dry-run
# Interactive XY control
uv run vfab interactive
# Check device timing
uv run vfab check timing
AxiDraw Configuration
Add AxiDraw device configuration to your config:
device:
port: /dev/ttyUSB0 # or COM3 on Windows
model: 1 # 1=V2/V3/SE/A4, 2=V3/A3/SE/A3, etc.
pen_pos_up: 60 # 0-100, higher = more up
pen_pos_down: 40 # 0-100, lower = more down
speed_pendown: 25 # 1-100, percentage of max speed
speed_penup: 75 # 1-100, percentage of max speed
units: inches # mm, cm, or inches
Common Development Tasks
# lint / format
uvx ruff check .
uvx black .
# pre-commit (once)
uvx pre-commit install
uvx pre-commit run -a
# run tools without activating venv
uv run plotty add --src demo.svg --paper A3 | tee /tmp/J
uv run plotty plan "$(cat /tmp/J)" --interactive
uv run plotty record_test "$(cat /tmp/J)" --seconds 5
# test AxiDraw integration (if hardware available)
uv run plotty check servo --cycles 1
uv run plotty interactive --help
Feature Highlights
- 🧠 Smart Multipen Detection: Automatically detects SVG layers and suggests pen mapping
- 🎨 Color-Coded Overview: Visual layer display with element counts and colors
- 🚫 Hidden Layer Filtering: Skips Inkscape hidden layers per AxiDraw standards
- ⚡ Graceful Degradation: Works perfectly without AxiDraw hardware
- 📊 Time Estimation: Accurate plotting time estimates with vpype optimization
- 🎥 Session Recording: IP camera integration for plot documentation
- 🖊️ Pen Database: Manage multiple pens with width and speed settings
CI/CD Debug
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 Distributions
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 vfab-0.9.0-py3-none-any.whl.
File metadata
- Download URL: vfab-0.9.0-py3-none-any.whl
- Upload date:
- Size: 261.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a42b61e5e6a8a62e0fd7fa3f3eca75f3e332d8e6247a4ce8f1ff00867c262826
|
|
| MD5 |
70bc5e31a4a56282c429294f53984d64
|
|
| BLAKE2b-256 |
6fea95da8986e3428c45999ab095a3a4717326ee14bd29ba387d544a5e85be13
|