modernGraphTool v2 Changelog
v2.2.4
Section titled “v2.2.4”- Feat: Device PEQ is now Hardware EQ, rebuilt on eqcaps, an open database of what each device’s EQ accepts. See Hardware EQ.
- Feat: Added a Device EQ control that switches the device’s preset, or bypasses its EQ, the moment you change it.
- Feat: Added Auto-write changes for Hardware EQ, which writes each edit to the connected device a moment after you stop editing. Off by default. See Writing automatically.
- Feat: The EQ constraint picker is back, now with software and hardware EQ profiles from eqcaps alongside the built-in ones. Constraints cover per-band filter types and frequency, Q and gain ranges and steps, and AutoEQ stays inside them. See EQ constraints.
- Feat: Added
EQUALIZER.EQCAPS_URLto point Hardware EQ and the constraint picker at a mirror of the eqcaps database. See EQUALIZER documentation. - Feat: Added
variants[].description, a plain-text note shown under the variant’s suffix in the variant picker. Long suffixes now wrap there instead of being cut off. See Sample Sets. - Fix: Two sample sets drawn from the same first file no longer overwrite each other when
variants[]is merged with the phone-levelfileform.
v2.2.3
Section titled “v2.2.3”- Feat: Added OR operator (//) for search feature.
- Refactor: Improved initial load time of turboEQ WASM.
- Fix: Fixed an issue where sweep signal frequency number in EQ tab’s audio player was stuck at 20Hz.
v2.2.2
Section titled “v2.2.2”- Feat: AutoEQ now runs turboEQ, a WebAssembly port of jaakkopasanen’s AutoEq optimizer. An eight-band run takes a few milliseconds — over a hundred times faster than before. See AutoEQ Benchmarks.
- Feat: Added an AutoEQ fit mode. Exact match (default) fits the full curve up to 20 kHz as the graph shows it; Treble-safe follows AutoEq’s own approach, smoothing the treble and placing no band above 10 kHz. See Fit mode.
- Feat: Added an Auto-apply switch that re-runs AutoEQ whenever the device curve, target or AutoEQ options change — e.g. while tilting a target in the Target Customizer. Editing the filters by hand, or switching device, target or EQ preset, turns it off. See Auto-apply.
v2.2.1
Section titled “v2.2.1”- Refactor: Preference Bound is now aligned by its band center, not the base (DF) target. This change should make graph alignment more intuitive, but may show some differences compared to the previous version.
- Refactor: Adjusted Sample / Channel selector to occupy more width, improving usability on smaller screens.
- Refactor: Implemented few performance optimizations throughout the codebase, resulting in faster load times.
v2.2.0
Section titled “v2.2.0”- Feat: Device ranks can now be read from a published spreadsheet (a squigRanking sheet, or any CSV) instead of
phone_book.json, so editing the sheet updates the tool with no redeploy. Ranks with a grade scale render as colored badges. Configured by the newRANKINGsection, which also replacesRANKING_URL— that key still works. See RANKING documentation.
v2.1.9
Section titled “v2.1.9”- Feat: Added per-channel equalizer features, allowing users to apply different EQ settings to the left and right channels independently.
- Feat: Introduced a new comma-separated search feature in the device selector, enabling users to search for multiple devices at once. This could be useful for finding databases that contain all the devices you are interested in comparing.
v2.1.8
Section titled “v2.1.8”- Feat: Added an “Average” option to combine all visible measurements into a single averaged curve.
- Feat: The site selector can now switch between any deployment listed in the shared site index, not just squig.link-hosted ones.
- Feat: The Equalizer now turns itself on automatically when you import a filter file, run AutoEQ, pull a device’s PEQ, or add your first filter band.
- Feat: Running AutoEQ on an empty filter list now defaults to eight bands instead of one.
- Refactor: Selected devices are now pinned to the top of the device list.
- Refactor: Exported EQ filter files now include the device/target model name.
- Fix: The EQ sweep tone now correctly spans your selected listening range instead of collapsing to one edge.
v2.1.7
Section titled “v2.1.7”- Feat: Phone entries can now carry a rich
description(a small inline HTML subset — links, emphasis, etc.) and alinks[]array of operator-defined links shown alongside the built-in Review / Shop links. See Rich Descriptions and Custom Links. - Fix:
variants[]now composes with the phone-levelfile/suffix/prefix/samples/hptfsform instead of discarding it, so a database can use Sample Sets without losing CrinGraph compatibility. See Sample Sets.
v2.1.6
Section titled “v2.1.6”- Feat: Unified multi-sample and HpTF measurements into one Sample Set concept. A variant measured more than once can now be drawn as an averaged curve, per-run curves, a shaded min/max deviation band, or any combination — including “averaged line with a variance band”, which neither old form could express. Declare it per variant with the new
variants[]schema. See Sample Sets documentation. - Feat: New
SAMPLESconfig section (DEFAULT_COUNT,DEFAULT_DISPLAY,FILL_OPACITY), replacingMULTI_SAMPLEandHPTF. A site-wide default run count means a uniformly multi-sampled database needs no per-entry setting. See SAMPLES documentation. - Feat: An individual sample curve now has its own L, R and AVG toggles.
- Feat: Added a new
DOWNLOADoption to theconfig.jsthat allows users to export measurement curves. Disabled by default. See more at DOWNLOAD documentation. - Fix: The on-graph label now updates as individual runs are toggled, and the hover readout reports runs from every kind of sample set.
- Fix: The averaged curve of a multi-sample device can now be hidden, and individual runs keep their true spread at the normalization frequency instead of being flattened onto it.
- Deprecated: The modernGraphTool-specific
hptfs[]key and theMULTI_SAMPLE/HPTFconfig sections still load, but will be removed in a future release. Convert your files by importing and re-exporting them in the phone_book.json Editor and the Config Editor. See Deprecated:hptfs[].
v2.1.5
Section titled “v2.1.5”- Feat: Reworked the Equalizer with the new sine sweep audio source, a History & Compare panel with A/B mode switching, and full undo/redo for filter edits.
- Feat: Cross-Site Search now queries the GraphAggregator index, replacing the per-site squig.link crawl for faster and more reliable results across measurement databases.
- Localization: Added Czech language support. (by @adam664)
- Fix: Fixed numerous EQ issues, including bypass loudness matching, the
\momentary bypass key, and more. - Fix: Fixed baseline graph rendering inconsistencies, and Preference Bound issue with mobile devices.
- Fix: Fixed several data-sync edge cases around undo/redo, variant removal, and target duplication.
v2.1.4
Section titled “v2.1.4”- Localization: Added new translations for Russian and Ukrainian languages (by @reallystates)
- Fix: Added tiny buffer MenuCarousel buttons to prevent unintended ellipsis via sub-pixel rounding
v2.1.3
Section titled “v2.1.3”- Refactor: ‘Upload FR’ button now automatically handles L/R channel files based on its name.
- Refactor: MenuCarousel buttons now adjust its width based on the inner text length, preventing overflow issues with longer translations.
- Fix: Fixed an issue with L/R channel position mismatch
v2.1.2
Section titled “v2.1.2”- Fix: Fixed an issue where color randomizer was not working properly.
- Fix: Fixed an issue where Preference Bound was not properly following y-axis position adjustment via graph handle.
- Fix: Normalization now shifts a device’s left and right channels by the same amount, so the displayed L/R gap reflects the true channel imbalance instead of being flattened at the normalization point.
v2.1.1
Section titled “v2.1.1”- Feat: Added a new “CURVE_COLOR_PALETTE” field in the
config.jsthat allows users to customize the color palette used for device curves. See more at TRACE_STYLING documentation. - Feat: Added a new “PANEL_POSITION” field in the
config.jsthat allows users to customize the position of the menu panel on the desktop interface. See more at INTERFACE documentation. - Refactor: Updated audio player to keep the same instance across navigations, allowing it to maintain playback state and position when switching between various panels.
- Change: Menu panel is now positioned on the left side of the desktop interface by default, following common UI conventions from CrinGraph.
- Change: Added a toast notification that is shown when a new version of modernGraphTool is loaded.
- Refactor (squig-link): Improved cross-site search performance.
v2.1.0
Section titled “v2.1.0”- Feat: Added a new “RANKING_URL” field in the
config.jsthat changes the ranking indicator in the device selector to link to a custom URL. See more at RANKING_URL documentation - Fix: Fixed an issue where y-axis scale button was not properly initialized with configured default value on page load.
- Fix: Fixed an issue where entire devices went missing when single entry in the phone book had an invalid format, instead of just that entry being skipped.
v2.0.9
Section titled “v2.0.9”- Fix: Fixed multiple issue with baseline graph rendering, including incorrect baseline display when using certain normalization options and misalignment of baseline elements in some cases.
v2.0.8
Section titled “v2.0.8”- Fix: Screenshots are now independent of the current theme, ensuring consistent appearance regardless of light/dark mode settings.
v2.0.7
Section titled “v2.0.7”- Feat: Added a plus button in variant selector to quickly add a new variant of the identical device.
- Feat: EQ and AutoEQ entries are now sorted by types and labels.
- Feat: Added auto-select for EQ and AutoEQ when only one phone and one target are selected.
v2.0.6
Section titled “v2.0.6”- Feat: Added new EQ settings component with normalization linking and AutoEQ persistence options
- Feat: Added an option to lock the EQ curve to the original graph, keeping its position relative to the original measurements regardless of normalization settings
- Feat: Added an option to remember AutoEQ input values, with choices for current tab only or saving to the browser for all sessions
- Refactor: Updated EQ panel layout to split elements for better organization in wide viewports
v2.0.5
Section titled “v2.0.5”- Feat: Added devicePEQ info dialog with list of supported devices and instructions
- Refactor: Replaced color scheme for Switch component for better contrast and accessibility
- Refactor: Normalizer input now uses
oninputevent for real-time updates on every keystroke - Fix: Fixed an issue where HpTF deviation fill could be misaligned in certain normalization options
- Fix: Prevented variant selector from escaping screen
- Fix: Added missing hover effect on several interactive elements
v2.0.4
Section titled “v2.0.4”- Refactor: Replaced singular
hptfphone_book field withhptfsarray. Each hptfs entry becomes its own independent variant - Refactor: Multi-sample variants now fall back to unnumbered L.txt/R.txt when L1.txt/R1.txt don’t exist.
- Refactor: Dropped translation for target adjustment label, as it’s user-defined value, not system parameter.
- Fix: HpTF deviation fill now uses the combined L+R envelope when AVG is displayed
- Fix: Variant selector no longer hides the chevron when dispSuffix is empty
- Fix: _getSuffix returning “0” for explicit empty-string suffix entries
v2.0.3
Section titled “v2.0.3”- Feat: Added target adjustment label to the graph
- Feat: Added version info in the misc panel
- Fix: Target Customizer not normalizing target name correctly, causing some targets to be missing from the list
- Fix: Target selector’s horizontal scrollbar not showing up properly when there are many targets
v2.0.2
Section titled “v2.0.2”- Fix: Hardcoded target path in Preference Bound
- Fix: Remember user language selection
- Fix: Slow version update from jsDelivr - use GitHub instead
v2.0.1
Section titled “v2.0.1”- Fix: Web Worker based AutoEQ not working in CDN build
v2.0.0
Section titled “v2.0.0”- Initial Release for v2