Skip to content

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.

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.

“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 CrinGraphsquiglink labPublicGraphToolmodernGraphTool
CodebaseOne ~2,500-line script~4,100 lines in three scripts~14,400 lines in 40+ unbundled scriptsBundled 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 languagesEnglishEnglishEnglishEnglish, Korean, Czech, Russian, Ukrainian
ThemingEdit CSS + JSEdit several CSS filesEdit several CSS filesOne theme.css + Theme Generator
ConfigurationHand-edit config.jsHand-edit config.jsHand-edit config.jsStructured config.js + Config Editor and phone_book Editor
UpdatesRe-upload filesRe-upload filesRe-upload filesAutomatic in CDN mode
Data formatphone_book.json + FR .txtSameSameSame — drop-in compatible

The sections below walk through what these differences mean in practice.

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.

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.

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.

Switching doesn’t lock you in.

  • Same data — keep your data/ folder and phone_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.