ISHNE Holter Viewer
NEW!

ISHNE Holter Viewer

Open ISHNE Holter ECG files in your browser: header, leads, checksum check, beat annotations, heart-rate trend, basic HRV and a waveform viewer.

Biosignal Tools

Your Holter files are read entirely in your browser. Nothing is uploaded, stored or transmitted — ISHNE headers hold the patient's name, ID and date of birth, and this tool keeps working offline once the page has loaded.

Drop an ISHNE ECG file here — and its annotation file too, if you have one — or click to choose

Open an ISHNE 1.0 Holter recording (with or without its ANN annotation file), or load one of the examples.

Keywords

ishne holter viewerishne file formatopen ishne fileholter ecg file viewerishne annotation fileecg holter data viewer onlinethew holter dataholter hrv sdnn rmssd

Need something else?

How to use

1

Drop an ISHNE ECG file onto the upload area, or click it to choose one. Drop the matching annotation file too if you have it: files are recognised by magic number, not extension. Only the header is read first, so even a 48-hour Holter opens at once.

2

Read the summary tiles: number of leads, sampling rate, duration, start date and time, pacemaker code, file size and, if annotations were loaded, the number of beats.

3

Check the validation warnings. The tool recomputes the CRC-CCITT checksum, compares the declared ECG size and offsets with the real file size, and flags truncated files, impossible dates, unknown lead or pacemaker codes and annotation files that do not match the ECG.

4

Browse the waveform. Choose the leads to show, a window from 5 seconds to 5 minutes, and move with the buttons, the slider or the arrow, Home and End keys. Beat labels are drawn over the traces, and clicking a beat in the annotations table jumps straight to it.

5

Export what you need: the complete decoded document as JSON, the leads table as CSV, the beat list with RR intervals as CSV, or the samples of one lead in the current window as CSV.

Features

Header and Checksum Validation

Every field of the 512-byte fixed header is shown as the raw stored value and as its meaning: lead codes, lead quality, amplitude resolution, sex, race, pacemaker type and all dates in their European day-month-year order. The stored CRC-CCITT checksum is compared with one recomputed over the header, and the variable-length comment block is displayed as text. Name, subject ID and birth date carry a PHI badge.

Lead Table With Saturation Counts

For each stored lead you get its position, the lead name decoded from its code, the quality code in words, and the amplitude resolution in nanovolts and microvolts. A single streaming pass computes minimum, maximum, mean and standard deviation in millivolts, and counts samples stuck at -32768 or +32767, the usual sign of saturation or a lead fault.

Beat Annotations, RR Intervals and Heart Rate

Load the companion annotation file and every beat appears in a filterable table with its time, beat label and meaning, secondary label, RR interval in milliseconds and instantaneous heart rate, plus a count of beats per label. Click a row and the waveform jumps to that beat.

Heart-Rate Trend and Basic HRV

A trend chart shows the mean heart rate for every minute of the loaded annotations. From normal-to-normal intervals the tool computes mean heart rate, minimum and maximum minute heart rate, SDNN, RMSSD and pNN50, skipping intervals interrupted by timeout records. The figures describe the annotations you loaded; they are not a diagnosis.

Fast Waveform Viewer for Long Holters

The file is read in chunks and only the visible window is decoded, so a day-long recording scrolls as smoothly as a short excerpt. The viewer is the same engine used by the EDF Viewer on this site, with channel selection, windows from 5 seconds to 5 minutes, keyboard navigation and CSV export of the visible window.

Why Choose This Tool?

Holter Data Stays on Your Computer

An ISHNE header has dedicated fields for the patient's first and last name, subject ID and date of birth. This viewer reads the file with JavaScript inside your browser and never uploads it. There is no server-side processing and no account, and once loaded it works offline.

Opens Files Other Tools Choke On

Real ISHNE files are not always written by the book. Some writers skip the checksum, some store the ECG size per lead and others as a total, and interrupted copies leave truncated files. Instead of refusing the file, the viewer reads what can be read and explains each inconsistency in plain language, so you know exactly what to tell the sender.

Nothing to Install, No Scripts to Write

Libraries such as ishneholterlib for Python or read_ishne.m in the HRV toolbox for MATLAB are great for batch work but need an environment and code. This tool runs in any modern browser: the quickest way to answer 'what is in this file?' on a hospital workstation, a research laptop or a colleague's computer.

Clear About What It Is and Is Not

