bot-context.mdRead this first, then the lessons page (/lessons). Be token-efficient. The owner presses Start. The bot never does.
* means unsaved changes. Ask the owner before discarding them, unless the owner names that project to discard.ps + awk and kill only that PID. Never pkill -f, because it can match other processes.nohup setsid lightburn <file> &) so it survives the shell.coins/ coin jobs (recovery, brass, lion_portrait, ...). The bot's work goes in grok/ subfolders.washers/ washer designs and colour tests.colortest/ colour calibration (ss245_rgb/ = 8-face RGB tester).tools/ scripts (below). libraries/ LightBurn libraries (grok/HD_fill_black.clb).calibration/ galvo and colour calibration kits. pre55/ backups from before the 55,55 recentre and old ss245 outputs.LASER_LESSONS.md (lessons, read before every job), INDEX.md / MANIFEST.csv (file index).recenter55.py recentres projects from 63,63 to 55,55 (keeps <name>.pre55.lbrn2). --dry audits without writing.to_ss245.py <file|folder> makes <name>_ss245.lbrn2 (24.5 mm polished stainless, centre 55,55, colours from the palette, deep stacks collapsed into one layer per colour). --map PATTERN=key overrides a role. --hd-black writes *_ss245_hdblack.lbrn2.est_time.py <files> gives a rough burn time (filled area / interval / speed x passes x crosshatch + 15%).dump_layers.py <folder> writes a _LAYERS.txt for every .lbrn2.brass_rules.py apply() adds the brass CLEAN/POLISH layers idempotently.ss_color_palette.json holds the stainless colour presets plus verification status and observed large-area colours.gen_ss245_rgb.py (in colortest/ss245_rgb) regenerates the RGB tester and its plan CSV._LAYERS.txt and an output-off FRAME layer.Brass/copper deep engraving: insert a CLEAN (20 %, 1500 mm/s, 100 kHz, 200 ns, 0.01 x2, crosshatch) after every 5 deep passes. The LAST layer is a full-surface POLISH (18 %, 2000 mm/s, 350 kHz, 10 ns, 0.01). Never use these on stainless, polished or anodized pieces.
Black-field brass order: (1) deep engraving + CLEANs + POLISH; (2) BLACK on the field only (40 %, 500, 40 kHz, 200 ns, 0.02 x2, untested); (3) final LETTER CLEAN on the raised letters and rings only (brass CLEAN settings, x1).
Stainless colour = surface mark: use one lean layer per colour, with a separate layer for each shade. Never copy brass deep stacks.
- HD fill black (14 purple layers + 2 blue facets, ~130 min per coin, glossy black) is used only on purpose.
- For black fields, use 4 passes of the HD-black purple setting (15 %, 567, 280 kHz, 80 ns, 0.004, crosshatch x2, angles 0/45/90/135), about 14 min.
- The hard blacks (20 %/567 and 30 %/300/200 ns) spark and burn on fields. Keep them for small marks and lines.
- Big areas run hotter and paler than test cells. Keep colour tests at 30 % or less.
- Anodized aluminium black: 12 %, 1500 mm/s, 50 kHz, 0.045, 1 pass. Brass colours are unverified, so flag heat and cool between passes.
| Preset | Settings (crosshatch, x2) | Test cell | Large field (2026-10-15) | Mapping confidence |
|---|---|---|---|---|
| purple R1-0106 | 15 %, 567, 280 kHz, 80 ns, 0.004 | deep purple-black | lavender / light mauve | medium |
| deep blue R1-0805 | 7.5 %, 700, 119 kHz, 60 ns, 0.005 | deep blue | slate blue-grey | medium-low |
| blue R1-0904 | 15 %, 1200, 230 kHz, 60 ns, 0.005 | good blue | pale grey-green / silver | medium |
| black (washer) | 20 %, 567, 280 kHz, 80 ns, 0.004 | black | brown-black, sparks, avoid on fields | high |
| black lines | 30 %, 300, 50 kHz, 200 ns, 0.01 | dark lines | brown-black, sparks | high |
| gold R1-1202 | 48.4 %, 317, 61.5 kHz, 60 ns, 0.0287 | untested | never fired (layer was off) | n/a |
| Energy-density model: E = W / (speed x interval) J/mm², W = power% x 60 W. Dose = E x 2 (crosshatch) x passes. |
/rules/ — public rules tree. HTML pages live at /rules/<page>/; raw markdown at /rules/<path>.md; machine index at /rules/index.json./lessons — combined lessons HTML; raw combined dump at /lessons.md./color/ — MOPA colour grids and data (b4_measured.json, color_settings.json, rounds)./projectaddons/ — motorized Z / camera / Pi+Pico add-ons (older copy also at /workup/)./settings/ — material settings index; /tools/ — tools index./plates/ — colour calibration plates; public JSON at /api/materials, /api/plates, /api/cite (see Colour plates API). Unified browser on /color/ and /colors/; cite Plate 31, A8./srv/web/laserview.hankelsner.tech/rules-src/. Publish with laser-rules-build.sublayers[] (HD fill black = 16).cut_settings + each sub-layer. Site browsers show/filter/edit them (Hank-gated writes).GET /api/library.clb exports one Entry per colour with sibling CutSettings per sub-layer.machine.mdjcz110.cor, job center 55,55 (63,63 is obsolete).prefs.ini; when a .cor is loaded, bulge/skew/trapezoid show greyed out but still apply.workflow.md.lbrn2 ships with a <name>_LAYERS.txt listing each layer's settings, made by tools/dump_layers.py <folder>.grok/, claude/, hank/); never edit another AI's files.design/coins.mdmaterials/brass-copper.mdONLY these materials for this deep-etch recipe; never stainless, polished or anodized.
Layer index is run order (UNTESTED):
materials/stainless-polished.mdOpt-in via to_ss245 --hd-black (lean version is the default). Very good deep glossy black finish (verified by Hank), but slow.
materials/stainless-plain.mdmaterials/anodized-aluminum.mdmaterials/color.mdMachine: ComMarker B4 60 W MOPA, 110 mm lens, LightBurn 1.7. Material: 24.5 mm polished stainless coins.
Oxide-film interference; thickness sets colour (straw/gold, brown, purple, blue, then 2nd order pale gold, red/magenta, green, then grey/black). Main control: energy density E = W/(speed x interval) J/mm², W = power% x 60 W; crosshatch and passes multiply dose. Pulse width and frequency set pulse energy (W/f) and peak power; longer pulses run warmer. High pulse energy or slow high E causes sparks/burning. Large fills run hotter than small test cells.
Note: big areas came out much paler than the small test cells (large fills run hotter). The purple vs slate-blue mapping could be swapped (medium-low confidence).
Scaling: halve power % of a 30 W recipe for 60 W; 110 mm lens has a smaller spot, so start about x0.8 and sweep.
F1 E sweep 0.5-16, 80 ns, 1 pass. F2 same, 2 passes, E 0.5-8. F3 E 0.5-16, 60 ns, 230 kHz. F4 forum-red geometry, E 2.5-16, 1 and 2 passes. F5 pulse width 2-200 ns. F6 frequency 30-800 kHz at 60/200 ns. F7 200/350/500 ns warm/gold plus published gold and green. F8 verified colours at x0.7/1/1.4/2 plus published reds. About 21 min total. Results get photographed under fixed white light and fitted to colour = f(dose, ns, f).
color.mdMOPA color work is only meaningful on polished stainless, with eye-verified test cells. Unpolished stainless goes black; large areas run hotter than small cells.
Related rule: Polished stainless.
v3: one colour = one layer; multi-pass stacks are sub-layers. Full cut_settings shown in the browsers. Library/.clb sub-layer export is unverified until a LightBurn open-test.
api.mdSingle live colour database for /color/, /colors/, /plates/, /tools/ and /tech/. Machine shown everywhere: ComMarker B4 60W MOPA, 110 mm lens, LightBurn 1.7.08 (other charts only as “adapted from”).
GET /api/materials — materials + all coloursGET /api/materials/{id}/colors — one material (supports filter query params)GET /api/colors / GET /api/colors/query — unified list with filters:confidence=hank_verified,high · material= / materials= · status= · vivid=1|0mode=fill,line,image · wobble=1|0 / wobble_enable= · fill_grouping=1|0power=10..40 · speed= · freq= · pulse= · interval= · passes=dot_width= / dot_width_mm= · line_width= · line_interval=sort=confidence or power_pct:asc / dot-width / line-width / mode …q= text search · plate= · group= (client-side also)GET /api/colors/{id} — one colour (full cut_settings + sublayers[])GET /api/plates · GET /api/plates/P031GET /api/cite?q=Plate%2031,%20A8 — also P5 A5, P031-A8 (includes cut_settings / sublayers)GET /api/legendGET /api/library.clb?... — LightBurn material library download (same filters as /api/colors). Content-Disposition: attachment; filename="library.clb". Sub-layer CutSetting siblings are UNVERIFIED until Hank does one LightBurn open-test.cut_settings (first sub-layer / primary) and sublayers[] with the full Cut Settings Editor field set (Fill / Line / Image). Unknown = null; defaulted fields listed in settings_defaulted.lines_per_inch and min_tabs_per_shape are DB/site only (no LightBurn XML element). Do not promise they round-trip.<Entry> per colour, one sibling <CutSetting> per sub-layer. Serialization shape is a guess — not verified in LightBurn 1.7.08.laserview-admin + user hank)POST /api/colors/{id}/save — body {color: {...}} full record (incl. cut_settings / sublayers); auto confidence=hank_verified; timestamped backup + audit logPOST /api/plates/P###/cells/A8/save — {cell:{...}} full cell savePOST /api/plates/P###/save — full plate objectPOST /api/materials/save — full materials.json/plates/P031/photo.jpg/plates/P010/<file>.lbrn2/color/LEGEND.md · /api/legend/docs/VPS_UPDATE.md · /docs/EXPORTER.mdb4_measured.json is regenerated from this DB (not a divergent cache)/color/ and /colors/ — identical unified browser (filters/sort/group in URL query; cut-settings panels + sub-layer tabs; library download buttons)/plates/ — plate list + same browser; /plates/P###/ — grid + photo + lbrn2/tech/ · /tools/ — same DB/APICategorical query params accept comma lists (OR within a param, AND across params):
confidence, material/materials, status, mode, plate, vivid (1/0), wobble, fill_grouping.
Shared browsers use checkbox multi-select with Select all / Clear per group.
tools.mddump_layers.py <folder> writes <name>_LAYERS.txt for each .lbrn2 in the folder.recenter55.py moves 63,63 projects to 55,55 (backups go in a pre55/ folder; use --dry to audit).to_ss245.py <file|folder> makes 24.5 mm polished-stainless copies (<name>_ss245) mapped to ss_color_palette.json (verified: purple R1-0106, blue R1-0904, deep blue R1-0805, black lines; gold UNTESTED), strips the brass clean/polish layers, and takes --map PATTERN=key overrides. Pass --hd-black for the verified 14× R1-0106 HD fill black (slow; lean default otherwise).Washer no-hole method: remove the hole from the fill/strip/frame layers and add a centre motif in the same style.
Colour plates API: public GET /api/materials, /api/plates, /api/cite?q=; Hank-only photo upload and cell edits — see Colour plates API. UI at /plates/ and the material dropdown on /color/.
Unified colour browser: /color/ and /colors/ (same DB). Filters in URL, e.g. ?confidence=hank_verified,high&sort=power_pct:asc. Cite Plate 31, A8 via /api/cite.
managed by laser-rules-build (/opt/laser-rules/build.py) · source editable via SSH as grokbot in rules-src · /rules/ · /lessons