Our control software uses a client-server model: a server that runs on the machine controller, and client programs that connect to this server to run programs or manually control the system. Our Composer programming environment allows you to create and run machining programs using the Python programming language. Scan patterns are programmed using our ASCI scanner control language. A graphical operator interface can be used to control job execution (start, stop, pause), monitor the system, and to manually control the machine.

The server runs on the Machine Control Unit (MCU), an industrial computer that controls the motion controller, scan system, laser, and sensor systems. The MCU server provides a network service that other software can use as a hardware abstraction layer. The interface is high-level so that it transparently supports both 2.5D and 3D systems, as well as different scan systems and lasers. The control protocol (LUMX) was designed to make it easy to write your own client software, e.g., for integrating your own HMI.

Executing programs is done using direct numerical control (DNC), that is, a program is sent directly to the machine as a stream of small subprograms, or blocks. Each block contains all the data needed to perform a small piece of the machining program: the scan pattern along with the location of the scan field, the laser parameters, etc. By generating the blocks just before they are needed very large and complex programs are possible, e.g., texturing jobs with millions of elements and a total running time of several days.


Composer is our programming environment for step-and-scan laser micromachining. In Composer, programs are defined by creating a hierarchy (tree) of machining operations (Actions). Because Composer scripts are written in Python you have all the power of a general purpose programming language available for composing these actions, and for extending the system for your own applications.


  • flexible step-and-scan job description language
  • write jobs in Python, using many excellent (scientific) libraries (NumPySciPyMatplotlib, etc.)
  • graphical previewer
  • toolkits for common tasks, e.g., experiment matrices for process development, micro-milling
  • scalable: can handle millions of actions


We have developed our own system for describing scan programs: Abstract Scanner Control Interface (ASCI). The software supports a high-level and structured description of scan programs.


  • efficient in-memory representation
  • human readable text format
  • fully 3D scan patterns and transformations
  • stable C interface
  • separation between the what (geometric primitives) and how (parameters, e.g., power and speed)
  • high-level primitives: point, line, polyline, and delay
  • attributes can be used to specify power profiles that allow complex gating/power variations for each primitive
  • styles allow late binding of parameters, e.g., a "label" style for labeling your experiments
  • easy to use Python bindings

Operator Interface

The graphical operator interface is used to monitor system status, control job execution (start, stop, pause), and for direct/manual control of the machine. It is designed to provide an overview of all relevant system information, whilst sill keeping the interface simple and easy to use.

The software can be installed and used on any system with access to the machine's network, e.g., a laptop can be used as a portable control station. Because the machine controller supports multiple simultaneous connections the operator interface can also be used in conjunction with custom clients/HMI's.