Why modernGraphTool?
The audio measurement community’s needs have outgrown the tools that once served it well.
modernGraphTool is a ground-up rewrite — built on modern web technologies with a modular architecture — designed to give measurement operators and enthusiasts a tool that can evolve with the community.
The CrinGraph Legacy
Section titled “The CrinGraph Legacy”CrinGraph appeared around 2019 and quickly became the de facto standard for frequency response visualization in the audio enthusiast community.
It did its original job well: load measurements, overlay curves, compare headphones. Simple and effective.
At a Glance
Section titled “At a Glance”“CrinGraph” today usually means one of three codebases. Vanilla CrinGraph is the original. squiglink lab is the lightweight fork most squig.link databases run. PublicGraphTool is the most feature-rich fork, carrying most of the community’s add-ons.
| Vanilla CrinGraph | squiglink lab | PublicGraphTool | modernGraphTool | |
|---|---|---|---|---|
| Codebase | One ~2,500-line script | ~4,100 lines in three scripts | ~14,400 lines in 40+ unbundled scripts | Bundled TypeScript components |
| Parametric EQ + AutoEQ | — | ✓ | ✓ | ✓ with undo/redo |
| A/B compare of EQ revisions | — | — | — | ✓ History & Compare panel, momentary bypass key |
| Per-channel (L / R) EQ | — | — | Balance slider only | ✓ Shared + per-ear bands |
| Audio preview with live EQ | — | Tone generator | ✓ | ✓ Your own audio files, noise, tones, sine sweep |
| Preference Bound | — | — | ✓ | ✓ Built in |
| Target customization | — | — | Tilt, bass, ear gain, treble | ✓ Configurable filters, presets, per-target defaults |
| Interface languages | English | English | English | English, Korean, Czech, Russian, Ukrainian |
| Theming | Edit CSS + JS | Edit several CSS files | Edit several CSS files | One theme.css + Theme Generator |
| Configuration | Hand-edit config.js | Hand-edit config.js | Hand-edit config.js | Structured config.js + Config Editor and phone_book Editor |
| Updates | Re-upload files | Re-upload files | Re-upload files | Automatic in CDN mode |
| Data format | phone_book.json + FR .txt | Same | Same | Same — drop-in compatible |
The sections below walk through what these differences mean in practice.
Every Feature, in One Place
Section titled “Every Feature, in One Place”In the CrinGraph world, features live in various places. PublicGraphTool has Preference Bound and a Device PEQ bridge; squiglink lab is what most sites deploy. To get a feature your fork lacks, you port it by hand — merging thousands of lines of unbundled JavaScript that were never designed to be combined, and hoping nothing else breaks.
modernGraphTool ships every feature in the same build, each one switchable from config.js:
- Equalizer — interactive parametric EQ, AutoEQ with shelf filters, per-channel bands, undo/redo, a History & Compare panel for A/B-ing revisions, and import/export.
- Live audio preview — play your own audio file, white or pink noise, a test tone or a sine sweep through your EQ.
- Hardware EQ — push filters straight to the hardware in the eqcaps device database over USB, Serial, Bluetooth or the network, after showing what the device can’t hold.
- Target Customizer — tilt, bass, treble and ear-gain filters on any target, with presets and per-target starting values. Operators can add more filters to the set.
- Preference Bound, Average Curves, and multi-sample measurements drawn as averaged, per-run, min/max-band curves, or HpTF range.
- Cross-Site Search and the Site Selector — find a device across every database in the network, and jump between them.
- Frequency Tutorial, shareable URLs, screenshots and watermarks.
Updates Without Touching Code
Section titled “Updates Without Touching Code”A CrinGraph site stays exactly as it was on the day it was uploaded. Every bug fix or new feature means downloading files, re-applying your edits, and uploading again — which is why most sites never update at all.
In CDN mode, your server keeps only your data, config.js and theme.css. The app itself loads from a CDN, and your site picks up each new release within minutes, with no action on your part.
And there is a steady stream of releases. modernGraphTool has been in active development since March 2025, and v2 has shipped various new features since its April 2026 launch — among them:
- Per-channel EQ — separate bands for each ear, so AutoEQ can fix channel imbalance and match a target in one go.
- History & Compare — A/B between EQ revisions, with full undo/redo.
- Three new interface languages — Czech, Russian and Ukrainian, contributed by the community.
- turboEQ — an extremely fast AutoEQ that dynamically adapts to the frequency response.
See the changelog for everything else.
Configure Without Code
Section titled “Configure Without Code”CrinGraph’s config.js is a list of loose JavaScript variables, and the look of the page is spread across several stylesheets and inline styles inside the scripts. Customizing either means reading source code.
modernGraphTool keeps each concern in one place, and gives you tools so you rarely need to open a text editor:
config.js— one structured object covering initial devices and targets, normalization, labels, watermarks, panel layout, rankings, languages, and every feature toggle.- Config Editor — a form for every option. Import your current file, change what you need, export it back.
- Theme Generator — pick a few colors and get a complete light and dark
theme.css. - phone_book.json Editor — manage brands, devices and variants without hand-writing JSON.
Keep Your Data, and Your Options
Section titled “Keep Your Data, and Your Options”Switching doesn’t lock you in.
- Same data — keep your
data/folder andphone_book.json. modernGraphTool-only fields add to the CrinGraph format rather than replacing it, so the same files stay readable by CrinGraph. - Dual-hosting — run modernGraphTool alongside your existing CrinGraph on the same domain and transition gradually.
- Choose your deployment — CDN mode for automatic updates, a pre-built release when you want control over when versions change, or GitHub Pages with no server at all.