Skip to content

Export Formats

Khandelwal edited this page Oct 15, 2026 · 11 revisions
Format Layout Best for
Wide CSV one row per frame: frame, P1_x, P1_y, P1_visible, P2_x, … (blank cells = untracked) Excel, quick plotting
Sparse TSV one row per tracked (frame, point): frame point x y visible smallest files, pandas/R
DeepLabCut CSV 3 header rows (scorer, bodyparts, coords), x, y, likelihood per landmark, one row per frame DeepLabCut, Anipose, pose notebooks
DeepLabCut multi-animal CSV 4 header rows (scorer, individuals, bodyparts, coords): one individual per animal in LAYERS (body parts = the part names), and the Scene points as DeepLabCut's unique body parts under single. Needs at least one animal with points DeepLabCut multi-animal projects
SLEAP analysis CSV track, frame_idx, instance.score, <part>.x, <part>.y, <part>.score: one track per animal, plus a scene track for the Scene points. Needs at least one animal with points SLEAP, sleap-io scripts
DLTdv8 xypts CSV pt1_cam1_X, pt1_cam1_Y, …, one row per frame, NaN where untracked, top-left origin, first pixel = 1 (DLTdv8's own convention) + a *_pointnames.csv sidecar naming the points (the real names, CSV-quoted) and stating the convention — those two files and nothing else. A separate bottom-left origin entry writes the older DLTdv5 / Argus Clicker variant DLTdv / easyWand 3D workflows
ALL CAMERAS — DLTdv8 xypts (two or more cameras) every camera in one file, pt1_cam1_X, pt1_cam1_Y, pt1_cam2_X, …, landmarks matched by name; row k = frame k of the reference camera (from 0), each camera sampled through its offset, NaN where a camera has no data; top-left, first pixel = 1; the sidecar also names the rows and each camera's video DLTdv / easyWand / Argus / your own triangulation
MATLAB .mat tracks (T×N×2) with NaN where untracked or marked hidden, visibility, manual, occluded, confidence, point_names, point_kind, point_source, point_spec, event_*, note_*, fps, segment_* (presence, score, bbox, centroid, area, 32-point midline), skeleton_*, and pixel_convention — these pixels count from 0 (OpenCV); add 1 for MATLAB / DLTdv8 direct MATLAB analysis
3D landmarks CSV frame, name_X, name_Y, name_Z, … per reference frame (NaN where < 2 cameras) + a *_xyzres.csv sidecar with each position's residual (px), camera count, and how far each camera disagrees (name_camK_px) 3D positions; the same layout as DLTdv's xyzpts
3D kinematics CSV a first line starting with # (unit, fps, the smoothing used — read it with comment='#'), then frame, time_s and per landmark the smoothed X Y Z, Vx Vy Vz speed, Ax Ay Az acc (project units per second), with the smoothing cutoff (chosen by residual analysis, or yours); stretches shorter than 12 frames keep their positions with blank velocity and acceleration; plus a plain-English *_report.txt with hand checks velocities and accelerations
Mesh (File → Export → Mesh of This Frame…) the carved volume hull of one frame as OBJ or PLY, in the calibration's world units Blender, MeshLab, MATLAB stlread/readSurfaceMesh
Everything every format of the export dialog with one base name — the DLTdv8 convention once (no bottom-left copy), ALL CAMERAS only with two or more cameras, the 3D files only once there is a reconstruction (the mesh is exported from File → Export → Mesh of This Frame); the events / segment files once, beside the wide CSV. Runs in the background with a count and a Cancel; a format that cannot be written (a .mat open in MATLAB) does not stop the others, and the failures are listed at the end —

Kept up to date at every save: File → Export → Keep Exports Up to Date… ticks formats (DLTdv8 per camera or every camera for 3D, DeepLabCut, MATLAB, wide CSV, the 3D xyzpts) that are then written into the project folder's exports/ after every save — only the files whose data changed, in the background — so the latest tracks are always ready for the other program.

Silhouettes (Ctrl+E → Silhouette outlines, JSON polygons, or Silhouette masks, one PNG per frame) are written one file (or folder) per animal when there are several, named after the animal.

Safe to open in a spreadsheet: no landmark, event or animal name may start with =, +, - or @ — Excel and other spreadsheets would run such a cell as a formula. A name typed like that is refused; one that arrives in a file (a project or tracks from someone else, a skeleton template) loses those characters. Long exports (Everything) run in the background, counting the files, and can be stopped between files.

When an animal has a silhouette, the wide CSV, DeepLabCut CSV and sparse TSV exports also write a *_segment.csv sidecar (frame, present, score, bbox, centroid, area, mid0_x … mid31_y: the 32-point body midline for curvature / undulation analysis). The DLTdv exports (one camera, bottom-left, ALL CAMERAS, xyzpts) write only their points file and its _pointnames.csv: the events and segment files go with the other exports, not beside xypts files.

In a multi-camera project the suggested file names carry the camera's name (myproject_cam2_tracks.csv, …_overlay.mp4), so one camera's files never overwrite another's. 3D points are always exported in the same world as the cameras of File → Export → Calibration… (and 3D → Set World Axes… lets you choose that world). File → Export → Overlay Video… writes an MP4 that plays at the video file's own frame rate, or at the Speed you choose against real time (2x, 4x, 5x, 10x, 20x slower or any factor; a high-speed clip can also be sped up to real time, skipping frames evenly). The video says how much it is slowed down ("4x slower" under the frame number); the time shown stays in real seconds. In a project with several cameras, Views → All shown cameras together writes ONE video of the cameras shown in the window, laid out as the window shows them (the same grid and order, every cell the shape the views have on screen), each camera under a title bar with its name, frame and sync offset, at the frame its sync offset and rate match to the working camera's (a camera not recording at that instant shows a dark tile saying so); the picture fits 4K.

Coordinates are pixels in the native video resolution, x right, y down, with the centre of the top-left pixel at (0, 0) (OpenCV's convention — your clicks are stored that way too); only the DLTdv exports add 1. A cell marked hidden (Shift+X) exports blank, like an untracked one. visible = 0 means the model believes the point is occluded on that frame (its position is still predicted). Silhouette-derived landmarks have data wherever the animal's silhouette exists; their confidence is the segmentation model's presence score mapped to 0–1. A point that leaves the frame produces no coordinates at all (blank cells / no rows) until it is re-placed. A region group exports exactly like a point (its fitted center). confidence (in the .mat) is the model's per-frame track-correctness score — the same signal the timeline colors red. If you marked events, the same three exports also write a *_events.csv sidecar (name,start_frame,end_frame,note,author, then one note row per frame note); the .mat embeds them directly.

Bringing tracks in from another program: File → Import → Tracks… reads a DeepLabCut CSV (the one it writes when it analyses a video), a SLEAP CSV (SLEAP 1.x's analysis CSV, or any of sleap-io's layouts), a DLTdv / Argus xypts CSV (one camera or all of them) or another Kinetrace project's tracks (one landmark's tracks/<landmark>.csv, or an older project's tracks.csv) into the camera on screen. The format is recognised from the file itself; if no video is open, the program asks for it first. Points are matched by name (a new name becomes a new point), frames the file has no position for keep what they had, pixel conventions are converted (DLTdv counts from 1; the _pointnames.csv sidecar says when y counts from the bottom), DeepLabCut's likelihood and SLEAP's scores become the confidence, and SLEAP instances you labelled by hand arrive as hand-placed. The message afterwards says how many positions were written (only what went in is counted), names any landmark it left as it was because that landmark is taken from the silhouette or is a ball marker, and says how many were left out (outside the picture, or on frames the video does not have). One animal per video: multi-animal files are refused with the reason. Ctrl+Z undoes an import into one camera.

Continuing a point that left the frame: when it comes back into view, select it in the right panel, press N, and click its new location (this continues the same point — no new point is created, because the selected point has no position on that frame), then press Track. Press Esc to deselect first if you wanted a brand-new point instead.


← Human bodies  |  Home  |  Working with other programs →

Clone this wiki locally