Skip to content

Performance browser and editor

Find and load content

Open #/performances. The browser shows folders and performance items, with Back, New performance and New folder controls where editable. Search finds performance/timeline content; pinning makes selected items easier to retrieve. Search exclusions and pin IDs are runtime settings, so check accepted setting results when changes do not persist.

Open an item and inspect the loaded name, timeline queue and runtime state. Loading into the viewer is not the same as saving a draft or starting execution. A running unsaved preview can differ from the file shown in the storage tree.

Playback controls

Control Meaning
Run/Play Start loaded/current draft content from selected position
Pause / Resume Change runtime playback state
Stop Stop this performance runtime
Autopause Toggle the runtime autopause setting
Loop UI/runtime playback loop behavior for the selected content
Timeline view toggle Switch full/compact representation where available
Zoom in/out Change timeline display scale
Timeline Play Run a selected timeline using its position/context

Moving the indicator/seek position is distinct from changing a node's start time. Global performance time and timeline-local time are translated by the controller; use the visible timeline context when resuming or seeking. Runtime state is authoritative; optimistic control overlays settle on acknowledgements/events.

Enter editing and save

  1. Open the intended stored performance and choose Edit.
  2. Modify timeline/node content; the header marks unsaved changes.
  3. Preview only after reviewing the node effects and prepared robot state.
  4. Choose Save to persist. Done leaves editing mode; do not assume it means a successful save.
  5. Handle concurrent-save conflicts by reloading/reconciling. Force-save only when deliberately overwriting another revision.

Navigation can prompt about unsaved changes. A browser refresh can discard local draft edits while a previously sent runtime action continues.

Timelines and nodes

The timeline queue supports adding/deleting timelines, enabling/disabling them and playing a selected timeline. Timed nodes have start time, duration and type-specific options. Selection tools include copy, paste at the indicator, select all, select left/right of indicator and delete selected nodes. Copied nodes are normalized relative to the earliest copied start time and pasted with new node identities.

Node type Useful fields
Speech Text, language, voice, speed, pitch, volume; duration estimation/preview
Pose Expression and magnitude/duration
Animation Gesture name, speed, magnitude
Arm Animation Arm animation name, speed, magnitude
Head Tilt Angle (radians in the editor), speed
LookAt / GazeAt Target/attention region, coordinates/crosshair, speed, interval, duration
Pause Timeout and pause behavior
Scene Scene selection
Settings Configuration node and values, with a schema-driven settings form

Editor ranges differ from TeleOps ranges. For example, animation magnitude sliders in performance editing can extend beyond 1; this is not a physical safety guarantee. Duration/preview results depend on current runtime services and selected libraries/providers.

Folder, move and delete behavior

New folder creates a stored folder. Move/rename uses a save-target/delete-source flow, not a guaranteed transactional filesystem rename. Deleting a directory performance removes its contents. Multi-timeline saves can remove omitted timeline files. Back up content before bulk restructuring.

Common content is identified by the current ID/tree storage convention, including shared IDs; do not rely on an older query parameter that the current route ignores. Use IDs returned by the live tree.

Revisions and multiple clients

Storage revisions detect concurrent saves. Runtime revision/content revision describe active execution, and transient ticks carry the runtime revision they belong to. Clients discard stale ticks and fetch /api/performances/current for new content. This prevents progress updates from being mistaken for full content synchronization.

If the editor and another tab disagree, compare loaded storage revision, dirty draft, current runtime payload and last command result. Avoid replaying Run after a dropped acknowledgement without checking current state.

Failure diagnosis

  • Empty browser: check selected robot root, permissions and performance files.
  • Failed save: inspect HTTP 409/400, writable mounts and assembly/content paths.
  • Runtime loaded but no action: inspect enabled timelines, node timing, required services and provider/catalog names.
  • Stuck progress: compare runtime revision with ticks and reconnect snapshots.
  • Speech duration wrong: check selected voice/provider and estimation response rather than manually changing every node blindly.

Evidence: webui/frontend/src/pages/{PerformancesPage.jsx,performanceUtils.js} and backend performance storage/adapter in head-ros-nodes/ros. Service and schemas.