尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 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.