← Back to all sparks
A

aniread

ANALYTICS
Velocity3.8

R package aniread by animovement — release notes from GitHub.

aniread stops asking you to know which tracker wrote the file

animal trackingfile formatsauto-detectiondata importpose estimationr package
Current state
aniread is the reader package of the animovement suite, importing output from pose-estimation, centroid and behavioural-scoring tools into aniframe objects. Through 0.5.x the work was per-reader: get_supported_sources() exposed the format list programmatically, read_boris() added behavioural events, and Octron and BORIS each got targeted fixes. 0.6.0 changes the shape of the interface itself — read_dataset() takes any supported file through one entry point and detect_source() works out which software wrote it by inspecting contents, not just the suffix.
Where it's heading
The package is moving from a set of named readers to a dispatcher with the readers behind it, and the hard part is being handled rather than hidden: twelve sources emit .csv, so detection narrows by suffix then inspects content, and DeepLabCut and LightningPose files are structurally identical so it returns the combined 'deeplabcut/lightningpose' rather than guessing wrong. The honesty extends to gaps — optional-dependency detectors are skipped when the package is absent and the error names what was skipped, and SLEAP's csv suffix was withdrawn because auto-detection would have routed files into a reader that cannot read them. Alongside this, read_trackball() was substantially repaired for real two-sensor Bonsai captures, where alignment, clocks, corrupt rows and gap filling were each independently wrong.
Prediction
Expect the withdrawn SLEAP csv suffix to return once read_sleap() gains support, since the changelog explicitly parks it against issue #87. Further detectors are the natural next increment, and the sensor-local-clock warning class suggests trackball alignment is not finished.

Recent moves

  1. 16h ago

    v0.6.0 — one entry point for every format

    ⚡ SPARK

    The interface pivots from eleven named readers to one dispatcher: read_dataset() routes any supported file to the right reader, and detect_source() identifies the writing software from file contents. This sits on top of the per-reader consistency work of 0.4.0 rather than replacing it — standardised output is what makes a single entry point meaningful.

    View source ↗
  2. 1mo ago

    get_supported_sources(); Octron gap and BORIS index fixes

    get_supported_sources() made the format list machine-readable so downstream packages could stop hard-coding it — in hindsight the groundwork for 0.6.0's dispatch, since a table of source/reader/suffix is what detection narrows against. The Octron and BORIS fixes are the per-reader correctness work that characterised this phase.

    View source ↗
  3. 1mo ago

    read_boris() imports behavioural events as anievent objects

    read_boris() extended the package beyond trajectories into behavioural events, returning an anievent rather than an aniframe. That second return type is why 0.6.0's read_dataset() documents itself as returning whatever the underlying reader returns rather than promising one class.

    View source ↗
  4. 3mo ago

    read_octron() property selection, speed and a silent-recycling fix

    Octron-specific work: selective reading of region properties, a speed gain on large multi-segment files, and a fix for silently recycling mismatched value and area columns. Typical of the narrow, one-reader-at-a-time phase that preceded the 0.6.0 restructure.

    View source ↗
  5. 3mo ago

    y-origin standardised to bottom-left across eleven readers

    ⚡ SPARK

    Standardises the coordinate origin across eleven readers: sources recording an image top-left origin are reflected so the returned aniframe is bottom-left, fixing plots that came out upside-down without manual reorientation. The change is breaking and requires aniframe 0.5.0 for the set_origin() and set_y_height() API.

    View source ↗