GerbMerge -- A Gerber-file merging program

Andrew Sterian
Padnos College of Engineering and Computing
Grand Valley State University

Top-Level | The Configuration File | The Layout File | Automatic Placement Version 1.7a
Installation | Requirements | Running GerbMerge | Verifying the Output | Limitations | Program Options | Copyright | To Do | Credits | History

What's New

In release 1.7a (done by Stefan Tauner alone. Be aware that i have not written any python code before...):

You can download version 1.7a here.

In release 1.6:

In release 1.5:

In release 1.4:

In release 1.3:

In release 1.2:

In release 1.1:

Bug Fixes


GerbMerge is a program for combining (panelizing) the CAM data from multiple printed circuit board designs into a single set of CAM files. The purpose of doing so is to submit a single job to a board manufacturer, thereby saving on manufacturing costs.

GerbMerge currently works with:

Here is one sample and another sample of the program's output. These samples demonstrate panelizing multiple, different jobs, and also demonstrate board rotation.

You can download the latest version of GerbMerge from:


GerbMerge is written in pure Python. It depends upon the following packages for operation:

All of the above packages come with easy installation programs for both Windows and Linux.


First, install all of the packages listed above in the Requirements section.


Run the gerbmerge1.6.exe installation program. I will assume you choose all of the default installation options. The installer will create and populate the following directories:

The above assumes you have Python installed in C:\Python24. The first directory is where the actual program resides. The second directory contains the documentation, example files, etc. In the C:\Python24 directory is a sample batch file GERBMERGE.BAT which shows you how to run the GerbMerge program.


Extract the gerbmerge....tar.gz file then install as follows:

The installer will create and populate the following directories/files:

