Software overview
The whole path from import through processing and preview to emitted machine output.
The core holds the geometry once, in an internal representation with no dialect in it, and each adapter emits that program against the rules of the controller it is talking to. Power scaling alone is four quantisations of the same physical intent, and the scale is read off the machine's own registers at connect time rather than assumed. The desktop application and the industrial marking layer run on the same controller-aware core, written in Nelson, and the figures on this page are from that core.
Controllers differ in the command they use to turn the beam on, the scale they read power on, the precision they accept, whether they execute arcs, the vocabulary they report status in, and how they want to be fed.
The geometry is held once, in an internal motion program with no dialect in it. Each adapter turns that program into the output its controller executes, so a curve becomes an arc command where the controller carries arcs and a run of segments where it does not, and a power value becomes whatever integer or fraction that firmware reads. Adding a controller means writing an adapter and a fixture set, which is why controller reach grows without the geometry engine being reopened.
Software overview
The whole path from import through processing and preview to emitted machine output.
Feature system
The heat map preview, material testing, templates and repeat workflows that sit on top of the same core.
Every row is the same internal motion program, quantised and streamed the way that controller expects it.
| Controller path | Power model | Curves | Streaming and status |
|---|---|---|---|
| GRBL | Dynamic power, an inline power value on every move, internal 0 to 10000 scaled onto the $30 value read off the controller at connect time | G2 and G3 arc commands, with the Experimental arc fitting pass available on top | Character-counting streaming against the 128 byte receive buffer, auto-detected at connect |
| Marlin | Constant power, quantised onto the 0 to 255 integer the firmware reads | Emitted as straight line segments, matching what the firmware executes | Send and wait, one command confirmed before the next goes out, auto-detected at connect |
| Smoothieware | Constant power, 0 to 1.0 at four decimal places | G2 and G3 arc commands | Send and wait, auto-detected at connect |
| Generic or custom G-code | Constant power, 0 to 1000 | Emitted as straight line segments | Basic send, selected manually for machines outside the named dialects |
| Ruida | Driven through an external bridge rather than emitted from the core | Handled by the bridge | Alpha. Validate the path on your own machine and job set before it carries production work |
A head decelerating into a corner deposits more energy per millimetre than a head at cruise. That is what burns corners, and it is an energy problem rather than a power setting.
So the controlled quantity is energy per millimetre. The firmware modulates power against actual velocity and the generator emits an inline power value on every move. The core reads the machine's own $30 and $31 registers at connect time and scales every emitted value to that machine's real range, then queries $110 and $111 to derive and validate the effective maximum feed rate. On the dialects that run constant power, the same physical intent is emitted as constant power against the scale that firmware reads.
The software asks the machine what it can do rather than assuming a category average. A power number that means one thing on one board and something else on the next is how a setting that worked last week ruins the part in front of you.
Character-counting streaming tracks bytes in flight against the controller's 128 byte receive buffer and keeps it full, rather than waiting for an acknowledgement per line. Controllers that run better on a strict handshake fall back to send and wait, with three retries on a 3, 8 then 12 second escalation ladder. Preflight primes absolute mode, issues a no-op move and probes laser mode before the job starts.
The stop system has three levels: an emergency stop issuing feed hold, power zero, laser off and the soft reset byte; a soft stop; and a recovery sequence that soft resets, flushes buffers, drains the controller boot chatter, verifies status, clears alarms and restores the user origin. That recovery runs back through the same dialect adapter that emitted the job, so status is verified and alarms are cleared in the words that particular controller answers in, and one board is never left sitting in alarm because another board's reset sequence was assumed.
On a floor the question is never whether the emergency stop works. It is what the operator does in the next two minutes, and whether the origin survived.
The question a production user rarely gets to ask any laser software: what happens to my parts when this updates.
One worked example of dialect-aware output: turning a run of short straight segments back into a curve, on the path that executes arc commands.
Arc fitting is labelled Experimental in the application and it is labelled Experimental here. It fits consecutive straight segments to circular arcs by Kasa algebraic least squares, solved through a 3 by 3 Cramer's rule determinant, and emits the result as G2 or G3 so a curve runs as one arc command instead of many short lines. It is enabled on GRBL, the dialect that carries arc commands and dynamic power together.
Feature overview
Where controller-aware output sits against previews, processing, templates, testing and repeat workflows.
Ask about a controller
Send the controller, the firmware version and a job you run, and you get a straight read on the emission path.
Machine profiles and custom profiles keep setup, defaults and behaviour attached to the actual device. Switching between machines carries that context with it, and a repeat job starts from the settings that produced the last good part.
Estimate calibration tunes timing estimates against the behaviour of your own machine, factoring in repeat passes and the feed rates the controller reports, so a planned job length reflects the device in the room. On repeat and production work that compounds fast, because a schedule built on a guessed average is a schedule that slips quietly.
Written parameters are how a good result survives the person who found it. The same discipline runs on the industrial side of the core, where marking parameters and machine profiles for every material and mark type are saved on the system and written down as part of the handover pack.
GRBL, Marlin, Smoothieware and Generic or custom G-code, all emitted from one internal, dialect-neutral motion program against each dialect's own rules, with auto-detection at connect on the named paths. Ruida runs through an external bridge and is labelled alpha.
Because that is what each firmware executes. GRBL laser mode adjusts power against actual velocity and runs G2 and G3 arc commands. Marlin runs constant power and straight line segments. The adapter emits to the real capability of the controller in front of it, quantised onto that firmware's own scale: an internal 0 to 10000 range onto the GRBL $30 value read at connect time, and onto the Marlin 0 to 255 integer.
The golden fixture suite holds emitted machine output stable across three dialects, 42 fixtures across two images and seven processing variants, and a conformance validator checks every emitted program against that dialect's rules, so a change to the geometry engine has to be reviewed and accepted before it reaches a machine. Updates themselves are fetched from a signed version manifest and verified against a published SHA-256 checksum before installation.
Setup, defaults and behaviour tied to the actual device, plus the calibrated timing behaviour of that machine. Switching machines carries the context with it, and a setting that produced a good part is recovered rather than rediscovered.
Experimental, and labelled Experimental in the application. It is enabled on GRBL and it fits consecutive segments to circular arcs by Kasa algebraic least squares through a 3 by 3 Cramer's rule determinant, gated on five conditions holding at once: at least 8 segments, radial error under 0.08 mm, radius deviation under 1.5 percent, a sweep of at least 15 degrees, and consecutive segments within 0.12 mm.
Ruida is at alpha and runs through an external bridge, while GRBL, Marlin, Smoothieware and Generic are emitted directly from the core against their own dialect rules and held by the golden fixture suite. Validate the Ruida path on your own machine and jobs before it carries production work.
Yes. The desktop application and the industrial marking layer run on the same controller-aware core, written in Nelson, and the figures on this page are from that core. The industrial layer adds the composition and integration work a marking line needs, and it drives the same emission, streaming and recovery path underneath.
Download the current build and connect the machine. The core auto-detects the named dialects, reads the controller's own registers at connect time, and scales every emitted value to that machine's real range before a single move goes out. The 14 day trial is started and signed in inside the application.
Last updated August 21, 2026