Skip to content

tscircuit/circuit-json-to-lbrn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

204 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

circuit-json-to-lbrn

Convert Circuit JSON to LBRN XML for PCB fabrication via laser ablation.

Usage

import { convertCircuitJsonToLbrn } from "circuit-json-to-lbrn"

// Generate copper layer only
const copperLbrn = convertCircuitJsonToLbrn(circuitJson, {
  includeCopper: true,
  includeSoldermask: false,
})

// Generate soldermask layer only (for cutting polyimide sheet)
const soldermaskLbrn = convertCircuitJsonToLbrn(circuitJson, {
  includeCopper: false,
  includeSoldermask: true,
})

// Generate both layers together in one file
const bothLbrn = convertCircuitJsonToLbrn(circuitJson, {
  includeCopper: true,
  includeSoldermask: true,
})

// Default behavior (copper only, backward compatible)
const defaultLbrn = convertCircuitJsonToLbrn(circuitJson)

Options

  • includeCopper?: boolean - Include copper traces and pads (default: true)
  • includeSoldermask?: boolean - Include soldermask openings for cutting polyimide sheet (default: false)
  • includeSilkscreen?: boolean - Include silkscreen layer (not implemented yet)
  • origin?: { x: number; y: number } - Set the origin point for the conversion
  • margin?: number - Set the margin around the PCB
  • traceMargin?: number - Clearance margin around traces in mm (requires includeCopper: true)
  • laserSpotSize?: number - Laser spot size in mm for crosshatch spacing (default: 0.005)
  • laserProfile?: { copper?: { speed?: number; numPasses?: number; frequency?: number; pulseWidth?: number }; board?: { speed?: number; numPasses?: number; frequency?: number; pulseWidth?: number } } - Custom laser cut settings for copper and board operations. Defaults from GitHub issue: copper (speed: 300 mm/s, numPasses: 100, frequency: 20 kHz, pulseWidth: 1 ns), board (speed: 20 mm/s, numPasses: 100, frequency: 20 kHz, pulseWidth: 1 ns). Pulse width is specified in ns. Allows per-user customization for different lasers/lenses.
  • includeLayers?: Array<"top" | "bottom"> - Specify which layers to include (default: ["top", "bottom"])
  • mirrorBottomLayer?: boolean - Mirror bottom layer across the board X-center for flipped-board cutting (default: false)

Soldermask Support

The includeSoldermask flag enables generation of soldermask openings for cutting Kapton tape (polyimide sheet). When enabled:

  • SMT pads and plated holes will have soldermask openings
  • Traces are NOT included in the soldermask layer (to avoid accidental bridging during soldering)
  • Holes are always cut through the board regardless of the mode
  • Soldermask shapes are filled (Scan mode) instead of outlined, which is required for laser-cutting Kapton tape masks where the laser needs to remove material from the pad areas

Laser Cutting Workflow

The soldermask layer uses LightBurn's "Scan" mode with filled shapes. This is designed for the following workflow:

  1. Generate LBRN file: Use includeSoldermask: true to export filled pad shapes
  2. Laser cut Kapton tape: The laser will fill/ablate the pad areas.

You can generate:

  • Copper only: { includeCopper: true, includeSoldermask: false } - Traditional copper cutting
  • Soldermask only: { includeCopper: false, includeSoldermask: true } - Just Kapton tape (polyimide) cutting patterns (filled shapes)
  • Both: { includeCopper: true, includeSoldermask: true } - Complete fabrication file with both layers

Trace Margin Support

The traceMargin option enables smart trace rasterization for creating clearance zones around traces. This is essential for laser PCB fabrication to ensure proper electrical isolation between traces.

How it works

When traceMargin is specified:

  1. Generates trace geometries at normal width (inner trace union)
  2. Generates trace geometries at width + 2×traceMargin (outer trace union)
  3. Calculates clearance area = outer - inner
  4. Outputs clearance area as filled shapes using Scan mode with crosshatch pattern

The crosshatch pattern ablates copper in the margin area, with line spacing determined by laserSpotSize.

Example

const lbrn = convertCircuitJsonToLbrn(circuitJson, {
  includeCopper: true,
  traceMargin: 0.2,      // 0.2mm clearance around traces
  laserSpotSize: 0.005,  // 0.005mm spot size (crosshatch spacing)
})

This will:

  • Cut trace outlines (vector mode)
  • Fill 0.2mm margin zones around traces with crosshatch pattern (scan mode)
  • Use 0.005mm spacing for the crosshatch lines

Note: traceMargin requires includeCopper: true and will throw an error if copper is disabled.

About

Convert Circuit JSON into LightBurn files for PCB laser ablation

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors