Skip to main content

laserpecker

An open control library for LaserPecker laser engravers — because the vendor's software is Windows/macOS only and the Android app is painful to use.

Target device: LaserPecker 2. The protocol is shared across the LP1–LP5 range, so other models should work with adjusted device limits.

Status

Tested on real hardware (LP2, firmware 3.16) over both USB and Bluetooth: reading the device works, and engraving runs end to end — dither, upload, print start, motif on the workpiece.

Area State
Frame encoding / checksums byte-identical to LDS 2.12.1, confirmed on device
Status, version, MAC, file list verified on hardware, both transports
Serial transport (CH340, 460800) verified
BLE transport verified, but not re-run since the chunk-size fix
Preview (frame) and stop verified
Raster upload + engrave verified end to end
Upload file ID from image content reasoned about, not yet re-run on a machine
Focus / Z-axis, settings write implemented, untested — moves hardware
Vector / G-code jobs not implemented

The full list of what is still a guess is in TODO.md.

How it was obtained

LaserPecker Design Space 2.12.1 for Windows is an Electron app. Its renderer bundle contains the complete command layer in readable JavaScript, and the image pipeline as a WebAssembly module that can be executed directly. The specification — docs/protocol.md — comes from reading that code and running the WASM against synthetic images; the machine then confirmed it.

Decompiling for interoperability is explicitly permitted in the EU (Art. 6 Software Directive, § 40e öUrhG).

Install

uv sync                 # or: pip install -e "."

Serial access on Linux needs membership in the dialout group; the CH340 driver is in-kernel.

Use

laserpecker ports                      # find the device
laserpecker info                       # firmware / hardware version
laserpecker status                     # mode, progress, errors
laserpecker preview --width 30 --height 20
laserpecker engrave logo.png --width 40 --power 30 --depth 50
from PIL import Image
from laserpecker import LaserPecker

with LaserPecker() as lp:
    print(lp.info())
    lp.engrave_image(Image.open("logo.png"), x_mm=10, y_mm=10, width_mm=40)
    lp.wait_until_done(lambda s: print(s.rate, "%"))

Bluetooth instead of USB:

from laserpecker import LaserPecker, BleTransport

lp = LaserPecker(BleTransport("LP2-"))

Safety

The laser fires on preview and engrave. Wear the goggles, do not leave a running job unattended, and keep stop within reach — it is the same 0xFF command the app uses.

Layout

src/laserpecker/
    protocol.py           frames, commands, reply parsers
    transport.py          serial + BLE
    imaging.py            dithering and bit packing
    device.py             high-level API
    cli.py
tests/

Metadata

Release files for laserpecker 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for laserpecker 0.1.0
File Size Uploaded Provenance
laserpecker-0.1.0.tar.gz 33.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for laserpecker 0.1.0
File Interpreter ABI Platform
laserpecker-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 65.7 kB

Release files / laserpecker-0.1.0.tar.gz

Download URL laserpecker-0.1.0.tar.gz
Size 33.6 kB
Tags Source
SHA-256 checksum
How to use checksums
b3b1aade5214590a4ff0b24fb0e7eb38be9735129f431c190cc02d2bce12806a
BLAKE2b-256 checksum
How to use checksums
af040383bcfc0514e6d6203780b49316d5b94972771937f9085982d45c5d787c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"KDE neon","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / laserpecker-0.1.0-py3-none-any.whl

Download URL laserpecker-0.1.0-py3-none-any.whl
Size 32.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7e86f13ab40145787c66d94a176530193894169ed67d52e3a4565886a7617977
BLAKE2b-256 checksum
How to use checksums
6f5d98df72eb4bc25848759cbb5cd0bb9523596a05e4999c8cf1fdcc33c30fdc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"KDE neon","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for laserpecker 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page