Save/restore UX (manual save + restore)#
Audience: everyone (wet lab + computational)
Time: 10–20 minutes
What you’ll learn:
Where the session controls live in the UI
The exact steps to Save State and Load State
How to confirm a restore succeeded (and what “partial restore” looks like)
Best practices for naming, organizing, and sharing session files
Prerequisites:
A dataset loaded in the web app
Where the session controls live#
In the left sidebar:
Open User data (the accordion that also contains dataset loading controls).
Find the block labeled Session state.
Use:
Save State (downloads a
.cellucid-sessionfile)Load State (opens a file picker and restores a
.cellucid-sessionfile)
Fast path (wet lab / non-technical): “save my work”#
Save State#
Click Save State.
Wait for a “Session saved successfully” notification.
Find the downloaded file in your browser’s downloads.
It will end in
.cellucid-session.The default name includes a timestamp (so files don’t overwrite each other).
Load State#
Load the same dataset first.
Click Load State.
Choose the
.cellucid-sessionfile.Wait for “Session loaded successfully”.
If nothing changes, don’t panic: see “How to confirm it worked” below.
Practical path (computational): what happens under the hood#
Save State is a file download#
When you click Save State:
Cellucid captures state from multiple subsystems (camera, filters, highlights, etc.).
It writes a single-file bundle and triggers a browser download.
There is no server upload by default.
Load State is progressive restore (eager then lazy)#
When you click Load State and pick a file:
Eager restore runs first (fast):
restores camera/layout/active field/filters quickly.
Lazy restore continues in the background (can be slow for large sessions):
restores large highlight memberships, some caches, user-defined codes, etc.
Practical implication:
If you see the correct view but highlights “appear later”, that is expected for big sessions.
How to confirm a restore worked (quick checklist)#
After loading:
Look for a session notification:
“Session loaded successfully” or “Session restored (eager stage complete)”
Check you did not get a dataset mismatch warning.
If you did, see Versioning, compatibility, and dataset identity.
Confirm the high-signal state:
active field (Coloring & Filtering section)
Active filters panel (should match what you remember)
snapshot layout (grid vs single)
If the session is large, wait for lazy restore:
some highlight memberships and caches can finish later.
If anything is off, jump to Troubleshooting (sessions) — fast fixes.
Best practices (these save you hours later)#
1) Treat the dataset + session as a pair#
Because sessions do not contain the dataset:
store the
.cellucid-sessionfile next to the dataset export folder,or store a clear pointer to where the dataset is hosted (URL/GitHub path).
2) Use a naming convention that encodes intent#
Recommended naming format:
<dataset>__<goal>__<who>__<YYYY-MM-DD>__v<N>.cellucid-session
Examples:
pbmc_demo__qc-filtered__kelly__2025-12-30__v1.cellucid-sessionsuo__figure1_candidate__team__2025-12-30__v3.cellucid-session
Why:
session files are binary; the filename is your metadata unless you add a separate README.
3) Save “milestones”, not every minute#
Sessions can become large when they include:
many highlight groups with huge memberships,
many user-defined categorical fields,
analysis caches.
Save milestones like:
“after QC filters + first labeling”
“after final highlight pages”
“before figure export settings”
4) Save before you load someone else’s session#
Loading is destructive to the current UI state.
Workflow:
Save your current session.
Load the other session.
If needed, switch back by loading your saved session.
Screenshots (placeholders)#
Session controls live under User data → Session state.#
Load State opens a file picker restricted to .cellucid-session bundles.#
Next steps#
Auto-restore latest session (dataset exports) (auto-loading sessions from
state-snapshots.json)Share workflows (links vs bundles vs exports) (how to send sessions to humans safely)