ThePirateRay/docs/research/rayforge-lightburn-mopa-import-spike.md

2.6 KiB

Rayforge synthetic LightBurn MOPA import spike

  • Date: 2026-10-18
  • Rayforge commit: c28918c87f8273dd1d244f5a057addc192807fa5
  • Fixture: synthetic public .lbrn2; no machine identifiers
  • Scope: importer boundary only, with no discovery or transport

Result

The pinned Rayforge importer successfully parsed a synthetic two-millimetre square and preserved its layer name, geometry, 50 percent power, 250 mm/s speed and one pass. LightBurn's observed frequency and overrideFrequency elements also survive in the source asset's raw metadata.

However, the importer does not map frequency into the workflow layer settings. It maps only power, speed and passes from this fixture. The inspected Rayforge LightBurn project fixtures and importer contain no evidence-backed mapping for a MOPA pulse-width field. A later private LightBurn device-library export establishes the field name QPulseWidth and its nanosecond UI contract, but it does not establish how that value is serialized in a .lbrn2 project. Consequently, the imported job is explicitly classified as unsafe for JCZ encoding rather than being completed with a guessed mapping.

Two runs produced identical output with SHA-256 9ebce7b5b3388abfeed024e25f8f46001260bf814da19808bfc83fb6554fc26e. The golden result is tests/fixtures/rayforge-lightburn-mopa-import.json.

Evidence classification

  • Observed: Rayforge's own LightBurn test fixtures contain frequency and overrideFrequency elements.
  • Observed: generic parsing retains these elements in source metadata.
  • Observed: _build_step_config does not map frequency or pulse width.
  • Observed after this spike: a LightBurn 2.1.03 device-library export uses QPulseWidth; official LightBurn documentation defines Q-pulse width in nanoseconds. See the device-export analysis.
  • Unknown: the exact QPulseWidth representation and omission/default behavior in a known-working galvo .lbrn2 project.
  • Not inferred: no pulse-width tag, unit, default or machine limit was invented for the public fixture.

Decision impact

Rayforge's existing LightBurn importer is useful for ordinary vector geometry and common process settings, but it does not yet satisfy M1's MOPA parameter survival requirement. The narrowest likely extension is an importer mapping for frequency plus QPulseWidth, followed by an explicit unit conversion and validation gate. A private known-working LightBurn project is still needed to establish project serialization before implementing that mapping.

No USB enumeration, controller command, motion or emission was attempted.