VentForge
Design vent and perforation patterns for 3D printing, laser cutting and CNC, then export them as ready-to-use files. Use the desktop editor, or let an AI assistant such as Claude do the designing through the built-in MCP server. Both work on the same design file.
Features
- 10 layouts: grid (square, diamond, hexagon), random, path, spiral, concentric, fibonacci, crosslines, voronoi stone cracks, flow lines, and custom points.
- Hole shapes: circle, rounded rectangle, hexagon, polygon, star, or your own outline.
- Gradients: vary size, spacing, angle or shape across the plate. Drive them with points, lines or curves, with noise, or with a grayscale image.
- Boundary: none, circle, rounded rectangle, or a drawn outline, with margin and clipping.
- Export: PNG, SVG, DXF, STEP, STL. You can also wrap the pattern onto a tube or cut it into an existing STEP part.
- Checks: hole count, open area, and warnings where walls get thinner than your minimum.
- Undo/redo, presets, and a personal library.
Install
You need Python 3.11 or newer. Install the full app with uv (recommended) or pipx:
uv tool install "ventforge[all]"
pipx install "ventforge[all]"
Pick a smaller install if you don't need everything:
| You want | Install |
|---|---|
| Everything | ventforge[all] |
| Desktop editor | ventforge[gui] |
| STEP/STL export, tube wrap, cut into part (OpenCascade) | ventforge[cad] |
| Only the MCP server with SVG, DXF and PNG export | ventforge |
Use the desktop editor
ventforge
To open a saved design, pass its file: ventforge my_vent.vent.json.
- Pick a preset or a layout mode in the side panel.
- Drag the sliders. The preview updates as you go.
- Pick a file type from the Export menu.
Canvas controls
| Action | How |
|---|---|
| Zoom | Mouse wheel, or + / - |
| Pan | Drag empty space, middle-drag, or hold Space and drag |
| Zoom to fit | Z, or double-click empty space |
| Measure | R (ruler) |
| Draw an outline | B, click the points, Enter to finish, Esc to cancel |
| Undo / redo | Ctrl+Z / Ctrl+Y |
Your design saves itself shortly after each change.
Use it with an AI assistant (MCP)
You don't need to install anything first, because uv downloads VentForge on demand.
Claude Code:
claude mcp add ventforge -- uvx --from "ventforge[all]" ventforge --mcp
Claude Desktop: add this to claude_desktop_config.json, then restart the app:
{
"mcpServers": {
"ventforge": {
"command": "uvx",
"args": ["--from", "ventforge[all]", "ventforge", "--mcp"]
}
}
}
Then ask, for example: "Make a 120 × 80 mm hexagon vent with 4 mm holes that get smaller toward the edges, and export it as STEP."
The assistant works on ~/Documents/VentForge/current.vent.json. If you open that file in the editor
(or ask the assistant to "open it in the GUI"), you can watch the design change live.
Tools the server offers: new_design, open_design, list_presets, get_design,
describe_parameters, set_params, add_control, clear_controls, preview, export,
wrap_cylinder, cut_into_part, open_in_gui.
Project layout
ventforge/
├── model.py design file format: every parameter and its default
├── pattern.py geometry: places and shapes the holes
├── export.py PNG, SVG, DXF, STEP and STL output, tube wrap, cut into part
├── gui.py desktop editor
├── mcp_server.py MCP tools for AI assistants
├── __main__.py `ventforge` command (editor, or MCP server with --mcp)
└── presets/ example designs shipped with the package
tests/ pytest suite, including a real MCP client/server run
.github/workflows/ CI on Windows, macOS and Linux; publishes to PyPI on version tags
Licence
GPL-3.0-or-later, see LICENSE. You may use, change and sell VentForge. Versions you distribute must stay open source under the same licence.
Metadata
Release files for ventforge 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ventforge-0.1.1.tar.gz | 73.8 kB | With provenance | Details for ventforge-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ventforge-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for ventforge-0.1.1-py3-none-any.whl |
Total release size: 144.4 kB
Release files / ventforge-0.1.1.tar.gz
| Download URL | ventforge-0.1.1.tar.gz |
|---|---|
| Size | 73.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6e2b01058132b2623f57305aff78d6a027b3550aa90a5367af672aeac8cf91d3
|
|
BLAKE2b-256 checksum How to use checksums |
ebe8020151cf6e145597e8c3ca5b4f88fa608e71c465ebedeccee2a1d61754d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.
Transparency logRelease files / ventforge-0.1.1-py3-none-any.whl
| Download URL | ventforge-0.1.1-py3-none-any.whl |
|---|---|
| Size | 70.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
15ee5826cade6cefaa8fb88129f8074430ea0740c5b705f0ef39707c5f0c02d0
|
|
BLAKE2b-256 checksum How to use checksums |
c78f8c96a5ff1d35fc1f57ba7955a6b24c81291a8b6f5b53e3964efebd152197
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.
Transparency logSecurity for ventforge 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for ventforge-0.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.