
Lightfury both
jusdisgi/LightFury
Light Fury Keyboard: Ergo Split with 54 PG1316S keyswitches, 54 LEDs, LCDs, and Roller Encoders.

Light Fury Keyboard: Ergo Split with 54 PG1316S keyswitches, 54 LEDs, LCDs, and Roller Encoders.
Lightfury panel is an open-source printed circuit board by jusdisgi, from the jusdisgi/LightFury repository on GitHub, published under the MIT licence. It is a 6-layer board of 184.3 × 234 mm with 284 parts on 172 nets, routed with 1,274 tracks and 161 vias.
It is built around the SN74LV1T126DBVR-TP, TLV61070ADBV and WS2812B-2020, with the BAV70 among its other parts. Its parts include 82 diodes, 54 switches, 10 capacitors, 4 resistors and 4 ICs. It belongs with the nRF52 and nRF5x boards of this library.
Run on your machine (KiKit drives KiCad's pcbnew — it won't run in the sandbox). The
per-half boards (lightfury_left/right.kicad_pcb) are the source of truth; everything below
rebuilds the combined board and panel from them, so re-run it any time a half changes.
Environment: use the KiCad Command Prompt (so python = KiCad's Python with pcbnew).
KiKit's kikit.exe installs to ...KiCad\9.0\3rdparty\Python311\Scripts, which isn't on PATH by
default — add it for the session before the kikit commands:
set PATH=%PATH%;C:\Users\hunte\Documents\KiCad\9.0\3rdparty\Python311\Scriptscd LightFury
# 1. Merge the two halves -> lightfury_both.kicad_pcb (right-half refs get a _2 suffix,
# nets get L_/R_ prefixes so the halves stay electrically distinct). Replaces the old
# by-hand merge.
python panel/merge_both.py
# 2. Frame it into a panel.
kikit panelize -p panel/lightfury.kikit.json lightfury_both.kicad_pcb panel/lightfury_panel.kicad_pcb
# 3. GERBERS ONLY from the panel: open it in pcbnew and run the **Fabrication Toolkit** plugin
# (NOT `kikit fab jlcpcb` — needs a schematic the _2 refs can't match). It writes to the
# transient panel/production/ ; copy the gerber zip up to the canonical order folder:
copy panel\production\lightfury_panel.zip production-panel\
# 4. BOM + CPL straight from the panel (origin datum, integer rotations, RESW1 injected,
# per-part offsets) -> the canonical production-panel/ . Then render to verify locally.
python panel/gen_cpl.py panel/lightfury_panel.kicad_pcb production-panel
python panel/render_cpl.py panel/lightfury_panel.kicad_pcb production-panel/positions.csv panel/verifyThe three files you upload to JLC live in production-panel/. Full detail + the one-time JLC rotation-confirmation step: CPL_WORKFLOW.md.
post.millradius eats the RE1 foot cutouts. The CKW12 encoder has two ~2 mm diamond
(45°-square) Edge.Cuts cutouts per half for RE1's feet. millradius simulates a 1 mm-radius
(2 mm Ø) router bit across the whole substrate — including internal holes — so a sub-bit-size
cutout gets erased. Result: the diamonds are in lightfury_both but vanish from the panel.
Fix is in the preset: use millradiusouter (mills only the outer ring, leaves internal
cutouts intact) instead of millradius. If your KiKit predates millradiusouter, set
millradius to 0mm and re-inject the 4 diamonds afterward (translate the both-board loops by
the panel placement offset — footprint-only, so BOM/CPL are untouched). Always eyeball the
encoder cutouts in the panel before ordering.merge_both.py is the script that replaces your old hand-merge. Right-half refs become
*_2 (uniform — simpler than the old mixed RS/RLED/_2 scheme; JLC only cares that refs are
unique and that BOM ↔ CPL agree, which they will since both come from this pipeline).
appendBoard's signature is the line most likely to need a tweak for your KiKit version.LCSC fields filled and pushed to the PCBs
(Update PCB from Schematic / F8) before step 1, or the BOM comes out without part numbers.gen_cpl.py (pure Python, no pcbnew) builds the BOM + CPL directly from the panel: position
= footprint origin, per-LCSC ROT_CORR/POS_OVERRIDE tables, and RESW1 (C262417) injected from
the encoder's S1/S2 pads. It supersedes the old inject_resw1.py (now in old_cruft/).
render_cpl.py overlays the result on the real pads for local verification before uploading.merge_both.py (KiKit Python API) — ping me and I'll extend it.railstb).JLCJLCJLCJLC order token in the rail, millradius 1 mm for the router.GAP_MM in merge_both.py if the halves sit too far apart (tighter = cheaper panel).| Qty | Value | Footprint | References |
|---|---|---|---|
| 92 | NPTH | NPTH | KiKit_MB_10_2, KiKit_MB_10_3, KiKit_MB_10_4, KiKit_MB_10_5, KiKit_MB_10_6, KiKit_MB_10_7, KiKit_MB_11_2, KiKit_MB_11_3, KiKit_MB_11_4, KiKit_MB_11_5, KiKit_MB_11_6, KiKit_MB_11_7, KiKit_MB_12_2, KiKit_MB_12_3, KiKit_MB_12_4, KiKit_MB_12_5 +76 |
| 54 | PG1316S | PG1316S | S1, S10, S10_2, S11, S11_2, S12, S12_2, S13, S13_2, S14, S14_2, S15, S15_2, S16, S16_2, S17 +38 |
| 44 | WS2812B-2020 | LED_WS2812B-2020_PLCC4_2.0x2.0mm | LED10, LED10_2, LED11, LED11_2, LED12, LED12_2, LED13, LED13_2, LED14, LED14_2, LED15, LED16, LED16_2, LED17, LED17_2, LED18 +28 |
| 28 | BAV70 | BAV70 SOT23 | D1, D1_2, D2, D2_2, D3, D3_2, D10, D10_2, D11, D11_2, D12, D12_2, D13, D13_2, D14, D14_2 +12 |
| 14 | ceoloide:mounting_hole_npth | MH1, MH1_2, MH2, MH2_2, MH3, MH3_2, MH4, MH4_2, MH5, MH5_2, MH6, MH6_2, MH7, MH7_2 | |
| 8 | Fiducial | Fiducial | KiKit_FID_B_1, KiKit_FID_B_2, KiKit_FID_B_3, KiKit_FID_B_4, KiKit_FID_T_1, KiKit_FID_T_2, KiKit_FID_T_3, KiKit_FID_T_4 |
| 4 | 10μF 25V | Capacitor_SMD:C_0603_1608Metric | C2, C2_2, C4_2, C5_2 |
| 2 | LCD_1.69_Waveshare | LCD1, LCD1_2 | |
| 2 | 100nF | Capacitor_SMD:C_0603_1608Metric | C3, C3_2 |
| 2 | 10µF 25V | Capacitor_SMD:C_0603_1608Metric | C4, C5 |
| 2 | 10μF | Capacitor_SMD:C_0603_1608Metric | C1, C1_2 |
| 2 | 2.2μH | huntercook:L_CJIANG_FTC404030S_4.1x4.1x3.0_SMD | L1, L1_2 |
| 2 | 470kΩ | Resistor_SMD:R_0603_1608Metric | R1, R1_2 |
| 2 | 51kΩ | Resistor_SMD:R_0603_1608Metric | R2, R2_2 |
| 2 | Battery Connector | ceoloide:battery_connector_jst_ph_2 | JST1, JST1_2 |
| 2 | CKW12 | CKW12 | RE1, RE1_2 |
| 2 | Inner Bottom | LED_WS2812B-2020_PLCC4_2.0x2.0mm | LED21, LED24_2 |
| 2 | Inner Top | LED_WS2812B-2020_PLCC4_2.0x2.0mm | LED24, LED27_2 |
| 2 | LCD HEADER | Molex_PicoBlade_53261-0871_1x08-1MP_P1.25mm_Horizontal | CONN1, CONN1_2 |
| 2 | Outer Bottom | LED_WS2812B-2020_PLCC4_2.0x2.0mm | LED1, LED1_2 |
| 2 | Outer Top | LED_WS2812B-2020_PLCC4_2.0x2.0mm | LED4, LED4_2 |
| 2 | Power SW | ceoloide:power_switch_smd_side | PWR1, PWR1_2 |
| 2 | Reset SW | ceoloide:reset_switch_smd_side | RST1, RST1_2 |
| 2 | SN74LV1T126DBVR | Package_TO_SOT_SMD:SOT-23-5 | U2, U2_2 |
| 2 | TLV61070ADBV | Package_TO_SOT_SMD:SOT-23-6 | U1, U1_2 |
| 2 | nice_nano | ceoloide:mcu_nice_nano | MCU1, MCU1_2 |
| 1 | Far Thumb | LED_WS2812B-2020_PLCC4_2.0x2.0mm | LED15_2 |
| 1 | Outer Thumb | LED_WS2812B-2020_PLCC4_2.0x2.0mm | LED27 |

jusdisgi/LightFury
Light Fury Keyboard: Ergo Split with 54 PG1316S keyswitches, 54 LEDs, LCDs, and Roller Encoders.

jusdisgi/TooManyKeys
Work in progress, new version of BiggieSplays with lots of bells and whistles

jusdisgi/sweepish
Basically a Ferris Sweep with a Seeed XIAO nrf52840 and Choc switches. My first ever attempt at PCB design.

jusdisgi/boostier
Boost circuit and logic level shifter, 5V output from 3.7V LiPoly battery and 3.3V logic.

benmcnelly/walter-hardware
This repository contains all hardware information about Walter and shields

bash227/ECG-Motor-Control-Power-Management-PCB
A multi-function PCB integrating biomedical signal acquisition (ECG), DC motor control, and advanced power management for wearable applications.


Autonomous-Motorsports-Purdue/AMP_RCv2
Files relating to version 2 of the remote control PCB for AMP kart

cvanbibber/USB-Charger
A simple USB charger board for soldering, with USB-C bidirectional port, USB-A, and micro-USB as an introduction to pcb design and usb standards.
It measures 184.3 × 234 mm and has 6 copper layers, 1.6 mm thick.
284 parts, built around the SN74LV1T126DBVR-TP, TLV61070ADBV, WS2812B-2020 and BAV70. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the jusdisgi/LightFury repository on GitHub, at the commit this page was made from: the board is panel/lightfury_panel.kicad_pcb and its schematic lightfury_left.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).