GazeForge¶
Auditable AI for eye-tracking research¶
Machine learning, computer vision, temporal event modelling, semantic AOIs, scanpaths, validation, and provenance — designed so AI can assist eye-tracking research without silently rewriting the empirical record.
Get started Frozen evidence For Gazepoint / GP3 PyPI DOI GitHub
The scientific contract¶
AI may propose, score, classify, embed, or flag. It must not silently alter the empirical record.
GazeForge keeps predictions, confidence, model identity, sampling-rate assumptions, review decisions, and benchmark provenance visible as ordinary research data.
-
Eye-event AI
Transparent I-VT and angular I-VT baselines, Random Forest classification, temporal-context MLPs, calibrated probabilities, confidence/coverage analysis, and event-level temporal matching.
-
Semantic AOIs
Human-defined and AI-proposed AOIs, optional OWL-ViT open-vocabulary detection, explicit review/correction, dynamic keyframes, bounded interpolation, and fixation assignment.
-
Scanpaths & sequences
Semantic scanpaths, motifs, TF-IDF/SVD embeddings, similarity, and clustering without requiring an opaque generative model.
-
Validation & provenance
Participant-held-out folds, leave-one-dataset-out validation, calibration, event-level metrics, evidence-aware dataset cards, fingerprints, and protected frozen reports.
Public alpha release¶
GazeForge 0.1.0a1 is the first public alpha release. It is available from PyPI and archived on Zenodo with version DOI 10.5281/zenodo.22650013. The release remains intentionally alpha: APIs may change while native 60 Hz/GP3-class validation, broader external benchmark qualification, and remaining dynamic-detection validation are completed.
First frozen empirical checkpoint¶
GazeForge now contains its first reviewed external evidence suite from Lund2013, pinned to an exact upstream commit and verified file-by-file before analysis. The primary lower-rate analysis derives a 60 Hz human-reference condition from the native 500 Hz expert labels and evaluates all methods on identical participant-held-out folds.
| Model | Balanced accuracy | Macro-F1 | Event-F1 |
|---|---|---|---|
| I-VT | 0.388 | 0.287 | 0.626 |
| RandomForest | 0.670 | 0.595 | 0.440 |
| ContextMLP | 0.679 | 0.649 | 0.535 |
The result is intentionally multi-criterion: ContextMLP leads sample-level multiclass classification, while I-VT leads event segmentation and boundary fidelity. The independent MN annotator sensitivity analysis reproduces that broad pattern. Human MN–RA agreement remains high from native 500 Hz (κ = 0.815) to derived 60 Hz (κ = 0.799).
Derived 60 Hz is not native GP3 validation
Lund2013 is a native 500 Hz corpus. These lower-rate results quantify a controlled derivation from expert annotations; they do not establish device-specific validity for a native 60 Hz Gazepoint GP3 recording. Native GP3-class expert-labelled event validation remains a major open evidence gate.
Inspect all verified Lund tables → · Read the validation interpretation →
A workflow designed for scientific review¶
vendor / raw gaze
│
▼
canonical gaze schema
│
├── QC anomaly flags ────────────────┐
├── event probabilities ─────────────┤
├── semantic AOI proposals ─ review ─┤
└── scanpath representations ────────┤
▼
reviewed analytic table
│
▼
statistics / models / report
The package does not infer diagnoses, emotions, personality, protected traits, or unsupported latent mental states from gaze.
Validation is visible, not implied¶
| Benchmark | Human reference | Native rate | Current role |
|---|---|---|---|
| Lund2013 | paired expert event labels | 500 Hz | frozen external event evidence available; native/derived human agreement, derived 60 Hz modelling, annotator and sampling/purity sensitivity |
| Hollywood2EM | sequential student labels with expert-corrected final labels | ≈500 Hz | reviewed aggregate source-token-held-out evidence available; token-disjoint only, not participant-disjoint; exact annotation-repository licence and token→participant mapping remain unresolved |
| Gaze-in-the-Wild | distributed trained human labellers | published 120 Hz acquisition; exact ProcessData nominal 300 Hz | frozen exact-distribution participant-disjoint evidence available on a derived 60-Hz task-agnostic grid; first-party RIT code now verifies task-separated extraction structure and ACE-DNV secondarily corroborates TrIdx 1–3, while the complete authoritative numeric TrIdx→task mapping, task-stratified validation, native-60-Hz/GP3 validity, acquisition-hardware cadence verification, and quarantine exit remain open |
| VISUS | one published curated dynamic-AOI annotation process involving two contributors | 60 Hz | infrastructure validated, empirical execution pending; current authoritative distribution and reuse terms unresolved |
GazeForge never silently upgrades evidence strength. Resampled lower-rate evidence remains labelled as derived, human-human agreement is not treated as an error-free ceiling, and unresolved coordinate or identity evidence blocks stronger cross-dataset claims. For Gaze-in-the-Wild, the reviewed participant-disjoint benchmark remains task-agnostic: first-party task-separated extraction structure and secondary numeric corroboration do not substitute for a complete authoritative TrIdx→task mapping, and TrIdx 4 → Tea_Making is not inferred by elimination. Published 120 Hz acquisition provenance also remains distinct from the official 300 Hz processed-stream target and from the actual analysis cadence from timestamps, which is separately resolved before constructing the derived analysis grid; for VISUS, two contributors to one curation process are not treated as two independent annotation streams.
See the full validation matrix → · Gaze-in-the-Wild task-mapping evidence → · Gaze-in-the-Wild source-resolution status → · VISUS source-resolution status → · See frozen empirical evidence →
Quick start¶
Install the exact public alpha from PyPI:
python -m pip install "gazeforge==0.1.0a1"
For development or commit-pinned research work:
git clone https://github.com/stefanosbalaskas/GazeForge.git
cd GazeForge
python -m pip install -e ".[dev]"
pytest
from gazeforge import ai_flag_anomalies, canonicalize_gaze, simulate_gaze
raw = simulate_gaze(n_participants=3, n_trials=2, samples_per_trial=180)
gaze = canonicalize_gaze(raw, sampling_rate_hz=60)
flagged = ai_flag_anomalies(gaze.data, sampling_rate_hz=60)
Continue with the getting-started guide →
Current project phase¶
GazeForge is public alpha research software with its first frozen external empirical tranche. Version 0.1.0a1 is published through PyPI Trusted Publishing and archived on Zenodo, but a stable scientific-performance claim still requires broader independent validation.
- CI spans Python 3.10, 3.12, and 3.14 on Linux, Windows, and macOS.
- Documentation is built strictly and deployed through GitHub Pages.
- External benchmark files are not silently bundled or relicensed.
- Frozen benchmark reports carry deterministic SHA-256 fingerprints and are revalidated before website display.
- The highest-priority event-model evidence gap is a native 60 Hz/GP3-class expert-labelled corpus.
Scientific governance → · Benchmark evidence → · Roadmap on GitHub →