Web UI

The web UI does everything the terminal does, plus video review of every trajectory.

tandem ui                    # http://127.0.0.1:8787, or the next free port
tandem ui --port 9000 --no-open

The UI needs no Node, CDN, GPU or robot. ui.host, ui.port and ui.open_browser set its defaults. Ctrl-C lets running sessions park the arm and finish merging. A second Ctrl-C quits at once and leaves the arm where it is.

  • Trajectories: click a plot to seek every video. A merged trajectory's ribbon shows who drove each stretch. Shaded bands mark the frames π₀.₅-DROID's training drops as idle.
  • Collect: the same controls as the terminal. Anything the plan leaves out is shown before the arm moves, and you can review the trial right at the label prompt.
  • Profiles: the paper's five and your own. You can create one from a task or as a copy, edit it, and see what its planner receives.
  • Settings: the rig (robot, cameras, calibration, each planner's machine settings), credentials, paths, catalogs, runtime status and tandem doctor.

Flags: -p/--port, --host, --no-open, and --profile (open on a profile and make it active).

HTTP API

curl http://127.0.0.1:8787/api/rig
curl -X PATCH http://127.0.0.1:8787/api/rig -H 'Content-Type: application/json' \
     -d '{"robot.host": "NUC_ADDRESS", "cameras.external_2": null}'
route returns or does
GET /api/planners[/{name}], GET /api/executors Same as planners list\|info --json and executors list --json. Add ?profile=P for another profile.
POST /api/planners/{name}/use\|default, POST /api/executors/{name}/use Same as planners use (optional body: profile, options), planners default and executors use (optional body: profile).
GET /api/profiles/{name} The profile, plus planner_view.receives (as profile show --planner). Each card in GET /api/profiles has a planner_summary line.
POST /api/profiles Same as profile create. Body {name, prompt} uses the paper's settings; {name, from} copies a profile (prompt optional). POST /api/profiles/builtin adds the paper's five, as init does.
GET /api/rig, PATCH /api/rig Same as rig show --json, and rig set for several keys at once.
GET /api/sessions/{id} The session summary and its last 500 log lines.
GET /api/media/{profile}/{id}/{file} A trajectory video, served with HTTP Range. A proxy in front must pass Range headers.

The API can't install a planner. Each catalog row includes the install_command to run instead.

TANDEM · Princeton Robot Planning and Learning Back to top