THE MACHINE · IN THE OPEN · FROM THE WITNESSED RUN OF 2026-10-09
laser.py, every command showing its working.
A small Python program, standard library only. Your AI runs it; you can too. Every block below is pasted from the card’s own WITNESS.md, as printed.
material | every material on the card's list, by verdict |
|---|
grid | an SVG power x speed test grid (each cell its own colour) and a CSV of its cells |
|---|
kerf | the grid read: a 10 mm cut square measured 9.82 mm; the coaster stand has slots for the same sheet |
|---|
time | FILE.svg --cut-speed V [--engrave-speed V --interval MM] [--passes N] [--travel-speed V] |
|---|
quote | the quote for twenty (FAKE figures) |
|---|
rate | the hourly rate (FAKE figures) |
|---|
spot | the CO2: a 50.8 mm lens and a 7 mm beam |
|---|
eyewear | the open-frame 10 W blue diode: what its eyewear must be rated for |
|---|
preflight | checks a design before it goes to the laser |
|---|
classes | laser classes 1, 1M, 2, 2M, 3R, 3B, 4 in plain words |
|---|
selftest | 33 checks that prove the machine; it must print 33/33 |
|---|
material · EVERY MATERIAL ON THE CARD'S LIST, BY VERDICT
$ laser.py material "3 mm birch ply" --laser co2
material: 3 mm birch ply → PLYWOOD (matched "birch ply")
VERDICT: OK — test on a scrap first
→ co2: cut and engrave
diode: engrave; cut thin sheet, often in several passes
fiber: not the tool
releases: wood smoke; the glue gives formaldehyde
watch for: the glue resists the cut: laser-grade plywood cuts cleaner
Always: air assist and extraction on, a suitable extinguisher in reach, never unattended.
source: Dallas Makerspace, "Laser Cutter Materials" wiki (read 2026-10-09); Stanford University EHS, "Laser Cutters Safety Guidance", LSP 24-138, rev. 2024-09-26
limit: a list cannot see your sheet. Coatings, glues, fillers and backings change what it releases; the supplier's safety data sheet and your machine's manual decide.
material · EVERY MATERIAL ON THE CARD'S LIST, BY VERDICT
$ laser.py material "vinyl sticker sheet"
material: vinyl sticker sheet → PVC AND VINYL (matched "vinyl sticker")
VERDICT: DO NOT LASER — not to cut, not to engrave, with any laser.
releases: chlorine gas and hydrochloric acid (HCl)
why: toxic to breathe; the acid corrodes the machine and ruins the optics. Faux leather is PVC or polyurethane, and both are on this list.
use instead: a vinyl cutter (a blade, not a laser) for vinyl; laser-rated sticker paper; real vegetable-tanned leather; cast acrylic for rigid sheet
Always: air assist and extraction on, a suitable extinguisher in reach, never unattended.
source: Dallas Makerspace, "Laser Cutter Materials" wiki (read 2026-10-09); Stanford University EHS, "Laser Cutters Safety Guidance", LSP 24-138, rev. 2024-09-26
limit: a list cannot see your sheet. Coatings, glues, fillers and backings change what it releases; the supplier's safety data sheet and your machine's manual decide.
material · EVERY MATERIAL ON THE CARD'S LIST, BY VERDICT
$ laser.py material "faux leather"
material: faux leather → PVC AND VINYL (matched "faux leather")
VERDICT: DO NOT LASER — not to cut, not to engrave, with any laser.
releases: chlorine gas and hydrochloric acid (HCl)
why: toxic to breathe; the acid corrodes the machine and ruins the optics. Faux leather is PVC or polyurethane, and both are on this list.
use instead: a vinyl cutter (a blade, not a laser) for vinyl; laser-rated sticker paper; real vegetable-tanned leather; cast acrylic for rigid sheet
Always: air assist and extraction on, a suitable extinguisher in reach, never unattended.
source: Dallas Makerspace, "Laser Cutter Materials" wiki (read 2026-10-09); Stanford University EHS, "Laser Cutters Safety Guidance", LSP 24-138, rev. 2024-09-26
limit: a list cannot see your sheet. Coatings, glues, fillers and backings change what it releases; the supplier's safety data sheet and your machine's manual decide.
material · EVERY MATERIAL ON THE CARD'S LIST, BY VERDICT
$ laser.py material "clear acrylic" --laser diode
material: clear acrylic → ACRYLIC (PMMA) (matched "clear acrylic")
VERDICT: OK — test on a scrap first
co2: cut (polished edge) and engrave; cast acrylic frosts when engraved, extruded does not
→ diode: cannot cut clear, white or blue acrylic, and cannot engrave clear acrylic: the light passes through. Thin dark opaque acrylic can be cut.
fiber: not the tool: 1064 nm passes through clear acrylic
FOR YOUR SHEET: a blue diode laser cannot cut clear acrylic — the light passes through or refracts instead of focusing (xTool). Use a CO2 laser, or a dark opaque sheet.
releases: methyl methacrylate fumes (a strong smell)
watch for: cast and extruded sheet behave differently; it can flame at slow speeds — keep air assist on and stay with it
Always: air assist and extraction on, a suitable extinguisher in reach, never unattended.
source: Dallas Makerspace, "Laser Cutter Materials" wiki (read 2026-10-09); xTool Support, "Essentials When Processing Acrylic with xTool Laser Machine" (updated 2024-11-20)
limit: a list cannot see your sheet. Coatings, glues, fillers and backings change what it releases; the supplier's safety data sheet and your machine's manual decide.
material · EVERY MATERIAL ON THE CARD'S LIST, BY VERDICT
$ laser.py material "grey plastic offcut"
material: grey plastic offcut → NOT ON THIS CARD'S LIST
VERDICT: UNKNOWN
Test a scrap only after you know what it is made of. Ask the supplier for its safety data sheet (SDS). If it is not on this list and no one can tell you what it is, do not laser it.
limit: a list cannot see your sheet. Coatings, glues, fillers and backings change what it releases; the supplier's safety data sheet and your machine's manual decide.
grid · AN SVG POWER X SPEED TEST GRID (EACH CELL ITS OWN COLOUR) AND A CSV OF ITS CELLS
$ laser.py grid --material "3 mm birch ply" --laser co2 --watts 50
material: 3 mm birch ply → PLYWOOD · co2 laser, 50 W · 3 mm
wrote test-grid-3-mm-birch-ply-co2-50w.svg (73.0 × 117.0 mm) and test-grid-3-mm-birch-ply-co2-50w.csv (24 cells)
CUT block: power 60, 73, 87, 100 % × speed 31, 14, 6 mm/s
ENGRAVE block: power 15, 25, 35, 45 % × speed 500, 305, 190 mm/s
colours: 24 cell colours + blue labels = 25 layers (some programs cap colour layers; LightBurn has 30 — use --mode cut, then --mode engrave, if yours runs out)
engrave line interval to start from: 0.1 mm
STARTING SPANS ONLY — studio-written, wide on purpose, scaled from a 40 W machine by power (and by thickness for cuts): speed ∝ watts ÷ 40 × reference thickness ÷ yours.
Settings vary by machine, lens, focus, air assist and the batch of material. Run the grid on a scrap of the same sheet, focused, with air assist and extraction on, and stay with the machine.
Read it: the fastest cut cell that drops free cleanly, and the engrave cell with the depth and colour you want. Note them in MY-LEDGER.md with the sheet's batch.
source: Dallas Makerspace, "Laser Cutter Materials" wiki (read 2026-10-09); Stanford University EHS, "Laser Cutters Safety Guidance", LSP 24-138, rev. 2024-09-26
preflight · CHECKS A DESIGN BEFORE IT GOES TO THE LASER
$ laser.py preflight test-grid-3-mm-birch-ply-co2-50w.svg --bed 300x200
file: test-grid-3-mm-birch-ply-co2-50w.svg
SIZE: page 73.0 × 117.0 mm (units: mm); the design spans 63.0 × 107.0 mm, from (5.0, 5.0)
LAYERS (by colour — most laser software sets power and speed per colour):
fill (engrave) stroke - width - fill #00996C · 1 shape(s), 40.0 mm of path
fill (engrave) stroke - width - fill #00D0D9 · 1 shape(s), 40.0 mm of path
fill (engrave) stroke - width - fill #00D924 · 1 shape(s), 40.0 mm of path
fill (engrave) stroke - width - fill #25D900 · 1 shape(s), 40.0 mm of path
fill (engrave) stroke - width - fill #52D900 · 1 shape(s), 40.0 mm of path
fill (engrave) stroke - width - fill #6300D9 · 1 shape(s), 40.0 mm of path
fill (engrave) stroke - width - fill #6D9900 · 1 shape(s), 40.0 mm of path
fill (engrave) stroke - width - fill #990014 · 1 shape(s), 40.0 mm of path
fill (engrave) stroke - width - fill #990099 · 1 shape(s), 40.0 mm of path
fill (engrave) stroke - width - fill #993F00 · 1 shape(s), 40.0 mm of path
fill (engrave) stroke - width - fill #D90091 · 1 shape(s), 40.0 mm of path
fill (engrave) stroke - width - fill #D9A200 · 1 shape(s), 40.0 mm of path
line (cut or score) stroke #0000FF width 0.100 mm fill - · 69 shape(s), 436.8 mm of path
line (cut or score) stroke #006099 width 0.050 mm fill - · 1 shape(s), 40.0 mm of path
line (cut or score) stroke #00994C width 0.050 mm fill - · 1 shape(s), 40.0 mm of path
line (cut or score) stroke #00D9B5 width 0.050 mm fill - · 1 shape(s), 40.0 mm of path
line (cut or score) stroke #079900 width 0.050 mm fill - · 1 shape(s), 40.0 mm of path
line (cut or score) stroke #790099 width 0.050 mm fill - · 1 shape(s), 40.0 mm of path
line (cut or score) stroke #7ED900 width 0.050 mm fill - · 1 shape(s), 40.0 mm of path
line (cut or score) stroke #8C9900 width 0.050 mm fill - · 1 shape(s), 40.0 mm of path
line (cut or score) stroke #990033 width 0.050 mm fill - · 1 shape(s), 40.0 mm of path
line (cut or score) stroke #992000 width 0.050 mm fill - · 1 shape(s), 40.0 mm of path
line (cut or score) stroke #D90000 width 0.050 mm fill - · 1 shape(s), 40.0 mm of path
line (cut or score) stroke #D900BE width 0.050 mm fill - · 1 shape(s), 40.0 mm of path
line (cut or score) stroke #D97500 width 0.050 mm fill - · 1 shape(s), 40.0 mm of path
BED: everything fits inside 300 × 200 mm.
CHECK 57 open path(s) (#0000FF: 57): fine for a score line; a cut line that does not close will not free the part
VERDICT: READY — no fixes found; read the CHECK lines
limit: it reads the file, not your material or your machine; run the test grid for settings.
source: W3C SVG 1.1 (Second Edition, 2011), paths and the arc implementation notes F.6.5
kerf · THE GRID READ: A 10 MM CUT SQUARE MEASURED 9.82 MM; THE COASTER STAND HAS SLOTS FOR THE
$ laser.py kerf --designed 10 --got 9.82 --thickness 3.0 --fit snug
kerf 0.180 mm, measured on a part drawn 10 mm that came out 9.82 mm: kerf = drawn − got → offset 0.090 mm (offset = kerf ÷ 2: the beam takes half its width from each side of the line)
OUTSIDE cuts (the part): move the line OUTWARD by 0.090 mm, so the part comes out at its drawn size.
INSIDE cuts (holes, slots): move the line INWARD by 0.090 mm, so the hole comes out at its drawn size.
Uncompensated, a drawn part comes out 0.180 mm small across and a drawn hole 0.180 mm large: a box joint is loose by about 0.360 mm.
SLOT for 3 mm sheet, snug fit: the slot should come out 3.000 mm (thickness − 0.00), so draw it 2.820 mm (finished − kerf; not offset in software).
COMB TEST — the honest way: cut slots drawn 2.72, 2.77, 2.82, 2.87, 2.92 mm and push a scrap of the same sheet into each; keep the one that holds.
Measure the sheet with calipers at several points: sheets vary, and plywood often runs thinner than its name.
limit: kerf changes with power, speed, focus, material and thickness, and it is wider at the top of a thick cut than at the bottom. Measure it from a test on the same sheet and settings.
preflight · CHECKS A DESIGN BEFORE IT GOES TO THE LASER
$ laser.py preflight coasters-draft.svg --bed 300x200
file: coasters-draft.svg
SIZE: page 300.0 × 200.0 mm (units: mm); the design spans 298.0 × 190.0 mm, from (7.0, 7.0)
LAYERS (by colour — most laser software sets power and speed per colour):
fill (engrave) stroke - width - fill #000000 · 12 shape(s), 4393.1 mm of path
line (cut or score) stroke #FF0000 width 0.050 mm fill - · 8 shape(s), 2053.2 mm of path
FIX 1 text element(s) not converted to paths: the laser computer may not have the font, and many programs skip text. Convert text to outlines/paths.
FIX 1 path(s) nearly closed (gap of 0.1 mm or less): close them, or the part will hang on by a thread
FIX duplicate or overlapping lines: 282.7 mm of path will be cut twice (0 straight run(s), 1 curve(s)) — it burns the edge and wastes time. Delete duplicates; where parts share an edge, keep one line.
FIX 1 shape(s) fall outside the 300 × 200 mm bed (measured from the page's top-left corner): move them in, or the laser will not reach them
CHECK some of the design lies outside the page; some software drops what is off the page
VERDICT: FIX FIRST — 4 thing(s) to fix before this goes to the laser
limit: it reads the file, not your material or your machine; run the test grid for settings.
source: W3C SVG 1.1 (Second Edition, 2011), paths and the arc implementation notes F.6.5
preflight · CHECKS A DESIGN BEFORE IT GOES TO THE LASER
$ laser.py preflight coasters.svg --bed 300x200
file: coasters.svg
SIZE: page 300.0 × 200.0 mm (units: mm); the design spans 286.0 × 186.0 mm, from (7.0, 7.0)
LAYERS (by colour — most laser software sets power and speed per colour):
fill (engrave) stroke - width - fill #000000 · 12 shape(s), 4393.1 mm of path
line (cut or score) stroke #FF0000 width 0.050 mm fill - · 6 shape(s), 1696.5 mm of path
BED: everything fits inside 300 × 200 mm.
VERDICT: READY — no fixes found; read the CHECK lines
limit: it reads the file, not your material or your machine; run the test grid for settings.
source: W3C SVG 1.1 (Second Edition, 2011), paths and the arc implementation notes F.6.5
time · FILE.SVG --CUT-SPEED V [--ENGRAVE-SPEED V --INTERVAL MM] [--PASSES N] [--TRAVEL-SPEED V]
$ laser.py time coasters.svg --cut-speed 15 --engrave-speed 300 --interval 0.1
file: coasters.svg · 300.0 × 200.0 mm page
CUT AND SCORE LINES: 1696.5 mm of path · 1 pass at 15 mm/s → 113.1 s (t = length × passes ÷ speed)
ENGRAVE: 11065.4 mm² filled · 1440 raster lines 0.1 mm apart · 369431 mm swept including 2 mm overscan each end, at 300 mm/s → 1231.4 s (t = Σ(line span + 2 × overscan) ÷ speed)
TRAVEL: about 594 mm between cuts at 150 mm/s → 4.0 s (nearest-neighbour order from the origin; your software orders its own way)
OVERHEAD: × 1.20 for acceleration, corners and the controller (an assumption — time one real job on your machine and set --overhead to match)
TOTAL: about 27.0 minutes (1618 s) (total = (cut + engrave + travel) × overhead)
limit: a time estimate, not a stopwatch. Engraving is assumed bidirectional and trimmed to the art on each line; machines that sweep the full width take longer.
source: W3C SVG 1.1 (Second Edition, 2011), paths and the arc implementation notes F.6.5
rate · THE HOURLY RATE (FAKE FIGURES)
$ laser.py rate --machine-cost 4000 --life-hours 3000 --consumables-per-hour 1.5 --kw 1.2 --price-per-kwh 0.18 --labour-per-hour 25
AN HOURLY RATE — in your own currency
machine 4000.00 ÷ 3000 hours of use 1.33 an hour
consumables tube or diode, lens, filters 1.50 an hour
power 1.2 kW × 0.180 a kWh 0.22 an hour
your time 25.00 an hour
RATE 28.05 an hour
limit: life hours and consumable costs are your own estimates; count the chiller, extraction and air assist in the kW.
quote · THE QUOTE FOR TWENTY (FAKE FIGURES)
$ laser.py quote --minutes 4.50 --quantity 20 --rate-per-hour 28.05 --material-cost 24 --setup-minutes 15 --design-minutes 30 --margin 0.4
A JOB QUOTE — in your own currency (no currency is assumed)
machine time 4.5 min × 20 pieces ÷ 60 × 28.05 an hour 42.08
setup 15 min ÷ 60 × 28.05 an hour 7.01
design 30 min ÷ 60 × 28.05 an hour 14.03
material 24.00
COST 87.11
PRICE at a 40% margin: cost ÷ (1 − 0.40) 145.19
profit 58.08
per piece 7.26
margin = profit ÷ price. (A markup of m on cost is cost × (1 + m): a 40% margin is a 67% markup.)
limit: the rate must cover the machine's wear (tube or diode, lens, filters), power and your time — `rate` builds it. Market prices, taxes and fees are yours to add.
spot · THE CO2: A 50.8 MM LENS AND A 7 MM BEAM
$ laser.py spot --wavelength 10.6 --focal 50.8 --beam 7 --m2 1.2 --watts 50
10.6 read as 10.6 µm — CO2 (10.6 µm, far infrared — invisible)
SPOT: d ≈ 4·λ·f·M² ÷ (π·D) = 4 × 0.0106 mm × 50.8 mm × 1.2 ÷ (π × 7 mm) = 0.1175 mm (118 µm)
DEPTH OF FOCUS: Rayleigh range z_R = π·w0² ÷ (M²·λ) = 0.853 mm; the spot stays within √2 of its smallest over ±0.853 mm (1.706 mm in all)
POWER DENSITY: P ÷ (π·(d/2)²) = 50 W ÷ 0.0001085 cm² = 4.61e+05 W/cm²
M² 1.2. D is the beam's diameter where it enters the lens.
limit: the Gaussian-beam formula; real spots run larger (lens quality, dirty optics, misalignment). Diode beams are oblong with a high M²: measure a burn mark instead. Source: Gaussian beam optics, focused waist w0 = M²·λ·f ÷ (π·w), w = D/2.
eyewear · THE OPEN-FRAME 10 W BLUE DIODE: WHAT ITS EYEWEAR MUST BE RATED FOR
$ laser.py eyewear --wavelength 445 --watts 10 --beam-mm 5
445 nm — blue diode (about 445–455 nm, visible blue)
OPTICAL DENSITY (OD): OD = log10(H0 ÷ MPE). H0 is the worst exposure the eye could get; MPE is the maximum permissible exposure for that wavelength and time, in the same units. Eyewear of OD n lets through 1/10^n of the light: OD 4 passes one ten-thousandth.
direct-beam irradiance at the aperture: H0 = P ÷ (π·(D/2)²) = 10 W ÷ 0.1963 cm² = 50.93 W/cm²
Give --mpe from the standard (same units as H0, for this wavelength and exposure time) to compute the OD.
This card does not print MPE values: they depend on the wavelength, the exposure time and the beam, and come from ANSI Z136.1 or IEC 60825-1 — or from the eyewear maker, who rates for exactly this.
ALWAYS:
- Buy eyewear rated by its maker for the exact wavelength (445 nm), marked with its OD there (US: ANSI Z136.7 labelling; Europe: EN 207 marking). Eyewear for one wavelength may protect nothing at another.
- Glasses with no wavelength and OD marking are not laser eyewear.
- The laser's own manual and ANSI Z136.1 / IEC 60825-1 decide. Eyewear guards against a stray reflection; it is not for looking at the beam.
- The safe default is an enclosed Class 1 machine with its interlocks intact. An open-frame engraver is a Class 4 product: everyone in the room needs rated eyewear, and the beam must never leave the work area.
source: ANSI Z136.1-2022, American National Standard for Safe Use of Lasers; IEC 60825-1:2014, Safety of laser products, Part 1
classes · LASER CLASSES 1, 1M, 2, 2M, 3R, 3B, 4 IN PLAIN WORDS
$ laser.py classes
LASER CLASSES (IEC 60825-1:2014; the US uses ANSI Z136.1 for safe use and the FDA for product labels)
1 Safe in normal use, even with magnifiers. An enclosed cutter with its interlocks intact is a Class 1 product, though the laser inside is Class 3B or 4.
1M Safe to the naked eye; hazardous through magnifying optics (binoculars, a telescope, a loupe).
2 Visible light, low power (up to 1 mW for a continuous beam). The blink reflex usually protects; never stare into it.
2M Like Class 2, but hazardous through magnifying optics.
3R Up to five times the Class 2 limit for visible light (5 mW continuous). A small risk of eye injury from the direct beam: avoid it.
3B Up to 0.5 W continuous. The direct beam or a mirror reflection injures the eye; a diffuse reflection is usually not hazardous. Rated eyewear and controlled access.
4 Above 0.5 W. Direct, mirror and diffuse reflections can injure eyes and skin; it can start fires and make hazardous fumes. Almost every cutting and engraving laser is Class 4 inside.
Never modify a machine to raise its power or its class, and never defeat an interlock, enclosure or safety switch. Pointing a laser at an aircraft is a crime in the US (18 U.S.C. 39A) and in many other countries.
limit: plain words, not the standard; the power limits shown are for continuous visible beams, and the standard's own tables decide.
source: IEC 60825-1:2014, Safety of laser products, Part 1; ANSI Z136.1-2022, American National Standard for Safe Use of Lasers
grid · AN SVG POWER X SPEED TEST GRID (EACH CELL ITS OWN COLOUR) AND A CSV OF ITS CELLS
$ laser.py grid --material "PVC foam board" --laser co2 --watts 50
material: PVC foam board → POLYSTYRENE FOAM
No test grid. DO NOT LASER: it releases styrene — it catches fire easily, and the fumes are styrene.
Use instead: a hot-wire foam cutter, or a knife for foam board.
source: Stanford University EHS, "Laser Cutters Safety Guidance", LSP 24-138, rev. 2024-09-26; Dallas Makerspace, "Laser Cutter Materials" wiki (read 2026-10-09)
THE RUNS ARE PASTED FROM THE CARD’S OWN WITNESS.MD AS PRINTED. FIGURES MARKED FAKE ARE THE STUDIO’S OWN EXAMPLES, INVENTED FOR THE RECORD; PUBLISHED FIGURES ARE NAMED WITH THEIR SOURCES. NO PRIVATE PERSON IS NAMED.