This is a technical inspection tool for researchers, Holter technicians and integration engineers. It is not a Holter analysis system, it does not detect or classify beats, and it must not be used to make clinical decisions.

Understanding the ISHNE Holter Format: Structure, Annotations and Common Pitfalls

Holter monitors record one or two days of continuous electrocardiogram while a patient goes about normal life. For years every manufacturer stored those recordings in its own proprietary format, which made it hard for researchers to pool data from different systems. The ISHNE Holter Standard Output File Format was created to solve that problem.

Where the Format Comes From

The format was defined by a task force of the International Society for Holter and Noninvasive Electrocardiology (ISHNE) after meetings with Holter manufacturers, and published by Fabio Badilini in the Annals of Noninvasive Electrocardiology in 1998, with the stated aim of balancing simplicity and flexibility. The Telemetric and Holter ECG Warehouse (THEW) at the University of Rochester distributes research Holter datasets in this format, one of the main reasons researchers still meet ISHNE files today.

File Layout

An ISHNE recording is a single binary file made of five consecutive parts:

  • Magic number (8 bytes): the ASCII text ISHNE1.0.
  • Checksum (2 bytes): a CRC-CCITT value covering the header.
  • Fixed header (512 bytes) with all the descriptive fields.
  • Variable-length block: free ASCII text for comments, whose size is declared in the header.
  • ECG block: the samples themselves.

Because 8 + 2 + 512 = 522, the variable block normally starts at byte 522 and the ECG block at 522 plus the size of the variable block. The header also stores both offsets explicitly, and this viewer checks that they agree.

The Fixed Header

The header begins with four 4-byte integers: variable block size, ECG size in samples, offset of the variable block and offset of the ECG block. Then come the file version, the subject's first name, last name and ID, sex and race codes, and three dates — birth, recording and file creation — each stored as three short integers in European day-month-year order, followed by the start time as hour, minute and second.

The signal description follows: the number of stored leads and three arrays of twelve values. The lead specification codes the lead type (1 generic bipolar, 2 to 4 bipolar X, Y and Z, 5 to 10 the limb leads I to aVF, 11 to 16 the precordial leads V1 to V6, 17 to 19 the ES, AS and AI leads). The lead quality goes from 1, good quality permanently, through intermittent or frequent noise (2 and 3) to lead disconnection below or above 10% (4 and 5). The amplitude resolution gives how many nanovolts one digital unit represents. Unused slots are set to -9. The header ends with a pacemaker code (0 none to 5 dual chamber bipolar), the recorder type, the sampling rate in hertz and proprietary, copyright and reserved areas.

The Checksum

The two bytes after the magic number hold a CRC-CCITT checksum (polynomial x16+x12+x5+1, preset 0xFFFF), an algorithm taken from the SCP-ECG standard. It covers the header from offset 10 up to the byte before the ECG block, including the comment block. Some writers never compute it, so this viewer reports a mismatch as a warning and keeps reading.

How the Samples Are Stored

The ECG block contains signed 16-bit little-endian integers, multiplexed: one sample of lead 1, one of lead 2 and so on up to lead N, then the next sample of lead 1. All leads share one sampling rate, there is no compression, and a physical value is simply the stored integer multiplied by the lead's resolution. Only continuous recordings are covered. The original paper mentions a proposal to reserve -32768 as a lead-fault flag, but it was never a rule, so the viewer counts samples at both extremes and leaves the interpretation to you.

No compression means large but easily seekable files. The paper's own arithmetic: 24 hours of three leads take about 66 MB at 128 Hz, 103 MB at 200 Hz and 206 MB at 400 Hz. That is why this viewer never loads the whole ECG block into memory.

The Annotation File

Version 1.0 left beat annotations out. A companion format published by the THEW project fills the gap: magic number ANN 1.0, exactly the same header as the ECG file, a 4-byte position of the first annotation in samples, then 4-byte records. Each record holds a primary label (N normal, V premature ventricular contraction, S supraventricular premature or ectopic beat, C calibration pulse, B bundle branch block beat, P pace, X artefact, ! timeout, U unknown), a secondary label, and the samples elapsed since the previous annotation as an unsigned 16-bit value. Gaps longer than 65,535 samples are bridged with timeout records.

Because records store distances rather than absolute times, one corrupted record shifts every later beat. That is why the viewer checks that the annotations do not run past the end of the ECG and that both headers match.

