Générer les fichiers de fabrication (Gerber) avec l'API Python de pcbnew
Exportez les fichiers Gerber d'une board par script, sans passer par le dialogue de tracé de KiCad — avec pcbnew ou l'API IPC.

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_gerbersetPlotSettingsn’existent qu’à partir de kicad-python 0.9.0, encore en développement au moment de la rédaction (pip install kicad-pythoninstalle 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.