You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit fd31f2d
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: CHANGELOG.md
+4-1Lines changed: 4 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
9
9
10
10
### Added
11
11
12
-
-**ID correspondence between views (3-D projects).** A new **Views** page (page 10, under the Sessions row of the sidebar, reached by Next/Back between Sessions and Calibration; 3-D projects only) records which session is the top view and which the side view, pairs them by two session-name patterns with a `key` group (with an ⓘ help and a live "catches N sessions" line) or by hand, and maps each top-view fish to a side-view fish: by a "Same IDs" tick, or in a table with two highlighted track plots. The project file gains `SessionRef.view_role`, `view_pairs` and `mode.pairing`; `mode.id_map` is gone (projects that contain it still load). It never blocks Next, and 3-D projects still cannot be run.
12
+
- **Fusion of top and side views (3-D projects).** The Views page gains a **Fusion** section for the selected pair with a status line and **Set up fusion…**. The dialog shows the side view with two draggable lines for the water surface and the tank floor, fields for both rows, the tank height (default 20 cm), the shared horizontal axis (top-view x or y) with Flip, and the frame offset (hidden and fixed at 0 for "One video, two panels"), a live summary (shared frames, fused fish, positions outside the water column, agreement) and **Suggest offset**, which scans ±5 s around 0 (about 3 s on a 1-hour, 5-fish recording; needs a calibrated top view, otherwise it is disabled with a hint). The fusion keeps the fish matched in the pair on the frames both views have and adds a depth (0 = surface, 1 = floor; positions outside the column become empty and are counted). The cameras are assumed to be at right angles; the two views' horizontal positions are compared in cm and a warning shows when they disagree by more than 10% of the top-view range (needs a calibrated top view). Frame rates must match. New `FusionSettings` on each pair (`ViewPair.fusion`), `PreprocessedSession.depth`, `Engine.fuse_pair`, `fuse_all` and `suggest_offset`. The Views status warns "Fusion setup needed for …" and never blocks. 3-D projects still cannot be run: the 3-D metrics step is not built.
13
+
-**Note on provenance hashes:**`project_hash` now includes each session's (empty) `panel` field, so the provenance hash of an existing project changes once after this update. Results are not affected.
14
+
- **Panels: one video, two views (3-D projects, "One video, two panels" layout).** A session can now have a *panel*, the rectangle of the video it covers (`SessionRef.panel`; projects without it load unchanged). Reading a session with a panel keeps the animals that have at least 50% of their positions inside it, sets positions outside to NaN and reports coordinates relative to the panel (its top-left is (0, 0), the video size becomes the panel size), so previews, runs and the CLI all see the panel. The same folder with a different panel is a different session, and the panel is part of the preprocessing cache key. The Views page gains a **Panels** section (that layout only) with **Split into panels…** (one tracker run on the whole frame becomes `<id>__top` and `<id>__side` plus a hand-made pair), **Set panel…** (two tracker runs on one video, each limited to one panel) and **Clear panel**. The panel editor has the presets Left | Right and Top | Bottom with a split slider, exact x, y, width and height fields, a preview over the tracker's background image (or the first video frame, or the tracks), and a per-fish table that flags fish under 90% inside as *low* and under 50% as *left out*. Changing or clearing a panel resets the fish map of the pair that holds the session. The zones backdrop, calibration and preview show the cropped panel. Zones are still one set per project, and per-view pixel-scale calibration is not part of this change. 3-D projects still cannot be run.
15
+
- **ID correspondence between views (3-D projects).** A new **Views** page (page 10, under the Sessions row of the sidebar, reached by Next/Back between Sessions and Calibration; 3-D projects only) records which session is the top view and which the side view, pairs them by two session-name patterns with a `key` group (with an ⓘ help and a live "catches N sessions" line) or by hand, and maps each top-view fish to a side-view fish: by a "Same IDs" tick, or in a table with two highlighted track plots. The project file gains `SessionRef.view_role`, `view_pairs` and `mode.pairing`; `mode.id_map` is gone (projects that contain it still load). The fish map is what counts: a pair is matched when its map is not empty. **Pair by pattern** keeps the pairs it made earlier that the patterns still produce, with their matching, removes the ones they no longer produce, and skips pairs you made or changed by hand (ticking Same IDs or changing a fish makes a pair yours). In 3-D projects the Sessions row of the sidebar shows the worse of the Sessions and Views statuses, with the Views message in its tooltip. It never blocks Next, and 3-D projects still cannot be run.
13
16
-**Session calibration works beyond idtracker.ai.** The Calibration screen describes the mode per tracker, with an ⓘ note linking to each tracker's documentation, and disables it when no session can supply a scale. DeepLabCut, SLEAP and Ctrax raw files take an optional **Scale (pixels per cm)** import option.
14
17
-**`trx.mat` reader (Ctrax / FlyTracker / JAABA).** Built from the documented layout, unverified against a real sample. `pxpermm` becomes the session scale.
15
18
-**Average or median of several idtracker.ai length calibrations.** The average (idtracker.ai's own `length_unit`) stays the default.
|**C**|**Side-view depth**: a camera-view setting and a continuous vertical-position metric from ordinary 2-D side recordings | nothing unmerged, no 3-D data |
| F |**Panel split**: one video with the top and side views in two panels becomes two sessions (a panel rectangle per session, panel-relative coordinates). Done; see [the spec](2026-10-09-panel-split-design.md)| E |
14
15
| G |**ID correspondence**: view roles, pairing top and side sessions (regex or by hand), fish mapping between views, a Views step. Done; see [the spec](2026-10-09-id-correspondence-design.md)| E |
15
16
| A | Read 3-D tracker files (Anipose pose-3d CSV, DLC-3D). Metrics run on a chosen plane and z is stored (D-031 as written) |`feat/native-units` merged |
16
17
| B | Metrics that use z: 3-D speed and path length, vertical position, 3-D neighbour distance. **Amends D-031**| A for data, C for the vertical-axis setting |
17
-
| D | Fuse top and side recordings into one 3-D session| B's data model, frame sync, identity matching across views|
18
+
| D | Fuse top and side recordings into one 3-D session. Done; see [the spec](2026-10-09-fusion-design.md)| F and G (done); compute stays blocked until B|
18
19
19
-
**Order: C, A, B, D.** A moves first if real 3-D files turn up. C goes first because no data
20
-
of any kind exists yet, it is testable on synthetic tracks, and it creates the project-level
21
-
camera-view setting that B reuses.
20
+
**Order: C, F/G/E and D are done; B then A remain.** A moves first if real 3-D files turn up. C went
21
+
first because no data of any kind existed, it is testable on synthetic tracks, and it created the
0 commit comments