ISHNE Compared With EDF, WFDB, SCP-ECG and DICOM

  • EDF and EDF+ use a text header, fixed-length data records and a sample rate per signal, with EDF+ annotations inside the same file. ISHNE is narrower: ECG only, one rate, annotations in a second file.
  • WFDB, PhysioNet's format, splits a record into a text header, signal files in several encodings and separate annotation files with a richer label set.
  • SCP-ECG is aimed mainly at short resting ECGs, organised in sections with optional compression.
  • DICOM waveform objects embed ECG samples in a DICOM dataset with full patient and study context, suited to hospital archives.

Ambiguities in Real Files

The most frequent concerns the ECG size field: some writers store samples per lead, others the total across all leads. The viewer tests both against the file size and tells you which matches. Other recurring issues are checksums that were never computed, unused lead slots not set to -9, and recordings cut short by an interrupted transfer.

Three Practical Scenarios

Research data exchange. A group receives Holter recordings from a data warehouse or partner centre. Before writing analysis code, an investigator confirms lead configuration, sampling rate and duration, checks that annotation files are present and plausible, and exports the leads table for the data dictionary.

Checking an export before sending it for analysis. A Holter technician verifies that the duration is complete, that no lead is flagged as disconnected or heavily saturated, and that the name fields no longer contain identifying data the sharing agreement says must be removed.

Debugging a converter. An engineer writing an ISHNE exporter gets pointed straight at typical mistakes: a checksum over the wrong byte range, a variable-block size that does not match the ECG offset, an ECG size matching neither interpretation, or annotation distances longer than the recording. Samples in the wrong byte order show up at once as noise and implausible lead statistics.

When Not to Use This Tool

Do not use it to read a Holter for clinical purposes: it does not detect beats, classify arrhythmias, measure ST segments or produce a Holter report, and its HRV figures are only as good as the annotations you load. HRV from a short excerpt is not comparable with the 24-hour values described by the 1996 Task Force of the European Society of Cardiology and the North American Society of Pacing and Electrophysiology. For diagnosis use certified Holter software; for hundreds of files, a scripting library.

Frequently Asked Questions

Is my Holter file uploaded to a server?

No. Both the ECG file and the annotation file are read with JavaScript inside your browser and never leave your computer. There is no upload and no server-side processing, and the tool works offline once the page has loaded. This matters because the ISHNE header has fields for the patient's name, subject ID and date of birth.

How do I open the annotation file together with the ECG?

Select or drop both files at the same time. The viewer identifies each one by its magic number — ISHNE1.0 for the ECG, ANN 1.0 for the annotations — so file extensions do not matter. It then checks that the annotation header matches the ECG in number of leads, sampling rate and recording date and time, and warns you if it does not.

How large a file can I open?

Full-length recordings. The file is read in chunks and only the samples inside the visible window are decoded, so the whole ECG block never has to sit in memory. Twenty-four and forty-eight hour Holters of several hundred megabytes open in current desktop browsers; on phones the limit depends on the device.

Why does the tool say the checksum does not match?

The stored value differs from the CRC-CCITT checksum recomputed over the header, from byte offset 10 up to the start of the ECG block. That can mean the header was modified or damaged, but many writers never compute the checksum at all. The viewer reports it as a warning and continues.

Why is there a warning about the ECG size?

Writers disagree on whether the ECG size field counts samples per lead or total samples. The viewer compares both interpretations with the actual size of the ECG block and says which one matches. If neither matches, the file is probably truncated or has trailing bytes, and the warning shows how many samples are missing or extra.

How are SDNN, RMSSD and pNN50 calculated?

From the loaded beat annotations only. The tool takes RR intervals where both beats are labelled N (normal), skips intervals interrupted by timeout records, and computes the standard deviation of those intervals (SDNN), the root mean square of successive differences (RMSSD) and the percentage of successive differences above 50 ms (pNN50). Values from a short excerpt are not comparable with 24-hour reference values.

What do the counts at -32768 and +32767 mean?

They are the extreme values a signed 16-bit sample can take. Many samples at those limits usually indicate a saturated amplifier or a disconnected electrode. The original ISHNE paper mentions a proposal to use -32768 as a lead-fault marker, but it was never a binding rule, so the viewer counts both values and lets you interpret them.

Can I use it for clinical diagnosis?

No. It is a technical tool for inspecting files, checking data quality, supporting research and debugging integrations. It is not a medical device and must not be used to diagnose or treat patients. Use certified Holter analysis software for clinical reporting.

Learn more