The above assumes your Python library directory is as indicated (it may be elsewhere but the installer should be able to find it, so don't worry about it). The first directory is where the actual program resides. The second directory contains the documentation, example files, etc. A sample program for invoking GerbMerge is installed as /usr/local/bin/gerbmerge...feel free to move it somewhere else.

Running GerbMerge


Open a DOS box and invoke the Python interpreter on the file. Have a look at GERBMERGE.BAT (and put this on your Path somewhere) for an example.

c:\python24\python c:\python24\lib\site-packages\gerbmerge\


You run GerbMerge by invoking the Python interpreter on the file of the gerbmerge package. For example:

python /usr/local/lib/python2.4/site-packages/gerbmerge/

The gerbmerge shell script that comes with this software contains an example for running GerbMerge, modelled on the above. By default, this shell script is installed in /usr/local/bin so you should just be able to type gerbmerge from a shell prompt.


There are three ways to run GerbMerge:
  1. By manually specifying the relative placement of jobs
  2. By manually specifying the absolute placement of jobs
  3. By letting GerbMerge automatically search for a placement that minimizes total panel area

Manual Relative Placement

For the manual relative placement approach, GerbMerge needs two input text files:

The names of these files are the two required parameters to GerbMerge:

gerbmerge file.cfg file.def

The following links describe the contents of the configuration file and layout file.

Manual Absolute Placement

For the manual absolute placement approach, GerbMerge also needs the configuration file as well as another text file that specifies where each job is located on the panel and whether or not it is rotated:

gerbmerge --place-file=place.txt file.cfg

The place.txt file looks something like:

job1 0.100 0.100
cpu 0.756 0.100
cpu*rotated 1.35 1.50

This method of placement is not meant for normal use. It can be used to recreate a previous invocation of GerbMerge, since GerbMerge saves its results in a text file (whose name is set in the [MergeOutputFiles] section of the configuration file) after every run. Thus, you can experiment with different parameters, save a placement you like, do some more experimentation, then return to the saved placement if necessary.

Alternatively, this method of placement can be used with third-party back ends that implement intelligent auto-placement algorithms, using GerbMerge only for doing the actual panelization.

Automatic Placement

For the automatic placement approach, GerbMerge only needs the configuration file:

gerbmerge file.cfg
Command-line options can be used to modify the search algorithm. See the Automatic Placement page for more information.

Input File Requirements

GerbMerge requires the following input CAM files:

Verifying the Output

Before sending your job to be manufactured, it is imperative that you verify the correctness of the output. Remember that GerbMerge comes with NO WARRANTY. Manufacturing circuit boards costs real money and a single mistake can render an entire lot of boards unusable.

I recommend the following programs for viewing the final output data. Take the time to become very familiar with at least one of these tools and to use it before every job you send out for manufacture.

For Linux, the best option (currently) for viewing Gerber and Excellon files is the gerbv program. Simply type in the names of all files generated by GerbMerge as parameters to gerbv:
gerbv merged.*.ger merged.*.xln

For Windows, GC-Prevue is a good program that I have used often. It is a free program. GraphiCode makes lots of other, more powerful Gerber manipulation and viewing programs but they are quite pricey ($495 and up).


Another free Windows program, ViewMate is similar to GC-Prevue. I have not used ViewMate much, but that is mostly due to familiarity with GC-Prevue. The two programs are comparable, although I'm sure that someone who is much more familiar with both could point out some differences.


Program Options

The --octagons option affects how the octagon aperture is defined in the output files. The parameter to this option must either be rotate or normal. Normally, octagons begin at an angle of 22.5 degrees, but some Gerber viewers have a problem with that (notably CircuitMaker from LPKF). These programs expect octagons to begin at 0.0 degrees.

The --octagons=normal option is the default (22.5 degrees) and need not be specified. A rotation of 0.0 degrees can be achieved by specifying --octagons=rotate.

This option is the default when only a configuration file is specified (see the documentation on Automatic Placement for more information). It indicates that a randomized search of possible job tilings is to be performed. This option does not make sense when a layout file is specified.

This option may be specified to indicate that all possible job tilings are to be searched (see the documentation on Automatic Placement for more information). This option does not make sense when a layout file is specified.

This option is used with randomized search to indicate how many jobs are to undergo full search for each tiling. See the documentation on Automatic Placement for more information.

This option performs a panel layout based upon absolute job positions in the given text file, rather than by random/full search or by a layout file. The placement file created by GerbMerge can be used as an input file to this option in order to recreate a previous layout.

This option prevents GerbMerge from trying to trim all Gerber data to lie within the extents of a given job's board outline. Normally, GerbMerge will try to do so to prevent one job's Gerber data (most notably, silkscreen lines for connectors that protrude from the board) from interfering with a neighboring job on the final panel. Specify this command-line option if you do not want this trimming to occur.

This option prevents GerbMerge from trying to trim all Excellon data to lie within the extents of a given job's board outline. Normally, GerbMerge will try to do so to prevent one job's drill holes from landing in the middle of a neighboring job on the final panel. Specify this command-line option if you do not want this trimming to occur.

-h, --help
The '-h' or '--help' option prints a brief summary of available options.

-v, --version
The '-v' or '--version' option prints the current program version and author contact information.

Copyright & License

Copyright © 2003-2008 Andrew Sterian. All Rights Reserved. mailto:

GerbMerge comes with ABSOLUTELY NO WARRANTY. This is free software licensed under the terms of the GNU General Public License. You are welcome to redistribute this software under certain conditions. For more details, see the previous link or visit The Free Software Foundation.

To Do

  1. Accept outputs from more CAD programs
  2. A graphical interface for interactive placement
  3. Better reporting of parse errors in the layout and configuration files
  4. Implement simple primitive for panelizing a single job in an array
  5. More intelligent placement algorithms, possibly based on the fabric cutting problem.
  6. Accept aperture macro parameters and operators


Thanks to Jace Browning for major contributions to this code. This help file is based on a template for the help file for mxTools by M.A. Lemburg. This software was created with VIM; thanks to the authors of this program and special thanks for the Python syntax support. Thanks to M.A. Lemburg for his mxBase package, Mike Fletcher for his SimpleParse package, and the authors of gerbv, a great Gerber file viewer for Linux, and, of course, to the Python developers and support community.

Thanks to Joe Pighetti for making me start writing this program, and to the Grand Valley State University Firefighting Robot Team for making me finish it.

Thanks to Matt Kavalauskas for identifying Eagle's annulus and thermal macros and supporting the development of the aperture macro code.


Version 1.7a -- 2010-08-18

The changes in this version are the sole work of Stefan Tauner (me) (and are public domain, if anyone asks). I tried to contact Andrew to no avail. I will probably not maintain GerbMerge in the future. If you wanna take over, please inform (me via) the gEDA-user mailing list ( Thanks!

This version has undergone limited testing on Ubuntu 10.04 with gEDA/pcb's gerber files only.

Version 1.6 -- October 5, 2008

Version 1.5 -- September 15, 2008

Version 1.4 -- September 10, 2008

Version 1.3 -- October 31, 2006

Version 1.2 -- September 16, 2006

Version 1.1 -- November 10, 2005

Version 1.0 -- August 20, 2005

Version 0.9 -- August 12, 2005

Version 0.8 -- October 16, 2004

Version 0.7 -- August 27, 2004

Version 0.6 -- April 26, 2004

Version 0.5 -- March 1, 2004

Version 0.4 -- November 26, 2003

Version 0.3 -- October 23, 2003

Version 0.2 -- May 16, 2003

Version 0.1 -- March 4, 2003

© 2003-2008, Copyright by Andrew Sterian; All Rights Reserved. mailto: