Skill for PCB panelization
Setup
Ensure KiKit is installed with kikit --version
Check this installations resources/panelizePresets/default.json and panelize_ui_sections.py before adding parameters, these are the way, the truth, and the light.
Usage
- Find the source .kicad_pcb requsted by the user
- Inspect its actual board files, Edge.Cuts, copper layers, pads and components that may interesect board edges to identify items like castellations, edge connectors, antennas, plated edges, etc.
- Resolve grid dimensions, spacing, rotation, tabs, separation, frame, and fabricator limits.
- Position tooling holes and fiducials relative to the panel outline
- Write strict json.
- Generate a versioned panel without overwriting the source in a "build" subdirectory
- Check the generated panel before notifying the user, ensuring that it looks proper from the baord file level as well as in render.
Preferred starting values
- Board routing gap: 2mm
- Tab width: 3mm
- Mouse-bite drill: 0.5mm
- Mouse-bite spacing: 0.8mm
- Mouse-bite offset: 0mm
- Full frame width: 5mm
- Frame-to-array clearance: 2mm
- Frame break cuts: none
- Exterior frame radius: 2mm
- Interior routing radius: 0.25mm
- Tooling: three 1.5mm holes
- Tooling stencil apertures: enabled
- Fiducials: three, 1mm copper with 1mm openings
- Fiducial paste apertures: disabled
KiKit behavior
source.type: "auto" is appropriate for an ordinary single-board file.
tabs.type: "spacing" places tabs symmetrically and cannot exclude a particular side.
With fixed tabs:
- hcount controls tabs projecting from left/right edges.
- vcount controls tabs projecting from top/bottom edges.
- A zero count suppresses that pair of directions.
Use annotation tabs when only selected segments or one side must be excluded.
Protected tab directions must be derived from each board’s geometry and rotation. Never hardcode “bottom” or “right” as a universal
rule.
The global mouse-bite cut method processes every generated cut path, including framing.cuts.
Therefore, framing.cuts: "both" with mouse bites drills break rows through the rails.
Use framing.cuts: "none" for a continuous frame.
Tooling and fiducial offsets are measured inward from the panel’s outer edges.
To center a feature across a 5 mm frame, use a 2.5 mm perpendicular offset.
Tooling holes and fiducials with identical counts and offsets overlap. Separate them along the rail.
paste: true means the feature gets an aperture on the stencil paste layers. It does not control whether a drilled hole is visible.
framing.fillet rounds exterior panel corners.
post.millradius rounds concave interior routed corners.
post.reconstructarcs: true produces real Edge.Cuts arcs instead of dense line-segment approximations.
Useful commands
python3 -m json.tool panelize.json
kikit panelize -p panelize.json input.kicad_pcb output-panel.kicad_pcb
Dump the fully merged KiKit configuration with:
kikit panelize -p panelize.json -d resolved.json input.kicad_pcb output-panel.kicad_pcb
Render and open it with:
kicad-cli pcb render
--output panel-top.png
--width 1600
--height 1200
--side top
--background opaque
--quality high
panel.kicad_pcb
kicad-cli pcb render
--output panel-iso.png
--width 1600
--height 1200
--perspective
--rotate 325,0,35
panel.kicad_pcb
1---2name: kicad-panelize3description: Use KiKit to panelize a given PCB4---56# Skill for PCB panelization 78## Setup9Ensure KiKit is installed with kikit --version1011Check this installations resources/panelizePresets/default.json and panelize_ui_sections.py before adding parameters, these are the way, the truth, and the light.1213## Usage1415- Find the source .kicad_pcb requsted by the user16- Inspect its actual board files, Edge.Cuts, copper layers, pads and components that may interesect board edges to identify items like castellations, edge connectors, antennas, plated edges, etc.17- Resolve grid dimensions, spacing, rotation, tabs, separation, frame, and fabricator limits.18- Position tooling holes and fiducials relative to the panel outline19- Write strict json.20- Generate a versioned panel without overwriting the source in a "build" subdirectory21- Check the generated panel before notifying the user, ensuring that it looks proper from the baord file level as well as in render.2223## Preferred starting values2425- Board routing gap: 2mm26- Tab width: 3mm27- Mouse-bite drill: 0.5mm28- Mouse-bite spacing: 0.8mm29- Mouse-bite offset: 0mm30- Full frame width: 5mm31- Frame-to-array clearance: 2mm32- Frame break cuts: none33- Exterior frame radius: 2mm34- Interior routing radius: 0.25mm35- Tooling: three 1.5mm holes36- Tooling stencil apertures: enabled37- Fiducials: three, 1mm copper with 1mm openings38- Fiducial paste apertures: disabled3940## KiKit behavior4142- source.type: "auto" is appropriate for an ordinary single-board file.43- tabs.type: "spacing" places tabs symmetrically and cannot exclude a particular side.44- With fixed tabs:45 - hcount controls tabs projecting from left/right edges.46 - vcount controls tabs projecting from top/bottom edges.47 - A zero count suppresses that pair of directions.4849- Use annotation tabs when only selected segments or one side must be excluded.50- Protected tab directions must be derived from each board’s geometry and rotation. Never hardcode “bottom” or “right” as a universal51rule.5253- The global mouse-bite cut method processes every generated cut path, including framing.cuts.54- Therefore, framing.cuts: "both" with mouse bites drills break rows through the rails.55- Use framing.cuts: "none" for a continuous frame.56- Tooling and fiducial offsets are measured inward from the panel’s outer edges.57- To center a feature across a 5 mm frame, use a 2.5 mm perpendicular offset.58- Tooling holes and fiducials with identical counts and offsets overlap. Separate them along the rail.59- paste: true means the feature gets an aperture on the stencil paste layers. It does not control whether a drilled hole is visible.60- framing.fillet rounds exterior panel corners.61- post.millradius rounds concave interior routed corners.62- post.reconstructarcs: true produces real Edge.Cuts arcs instead of dense line-segment approximations.6364## Useful commands6566python3 -m json.tool panelize.json67kikit panelize -p panelize.json input.kicad_pcb output-panel.kicad_pcb6869Dump the fully merged KiKit configuration with:7071kikit panelize -p panelize.json -d resolved.json input.kicad_pcb output-panel.kicad_pcb7273Render and open it with:7475kicad-cli pcb render \76--output panel-top.png \77--width 1600 \78--height 1200 \79--side top \80--background opaque \81--quality high \82panel.kicad_pcb8384kicad-cli pcb render \85--output panel-iso.png \86--width 1600 \87--height 1200 \88--perspective \89--rotate 325,0,35 \90panel.kicad_pcb