Free instrument-data tool

JCAMP-DX files (.jdx / .dx), read and converted — free

What JCAMP-DX (.jdx/.dx) is, how its compression forms (DIF/DUP, SQZ) work, and how to read/convert spectral data — upload to Matflow free, or parse in Python.

Formats: .jdx / .dx (text, JCAMP-DX 4.24/5.01/6.00) · For: Spectroscopy labs (FTIR, NMR, Raman, MS)

The format

What the format actually is

Where the data hides, and what a naive parser loses.

JCAMP-DX is the rare instrument-format success story: an open text standard that became the exchange format for IR, Raman, NMR, and mass spectra — Bruker, Agilent, Thermo and Shimadzu all export it.

The catch is the data-compression forms: SQZ (squeezed), DIF (differential) and DUP (duplicate) encode y-values in 60s/70s/80s ASCII ranges. A reader that only handles plain (PAC) form silently truncates most real files.

Header labels (##TITLE, ##XUNITS, ##YUNITS, ##XFACTOR) define the physics; ##DATA TYPE distinguishes INFRARED SPECTRUM from NMR SPECTRUM — one parser must dispatch on both.

Watch out

Vendor quirks that break naive parsers

Each of these has produced a silently wrong number in a real workflow.

Transmittance vs absorbance is only recorded in the YUNITS label — verify before any quantitative work.
Compound files (##LINK) chain multiple spectra in one file.
NMR JCAMP uses different data tables (peak tables vs FID) depending on the exporter.
Open source

Do it yourself in Python

We would rather you succeed with or without us. The open-source path:

jcamp (community package) handles PAC/SQZ/DIF/DUP for most IR/Raman files.
For NMR, nmrml2jcamp-style toolchains or vendor SDK exports are more reliable than generic parsers.
Convert to plain CSV once, at ingestion — the compressed forms are a transport encoding, not an analysis format.
Upload path

What happens if you use Matflow

The parser is only step one — the value is the review and the provenance that follow.

01

Upload on the Ingestion page

Excel, CSV, PDF, SDS images and instrument files are parsed into evidence-tagged rows — the original file is retained as provenance.

02

Review before promotion

Column roles and types are proposed for a reason; correcting a mislabeled column here is the highest-leverage five minutes in the workflow.

03

Promote to a governed dataset

The accepted rows become a versioned dataset any stage can use — every row keeps its source and extraction status.

Docs: ingestion & extraction · column roles · instrument parsers

Stop parsing by hand

Upload your .jdx / .dx file to Matflow and it lands as a governed, validated dataset — original file preserved as provenance, every column documented. Free tier, no card.