APP

LED Nameplate Generator

Generate a KiCad PCB that spells any name in addressable WS2812B LEDs, auto-placed from a dot-font and auto-routed with a clearance-aware Dijkstra router.

LED Nameplate Generator
πŸ’¬ Sample prompts Paste any of these into Claude Code to use this app
Make nameplate Make an LED nameplate that spells ADONIS
Generate Generate a WS2812B nameplate PCB for the word LARRY
Visualize Open the LED-nameplate routing visualizer and show how letter A routes
Custom shape Open the routing visualizer in custom mode so I can draw a 5x9 LED shape
Ship to KiCad Generate a nameplate for NOAH and send it to my KiCad workspace
Per-letter Make a nameplate where each letter is its own addressable LED string
⚑ Open this app

Paste this into Claude Code (VS Code panel, Adom editor, or terminal) to install:

Open the Adom Wiki page for the "LED Nameplate Generator" app at https://wiki-ufypy5dpx93o.adom.cloud/wiki/apps/led-nameplate and tell me how to use it.

LED Nameplate Generator

Generate a KiCad PCB that spells any name in addressable WS2812B-2020 RGB LEDs β€” dot-font letters are auto-placed on a 5Γ—9 grid and auto-routed with a clearance-aware, no-right-angle Dijkstra router.

Provenance β€” hero image. Rendered by this repo's route_visualizer geometry via a small PIL script from the actual dijkstra_alg.route_chain output for the word "ADOM". It is NOT a KiCad screenshot β€” it's the same routing the generator emits to the .kicad_pcb, drawn to PNG. Inputs: dot-font/font-data.json + blank-letter-template.zip.

What it does

Give it a word like ADONIS. For each letter it:

  1. Looks the character up in a 5Γ—9 dot-font (dot-font/font-data.json).
  2. Clones a fully-routed blank-letter template tile (45 WS2812B-2020 LEDs + decoupling caps + GND/+5V fills) and removes the LEDs that the glyph doesn't use.
  3. Re-routes the surviving DINβ†’DOUT chain with an 8-direction Dijkstra router (orthogonal cost 1, diagonal √2) that:
    • keeps β‰₯0.2 mm clearance from every pad (rectangle-based keepout),
    • never makes a right angle (perpendicular direction changes are forbidden β€” only 45Β° turns),
    • treats the template's GND vias/traces as keepout so chain traces never short,
    • leaves each pin with a clean 45Β° chamfer instead of a horizontal nub.
  4. Tiles the letters, alternating upright and inverted-chain numbering so even-position letters take their data input from the opposite corner while still reading right-side-up.
  5. Emits a flat schematic whose netlist matches the PCB exactly.

Each letter is an independent LED string (its own data-in net), so the STM32 driving the board can address letters individually.

Provenance β€” letter close-up. Same render path as the hero, for a single glyph "A". Green/red pad outlines mark DIN/DOUT; copper-orange polylines are the routed chain. Source: dijkstra_alg.route_chain.

Interactive routing visualizer

route_visualizer.py builds a self-contained HTML page showing the router's output for every glyph (A–Z, 0–9) in both chain orientations. route_server.py serves it plus a live /api/route endpoint that powers a Custom Shape editor β€” draw any 5Γ—9 pattern and watch it route on demand using the same dijkstra_alg module the PCB generator uses (no algorithm duplication).

Usage

# Generate a nameplate (writes <name>-nameplate/ with .kicad_pcb / .kicad_sch / .kicad_pro)
python3 generate_nameplate.py ADONIS

# Build + serve the interactive routing visualizer (custom-shape mode needs the server)
python3 route_server.py 7702        # then open route_visualizer.html through the proxy

# Or just regenerate the static visualizer HTML
python3 route_visualizer.py

The generator can also ship the project straight to a desktop KiCad workspace via adom-desktop (auto-versioned <name>-nameplate-N folders).

Files

