Skip to main content

Annotate โ€” Keyboard Reference

:::tip TL;DR

  • All annotation is keyboard-first: one hand on keyboard, one on pointing device
  • Tool keys are single-key with no modifiers: P (point), B (box), T (temporal event)
  • Number keys 1โ€“6 quick-set the type of the selected event
  • ? toggles the in-app shortcut cheat sheet :::

The Annotate tool is built for speed. Learning the shortcuts below is the single highest-leverage action for annotation throughput. (Authoritative source: the keydown handler in src/App.tsx and src/components/ShortcutModal.tsx.)


Global Controlsโ€‹

KeyAction
SpacePlay / Pause
JReverse playback (press again while reversing to ramp 2ร— โ†’ 4ร—)
KPause
LForward playback (press again while forwarding to ramp 2ร— โ†’ 4ร—)
โ†Frame step backward
โ†’Frame step forward
Shift + โ†Jump 10 frames backward
Shift + โ†’Jump 10 frames forward
Cmd/Ctrl + ZUndo
Cmd/Ctrl + Shift + ZRedo
Cmd/Ctrl + OLoad project
Cmd/Ctrl + SSave project
Cmd/Ctrl + EExport dataset
?Toggle the shortcut cheat sheet
EscClose the shortcut modal, else deselect + return to the select tool

Tool Selectionโ€‹

Single-key with no modifiers. Pressing a tool key activates it; Esc returns to the select tool.

KeyToolBehavior
PPointClick to place a point annotation (x, y, time)
BBoxClick-drag to draw a bounding box (x1, y1, x2, y2, time)
TTemporal EventIf an event is currently open, T closes it; otherwise it activates the event tool
EscSelect / deselectReturns to the select tool and clears the current selection

There is no skeleton/pose (S) or polygon/mask (G) tool. The Tool type is select | point | box | event.


Event Type Quick-Setโ€‹

With a temporal event selected, press a number key to set its type (only types allowed by the current context apply):

KeyEvent type
1serve
2shot
3bounce
4point_end
5net_hit
6out

Annotation Editingโ€‹

ActionShortcut
Move annotationClick + Drag
Delete selectedDelete / Backspace

All edits are non-destructive โ€” undo/redo history (Cmd/Ctrl+Z / Shift+Z) and a dirty-state indicator track every change.


Context Selectionโ€‹

Context is set via the in-app Context modal (UI), not a keyboard shortcut. It controls which event types are valid.

ContextLabel
matchCompetitive point-based play
practicePractice rally or solo on-court practice
training_off_courtWall drills, ball machine, gym
highlight_clipEdited broadcast or short clip
unknownTennis-like but ambiguous

Context โ†’ Allowed Eventsโ€‹

The UI automatically enables and disables tools based on selected context. Attempting to annotate a disallowed event type is blocked.

ContextAllowed eventsDisallowed events
matchserve, shot, bounce, net_hit, out, point_endโ€”
practiceshot, bounceserve, point_end
training_off_courtshotbounce, serve, point_end
highlight_clipshot, point_endbounce, serve, net_hit, out

:::warning Why this matters Annotating a serve in a practice context would produce invalid training data. The UI enforces these rules โ€” tool keys for disallowed events produce no action. :::


Annotation Workflow (Speed Run)โ€‹

Typical flow for annotating one rally:

  1. Space โ€” play video
  2. K or Space โ€” pause on event frame
  3. โ† / โ†’ โ€” fine-tune to the exact frame
  4. Press a tool key (P, B, or T) โ€” activate the tool
  5. Click / drag to place the annotation
  6. With an event selected, press 1โ€“6 to set its type
  7. Cmd/Ctrl+S to save; repeat from step 1

Next Stepsโ€‹