EDF Viewer
NEW!

EDF Viewer

Open EDF, EDF+ and BDF files in your browser: header fields, signal list, sample rates, annotations, per-channel statistics and a waveform viewer.

Biosignal Tools

Your recording is read entirely in your browser. Nothing is uploaded, stored or transmitted — EDF files often contain patient identifiers, and this tool keeps working offline once the page has loaded.

Drop an .edf or .bdf file here, or click to choose

Open an EDF, EDF+ or BDF recording, or load one of the examples.

Keywords

edf vieweredf file viewer onlineopen edf fileedf+ annotationsbdf file viewereuropean data formatpolysomnography file viewereeg edf reader

Need something else?

How to use

1

Drop an .edf, .bdf or .rec file onto the upload area, or click it to choose one. Only the header is read at first, so even a multi-gigabyte overnight recording opens instantly.

2

Read the summary: format and variant (EDF, EDF+C, EDF+D or BDF), how many data and annotation signals there are, total duration, start date and time, and the sample rates in use.

3

Check the validation warnings. The tool compares the header against the file size and the specification and tells you about truncated files, wrong record counts, invalid ranges or impossible dates.

4

Browse the waveforms. Pick the channels to display, choose a 5-second to 5-minute window, and page through with the buttons, the position slider or the arrow keys. Annotations appear as markers on the traces.

5

Export what you need: the full header as JSON, the signal table with statistics as CSV, the annotation list as CSV, or the samples of one channel in the current window as a time/value CSV.

Features

Complete Header Inspection

Every field of the 256-byte fixed header and of each 256-byte signal header is shown both as the raw text stored in the file and as the value the parser interpreted. EDF+ patient and recording identification is split into its subfields, with identifying fields flagged as PHI.

Validation Against the Specification

The declared header size is checked against the number of signals, the declared record count against the actual file size, digital and physical ranges against each other and the sample integer width, and the start date against the calendar. Each problem is explained in plain language.

EDF+ Annotations and Discontinuous Files

Time-stamped Annotation Lists are decoded from every EDF Annotations channel, including durations and UTF-8 text such as sleep stages, arousals or events. For EDF+D files the per-record start times are used, and gaps between records are drawn on the waveform.

Per-Channel Statistics and Clipping Detection

A single streaming pass over the data records computes minimum, maximum, mean and standard deviation in physical units for every channel, and counts samples that sit exactly at the digital limits — the usual signature of an amplifier or converter that saturated.

Fast Waveform Viewer for Huge Files

Only the records inside the visible window are read from disk, and each channel is reduced to a min/max envelope per screen pixel, so spikes stay visible and an eight-hour polysomnography scrolls as smoothly as a one-minute ECG.

Why Choose This Tool?

Your Recording Never Leaves Your Computer

EDF files carry more than waveforms: the header holds a patient identification field that often contains a name, a birthdate or a hospital code. This viewer reads the file with JavaScript inside your browser and sends nothing to any server. There is no upload, no temporary copy in the cloud and no account, and once the page has loaded it works without a network connection.

No Installation on Locked-Down Workstations

Desktop tools such as EDFbrowser, or scripting libraries such as MNE-Python and pyEDFlib, are excellent but need to be installed. On a hospital PC or a borrowed laptop that is often not an option. This tool runs in any modern browser, so a sleep technologist, a researcher or an integration engineer can check a file in seconds.

Answers the Questions You Actually Have About a File

Most of the time the question is not 'show me the EEG' but 'why does my software refuse this file', 'what sample rate is the SpO2 channel', 'is the recording truncated' or 'which annotations are in here'. The summary, warnings and signal table answer those questions directly, before you ever scroll a waveform.

Honest About Its Scope

This is an inspection tool, not a diagnostic system. It shows what is stored in the file exactly as the specification defines it, without re-filtering, re-referencing or scoring. That makes it a trustworthy reference for data quality checks, but it must not be used to make clinical decisions.

Understanding the European Data Format: How EDF, EDF+ and BDF Store Biosignals

