Minimal real-time laser rendering engine
Project description
Lazou is a minimal real-time laser engine for Python.
It is built to stay simple first: define visuals, tweak params live, preview the result, and target laser outputs without falling back into the confusing all-in-one laser software culture inherited from the 2000s.
Quick Start ⚡
pip install lazou
lazou designs list
lazou simulate
That is enough to install Lazou from PyPI, browse the available designs, and run the current show in the simulator.
For local development:
uv sync --dev
uv run lazou simulate
Why Lazou
- simple JSON-driven workflow
- real-time parametric designs
- simulator-first development
- clean separation between geometry, compilation, and output
- made for experimentation, not legacy UI archaeology
Pipeline
flowchart LR
A["designs/*.json"] --> C["design.generate(t, params)"]
B["params.json"] --> C
C --> D["Shapes"]
D --> E["compile_scene"]
E --> F["Laser Frame"]
F --> G["Simulator"]
F --> H["DAC Output"]
Lazou follows a simple pipeline: JSON selects a design and live params, the design generates intent-level shapes, the compiler turns them into a laser-ready frame, and that frame is sent to one or more outputs.
Highlights 🚀
- real-time design generation driven by
tand live params - intent-level shapes compiled into laser-friendly frames
- blanking, dwell, and interpolation handled in the compiler
- simulator preview with visible and blanked path rendering
- CLI tools for design inspection, simulation, and schema export
ParamMap
Runtime params are validated against a strict shared catalog.
| Param | Type | Allowed Range / Rule | Meaning |
|---|---|---|---|
speed |
float | 0..10 |
animation speed |
size |
float | 0..1 |
normalized size or motion amount |
rotation_speed |
float | -10..10 |
rotational or phase speed |
line_count |
int | 1..256 |
number of generated lines |
color_hue |
float | 0..1 |
base hue in HSV space |
brightness |
int | 0..255 |
output brightness |
label |
string | non-empty, max 40 chars |
short design label |
closed |
bool | true or false |
open or closed geometry |
Designs may only use params they explicitly declare in their own params
block, with a default value.
Example runtime file:
{
"design": "moving-lines",
"params": {
"line_count": 12,
"speed": 0.5,
"color_hue": 0.62,
"brightness": 220
}
}
Design Preview 🎨
Preview one design before compilation:
lazou designs show diamond
lazou designs show orbit-diamond --time 1.5
lazou designs show moving-lines --set line_count=12 --set speed=0.5
--time is in seconds.
--set accepts params defined by the selected design. Values use JSON scalar
syntax, so numbers and booleans keep their type.
Runtime
Run the simulator:
lazou simulate
Run without laser output:
lazou run --no-laser
Run one headless frame and print metrics:
lazou run --no-laser --no-simulator
Use a custom params file when needed:
lazou run my-show.json --no-laser
lazou simulate my-show.json
Useful runtime options:
lazou simulate --fps 60 --kps 30
Outputs
Lazou is designed around interchangeable outputs so the same compiled frame can eventually target different playback backends.
| Output | Role | State |
|---|---|---|
Simulator |
2D preview for development and debugging | Ready |
Helios DAC |
Native hardware laser output | 🚧 |
Ether Dream |
Network laser DAC backend | 🚧 |
RIYA DAC |
USB DAC backend | 🚧 |
LaserDock DAC |
Compact USB DAC backend | 🚧 |
Moncha.NET |
Pangolin-compatible output target | 🚧 |
OpenLase |
Software laser output integration | 🚧 |
Today, the simulator is the stable path. Hardware and external output backends are part of the roadmap and the output layer is being shaped to support them cleanly.
JSON Workflow
Starter files included in the repository:
designs/moving-lines.json
designs/chubby-cheek-cat.json
params.json
Export local JSON Schema files for editor autocomplete and validation:
lazou dev export-schemas
This writes:
schemas/design.schema.json
schemas/params.schema.json
Safety ⚠️
This project is educational and experimental. It is not production laser safety software. Treat real laser output as unsafe until hardware support and safety limits are implemented and tested.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lazou-0.1.0.tar.gz.
File metadata
- Download URL: lazou-0.1.0.tar.gz
- Upload date:
- Size: 36.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb93ec17f21630ca4ddf9208e59d15b453aed24df6c2c5e59211803172865f78
|
|
| MD5 |
3b7e2497f8fcadcfd21c2cc42a09c52f
|
|
| BLAKE2b-256 |
dec46c34bada649dfe9db3c6e023ebe67e8dada75739c58952c5af277c22b887
|
Provenance
The following attestation bundles were made for lazou-0.1.0.tar.gz:
Publisher:
publish.yml on fregogui/lazou
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lazou-0.1.0.tar.gz -
Subject digest:
fb93ec17f21630ca4ddf9208e59d15b453aed24df6c2c5e59211803172865f78 - Sigstore transparency entry: 1439330310
- Sigstore integration time:
-
Permalink:
fregogui/lazou@6dcc2e1c967f1de550dac703847faa37bf605b07 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/fregogui
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6dcc2e1c967f1de550dac703847faa37bf605b07 -
Trigger Event:
push
-
Statement type:
File details
Details for the file lazou-0.1.0-py3-none-any.whl.
File metadata
- Download URL: lazou-0.1.0-py3-none-any.whl
- Upload date:
- Size: 34.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
513f569b6c87b5738462a1c57761eeac3f7760a3d6586295685abd78941b1afa
|
|
| MD5 |
72f12e9ad77e6ff354a2b1a7a57eb92c
|
|
| BLAKE2b-256 |
d39097f2d841e701e2298a3c27366f16b8974c9a015ff81daf5bb815a41f65e6
|
Provenance
The following attestation bundles were made for lazou-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on fregogui/lazou
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lazou-0.1.0-py3-none-any.whl -
Subject digest:
513f569b6c87b5738462a1c57761eeac3f7760a3d6586295685abd78941b1afa - Sigstore transparency entry: 1439330317
- Sigstore integration time:
-
Permalink:
fregogui/lazou@6dcc2e1c967f1de550dac703847faa37bf605b07 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/fregogui
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6dcc2e1c967f1de550dac703847faa37bf605b07 -
Trigger Event:
push
-
Statement type: