Labeling Instances¶
An instance is one animal's pose on one frame: a position (and a visible/not-visible flag) for each node in the project's skeleton.
Adding an instance¶
| How | What it does |
|---|---|
| Cmd+I / Ctrl+I | Add an instance using the current placement method |
| Labels ▸ Add Instance | Same, from the menu |
| Right-click ▸ Add Instance | Pick the placement method for this one instance |
| Ctrl-drag a node of an existing user instance | Clone it, pose and all (Ctrl on macOS too, not Cmd) |
Placement methods¶
Labels ▸ Instance Placement Method decides the starting pose of a new instance. Getting this right saves a lot of dragging.
| Method | Starting pose |
|---|---|
| Best | Centered template, offset to avoid overlapping existing instances (default) |
| Template | The skeleton's stored template pose, unmodified |
| Force Directed | Centered, then iteratively pushed away from existing instances |
| Random | Random node positions |
| Copy Prior Frame | The pose from the previous labeled frame |
| Copy Predictions | The predicted instance already on this frame |
Once you have a model, Copy Predictions turns labeling into correction.
Editing¶
- Drag a node to move it. Clicking or dragging a node marks it complete (green).
- Mark a whole instance complete: Shift-click any of its nodes, as in SLEAP.
- Move the whole pose: hold Alt and drag any node, or press Shift+A to select every node of the selected instance, then drag one of them.
- Rotate the selected instance: hold Alt and scroll.
- Select several nodes: Alt+Shift-click a node to add it to the selection, or remove it; drag on empty canvas to draw a selection box (hold Shift to add to the selection).
- Add missing nodes: double-click a user instance to give the nodes it's missing a position (for example after adding a node to the skeleton). They're placed from your other labeled instances, as non-visible nodes to drag into place, as in SLEAP.
- Merge two instances: when one animal ended up as two partial instances, select the one to keep and choose Labels ▸ Merge Instance (Shift+M). It takes the other instance's nodes for any the selected one is missing, then removes the other. With more than two user instances on the frame, pick the one to merge in: right-click ▸ Merge Instance with, or Cmd/Ctrl-click a second row in the Instances panel (the first row picked is kept).
- Right-click an instance's body, or empty canvas, for the context menu: add, copy, paste, delete or merge instances, assign a track, and mark the frame negative. Right-clicking a single node flips its visibility instead.
- Delete or Backspace deletes the selected instance when all of its visible nodes are selected.
- Node placement mode (Shift+N, or View ▸ Node Placement Mode) is for clicking nodes down one at a time rather than dragging a pre-posed template. Click to place the current node, Tab / Shift+Tab to pick another, and Esc to leave.
Visibility¶
Nodes that are genuinely occluded should be marked not visible rather than parked somewhere plausible — a guessed point is training signal that says the part is there, which it isn't.
- To mark a node non-visible, right-click it, or press V with the pointer over it. Do the same again to make it visible.
- With several nodes selected, V sets them all to the same state: visible, unless more than half of them already are, in which case all become non-visible.
- Shift+V toggles View ▸ Show Non-Visible Nodes: whether non-visible nodes are drawn at all.
-
View ▸ Display controls how much of the hidden geometry you see:
Mode Shows Manual Whatever you toggled by hand Only selected (with hidden points) Just the selected instance, hidden points included All instances, visible points only Every instance, visible points only All visible + selected hidden points Everything, plus the selected instance's hidden points
Selecting¶
| Action | Shortcut |
|---|---|
| Select next instance | ` |
| Select next / previous instance and zoom to it | Shift+Down / Shift+Up |
| Clear selection | Esc |
Clicking an instance on the canvas selects it; the Instances panel lists the current frame's instances with their track, type, and score.
Copy and paste¶
| Action | Shortcut |
|---|---|
| Copy instance | Cmd+C / Ctrl+C |
| Paste instance | Cmd+V / Ctrl+V |
| Copy instance track | Cmd+Shift+C / Ctrl+Shift+C |
| Paste instance track | Cmd+Shift+V / Ctrl+Shift+V |
Copying a track copies the identity assignment rather than the pose — see Tracks.
Deleting¶
| Action | Shortcut |
|---|---|
| Delete selected instance | Cmd+Backspace / Ctrl+Backspace |
| Delete instance and its track | Cmd+Shift+Backspace / Ctrl+Shift+Backspace |
| Delete predictions in a dragged area | Cmd+K / Ctrl+K |
The Labels menu has the bulk options:
| Menu item | Deletes |
|---|---|
| Delete Predictions on Current Frame | Every prediction on this frame |
| Delete Predictions… | Predictions matching one filter: score threshold, frame range, on user-labeled frames, max instances per frame, track, or instance type |
| Delete Predictions from Area… (Cmd+K / Ctrl+K) | Predictions inside a rectangle you drag |
| Delete All Predictions… | Every prediction in the project, after a confirm |
Working with predictions¶
Predicted instances are drawn distinctly from user labels (View ▸ Color Predicted Instances changes how). They are suggestions until you accept them.
| Action | How |
|---|---|
| Accept one prediction | Double-click it; hold Shift to mark every node complete too |
| Accept all on this frame | Cmd+Shift+A / Ctrl+Shift+A, or Labels ▸ Accept All Predictions on Current Frame |
| Accept all in the project | Labels ▸ Accept All Predictions |
Accepting converts a PredictedInstance into a user-labeled Instance — which
is what training actually consumes.
Negative frames¶
Labels ▸ Mark Frame as Negative (N, or right-click the video) records that a frame genuinely contains no animals. Marking a frame that still has instances asks first, then removes them (undo brings them back), and adding an instance to a negative frame unmarks it. A negative frame shows a red border with a "Negative Frame" label on the video and a red tick on the seekbar, and it counts toward the status bar's labeled total, e.g. "Labeled: 6 (2 negative frames)".
Why mark them? A model only ever trained on frames with animals can "see" animals in empty frames: a shadow, bedding, an empty corner. Negative frames are examples of what nothing looks like, which teaches a model not to detect animals there.
A negative frame is not the same as an empty frame. An empty frame is one where you deleted every instance: it says nothing, and training skips it. A negative frame is a deliberate statement that there are no animals. That's why marking one asks before removing instances: marking a frame with an animal on it would teach the model the wrong thing.
Training doesn't use negative frames yet
sleap-nn can train on negative frames, but only when its
use_negative_frames setting is on, and it's off by default. The Training
panel doesn't turn it on yet, so marking frames negative records them in
the project (and in the Label Quality Check) but doesn't
change training today.
Undo¶
Every edit goes through a command with a frame-level snapshot, so Cmd+Z / Ctrl+Z and Cmd+Shift+Z / Ctrl+Shift+Z work across the whole editing surface — not just node drags.
Hints¶
Labels ▸ Show Hints During Labeling puts contextual tips on screen as you work. Help ▸ Labeling Tips… opens the full list any time.