Arc Protractor Generator for Turntable Cartridge Alignment

This Python script generates precision arc protractors for aligning phono cartridges on turntables with pivoting tonearms. Simply measure your turntable's pivot-to-spindle distance, run the script, and print your custom protractor at 100% scale.

Features
  • Three alignment geometries: Baerwald (Löfgren A), Löfgren B, and Stevenson
  • Custom null point support for experimental or specialized alignments
  • Supports both A4 and US Letter paper sizes
  • Geometrically accurate calculations using IEC standard groove radii
  • PDF output with verification scale bar

See example PDF

How It Works

The script calculates the optimal null points (where tracking error = 0) based on your tonearm geometry and chosen alignment method. It generates a PDF with an arc matching your stylus path and alignment grids positioned at the null points. Custom null points can be specified for experimental alignments or non-standard geometries.

Prerequisites

Required:

  • Python 3.6 or later
  • ReportLab library

Installation:

pip install reportlab

Optional:

  • Ruler or caliper to measure pivot-to-spindle distance
  • Printer capable of 100% scale printing
  • A4 or US Letter paper
Quick Start
  1. Measure your turntable's pivot-to-spindle distance (typically 200-230mm)
  2. Install Python 3 and ReportLab: pip install reportlab
  3. Run: python3 arc_protractor_generator.py 215.7 --name "My Turntable"
  4. Print the PDF at 100% scale (NO scaling/fit-to-page)
  5. Verify the 100mm scale bar measures exactly 100mm
  6. Use the protractor to align your cartridge
Command Line Help
usage: arc_protractor_generator.py [-h] [-a {baerwald,lofgren_b,stevenson}]
                                   [-o OUTPUT] [--custom-nulls INNER OUTER]
                                   [--inner-groove INNER_GROOVE]
                                   [--outer-groove OUTER_GROOVE] [--show-all]
                                   [--name NAME] [--papersize {A4,US,letter}]
                                   pivot_to_spindle

Generate arc protractor for turntable cartridge alignment

positional arguments:
  pivot_to_spindle      Distance from tonearm pivot to spindle center (mm)

options:
  -h, --help            show this help message and exit
  -a {baerwald,lofgren_b,stevenson}, --alignment {baerwald,lofgren_b,stevenson}
                        Alignment geometry (default: baerwald)
  -o OUTPUT, --output OUTPUT
                        Output PDF filename (default: auto-generated)
  --custom-nulls INNER OUTER
                        Custom null points in mm (overrides alignment type)
  --inner-groove INNER_GROOVE
                        Inner groove radius in mm (default: 60.325 IEC)
  --outer-groove OUTER_GROOVE
                        Outer groove radius in mm (default: 146.05 IEC)
  --show-all            Show calculations for all alignment types and exit
  --name NAME           Custom name/description for the protractor. Used as
                        title and filename if -o not specified. Example:
                        --name "SME 3009 S2 Improved Serial 23123"
  --papersize {A4,US,letter}
                        Paper size: A4 (210x297mm) or US/letter (8.5x11in)
                        (default: A4)

Examples:
  # SME 3009 S2 Improved with Baerwald alignment (A4 paper)
  arc_protractor_generator.py 215.7

  # Same tonearm with US Letter paper
  arc_protractor_generator.py 215.7 --papersize US

  # Löfgren B alignment
  arc_protractor_generator.py 215.7 --alignment lofgren_b

  # Technics SL-1200 with Stevenson alignment
  arc_protractor_generator.py 215.0 --alignment stevenson -o technics_protractor.pdf

  # Custom null points
  arc_protractor_generator.py 215.5 --custom-nulls 66.0 120.9

  # Show what each alignment calculates
  arc_protractor_generator.py 215.5 --show-all

Example tonearm mounting distances:
  SME 3009 S2 Improved (early):   215.7 mm
  SME 3009 S2 Improved (late):    213.25 mm
  Technics SL-1200:               215.0 mm
  Rega RB300:                     222.0 mm
  Audio-Technica AT-LP120:        215.0 mm
  Pro-Ject 8.6" tonearms:         200.0 mm
Alignment Geometries

Baerwald (Löfgren A) - Default

  • Minimises maximum tracking error
  • Best for general-purpose listening
  • Null points: 66.04mm, 120.90mm

Löfgren B

  • Minimises RMS (average) tracking error
  • Best for full-side listening
  • Null points: 70.29mm, 116.60mm

Stevenson

  • Minimises tracking error at inner grooves
  • Best for records with long inner groove sections
  • Null points: 60.325mm, 117.42mm
Alignment for Other Record Formats

While the script defaults to standard 12" LP groove radii (IEC 60.325-146.05mm), it can generate protractors for other formats using custom groove parameters.

7" 45 RPM Singles

7" singles use the same groove specifications as LPs but with smaller dimensions. Typical groove radii are 57-58mm (inner) to 88-90mm (outer). Use the same alignment geometry as for LPs:

# 7" 45 RPM single with Baerwald alignment
python3 arc_protractor_generator.py 200.0 --inner-groove 57 --outer-groove 88 --name "Pro-Ject 7-inch 45"

10" 78 RPM Records

Typical groove radii are approximately 60-62mm (inner) to 117-120mm (outer). For single-track recordings (one song per side), Löfgren B alignment is recommended as it minimises average tracking error across the entire side:

# 10" 78 RPM with Löfgren B alignment (recommended for single tracks)
python3 arc_protractor_generator.py 200.0 --inner-groove 60 --outer-groove 118 --alignment lofgren_b --name "Pro-Ject 10-inch 78 Lofgren B"

12" 78 RPM Records

Typical groove radii are approximately 60-65mm (inner) to 135-145mm (outer):

# 12" 78 RPM with Baerwald alignment
python3 arc_protractor_generator.py 200.0 --inner-groove 62 --outer-groove 140 --alignment baerwald --name "Pro-Ject 12-inch 78 Baerwald"

Note: 78 RPM records pre-date IEC standardisation and groove radii varied by manufacturer and era. The values above are typical approximations. 

License

GPL (GNU General Public License)

Author

I.M.