Parse EyeLink eye tracker data from ASC files
Project description
syelink
Parse EyeLink eye tracker data from ASC files. For full documentation, see syelink.readthedocs.io.
Features
- Parse EyeLink ASC files into structured JSON
- Extract calibration, validation, recording, and gaze sample data
- Export gaze samples to CSV with optional raw pupil/CR data
- Visualize calibration and validation results
- Command-line interface for common tasks
- Support for binocular and monocular (left/right only) recordings
Installation
uv pip install syelink
Or install from source:
git clone https://github.com/mh-salari/syelink.git
cd syelink
uv pip install -e .
Quick Start
Convert an ASC file to JSON, text files, and CSV
uv run syelink convert data.asc
This creates:
data.json- All session data (calibration, validation, recordings, gaze samples)data_samples.csv- Gaze samples with timestamps, positions, pupil sizes, and optional raw data- Human-readable text files:
recordings.txt,calibrations.txt,validations.txt,metadata.txt
To export only specific formats:
uv run syelink convert data.asc --json # JSON only
uv run syelink convert data.asc --text # Text files only
uv run syelink convert data.asc --samples # CSV samples only
View session information
uv run syelink info data.json
Shows calibration/validation count, display info, and gaze sample statistics.
Export gaze samples to CSV
uv run syelink export-samples data.asc -o samples.csv
Generate validation plot
uv run syelink plot-validation data.json -i 0 -o validation.png
Generate calibration plot
uv run syelink plot-calibration data.json -i 0 -o calibration.png
CLI Commands
| Command | Description |
|---|---|
syelink convert <asc_file> |
Convert ASC file to JSON, text files, and/or CSV samples |
syelink info <data_file> |
Show session information (accepts ASC or JSON) |
syelink export-samples <data_file> |
Export gaze samples to CSV |
syelink plot-validation <json_file> |
Plot validation data |
syelink plot-calibration <json_file> |
Plot calibration data |
Options
convert
-o, --output- Output directory (default: same directory as ASC file)--json- Export JSON file only--text- Export text files only--samples- Export gaze samples CSV only- Without flags: exports all formats (JSON + text + CSV)
export-samples
-o, --output- Output CSV file path (default:<filename>_samples.csv)
info
- Shows calibration/validation counts, display info, and gaze sample statistics
plot-validation / plot-calibration
-i, --index- Calibration/validation index (default: 0)-o, --output- Output image path--show- Show plot interactively--target-image- Custom target image (validation only)
Python API
from syelink import parse_asc_file, SessionData
# Parse ASC file
session = parse_asc_file("data.asc")
# Access data
print(f"Display: {session.display_coords.width}x{session.display_coords.height}")
print(f"Calibrations: {len(session.calibrations)}")
print(f"Validations: {len(session.validations)}")
print(f"Gaze samples: {len(session.gaze_samples):,}")
# Save to JSON
session.save_json("data.json")
# Save gaze samples to CSV
session.save_samples_csv("gaze_samples.csv")
# Load from JSON
session = SessionData.load_json("data.json")
# Access validation errors
for val in session.validations:
if val.summary_left:
print(f"Left eye avg error: {val.summary_left.error_avg_deg:.2f}°")
# Access gaze samples
for sample in session.gaze_samples[:10]: # First 10 samples
print(f"Time: {sample.timestamp}, Left: ({sample.left_gaze_x}, {sample.left_gaze_y})")
Data Structure
The parsed data includes:
- Display coordinates - Screen resolution and boundaries
- Calibrations - Calibration points, polynomial coefficients, gains, results
- Validations - Target positions, gaze offsets, error metrics
- Recordings - Start/end timestamps for recording blocks
- Gaze samples - Timestamps, gaze positions (x, y), pupil sizes, and optional raw pupil/CR data
- Supports binocular (both eyes) and monocular (left or right only) recordings
- CSV export includes 32 columns: metadata, gaze data, and raw camera measurements
Examples
Check the examples/ directory for complete usage examples:
basic_usage.py- Parse ASC files, save to JSON/CSV/text, and load dataplot_example.py- Generate calibration and validation plots
Run examples with:
cd examples
uv run python basic_usage.py data/both_eyes/both_eyes.asc
uv run python plot_example.py data/both_eyes/parsed_output.json
Example data includes:
both_eyes/- Binocular tracking dataleft_eye/- Left eye only tracking dataright_eye/- Right eye only tracking data
Citation
Cite as:
Salari, M., Nyström, M., Niehorster, D. C., & Bednarik, R. (2026).
PyeLink and SyeLink: Open-source Python tools for low-level EyeLink experiment control and data parsing.
In Proceedings of the 2026 Eye Tracking Research & Applications (ETRA 2026) Late-Breaking Work. ACM.
DOI: 10.1145/3797246.3805844
License
MIT
Acknowledgments
This project has received funding from the European Union's Horizon Europe research and innovation funding program under grant agreement No 101072410, Eyes4ICU project.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file syelink-1.2.4.tar.gz.
File metadata
- Download URL: syelink-1.2.4.tar.gz
- Upload date:
- Size: 12.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9d709e4bbfa5dd79dc32ec562de03d9b1f6c9de322a02a366c23f26d4ef2ba8
|
|
| MD5 |
e8e4f898e9a824d4aa35f4f3a014bbf8
|
|
| BLAKE2b-256 |
f2970d82b613a6a5bf45f75760df4968856d029b21acdd831549570185df0aba
|
File details
Details for the file syelink-1.2.4-py3-none-any.whl.
File metadata
- Download URL: syelink-1.2.4-py3-none-any.whl
- Upload date:
- Size: 29.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25c86ebdbf816e631ea860ee7b1ac164265ef9a8a074e35562661502df489d86
|
|
| MD5 |
1f2f2e745d940a9edea36d419a298997
|
|
| BLAKE2b-256 |
a4d26871303fb5b67e2eefa933f007d2afc9b27a230dccd6710f68f32c6400bd
|