CamForge is a portable Python desktop CAM prototype for Windows CNC routing and milling. It is designed around the workflow used by modern CAM tools: import geometry, configure stock, choose tools and machine limits, build separate operations, preview paths, tile work, and export G-code.
python camforge.pyThe app uses Tkinter from the Python standard library and the already common packages numpy, Pillow, and matplotlib.
CamForge is source-available under the PolyForm Noncommercial License 1.0.0. You may use, study, modify, and redistribute the project for noncommercial purposes, but commercial use, sale, or commercial derivatives are not permitted without a separate license from the copyright holder.
See LICENSE.
This project is free for permitted noncommercial use. Donations are optional and do not grant additional rights beyond the license.
- Import simple DXF vector entities: line, lightweight polyline, circle, and arc.
- Import STL meshes for raster-style 3D roughing and finishing passes; STEP import is recognized as a planned 3D-kernel feature.
- Import grayscale heightmap images for 2.5D relief carving.
- CAM-style workflow rail: import, select features, define toolpaths, simulate, then post/export.
- Feature selection from the imported vector list or by clicking near vectors in the viewport.
- Operations remember their selected vector/features when edited.
- DXF import detects inch/mm-style headers and converts imported geometry into the internal model correctly.
- 2D Design uses a true top-down 2D orthographic workspace with no Z/height display.
- 2D Design view is pinned to the stock:
(0,0)is bottom-left and the top-right corner is the configured stock size. - 3D Preview and Simulation use orthographic 3D projection.
- Viewport controls: mouse wheel zooms, right-drag rotates 3D views, left-click selects, empty click clears selection, empty drag box-selects, and left-drag on selected vectors moves them.
- MVP vector controls: move, scale, mirror, rotate, group, and ungroup.
- Persistent tool library with wood/plastic/light-aluminum router defaults, ballnose tools, and V-bits.
- Persistent machine profiles with axis limits, rapid feed, spindle RPM bounds, spindle mode, coolant, and post commands.
- Default machine profile for Sienci Labs AltMill MK2 4x4 with 1.5 kW ER20 spindle.
- Configurable project units:
inormm, with inches as the default. - Stock setup with dimensions, safe Z, and tiling.
- Multiple independent toolpath operations.
- Basic tab support for profile-style toolpaths.
- 2D design, 3D preview, and stock-removal simulation view modes with play/pause/step/scrub controls.
- Export all operations together, separately, or as tiled G-code files.
- Preview vectors, stock, tiles, heightmaps, mesh samples, and generated paths.
- grblHAL-style G-code output suitable as a starting post for AltMill/gSender workflows.
- Machine: Sienci Labs AltMill MK2 4x4 - 1.5kW ER20.
- Travel: X 1265 mm / 49.803 in, Y 1251 mm / 49.252 in, Z 174 mm / 6.850 in.
- Spindle range: 7,500 to 24,000 RPM.
- Post preamble:
G20orG21,G90,G17,G94,G54, safe Z,M3 S..., spindle dwell. - Post ending: safe Z,
M5,M9,M30.
These defaults are editable in the machine profile library.
- Import DXF vectors, STL models, or a grayscale heightmap. STEP files are acknowledged but deferred to a later implementation pass.
- Select vectors/features from the feature list or viewport.
- Create an operation from that selection: profile, pocket, engrave/V-carve, inlay, 3D rough/finish, or heightmap relief.
- Edit operation parameters such as tool, depth, stepover, allowance, feeds/speeds, and tabs.
- Calculate toolpaths and use the simulation controls to inspect stock removal.
- Export all operations, separate operation files, or tiled output.
- Profile
- V-Carve
- V-Carve Inlay Female
- V-Carve Inlay Plug
- Heightmap Relief
- 3D Rough
- 3D Finish
The first version is shaped by patterns from Carbide Create Pro, Vectric VCarve Pro, Carveco Maker, PixelCNC, Kiri:Moto, Fusion Manufacture, and F-Engrave:
- Job setup should keep stock, zero, machine, tool, feeds, speeds, and operation order visible.
- Toolpaths should be individually named, previewed, enabled, disabled, and exported.
- 3D workflows need separate roughing and finishing strategies.
- V-carving needs V-bit angle, max/flat depth, and inlay variants.
- Heightmap and image-based relief carving is important for artistic CNC work.
- Tiling should export machine-sized sections for projects larger than the cutting area.
- A setup report and estimated machining time help users catch mistakes before running a CNC.
Useful references:
- Carbide Create Pro: https://carbide3d.com/carbidecreate/pro/
- Vectric VCarve: https://www.vectric.com/products/vcarve/
- Carveco Maker: https://carveco.com/carveco-software-range/carveco-maker/
- Kiri:Moto CAM docs: https://docs.grid.space/kiri-moto/CAM/
- Autodesk Fusion manufacturing: https://www.autodesk.com/products/fusion-360/features
- F-Engrave: https://www.scorchworks.com/Fengrave/fengrave.html
- gSender UI/product context: https://github.com/Sienci-Labs/gsender
- Sienci AltMill specifications: https://resources.sienci.com/view/about-your-altmill/?print=print
- Sienci AltMill post processors: https://resources.sienci.com/view/am-post-processors/?print=print
- grblHAL command support: https://www.grblhal.com/what-is-grbl-hal/
This is a working prototype, not yet production CAM. Always simulate and air-run generated G-code before cutting material. The DXF, mesh, V-carve, inlay, pocket, and 3D engines are intentionally conservative approximations that should be hardened with real-world test cuts and controller-specific post processors.
- Add robust geometry with a library such as
ezdxfand polygon offsets/clipping once dependency installation is allowed. - Add true medial-axis V-carving and F-Engrave-compatible inlay math.
- Add controller-specific post processors for GRBL, grblHAL, LinuxCNC, Mach3/4, and ShopBot.
- Add toolpath containment, tabs/bridges, ramps, lead-ins, rest machining, drilling cycles, and tool-change handling.
- Add a richer 3D stock removal simulator.