Free, open-source macOS laser engraver controller for GRBL machines.
A modern alternative to LightBurn — built with Python and CustomTkinter. Works with Totem S, xTool, Ortur, Atomstack, and any GRBL-compatible laser engraver or CNC machine.
- 🔌 Serial Connection — Auto-detect ports, one-click connect, baud rate selection
- 📟 GRBL Console — Send raw G-code, live output log, quick commands (Home, Unlock, Reset)
- 🎮 Jog Controls — X/Y/Z arrows with configurable step sizes (0.1–50mm)
- 📁 File Loading — Open
.nc,.gcode,.gcfiles directly - 🖼️ Image Engraving — Convert PNG/JPG/BMP to G-code with multiple dithering modes
- Floyd-Steinberg dithering
- Threshold (black/white)
- Grayscale line engraving
- ✏️ SVG Vector Cutting — Convert SVG paths to G-code for vector cuts
- 👁️ Live Preview — Matplotlib-powered toolpath visualization
▶️ Job Control — Start, Pause, Stop with progress bar and time estimate- 🔦 Laser Test — Power/speed sliders for safe test firing
- 🔲 Frame Trace — Trace the job bounding box with laser off before engraving
- ⚡ Speed & Power Overrides — Adjust on the fly
- Totem S laser engraver
- xTool D1 / D1 Pro
- Ortur Laser Master series
- Atomstack A5 / S10 / X20 Pro
- Sculpfun S9 / S30
- Any machine running GRBL firmware over USB serial
pip install lasermacgit clone https://github.com/quantumnic/lasermac.git
cd lasermac
pip install -e .lasermacThat's it. The app launches with a dark-themed GUI.
- Connect — Select your serial port and click Connect
- Unlock — Click 🔓 Unlock if the machine shows an alarm
- Load — Load a G-code file, image, or SVG
- Preview — Check the toolpath in the preview panel
- Frame — Click 🔲 Frame to trace the bounding box (laser off)
- Start — Click ▶ Start to begin engraving
- Load a PNG/JPG/BMP file
- Set width (mm), DPI, and dithering mode
- Click Convert to generate G-code
- Preview and start
| Key | Action |
|---|---|
Enter |
Send console command |
lasermac/
├── main.py # Entry point
├── lasermac/
│ ├── app.py # Main window (CustomTkinter)
│ ├── grbl.py # GRBL serial controller
│ ├── gcode.py # G-code parser + sender
│ ├── image_converter.py # Image → G-code (raster)
│ ├── svg_converter.py # SVG → G-code (vector)
│ ├── preview.py # Matplotlib toolpath preview
│ └── widgets/
│ ├── connection.py # Serial connection panel
│ ├── console.py # G-code console
│ ├── controls.py # Jog controls
│ └── job_panel.py # Job loading & control
└── tests/
├── test_grbl.py
├── test_gcode.py
└── test_image_converter.py
git clone https://github.com/quantumnic/lasermac.git
cd lasermac
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
# Run tests
pytest tests/ -q
# Lint
ruff check lasermac/ tests/MIT License — free to use, modify, and distribute.
Contributions welcome! Open issues or PRs on GitHub.
- GRBL — The open-source CNC firmware
- CustomTkinter — Modern Python UI
- Built as a free alternative to LightBurn
