ResearchOS/Wiki

Capture and route

Take a photo at the bench, caption it, and send it straight into the experiment it belongs to. Capture and route is the difference between a phone full of unlabeled gel photos and a notebook where every image is already filed under the right experiment, in the right tab, the moment you walk away from the bench.

The everyday problem the Companion solves is the camera roll. You photograph a gel, a plate, a colony, a whiteboard, and three days later you are squinting at twenty near-identical images trying to remember which experiment each one was for. Capture and route fixes that at the source. When you take the photo, you also say where it goes, and the laptop files it there for you.

The Notebook tab is the bench capture hub. Take a photo, write a quick note, scan a page, or upload from the camera roll.

Capture, caption, route

A capture is three small decisions made in a row, all on the phone, all at the bench.

  1. Capture. Take a new photo with the camera, upload one you already have on the phone, or pick multiple from the camera roll. The image queues locally first, so you can shoot even with no signal and it uploads once the phone is paired and online.

  2. Caption. Add a short caption while you still remember what you are looking at ("Colony PCR, lanes 1 to 8, expecting 1.2 kb"). This is the line you will be glad you wrote when you find the image later.

  3. Route. After the photo uploads, the Notebook Chooser sheet opens. If an experiment is open on the laptop, you see a fast-path alert first: choose Lab Notes, Results, or More notebooks... to open the full chooser. The full chooser lists every notebook you can write to (your own, shared with edit permission, or a 1:1 notebook). Picking a notebook or entry files the photo there. Choosing Send to inbox instead leaves the photo in your laptop inbox to file later.

How routing reaches the right experiment

When you pick a destination, the phone sends the laptop a sealed route-capture command alongside the image. That command tells the laptop which experiment and which tab to file the photo into, so the laptop does the filing rather than you doing it by hand later. The command is sealed end-to-end to your phone's key, so the relay carries the instruction without being able to read it, and the photo itself is deleted from the relay the instant the laptop pulls it down.

Bulk upload from the camera roll

Uploading multiple photos at once opens the bulk upload screen (app/bulk.tsx). A grid shows every photo you picked, all selected by default. You can deselect any you do not want to send, write one caption that applies to every selected photo, and optionally annotate the first selected photo. Tapping Send to lab queues each selected photo through the same outbox pipeline a single capture uses. If the phone is not paired, they wait in the outbox until it is.

Annotate without touching the original

Some images are worth marking up: circling the product band, arrowing the colony you picked. The Companion lets you draw an annotation overlay on a capture, and that overlay is saved as a separate .annot.json file next to the image rather than painted into the photo. The original capture stays byte-for-byte the file your camera produced, and the markup stays re-editable and removable. This is the same sidecar model used by image annotation on the laptop, so a capture you annotate on the phone reads correctly everywhere the image appears.

Offline retry and backoff

Captures queue on the phone when the relay is unreachable. A failed send retries automatically up to two times, with increasing backoff (the row reads "Waiting for connection" while it retries). After two automatic attempts the row settles into a manual Retry link so you can try again when you have signal. Swipe a row left to delete it from the phone outbox; if the capture already reached the laptop, that copy stays there.