Input node

EEG File Import

Plays an EEG recording from a file (text table with .info sidecar, Grafit session, EDF / EDF+ / BDF) like a live device: MTL Data for the EEG nodes, a Signal for the Data Lab, markers as triggers, with the player transport.

Inputs

PortTypeDefault
FileThe recording to play: Choose… in the inspector, drop a file on the node, or cable a path (a Library's Path). The format is read from the bytes: a text table (+ .info sidecar), a Grafit session (.grafitraw / .csv / .edf + header.json), or EDF / EDF+ / BDF.string
EnableOff stops the transport and keeps everything loaded; the last frames stay in the rings.booltrue
PlayRuns the transport. After a Once — Stop end, Play again starts from the In Point.booltrue
SpeedPlayback rate: 1 = the file's real time, 2 = twice as fast, 0.5 = half. Negative plays backwards. Below 0.03 holds. Capped at 32×.float1.0
Time ModeTransport — plays with Play / Speed / Loop Mode. Scrub — the Scrub port IS the timeline (0…1 over the whole file), nothing plays on its own. Trigger — armed at the In Point, one Restart edge plays the region once (or loops it, by Loop Mode).int0
ScrubTime Mode = Scrub: position in the file, 0 = start, 1 = end. Moving it writes the frames it crosses into the rings, so a spectrum or a plot follows the scrub in either direction.float0
Loop ModeLoop — wraps from Out Point to In Point. Once — Stop — plays the region once and holds at the end (Finished pulses). Ping-Pong — bounces between In and Out.int0
In PointStart of the played region as a fraction of the file, 0…1.float0
Out PointEnd of the played region as a fraction of the file, 0…1.float1
RestartA rising edge jumps to the In Point (to the Out Point when Speed is negative) and, in Trigger mode, fires the one-shot.boolfalse
Sample Rate0 = automatic: the sidecar or header, else the timestamp column, else 250 Hz with a warning in Info. Any other value overrides the file's rate — cable a Constant to document a hand-set rate in the graph.float0
Remove DCSubtracts each channel's whole-file mean, so raw electrode offsets (tens of millivolts) do not flatten the plots. No filter, no phase shift; off shows the file as stored.booltrue
WindowSeconds of history the Signal output keeps for the Data Lab, 0.1…600. The EEG Data rings always hold 10 s.float10
Marker HoldHow long the Marker output keeps a code after its frame passes, in seconds. 0 = one frame (Marker Pulse is always one frame).float0
Start AtCable Sync Trigger's Fire Time (host seconds). The file waits at the In Point and starts exactly at that moment, between frames, so every Grafit with the same trigger plays the same sample together. Each new moment starts again from In.any—

Outputs

PortType
EEG Datastructure
EEG Data Astructure
EEG Data Bstructure
EEG Data Cstructure
EEG Data Dstructure
Signalstructure
Sample Rate0 = automatic: the sidecar or header, else the timestamp column, else 250 Hz with a warning in Info. Any other value overrides the file's rate — cable a Constant to document a hand-set rate in the graph.float
Channelsint
Labelsstructure
Timefloat
Progressfloat
Durationfloat
Playingbool
Finishedbool
Markerint
Marker Pulsebool
Markersstructure
Infostructure

How It Works

One node reads every EEG recording Grafit meets, by its bytes rather than by its name: a tab- or comma-separated text table with a .info sidecar beside it (a .easy recording), Grafit's own session folders (recording.grafitraw with header.json, and the recording.csv / recording.edf exports), and the European Data Format — EDF, EDF+ with its annotations, and 24-bit BDF. The inspector reports what it found ("EDF+ · 19 channels · 256 Hz · 12:34"). A 107 MB, 32-channel, 500 Hz text recording decodes in under half a second.

It plugs in where a live device does. MTL Data is the same dictionary the device node publishes, so EEG Plot, FFT EEG, Signal Window and Impedance take it unchanged, and MTL Data A…D repeat it in groups of eight channels for patches built around an eight-channel amplifier. It also publishes a Data Lab Signal, so Plot, Signal Window and every Analyze node take it with no bridge in between. The dictionary states its own microvolt scale, so a file shows true microvolts rather than raw converter counts.

The file feeds a rolling ring buffer in real time, exactly as a device would, and the ring's write head never rewinds — a seek, a loop wrap or a scrub only changes which frames come next, so every consumer downstream sees one continuous stream and never has to handle time going backwards.

Files stay where they are: the node keeps a path and a security bookmark, never the bytes, so a project stays small and a recording is never duplicated.

Parameters in Depth

File (string) — the recording. Drop an .easy, .edf, .bdf or .grafitraw file on the graph and the node appears already holding it; drop a session folder and it reads the raw file inside with header.json for names. Cable a Library node's Path here (Kind: EEG Recordings) to step through a folder of recordings.

Play (bool, default true), Speed (float, default 1.0) — the transport. Negative Speed plays backwards.

Time Mode (int, default Transport) — Transport runs on the node's own clock, Scrub hands position to the Scrub input (0…1 of the in/out range), Trigger plays from the start on each rising edge.

Loop Mode (int, default Loop) — Loop · Once — Stop · Ping-Pong. In Point and Out Point (0…1) cut the region that plays, and Restart is a rising-edge jump back to the in point.

Sample Rate (float, default 0 = automatic) — the rate is taken from the sidecar or the header first, then from a timestamp column, and failing that 250 Hz with a warning; any non-zero value here overrides all of it.

Remove DC (bool, default true) — raw electrodes sit at tens of millivolts, which would dwarf the signal on every plot. This subtracts each channel's whole-file mean: no filter, no phase shift, and it says so in Info.

Window (float, default 10) — seconds of history the ring holds, which is what EEG Plot and the spectral nodes see.

Marker Hold (float, default 0) — how long the Marker code stays up after an event, in seconds. Marker Pulse is always a single frame regardless.

Channels are yours: the Settings tab holds a table to include, rename and order them — Anatomical puts Fp, F, C, P, T, O front to back, As in file restores the recording's own order — and the outputs follow. The same tab holds Gain and Vref for the microvolt scale, and a Fill gaps switch for recordings with dropped frames.

Markers and Gaps

Markers are first-class. A trigger column, EDF+ annotations (distinct texts numbered in order of first appearance) and sample-counter gaps in Grafit's own files all become one stream: Marker is the current code (0 = none), Marker Pulse fires for exactly one frame at each event, and Markers carries the whole list for a timeline or a plot overlay. Cable Marker Pulse into a Do Once, a Counter or a Timer and the recording drives the patch.

Gaps are reported, not hidden. A sample counter that skips or a timestamp that jumps is counted as lost frames and marked in the marker stream. Settings' Fill gaps holds the previous frame across each gap so the time axis stays honest; with it off (the default) the gap is simply skipped, as the recorder skipped it.

Decoding stops at 2 GB of samples — roughly four and a half hours of 64 channels at 500 Hz — with a warning naming how much was read.

Typical Patches

  • EEG from file: EEG File Import → EEG Plot → Canvas — the recording scrolls exactly as a live device would, transport and all.
  • File spectrum: EEG File Import (MTL Data) → FFT EEG → EEG Spectrum → Canvas, for band powers in real microvolts squared.
  • Into the Data Lab: EEG File Import (Signal) → Signal Window → Plot 2D, or straight into the Analyze nodes for statistics, filters and correlations.
  • Event-locked visuals: Marker Pulse → Counter → Switch to change scene on every annotation in an EDF+ file.
  • A folder of sessions: Library (Kind: EEG Recordings) → Path → the node's File, with Next / Previous stepping through subjects.
  • Scrub for review: Time Mode Scrub with a fader or the Timeline into Scrub — drag through an hour of recording while the plot and the spectrum follow.

A recording has no electrodes to measure, so the Impedance node says so plainly rather than showing a meaningless number.

Open EEG File Import in the interactive catalog →

EEG File Import is one of 381 nodes in Grafit Pro.

Free download. Every feature for 7 days, no card. Then €99.99 once — or keep playing your projects as a Player.

More Input nodes