Picaluma
Free and open source for Windows, Mac and Linux. Instant search, one-click fixes, originals never touched.
Control NEJE Master 2 laser engravers from the browser over USB (Web Serial). Free, open source, works offline.
DesignTypeScript · CSSGitHub @pavelprokesOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Control a NEJE Master 2 laser engraver straight from the browser over USB. No install, no account, works offline. Built and tested with a NEJE Master 2 Mini.
Connection
Engraving
Image, text and patterns (tabs Image and Text)
Position and head (tab Position and the work area)
Laser, machine and history
Everywhere
wchusbserial… / COM…).
[!WARNING] Laser light damages eyes and can start fires. Always wear laser safety goggles, never leave the machine unattended, and keep its power switch within reach. The software STOP is no substitute for it.
The software cannot detect this, because the steppers have no feedback. These are the usual causes:
| Area | Status |
|---|---|
| Connect, identify, telemetry, reconnect, homing, head moves | ✅ verified on a Master 2 Mini (automated hardware test) |
| Laser parameters (power, burn time) | ✅ verified in real burns, stored by the device across power cycles |
| Machine settings: pointer brightness, motion detection | Implemented to the vendor protocol, not yet changed on hardware |
| Motor speed | Values 0–3 (Slowest–Fast) as in NEJE's Windows software for the Master 2 family; the Mini reports 2 (Medium). Not yet changed on hardware |
| Job upload and burn, trace frame, cancel | ✅ verified with a real calibration burn (traffic captured, see docs/PROTOCOL.md) |
| Pause/resume | Implemented to the vendor protocol, covered by simulator tests, not yet tried on hardware |
| Odd-row bit order | Two variants selectable (Advanced) until a calibration burn decides |
| Older KZ / BL / Master 1 boards (4-byte protocol) | Not supported |
The protocol is documented in docs/PROTOCOL.md.
Requirements: Node.js 22 or newer.
npm install
npm run dev # http://localhost:3000
npm run check # typecheck, lint, unit tests, build, end-to-end tests
| Script | What it does |
|---|---|
npm run build | Static export to out/, deployable to any static host |
npm run preview | Serves out/ on http://localhost:4173 |
npm test | Vitest unit tests: protocol bytes, parser, bitmap packing, dithering, session against the simulator, history file validation, text-to-SVG escaping, translations |
npm run test:e2e | Playwright against the production build, with the simulator instead of a machine. Covers every tab, axe WCAG 2.2 AA scans in both colour schemes, keyboard-only use, history export/import, languages and offline mode |
npm run test:hardware | Optional. Drives the real UI against a connected engraver, e.g. NEJE_PORT=/dev/cu.wchusbserial3130 npm run test:hardware -- device. Its relay refuses anything that could fire the laser. A calibration burn with traffic capture needs a second opt-in (NEJE_ALLOW_BURN=1 … -- burn, see tests/hardware/burn.spec.ts) |
src/
lib/protocol/ wire format, message decoding, bitmap packing, NejeSession (no DOM, fully unit tested)
lib/transport/ Web Serial, simulator (real captured frames), Playwright hardware bridge
lib/imaging/ file decoding (raster + SVG), dithering, rasterisation at device resolution
lib/ job settings model + validation, history (IndexedDB) and its export file, presets,
machine settings, text-to-SVG, test patterns, storage
i18n/ typed messages per locale, browser language detection
hooks/ components/ app/ React UI (Next.js App Router, static export)
public/sw.js offline service worker
NejeSession exposes an immutable snapshot through subscribe/getSnapshot, so React reads it
with useSyncExternalStore.JobSettings). History stores it next to the image,
which is what makes swapping the motif possible.npm run build and upload out/.
For a sub-path, build with NEXT_PUBLIC_BASE_PATH=/sub-path.Web Serial and the service worker need HTTPS, or localhost.
Issues and pull requests are welcome, especially:
Please run npm run check before opening a pull request.
This is an independent open-source project. It is not affiliated with or endorsed by NEJE (Shenzhen ZhiXinJie Technology Co., Ltd.). The protocol was documented for interoperability with hardware the author owns, and no vendor code or assets are included. Use at your own risk.