The European Data Format, almost always shortened to EDF, is the most widely used open file format for long physiological recordings. Sleep laboratories export polysomnographies in it, EEG systems use it for routine and ambulatory studies, and public research databases distribute thousands of hours of signals as EDF files. Its success comes from the same property that makes it easy to inspect: a very simple, fixed layout that has barely changed since 1992.

A Short History

EDF was published in 1992 by Bob Kemp and colleagues as a common format for exchanging digitised polygraphic recordings between laboratories that used incompatible equipment. In 2003 Kemp and Olivan published EDF+, a backward-compatible extension that adds standardised text annotations, structured patient and recording identification, and support for recordings with interruptions. Around the same time the electrophysiology manufacturer BioSemi introduced BDF, a variant with 24-bit samples for high-resolution EEG. All three share the same header structure, which is why a single viewer can read them all.

The Header: Plain Text With Fixed Widths

Every EDF file begins with a 256-byte header written in printable ASCII characters. Each field has a fixed width and is padded with spaces:

  • Version (8 bytes): the text 0 for EDF, or the byte 255 followed by BIOSEMI for BDF.
  • Local patient and recording identification (80 bytes each): free text in EDF, structured subfields in EDF+.
  • Start date and start time (8 bytes each), written as dd.mm.yy and hh.mm.ss. Two-digit years from 85 to 99 mean 1985–1999, and 00 to 84 mean 2000–2084.
  • Number of bytes in the header, a reserved field that EDF+ uses for EDF+C or EDF+D, the number of data records, the duration of one data record in seconds, and the number of signals.

After this fixed part comes another 256 bytes per signal. The signal fields are stored column by column: first all the labels, then all the transducer types, then all the physical dimensions, and so on. For each signal the header records a 16-character label such as EEG Fpz-Cz, the transducer, the physical unit, the physical minimum and maximum, the digital minimum and maximum, a prefiltering description such as HP:0.3Hz LP:35Hz, and the number of samples in each data record.

Data Records and Sample Rates

The signal data follows the header as a series of data records of equal length. Each record holds a fixed number of samples for each signal, one signal after another. Samples are 16-bit two's complement integers stored little-endian in EDF and 24-bit integers in BDF. Signals do not need to share a sample rate: a record lasting 30 seconds might contain 3,000 EEG samples at 100 Hz, 6,000 ECG samples at 200 Hz and just 30 oxygen saturation samples at 1 Hz. A signal's sample rate is simply its number of samples per record divided by the record duration.

Because every record has the same size, any moment of the recording can be found with arithmetic instead of scanning: the byte offset of record n is the header size plus n times the record size. That is what allows this viewer to open a recording of several gigabytes and show any ten-second window almost instantly.

From Digital Values to Physical Units

The integers in the file are not microvolts or percentages. They are converted with a straight-line mapping defined by the four range fields of each signal: the digital minimum corresponds to the physical minimum and the digital maximum to the physical maximum. The gain is the physical range divided by the digital range, and every value in between is scaled linearly. If a header declares a digital minimum that is not lower than the digital maximum, or equal physical limits, the conversion is undefined, and this tool reports it instead of silently plotting nonsense.

The digital limits usually describe the extreme values the amplifier and converter could produce. When many samples sit exactly on one of those limits, the input most likely exceeded the measuring range — a loose electrode, a movement artefact or a gain set too high. The clipped column in the signal table counts those samples so you can spot saturated channels at a glance.

What EDF+ Adds

EDF+ keeps the original layout and adds conventions on top of it. The patient field becomes four space-separated subfields — hospital code, sex, birthdate and name — where spaces inside a subfield are replaced with underscores and an unknown value is written as X. The recording field starts with the word Startdate, followed by the full date, an administration code, the technician and the equipment.

The most important addition is the EDF Annotations signal. It is stored as a normal signal but contains text rather than samples: Time-stamped Annotation Lists, or TALs. Each TAL starts with an onset in seconds relative to the start of the file, optionally a duration, and one or more texts, separated by the bytes 20 and 21 and terminated with a zero byte. Sleep stages, arousals, apnoea events, stimulus markers and technician notes all live here. The first TAL in each record is a time-keeping entry with an empty text that states when that record starts.

