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
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
- Measure your turntable's pivot-to-spindle distance (typically 200-230mm)
- Install Python 3 and ReportLab:
pip install reportlab - Run:
python3 arc_protractor_generator.py 215.7 --name "My Turntable" - Print the PDF at 100% scale (NO scaling/fit-to-page)
- Verify the 100mm scale bar measures exactly 100mm
- 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.