# KiBot configuration for 2/4/6 layer boards # Works with Gitea CI/CD pipeline kibot: version: 1 global: # Filters for ERC/DRC warnings filters: - number: 1007 - number: 1015 - number: 58 - number: 61 # Default output directory - will be overridden by command line # output: 'Fabrication' # Commented out to use command line option # Variant for assembly if needed variant: '' # Date format for filenames date_format: '%Y-%m-%d_%H-%M-%S' preflight: run_erc: true run_drc: true check_zone_fills: true ignore_unconnected: false update_xml: true erc: warnings_as_errors: false # Continue even if ERC fails dont_stop: true drc: warnings_as_errors: false # Continue even if DRC fails dont_stop: true outputs: # Schematic outputs - name: 'print_sch' comment: "Schematic PDF" type: pdf_sch_print dir: Schematic options: output: '%f-schematic.%x' - name: 'print_sch_svg' comment: "Schematic SVG" type: svg_sch_print dir: Schematic options: output: '%f-schematic.%x' # PCB 2D renders - name: 'pcb_top' comment: "PCB render top" type: pcbdraw dir: PCB/2D_render options: output: '%f-top.%x' format: svg show_components: all dpi: 300 - name: 'pcb_bottom' comment: "PCB render bottom" type: pcbdraw dir: PCB/2D_render options: output: '%f-bottom.%x' format: svg bottom: true show_components: all dpi: 300 # PCB PDF documentation - name: 'print_pcb' comment: "PCB PDF" type: pdf_pcb_print dir: PCB/PDF options: output: '%f-pcb.%x' plot_sheet_reference: true monochrome: false pages: - layers: - F.Cu - F.Paste - F.Silkscreen - Edge.Cuts sheet: 'Front copper' - layers: - B.Cu - B.Paste - B.Silkscreen - Edge.Cuts mirror: true sheet: 'Bottom copper' - layers: - In1.Cu - Edge.Cuts sheet: 'Inner layer 1' skip_if_no_layer: true - layers: - In2.Cu - Edge.Cuts sheet: 'Inner layer 2' skip_if_no_layer: true - layers: - In3.Cu - Edge.Cuts sheet: 'Inner layer 3' skip_if_no_layer: true - layers: - In4.Cu - Edge.Cuts sheet: 'Inner layer 4' skip_if_no_layer: true # Gerber files - automatically handles 2/4/6 layers - name: 'gerbers' comment: "Gerber files" type: gerber dir: Gerbers options: output: '%f%i.%x' exclude_edge_layer: true exclude_pads_from_silkscreen: true plot_sheet_reference: false plot_footprint_refs: true plot_footprint_values: false force_plot_invisible_refs_vals: false tent_vias: true use_protel_extensions: false create_gerber_job_file: true disable_aperture_macros: true gerber_precision: 4.6 use_gerber_x2_attributes: false use_gerber_net_attributes: false line_width: 0.1 subtract_mask_from_silk: true layers: # Copper layers - automatically included if present - F.Cu - B.Cu - In1.Cu - In2.Cu - In3.Cu - In4.Cu # Technical layers - F.Paste - B.Paste - F.Silkscreen - B.Silkscreen - F.Mask - B.Mask - Edge.Cuts - User.Comments - F.Fab - B.Fab # Excellon drill files - name: 'drill' comment: "Drill files" type: excellon dir: Gerbers options: output: '%f%i.%x' metric_units: true minimal_header: false mirror_y_axis: false report: filename: '%f-drill_report.txt' pth_and_npth_single_file: false # Drill map - name: 'drill_map' comment: "Drill map" type: gerb_drill dir: Gerbers options: output: '%f-drill_map.%x' # Pick and place files - name: 'position' comment: "Pick and place file" type: position dir: Assembly options: output: '%f-position-%i.%x' # Added %i to differentiate front/back files format: CSV units: millimeters separate_files_for_front_and_back: true only_smd: false # Interactive BOM - name: 'ibom' comment: "Interactive BOM" type: ibom dir: Assembly options: output: '%f-ibom.%x' dark_mode: false hide_pads: false show_fabrication: false hide_silkscreen: false highlight_pin1: true no_redraw_on_drag: false board_rotation: 0 check_extra_fields: false include_tracks: false include_nets: false # Generic BOM in CSV format - name: 'bom_csv' comment: "Bill of Materials in CSV format" type: bom dir: BoM/Generic options: output: '%f_bom.%x' format: CSV separator: ',' ref_separator: ',' group_fields: ['Value', 'Footprint', 'Tolerance', 'Voltage'] columns: - field: 'References' name: 'Reference' - field: 'Value' name: 'Value' - field: 'Quantity Per PCB' name: 'Qty' - field: 'Footprint' name: 'Package' - field: 'Description' name: 'Description' - field: 'Manufacturer' name: 'Manufacturer' - field: 'MPN' name: 'Part Number' - field: 'LCSC' name: 'LCSC Part' - field: 'Digikey' name: 'Digikey Part' - field: 'Mouser' name: 'Mouser Part' # Generic BOM in HTML format - name: 'bom_html' comment: "Bill of Materials in HTML format" type: bom dir: BoM/Generic options: output: '%f_bom.%x' format: HTML html: style: 'modern-blue' # Style for HTML output datasheet_as_link: 'Datasheet' # Column name for datasheet links generate_dnf: true logo: false title: 'Bill of Materials - %f' group_fields: ['Value', 'Footprint', 'Tolerance', 'Voltage'] columns: - field: 'References' name: 'Reference' - field: 'Value' name: 'Value' - field: 'Quantity Per PCB' name: 'Qty' - field: 'Footprint' name: 'Package' - field: 'Description' name: 'Description' - field: 'Manufacturer' name: 'Manufacturer' - field: 'MPN' name: 'Part Number' - field: 'LCSC' name: 'LCSC Part' - field: 'Digikey' name: 'Digikey Part' - field: 'Mouser' name: 'Mouser Part' # Generic BOM in XLSX format - name: 'bom_xlsx' comment: "Bill of Materials in Excel format" type: bom dir: BoM/Generic options: output: '%f_bom.%x' format: XLSX xlsx: datasheet_as_link: 'Datasheet' # Column name for datasheet links generate_dnf: true logo: false title: 'Bill of Materials' max_col_width: 50 highlight_empty: true group_fields: ['Value', 'Footprint', 'Tolerance', 'Voltage'] columns: - field: 'References' name: 'Reference' - field: 'Value' name: 'Value' - field: 'Quantity Per PCB' name: 'Qty' - field: 'Footprint' name: 'Package' - field: 'Description' name: 'Description' - field: 'Manufacturer' name: 'Manufacturer' - field: 'MPN' name: 'Part Number' - field: 'LCSC' name: 'LCSC Part' - field: 'Digikey' name: 'Digikey Part' - field: 'Mouser' name: 'Mouser Part' - field: 'Datasheet' name: 'Datasheet' # Download datasheets - name: 'download_datasheets' comment: "Download component datasheets as PDFs" type: download_datasheets dir: Datasheets # Put in root Datasheets folder run_by_default: true priority: 60 category: 'Schematic/docs' options: field: 'Datasheet' # Field containing the datasheet URLs output: '${REFERENCE}_${VALUE}.pdf' # Name pattern for downloaded files dnf: false # Don't include DNF components dnf_filter: '_none' # No DNF filtering link_repeated: true # Use symlinks for repeated datasheets repeated: false # Don't re-download same URL classify: true # Organize by component type (Capacitors/, Resistors/, etc.) classify_extra: # Additional classification rules 'U': 'ICs' 'Q': 'Transistors' 'D': 'Diodes' 'L': 'Inductors' 'F': 'Fuses' 'J': 'Connectors' 'P': 'Connectors' 'SW': 'Switches' 'Y': 'Crystals' 'T': 'Transformers' 'RV': 'Varistors' 'FB': 'Ferrite_Beads' # 3D model - name: 'step' comment: "3D STEP model" type: step dir: 3D options: output: '%f-3D.%x' metric_units: true origin: grid no_virtual: true # Board characteristics report - name: 'report' comment: "Board report" type: report dir: . options: output: '%f-report.%x' do_convert: true # Schematic diff - name: 'sch_diff' comment: "Schematic diff PDF" type: diff dir: DIFF category: 'Schematic/docs' run_by_default: true priority: 50 layers: [] # Empty for schematic (not PCB) options: output: '%f-schematic-diff.%x' format: 'pdf' # Output format: pdf, svg, ps, or png pcb: false # This is for schematic old: 'HEAD~1' # Old version to compare (previous commit) new: 'HEAD' # New version (current) cache_dir: '.cache' add_link_id: true # Add link IDs to the generated diff only_different: true # Only include pages that changed threshold: 0 # Difference threshold (0 = any difference) fuzz: 5 # Fuzzy matching tolerance in pixels diff_mode: 'red_green' # How to show differences old_color: '#FF0000' # Color for old/removed items new_color: '#00FF00' # Color for new/added items # PCB diff - name: 'pcb_diff' comment: "PCB diff PDF" type: diff dir: DIFF category: 'PCB/docs' run_by_default: true priority: 50 layers: 'selected' # Use selected layers below options: output: '%f-pcb-diff.%x' format: 'pdf' # Output format pcb: true # This is for PCB old: 'HEAD~1' # Old version to compare new: 'HEAD' # New version cache_dir: '.cache' add_link_id: false # Not used for PCB only_different: true # Only include layers that changed threshold: 0 # Difference threshold fuzz: 5 # Fuzzy matching tolerance diff_mode: 'red_green' # Visual diff mode old_color: '#FF0000' # Color for removed items new_color: '#00FF00' # Color for added items layers: # Which PCB layers to include in diff - 'F.Cu' - 'B.Cu' - 'In1.Cu' - 'In2.Cu' - 'In3.Cu' - 'In4.Cu' - 'F.Silkscreen' - 'B.Silkscreen' - 'F.Mask' - 'B.Mask' - 'Edge.Cuts' - 'F.Courtyard' - 'B.Courtyard' - 'F.Fab' - 'B.Fab' # Interactive diff using KiRi (HTML output) - name: 'interactive_diff' comment: "Interactive HTML diff" type: diff dir: DIFF category: 'PCB/docs' run_by_default: false # Optional - can be slow priority: 40 layers: 'all' # Include all layers for interactive view options: output: '%f-interactive-diff.%x' format: 'html' # HTML format for interactive viewing pcb: true old: 'HEAD~1' new: 'HEAD' cache_dir: '.cache' only_different: true diff_mode: 'stats' # Show statistics in HTML # SVG diff for web viewing - name: 'svg_diff' comment: "SVG diff for web" type: diff dir: DIFF category: 'PCB/docs' run_by_default: false priority: 40 layers: 'copper' # Only copper layers for web view options: output: '%f-diff.%x' format: 'svg' # SVG format for web embedding pcb: true old: 'HEAD~1' new: 'HEAD' cache_dir: '.cache' only_different: true diff_mode: 'red_green' old_color: '#FF0000' new_color: '#00FF00' zones: 'fill' # How to handle zones: fill, outline, or none # JLCPCB fabrication package - name: 'jlcpcb_gerbers' comment: "Gerbers for JLCPCB" type: gerber dir: JLCPCB options: output: '%f%i.%x' exclude_edge_layer: false exclude_pads_from_silkscreen: true plot_sheet_reference: false plot_footprint_refs: true plot_footprint_values: false force_plot_invisible_refs_vals: false tent_vias: true use_protel_extensions: true # JLCPCB prefers Protel extensions create_gerber_job_file: false # JLCPCB doesn't need this disable_aperture_macros: true gerber_precision: 4.6 use_gerber_x2_attributes: false use_gerber_net_attributes: false line_width: 0.1 subtract_mask_from_silk: true layers: - F.Cu - B.Cu - In1.Cu - In2.Cu - In3.Cu - In4.Cu - F.Paste - B.Paste - F.Silkscreen - B.Silkscreen - F.Mask - B.Mask - Edge.Cuts # JLCPCB drill files - name: 'jlcpcb_drill' comment: "Drill files for JLCPCB" type: excellon dir: JLCPCB options: output: '%f%i.%x' metric_units: true minimal_header: false mirror_y_axis: false pth_and_npth_single_file: false # JLCPCB prefers separate files # JLCPCB ZIP file - name: 'jlcpcb_zip' comment: "JLCPCB fabrication ZIP" type: compress dir: . options: output: '%f_JLCPCB_compress.%x' format: ZIP files: - source: JLCPCB/* dest: / # Fabrication package (ZIP) - name: 'fabrication' comment: "Fabrication package" type: compress dir: . options: output: '%f-fabrication.%x' format: ZIP files: - source: Gerbers/* dest: / - source: PCB/PDF/* dest: /Documentation - source: Assembly/* dest: /Assembly - source: 3D/* dest: /3D # KiCanvas interactive viewer - Schematic - name: 'kicanvas_schematic' comment: "Interactive schematic viewer" type: kicanvas dir: Interactive output: '%f-schematic-viewer.%x' category: 'Schematic/docs' run_by_default: true priority: 45 options: source: 'schematic' local_script: true # Download and use local copy of script controls: 'full' # Full controls for navigation download: true # Show download button overlay: true # Show click overlay title: '%f Schematic - Interactive Viewer' # KiCanvas interactive viewer - PCB - name: 'kicanvas_pcb' comment: "Interactive PCB viewer" type: kicanvas dir: Interactive output: '%f-pcb-viewer.%x' category: 'PCB/docs' run_by_default: true priority: 45 options: source: 'pcb' local_script: true # Download and use local copy of script controls: 'full' # Full controls for navigation download: true # Show download button overlay: true # Show click overlay title: '%f PCB - Interactive Viewer' # KiCanvas interactive viewer - Full Project - name: 'kicanvas_project' comment: "Interactive project viewer (both schematic and PCB)" type: kicanvas dir: Interactive output: '%f-project-viewer.%x' category: ['Schematic/docs', 'PCB/docs'] run_by_default: true priority: 45 options: source: 'project' # Show both schematic and PCB local_script: true # Download and use local copy of script controls: 'full' # Full controls for navigation download: true # Show download button overlay: true # Show click overlay title: '%f Project - Interactive Viewer' # Variants for different layer counts (optional) variants: - name: 2layer comment: "2 layer board variant" type: kibom - name: 4layer comment: "4 layer board variant" type: kibom - name: 6layer comment: "6 layer board variant" type: kibom