Générer les fichiers de fabrication (Gerber) avec l'API Python de pcbnew

Publié le 12 septembre 2026 par leZ

Exportez les fichiers Gerber d'une board par script, sans passer par le dialogue de tracé de KiCad — avec pcbnew ou l'API IPC.

Fichiers réellement générés par le script : Gerber de la couche F.Cu et fichiers de perçage PTH et NPTH
Le Gerber F.Cu et les deux fichiers de perçage.

Régénérer manuellement les Gerbers à chaque révision de board depuis le dialogue Fichier → Tracer est vite oublié. Scripter l’export garantit des fichiers de fabrication à jour à chaque build, et s’intègre naturellement dans un pipeline CI qui valide une board avant de l’envoyer chez le fabricant.

Configurer et lancer le tracé

PLOT_CONTROLLER pilote l’export couche par couche. On configure le dossier de sortie, puis on ouvre et referme un fichier de tracé pour chaque couche :

import pcbnew

board = pcbnew.GetBoard()
from pcbnew import PLOT_CONTROLLER, PLOT_FORMAT_GERBER, F_Cu

pctl = PLOT_CONTROLLER(board)
popt = pctl.GetPlotOptions()
popt.SetOutputDirectory("gerbers")

pctl.SetLayer(F_Cu)
pctl.OpenPlotfile("F_Cu", PLOT_FORMAT_GERBER)
pctl.PlotLayer()
pctl.ClosePlot()

Cet exemple ne trace que F_Cu : répétez SetLayer/OpenPlotfile/PlotLayer/ClosePlot pour chaque couche à exporter (cuivre, sérigraphie, masque, contour…).

Avec l’API IPC, l’export passe par un objet PlotSettings qui liste les couches à tracer, puis un appel de plus haut niveau sur la board :

from kipy import KiCad
from kipy.board_jobs import PlotSettings

kicad = KiCad()
board = kicad.get_board()

plot = PlotSettings()
plot.layers = [board.get_layer_by_name("F.Cu"), board.get_layer_by_name("B.Cu")]

result = board.export_gerbers("gerbers/ma_carte", plot_settings=plot)

⚠️ Deux conditions de version, comme pour le headless — vérifiées en local, export_gerbers fonctionne réellement une fois les deux réunies :

  • côté KiCad, il faut la version 11 ou une nightly 10.99 : sur KiCad 10 stable, le serveur IPC répond littéralement “no handler available for request of type …ExportGerbers” — la commande n’existe pas encore côté application ;
  • côté bibliothèque, export_gerbers et PlotSettings n’existent qu’à partir de kicad-python 0.9.0, encore en développement au moment de la rédaction (pip install kicad-python installe la 0.8.0, qui n’a ni l’un ni l’autre).

Testé avec les deux versions à jour (KiCad 10.99 + kicad-python en développement) : l’export produit de vrais fichiers .gtl/.gbl exploitables. En attendant une release qui réunit les deux côtés, utilisez pcbnew pour cet export.

Exporter le fichier de perçage

Le perçage utilise un contrôleur dédié, EXCELLON_WRITER, séparé du tracé des couches cuivre :

from pcbnew import EXCELLON_WRITER

drill_writer = EXCELLON_WRITER(board)
drill_writer.SetOptions(False, False, board.GetDesignSettings().GetAuxOrigin(), False)
drill_writer.CreateDrillandMapFilesSet("gerbers", True, False)

Même logique côté API IPC, en un seul appel :

from kipy.board import DrillFormat

board.export_drill("gerbers/ma_carte", format=DrillFormat.DF_EXCELLON)

⚠️ DrillFormat s’importe depuis kipy.board, pas kipy.board_jobs. Mêmes deux conditions de version que pour export_gerbers (KiCad 11/10.99 + kicad-python 0.9.0) — testé avec les deux à jour, produit un vrai fichier .drl.

Pour aller plus loin

Ce script s’intègre directement dans une étape de CI : à chaque commit modifiant un .kicad_pcb, régénérer automatiquement les Gerbers et les comparer à la version précédente permet de détecter tout changement de fabrication non intentionnel avant l’envoi chez le fabricant.