Vendor-neutral infrastructure for reproducible eye-tracking and multimodal process-data research.
eyeprocess transforms heterogeneous eye-tracking, pupillometry, behavioural, and biometric exports into validated, analysis-ready process data. It combines vendor-neutral harmonization with first-class Gazepoint support, explicit quality and provenance controls, gaze/AOI/scanpath analysis, pupillometry and biometric workflows, interoperability, and psychometric/process modelling.
Release channels (verified 22 October 2026): CRAN 0.11.1 (published 2026-09-28) · GitHub stable 0.12.1. The repository master contains 0.12.1; the earlier development identifier 0.12.0.9000 is no longer current.
Website · CRAN · Reference · Articles · GitHub · Releases
| Area | Capabilities |
|---|---|
| Import and harmonization | Vendor-aware readers, generic mappings, canonical schemas, explicit timebase and coordinate handling |
| Validation and provenance | Source inspection, schema coverage, quality audits, source fingerprints, validation corpora, provenance manifests |
| Gaze and AOI analysis | Trial construction, AOI registration and assignment, fixation summaries, scanpaths, transitions, visual diagnostics |
| Censored gaze latency | Survival-ready event/censor tables, Kaplan-Meier curves, clustered/frailty Cox, Weibull/log-normal AFT, diagnostics and sensitivity |
| Pupil and biometrics | Pupil preprocessing, binocular handling, physiological synchronization, quality-aware feature derivation |
| Process and psychometric modelling | IRT, response-time models, multimodal process measurement, validation and sensitivity infrastructure |
| Interoperability and storage | Eye-Tracking-BIDS, Arrow/Parquet workflows, conversion bridges, auditable storage contracts |
The development surface includes a vendor-neutral detector-sensitivity workflow that carries event-detection uncertainty all the way to the scientific model:
raw gaze → detector → events → AOIs → derived features → identical model → robustness report
Key interfaces include define_event_detector_spec(), run_detector_multiverse(), match_detected_events(), propagate_detector_to_features(), run_detector_inference_multiverse(), and report_detector_multiverse().
The workflow supports I-VT, I-DT, a transparently labelled adaptive-velocity reference detector, a REMoDNaV command-line bridge, external detector callbacks, and vendor-supplied events. It retains zero-event trials, never converts all-missing gaze to zero dwell, errors on ambiguous AOI membership unless a rule is chosen explicitly, requires an explicit model engine, and keeps non-converged/failed branches visible.
See the Event-Detector Multiverse article and the detector-multiverse reference section.
AOI boundaries are treated as an analytical specification rather than a fixed truth. The AOI robustness workflow can dilate, erode, translate, jitter, and anisotropically expand declared geometry in pixels or degrees of visual angle; remap samples/fixations with explicit ambiguity and missingness; recompute complete AOI feature cells; propagate the same analyst-specified model; retain failed/non-converged branches; and summarize assignment, coefficient, interval, convergence, and model-N stability.
The website now provides a complete route from planning to reviewer-ready evidence:
Core functions include create_aoi_perturbation_grid(), run_aoi_sensitivity_analysis(), estimate_aoi_assignment_stability(), assess_aoi_inference_stability(), report_aoi_sensitivity(), and the four AOI plotting functions. Robustness frequencies are descriptive sensitivity summaries, not probabilities that an AOI definition or scientific conclusion is true.
The current development branch adds three conservative diagnostics that make timing uncertainty and validation scope explicit without changing the package's existing synchronization or modelling engines:
pupil_latency_sensitivity() compares sustained-threshold, maximum-slope-tangent, and piecewise-breakpoint pupil onsets and reports estimator spread, signal diagnostics, and latency resolvability instead of presenting one onset as hardware- or algorithm-independent.event_marker_qc() audits whether independent channel offsets corroborate a nominal event and reports consensus offset and uncertainty. It is event-plausibility QC only: it does not synchronize clocks, correct drift, or modify timestamps.validation_ladder() separates acquisition QC, analytical QC, construct checking, within-person evidence, and held-out-person generalization. A generalization claim cannot be marked supported without held-out-person validation.The development branch also adds censored gaze-latency survival analysis, retaining valid never-inspected trials as right-censored observations and distinguishing clustered Cox from latent participant frailty. A companion evidence-verification worked example demonstrates time to first source/evidence AOI entry with explicit censoring, diagnostics, sensitivity models, and reporting. Before freezing an analysis, use the survival reproducibility checklist.
See the Measurement accountability article and the measurement-accountability reference section.
The development branch adds a vendor-neutral data-quality subsystem for target-referenced accuracy, RMS sample-to-sample and spatial-SD precision, BCEA, realized sampling behavior, and data loss. The canonical report keeps these dimensions separate, records metric-specific units and provenance, and treats thresholds as review rules rather than automatic exclusions.
validation <- simulate_gaze_quality_calibration(samples_per_target = 8)
quality <- create_gaze_quality_report(
validation,
by = c("profile", "target_id"),
valid = "valid",
missing_reason = "missing_reason",
nominal_sampling_hz = 60
)
report_gaze_quality(quality)
The synthetic validation profiles deliberately separate accuracy, precision, irregular sampling, and missingness. Timing diagnostics distinguish long observed intervals from the estimated number of nominal samples represented by those gaps. See the Standardized Data Quality guide and the Data Quality plot gallery and reporting clinic.
The current development branch also adds a vendor-neutral preparation contract for repeated-measures mediation with gaze or other trial-level process variables. prepare_multilevel_mediation_data() preserves every trial, separates within- and between-participant exposure and mediator components, distinguishes genuine zero gaze from unobserved or poor-quality trials, audits trial support and missingness, and carries preprocessing/event/AOI/quality provenance forward.
The preparation layer does not fit a mediation model. Bayesian inference belongs in gp3bayes; eyeprocess owns decomposition, observation semantics, quality flags, and model-ready trial structure. Serial mediators and moderators are prepared with add_multilevel_mediation_component() so statistical backends do not reimplement the scientific decomposition.
See the Trial-level multilevel mediation article and the mediation-preparation functions in the reference index.
| Ecosystem | Initial interface | Support level |
|---|---|---|
| Gazepoint Analysis |
read_gazepoint(), read_gazepoint_folder()
|
First class |
| Gazepoint Biometrics | read_gazepoint_biometrics() |
First class |
| Generic CSV/TSV | read_eye_generic() |
Universal mapping |
| Tobii Pro Lab | read_tobii() |
Dedicated |
| Pupil Labs Neon | read_pupil_neon() |
Dedicated |
| Pupil Labs Core | read_pupil_core() |
Dedicated |
| EyeLink ASC | read_eyelink_asc() |
Dedicated |
| EyeLink Data Viewer | read_eyelink_report() |
Explicit mapping |
| EyeLink EDF | read_eyelink_edf() |
Local EDF2ASC bridge |
| SMI BeGaze ASCII | read_smi() |
Legacy dedicated |
| Custom adapters | register_eye_adapter() |
Extensible |
Support level and empirical validation are deliberately kept separate. The existence of an adapter is not treated as proof of production compatibility with every exporter or software version.
The timestamp-interval diagnostics article includes two original R-generated figures contrasting declared sampling and observed intervals. These demonstrations are synthetic and are not empirical device-calibration, causal, or clinical evidence.
Channels: GitHub 0.12.1 (22 October 2026); CRAN 0.11.1 (latest independently checked). The GitHub and CRAN source versions are not interchangeable.
The current CRAN release is 0.11.1, published on 28 September 2026:
install.packages("eyeprocess")
The canonical CRAN record is https://CRAN.R-project.org/package=eyeprocess and the package DOI is https://doi.org/10.32614/CRAN.package.eyeprocess.
The GitHub release line is newer than CRAN. To install the exact v0.12.1 release:
install.packages("remotes")
remotes::install_github("stefanosbalaskas/eyeprocess", ref = "v0.12.1")
For the current repository master (version 0.12.1):
# remotes::install_github("stefanosbalaskas/eyeprocess")
install.packages("eyeprocess", repos = c('https://stefanosbalaskas.r-universe.dev', 'https://cloud.r-project.org'))
Optional modelling backends are deliberately not mandatory dependencies. Install only the engines required for a specific analysis.
library(eyeprocess)
x <- read_gazepoint_folder(
"data/P001",
include = c("gaze", "fixations", "events", "biometrics")
)
validate_eye_dataset(x)
audit_timebase(x)
audit_signal_quality(x)
x <- build_trials(x, start_events = "TRIAL_START", end_events = "TRIAL_END")
x <- register_aois(
x,
new_aoi("prompt", x = 0, y = 0, width = 0.50, height = 1),
new_aoi("options", x = 0.50, y = 0, width = 0.50, height = 1)
)
x <- assign_aois(x)
x <- derive_all_features(x)
plot_scanpath(x, trial_id = x$intervals$trial_id[1])
plot_pupil_timeseries(x, trial_id = x$intervals$trial_id[1])
For generic exports, Tobii, Pupil Labs, EyeLink, SMI, real-export validation, preprocessing, storage, and complete Gazepoint workflows, see the articles.
eyeprocess connects behavioural responses with process evidence while keeping measurement assumptions explicit. The multimodal measurement ladder is:
M0 response → M1 + RT → M2 + gaze → M3 + pupil → M4 + trait-conditioned latent response-process state
Examples of public interfaces include fit_irt(), fit_explanatory_irt(), fit_accuracy_rt(), fit_process_irt(), multimodal_m3_spec(), fit_multimodal_m3(), multimodal_m4_spec(), and fit_multimodal_m4().
M4 remains REVIEW / evidence-gated. The availability of an estimator or model interface is not treated as evidence of unrestricted confirmatory validity. M4 states are model-based statistical response-process states; state labels do not by themselves establish cognitive strategy, attention, engagement, cognitive load, effort, emotion, guessing, misconduct, comprehension, or another psychological construct.
The 0.11.1 CRAN release preserves an auditable validation contract across data import, transformations, storage, modelling, and reporting. It was published on CRAN on 28 September 2026 after the CRAN remediation cycle, and is available from the canonical package page and package DOI above. The newer v0.12.1 GitHub release is not yet the CRAN version; report the exact installed package version and source.
The package also provides infrastructure for real-export validation, grouped validation, parameter recovery, simulation-based calibration, leakage checks, sensitivity analysis, model-evidence audits, benchmark generation, and reproducible reporting.
Detailed implementation and validation records are maintained in:
eyeprocess does not equate fixation with attention, dwell time with difficulty, pupil dilation with cognitive load, rapid response with guessing, physiological variation with a named mental state, or a data-derived process factor with a psychological construct.
Useful audit interfaces include:
interpretive_warnings()
analysis_readiness(x)
provenance_manifest(x)
For the citation associated with the installed package, run:
citation("eyeprocess")
packageVersion("eyeprocess")
Studies should report the exact package version and, when relevant, the source commit and modelling backend used. The canonical CRAN package DOI is 10.32614/CRAN.package.eyeprocess.
MIT License.