Continuous and Discontinuous Recordings

An EDF+C file is continuous: record n starts exactly n times the record duration after the file start. An EDF+D file is discontinuous, which suits event recorders or evoked-potential studies that only store selected stretches. In that case the time-keeping annotation is the only reliable source for the time of each record, so this viewer reads it for every record and draws a marker where the recording skips forward.

Common Problems in Real Files

Because EDF is simple, many programs write it, and not all of them get every detail right. The problems met most often in practice are:

  • A record count of -1. The specification allows it while a recording is still running, but some files are never finalised. The real count can be recovered from the file size.
  • Truncated files. An interrupted copy or a full disk leaves a partial last record. Readers that trust the header then fail or read past the end.
  • Wrong header size. The declared number of header bytes must equal 256 times the number of signals plus one. When it does not, readers disagree about where the data starts.
  • Invalid dates and non-ASCII characters. Local characters in patient names or labels break strict parsers, and impossible dates such as 31 February appear more often than one would expect.

Each of these produces a specific, readable warning in the tool, which is usually enough to explain why another program rejects the file.

When Not to Use This Tool

This viewer is designed for inspection, quality control and troubleshooting. It does not apply montages, digital filters or sleep scoring, and it deliberately shows the data as stored rather than as a clinical review system would present it. For diagnostic reading use certified clinical software. For batch conversion or analysis of many files, a scripting library such as MNE-Python or pyEDFlib is the better fit — this tool is the fast way to check, one file at a time, what those scripts will actually receive.

Frequently Asked Questions

Is my EDF file uploaded to a server?

No. The file is read with JavaScript inside your browser and never leaves your computer. There is no upload and no cloud processing, and the tool keeps working offline once the page has loaded. This matters because the patient identification field of an EDF header frequently contains names, birthdates or hospital numbers.

Which formats are supported?

Standard EDF with 16-bit samples, EDF+ in both its continuous (EDF+C) and discontinuous (EDF+D) forms, and BioSemi BDF and BDF+ with 24-bit samples. Files with the .rec extension that contain EDF data also open. Other formats such as GDF, BrainVision or European EDF-like variants with different headers are not supported.

How large a file can I open?

Very large ones. The header is read first, and the data is then scanned in chunks of about 8 MB to compute statistics and collect annotations, so the whole file never has to fit in memory at once. The waveform viewer only reads the records inside the visible window. Recordings of several gigabytes work in current desktop browsers; on phones, very large files are limited by the device.

Why does the tool say the number of data records does not match?

The header declares how many data records the file contains, and the tool compares that with the number that actually fit in the file size. A mismatch usually means the file was truncated during copying or recording, or the writing software never updated the count. The viewer then uses only the complete records that really exist, and tells you how many bytes are left over.

What does the clipped column in the signal table mean?

It counts samples whose digital value is exactly the declared digital minimum or maximum, with the percentage of the channel's samples. A few clipped samples can be normal, but a high count usually means the signal exceeded the amplifier or converter range, for example because of a detached electrode or a movement artefact.

Where do the annotations come from?

From EDF+ and BDF+ annotation channels, labelled EDF Annotations or BDF Annotations. The tool decodes their Time-stamped Annotation Lists into onset, duration and text. Plain EDF files have no annotation channel. Some databases store the hypnogram in a separate EDF+ file that contains only annotations; open that file on its own to see the sleep stages.

Does the viewer filter or re-reference the signals?

No. Samples are converted to physical units exactly as the header defines and drawn as they are stored, with automatic vertical scaling per channel. No montage, notch filter or high-pass filter is applied, so what you see is what any other reader will get from the same file.

Can I export the data?

Yes. You can download the complete parsed header as JSON, the signal table with statistics as CSV, all annotations as CSV, and the samples of any single channel in the current window as a CSV with a time column. Text values are escaped so that a label beginning with an equals sign cannot run as a formula in a spreadsheet.

Can I use it for clinical diagnosis?

No. It is a technical tool for inspecting files, checking data quality and troubleshooting integrations. It is not a medical device and must not be used to diagnose or treat patients. Use certified clinical review software for that purpose.

Related Articles

Learn more