FileRole
generate_nameplate.pyMain generator: font β†’ LED removal β†’ routing β†’ tiling β†’ KiCad PCB + flat schematic
dijkstra_alg.pyShared 8-direction router (grid, keepout, route_chain) β€” single source of truth
route_visualizer.pyBuilds the self-contained routing-visualizer HTML for all 36 glyphs
route_server.pyServes the visualizer + live /api/route for the custom-shape editor
dot-font/font-data.json5Γ—9 dot-font bitmaps (A–Z, 0–9, punctuation)
blank-letter-template.zipPre-routed 45-LED KiCad tile (LEDs, caps, GND/+5V fills, vias)

Dependencies

adompkg (auto-installed): none.

System (manual):

DependencyWhy
Python 3.8+runs the generator/visualizer (stdlib only β€” heapq, json, zipfile, re)
KiCad 9open the generated .kicad_pcb / .kicad_sch (and to fill zones)
Pillow (optional)only for regenerating the README hero/screenshot PNGs
adom-desktop (optional)ship generated projects to a local KiCad workspace

Board summary (per generated nameplate)

  • WS2812B-2020 LEDs, ~19 per letter (5Γ—9 dot-font), 4 mm pitch
  • One 100 nF 0402 decoupling cap per LED
  • GND fill (F.Cu + B.Cu) + a custom +5V fork fill (B.Cu), GND via stitching
  • Each letter is its own addressable string (independent data GPIO)
PY
route_visualizer.py 1 month ago
Builds the self-contained routing-visualizer HTML for all 36 glyphs
Add route_visualizer.py sourcenoah Β· 1 month ago
24.4 KB
PY
route_server.py 1 month ago
Serves the visualizer + live /api/route endpoint for the custom-shape editor
Add route_server.py sourcenoah Β· 1 month ago
2.7 KB
JSON
package.json 1 month ago
App manifest (slug, version, type, description)
Add package.jsonnoah Β· 1 month ago
327 B
MD
SKILL.md 1 month ago
SKILL.md β€” when/how Claude should use the generator + visualizer
Add SKILL.mdnoah Β· 1 month ago
3.3 KB
ZIP
blank-letter-template.zip 1 month ago
Pre-routed 45-LED KiCad tile (LEDs, caps, GND/+5V fills, vias) the generator clones per letter
Add blank-letter-template.zip assetnoah Β· 1 month ago
162.6 KB
JSON
font-data.json 1 month ago
5x9 dot-font bitmaps (A-Z, 0-9, punctuation)
Add dot-font datanoah Β· 1 month ago
6.1 KB
PY
generate_nameplate.py 1 month ago
Main generator: dot-font -> LED removal -> Dijkstra routing -> KiCad PCB + flat schematic
Add generate_nameplate.py sourcenoah Β· 1 month ago
54.2 KB
PY
dijkstra_alg.py 1 month ago
Shared 8-direction Dijkstra router (grid, keepout, route_chain) β€” single source of truth
Add dijkstra_alg.py sourcenoah Β· 1 month ago
17.3 KB

Screenshots

Sub-Skills
?
What are Sub-Skills?

Sub-skills are community-contributed AI skill extensions for this component. They teach AI assistants about specific tools, configurators, or workflows.

Examples:

  • A manufacturer’s configuration tool for a motor controller
  • A community-written design guide for an amplifier circuit
  • An automated test/validation script for a sensor module

How to add one: Click Add Sub-Skill, provide the URL to your skill and a brief description. Submissions are reviewed by the Adom team before going live.

No sub-skills yet. Be the first to contribute one!

πŸ”Ž How Claude finds this page (discovery snippet)

This page opts into Adom Wiki auto-discovery. When a user working in Claude Code mentions any of the trigger phrases below, Claude can proactively suggest this page. The pitch is exactly what Claude will say.

Pitch
"Generate a KiCad PCB that spells any name in addressable WS2812B LEDs β€” dot-font letters auto-placed and auto-routed with a clearance-aware Dijkstra router, plus an interactive routing visualizer."
Triggers
"led nameplate", "ws2812b nameplate", "addressable led name sign", "light up name", "dot font pcb", "name sign pcb", "led matrix letters", "serpentine led routing", "dijkstra pcb router", "kicad nameplate generator"

Recent activity

13 commits