Import from LabArchives
The 7-step wizard that turns a LabArchives Offline Notebook ZIP into native ResearchOS tasks, plus the bulk-sort screen for cleaning up after.
Page-as-task
The mental model for the importer is one rule. Each LabArchives page becomes one ResearchOS task. Every entry on that page (text, headings, attachments, embedded images) is collapsed into the task's Lab Notes body. The page's newest entry timestamp becomes the task's start date, the task is marked complete, and its task_type is set to experiment. You can re-classify pages that aren't experiments later using the bulk-sort screen, covered below.
Notebook folders become projects. By default each folder lands as a new project named <folder> (imported), but the wizard lets you point folders at projects you already have or leave them unassigned.
You start from Settings → LabArchives → Open import…, which opens the wizard as a modal. If you haven't produced an Offline Notebook ZIP yet, hop over to Exporting from LabArchives first.
The 7-step wizard
The wizard runs a fixed sequence of steps. You can back out at any point before the apply phase starts. The step header in the modal shows where you are.
- Choose format. The wizard supports the LabArchives Offline Notebook ZIP. PDF and Chrome-print formats are on the roadmap and show as Coming soon cards on this step. Pick the ZIP option and continue.
Step 1, only the Offline Notebook ZIP path is live right now. - Upload ZIP. Drag the file you downloaded from your LabArchives confirmation email onto the drop zone, or click to pick it from disk. The wizard validates that the file is a
.zipand warns if it's larger than 500 MB (the parser holds the archive in browser memory, so multi-gigabyte notebooks can blow past the per-tab heap). - Preview notebook. The wizard parses the ZIP and shows what it found, including folder count, page count, entry count, attachment count, plus a collapsible tree of the notebook structure. If LabArchives left some inline images as URLs rather than bundling them, an amber banner here calls that out so you know to expect the Fetch images step later.
- Map projects. One row per top-level notebook folder. Each row offers three decisions. Create new project (the default, with a suggested name you can edit), Use existing (pick from your live project list), or No project (the pages on that branch land unassigned). Project mapping is covered in more depth below.
- Fetch images (optional). If the notebook has inline images that LabArchives stores as URLs (and you're not in demo mode), the wizard offers a step to bring those images in. Two paths are available, both credential-free. One is a generated DevTools script you paste into a browser tab where you're already signed in to LabArchives, or a manual drop zone where you drag the image files you've downloaded elsewhere. You can also skip this step and rehydrate later from the post-import banner on any imported task. See the LabArchives integration page for the full picture of how Form-B images work.
- Importing. A progress bar walks through the two write phases, creating new projects first, then writing one task directory per page. Leave the tab open. Each page becomes
users/<you>/results/task-<id>/with anotes.md, anotes/Files/folder for attachments, anotes/Images/folder for inline images, and anotes/_import_source.jsonsidecar (inside thenotes/subdirectory, not at the task root). - Done. The summary lists how many tasks and projects landed, how many pages were skipped as duplicates of earlier imports, how many online-only images were rehydrated, and any per-page warnings. From here you can close the wizard, or jump straight to Open bulk-sort to re-classify imported tasks in batches.
Project mapping in detail
Every notebook folder that contains pages you're importing gets a row in the Map projects step. Pages still inside a folder share one row per folder. A page that sits right at the export root with one folder name above it gets its own row defaulting to create new project named after the page. A truly loose page with no folder context at all (an orphan) also gets its own row, but defaulting to no project so you can decide case by case.
Here is how the three decisions behave.
- Create new project: the wizard creates a new project named
<folder> (imported)and attaches every page under that folder to it. You can edit the name in the row before applying. - Use existing: pick one of your live (non-archived) projects from the dropdown. Pages under that folder are attached to the project you picked.
- No project: the pages land as tasks with no project assignment. You can move them to projects later from the bulk-sort screen or by opening each task individually.
The Start import button stays disabled while any row has a validation error (empty new-project name, no existing project picked). Once the mapping is valid, clicking Start import kicks off the apply phase.
The bulk-sort screen
Right after the wizard finishes, the Done step shows an Open bulk-sort button. Clicking it replaces the wizard with a full-screen list of every task the import just created. Tasks are grouped by their assigned project (or under (no project) if unassigned), and each row exposes the same three knobs.
- A project dropdown to move that task to a different project (or to no project).
- A task type dropdown to flip the task from
experiment(the default) topurchaseorlist. - A Delete button for tasks that don't belong anywhere, useful when an old notebook had stray meeting-notes pages mixed in with experiments.
Tick the checkbox on multiple rows and the top of the screen switches to a bulk action bar with Move to a project, Change type to, and Delete N tasks. Edits write through to disk one row at a time, so you can leave the screen partway through and the work already done stays.
Re-running the import
Every imported task carries a sidecar file at users/<you>/results/task-<id>/notes/_import_source.json with the source ZIP path, the LabArchives page id, the entry count at the time of import, and the import timestamp. The importer uses those sidecars to decide what to skip on a re-run.
- Same ZIP, same pages. Running the wizard again on the same file is a no-op for already-imported pages. The Done step counts them as duplicates skipped, and your existing tasks aren't touched.
- Newer ZIP, brand new pages. Pages that weren't in the previous ZIP land as new tasks. The duplicates from the prior ZIP are still skipped.
- Newer ZIP, edited pages. If a page that you imported before has new or edited entries in the newer ZIP, the Preview step calls those out in a blue panel and offers a per-page overwrite checkbox. The default is still skip-as-duplicate. Ticking a page overwrites that task's
notes.md,notes/Files/, andnotes/Images/, while preserving the task id, name, project assignment, and sharing metadata. Anything you edited yourself on the Notes tab after the original import is discarded by overwrite.
What doesn't import
The importer is deliberately scoped to the content of the Offline Notebook ZIP. A few LabArchives concepts don't round-trip.
- Comments and revision history. LabArchives tracks per-entry comments and a full edit history. The Offline Notebook ZIP exports the latest version of each entry, and comments aren't bundled.
- Per-page ACLs and sharing. LabArchives' notebook-level and page-level access controls don't carry over. Imported tasks land owned by whichever ResearchOS user ran the importer. Use ResearchOS's own sharing model afterwards if you want others to see the imported tasks.
- Form-B inline images, by default. Images that LabArchives stores as cloud URLs aren't in the ZIP. The Fetch images step pulls them in when reachable, otherwise the markdown gets a placeholder you can rehydrate later from the per-task banner.
- Live LabArchives links between pages. If a LabArchives page links to another page by its LabArchives URL, the link comes across as plain text. ResearchOS doesn't rewrite those into local task links.
Where to go next
- Need to produce the ZIP first? See Exporting from LabArchives.
- Curious about how the inline-image rehydration paths work? The LabArchives integration page breaks down Form-A vs Form-B and the DevTools-script path.
- Imported tasks look and behave the same as native ResearchOS tasks. The Experiments & Notes page covers the task popup, the Lab Notes editor, and how attachments work once they're on disk.