Skip to content

v0.10.0

Latest

Choose a tag to compare

@aelefebv aelefebv released this 16 Jul 20:35
28b00d7

0.10.0 (2026-07-13)

Features

  • camera: auto-fit the camera to a dataset's extent on open (f2ac799)
  • camera: auto-fit the camera to a dataset's full extent on open (#846) (ceb6440)
  • camera: shared fit-to-bounds framing math for the main camera (77b4f7e)
  • channels: collapsible per-channel panels with collapse-all/expand-all (collapsed by default) (#847) (31a8238)
  • cli: dataset montage — agent dataset overview (#838) (b0027b9)
  • collab: auto-fit a dataset on open only for the client that opened it (373563a)
  • collab: show peer name + avatar on cursors in peer mode (#540) (92e6829)
  • core: add incremental delta view_query (entered/left/quantized-change since last query) (6bc322f)
  • explore: add dataset explore CLI command (JSON plan + contact-sheet) (cbbafc5)
  • explore: add pure mode-aware view-transform generator (lucida-core) (afd5833)
  • explore: enriched mode-aware move-set (elevation/time/channel/projection) (3559c2d)
  • explore: guided / branching dataset exploration (CLI · Python · web) (304208a)
  • explore: Python pyo3 explore surface + shared default-view in lucida-core (2bf873d)
  • explore: rendered preview thumbnails (contact sheet) in the Explore panel (a685f27)
  • explore: rendered preview thumbnails in the Explore panel (33eb2d2)
  • explore: sidecar parity + web nudge dedup + discoverability + finer back (ad29c9b)
  • explore: web Explore panel + wasm-export the generator (d694b43)
  • interactive per-label visibility and opacity controls for OME-Zarr labels (7870f0c)
  • OME-Zarr label (segmentation) overlays — colored 2D + 3D with per-label opacity (e698535)
  • parse OME-Zarr labels and attach them to their source image (ab3c68f)
  • protocol: scale dataset-open payloads with structure, not tile count (f4f3382)
  • protocol: version-mark compact dataset-open payloads and bound decode expansion (f22aaa3)
  • render OME-Zarr label overlays in 2D (colored, adjustable opacity, aligned) (8d05451)
  • render OME-Zarr label overlays in 3D (volume view) (b15907f)
  • seq-gap detection and snapshot resync for the collaborative document protocol (lucida-dah) (43016fb)
  • show OME channel names in the LayerPanel + let users rename channels (#845) (edc595f)
  • viewer: configurable 3D chunk-spawn focal depth (#532) (54ebdc4)
  • web: default label masks to hidden; opt-in per mask (c3703e9)
  • web: default the Explore panel to closed (da34a48)
  • web: durable collection-import warning banner + tolerate an unreadable representative tile (d7625d6)
  • web: fold the Rust view_query delta into the planning snapshot (O(delta) camera-move rebuild, coarseDetail-gated) (f177e9c)
  • web: render 3D label overlays from a bricked r32uint atlas (nearest across bricks) (0221285)
  • web: render large 3D labels via a bricked r32uint atlas (nearest across bricks) (717d900)
  • web: render large per-axis 3D labels via bricking; budget labels by their actual bricked allocation (5890309)
  • web: show every drawable label by default with per-label on/off overrides (explicit off honored); cap visible 3D masks to a memory budget (621264c)
  • web: surface collection-import warnings in a durable, dismissible banner (c56230a)
  • workspace: create a workspace directly from a dataset (#697) (35587ba)
  • workspace: duplicate a workspace without transferring permissions (#698) (d0e73c6)
  • workspace: editable dataset display names via a collaborative rename command (#701) (bc07308)

Bug Fixes

  • ci: pin wasm-pack and de-flake shuffled web tests (bd8444e)
  • cli: keep collected warnings when a dataset open fails (82557f4)
  • cli: print import warnings after a dataset open (a3675db)
  • content: lowercase URI schemes in the canonical dataset URL form (dd469eb)
  • core: clear all dataset-id-keyed fields on remove_dataset; unify the traversal (4815d34)
  • place plate label overlays on their own well in 2D (1f144f9)
  • report source-chunk store failures to the requesting client (7843dbf)
  • server: blosc decoder — non-filter-aligned and raw-stored blocks (#839) (8ceab1b)
  • server: bounded single-flight source reads with fail-fast retries; client self-heals throttled tiles (569) (789a72a)
  • server: enforce saved-view visibility transition allow-list (#817) (b6321d9)
  • store: allow plain-http object stores (81bdc49)
  • store: bound anomaly-driven label expansion and surface unusable indexes (89adc50)
  • store: charge the unusable-expansion cap only when expansion adds reads (fe9dbf9)
  • store: harden sampled label discovery (998fa68)
  • store: tolerate an unreadable representative tile when opening a collection (8f42944)
  • tear down the web session stack on workspace unmount (lucida-pke) (e207263)
  • uniform label overlay opacity (normalize declared image-label.colors alpha) (cc4fa0a)
  • viewer: 2D minimap colormap + live annotation draw + 3D annotation context (#837) (3982f9b)
  • viewer: frame the minimap to visible datasets only (#836) (e3cb977)
  • viewer: render minimap overview with the active channel's contrast (#835) (f8e776e)
  • web: back-fill missing per-label settings as hidden so an unrelated gesture never reveals an untouched label (gmt) (994e15e)
  • web: boot wasm once per page and surface fatal viewer/data failures (1b42712)
  • web: cancel a departed entity's in-flight per-tile proxy fetch to free its shared scheduler slot (4927325)
  • web: clamp the total label-volume budget to at least the per-texture cap so a drawable mask is never dropped (never-blank invariant) (0b508ae)
  • web: class and recover the viewer's visible error surface (041b320)
  • web: free fetch slots when entities scroll out of view so the current view isn't starved (6k0) (4a9eab2)
  • web: give the 2D label-slice pool datasetId-scoped cleanup and an alloc-failure guard, mirroring the 3D volume pool (0h9, l6j) (9d9bf6c)
  • web: hold the member-pass cap exactly and cull zero-extent members (2a3bc76)
  • web: keep view lanes ahead of bulk minimap seeding, deliver dual-lane arrivals (dcdd82f)
  • web: make the labels panel view-mode-aware and never open blank when a label is drawable (skr, 5rc) (25b5444)
  • web: minimap volume fly-camera look-around refreshes the frustum overlay instead of freezing it (0acfbc2)
  • web: rank bulk minimap seeding behind the plan's actual priorities (a6bc7dd)
  • web: re-fetch transiently-failed chunks on pan/scrub instead of leaving them dark (gzn) (d7a9571)
  • web: reachable Undo for every pending saved-view reject; fix stale active-row highlight (#818) (58d4afb)
  • web: render slice aggregates from live residency, one draw per pool set (f0d5aed)
  • web: report real upload budget, slice upload time, and live member sent counts (25194a9)
  • web: restore per-label view settings by name, occurrence-aware, after the label list changes (8q6, dk4) (72544ca)
  • web: route every fetch-settle completion through one settleFetch + per-key FailureRecord (2cdb585)
  • web: share one wasm instantiation across concurrent mounts (8b8ff00)
  • web: surface fatal scene-apply and chunk-fetch failure streaks (acb1d28)
  • web: surface persistently-failing remote sources via the failure streak while throttled tiles self-heal (7k4) (7c27c3d)
  • web: unify fetch-settle completion + cancel departed-entity in-flight proxy fetches (8fe522c)

Performance

  • core,web: O(delta) camera-move rebuild via a Rust delta view_query (closes the 2D stutter) (b94c47e)
  • make wide-collection member lookups and layout resolution hash-indexed (2b5b008)
  • open and view wide remote collections fast and reliably (633e1c8)
  • parallelize OME-Zarr plate import metadata fetches and tolerate unreadable wells (lucida-te7) (8230851)
  • store: scale collection label discovery with groups, not tiles (9c974c2)
  • web: bound slice render passes by a screen budget, not member count (4f74be8)
  • web: cache the minimap overview across camera-only moves on large collections (0028937)
  • web: cap per-member debug rows and report uncapped totals (22a8ce0)
  • web: coalesce the per-frame cold-state rebuild so interaction stays smooth on large collections (9f9c2d0)
  • web: cut minimap per-move cost on 2D pan/zoom and 3D orbit; fix fly-camera frustum freeze (8cf5085)
  • web: eliminate periodic interaction stutter during T/Z scrub and 2D pan/zoom (93bed25)
  • web: make pan/zoom/orbit view moves cheaper via an incremental cold-state delta + matrix reuse (8c92f12)
  • web: make pure T/Z scrub cheap — skip the O(N) cold-state rebuild + resend (6fa74ff)
  • web: minimap 2D pan/zoom reuses a cached Z-plane overlay layer instead of re-stroking every member slice plane (b78203e)
  • web: render display-only edits (contrast/gamma/colormap) without a full O(N) rebuild (0d7ffff)
  • web: reuse cached minimap geometry on a 3D orbit instead of re-reading every member per frame (79c602f)
  • web: reuse camera-independent planning-snapshot inputs across view replans (6acec62)
  • web: reuse camera-independent planning-snapshot inputs across view replans (635423c)
  • web: snapshot the cpu cache at most once per plan rebuild (574421f)
  • web: throttle the minimap overview seed-scan to bound per-move CPU on large collections (103b928)
  • web: throttle the minimap overview seed-scan to bound per-move CPU on large collections (bab9697)
  • web: update the minimap overview's display in place on contrast/gamma/colormap edits instead of re-reading every member (df45c30)
  • web: wide collections render fast at any devicePixelRatio (overview aggregation) (c020a17)

Refactors

  • collapse wasm.rs setters onto Scene::apply with a scoped diff-based epoch policy (lucida-i31) (f8da770)
  • core: single-source member world-placement via rendering_transform (119cd20)
  • debug tooling separated from production - lazy chunks, cached log gate, dev-gated control surface (lucida-s6m) (5846137)
  • final domain-neutral sweep (extras, scripts, layout name, wiki filenames) (9ebbaaa)
  • headless dataset-open service and single-layer command authorization (lucida-ce7) (7bbcb19)
  • intent-named invalidation notifiers replace hand-tapped change signals; first App wiring tests (lucida-0hm) (46992b5)
  • non-React session controller owns the web session; useBridge becomes a thin adapter (lucida-wxu) (e30a2c2)
  • one shared home for annotation overlay logic across 2D and 3D; comment badge ported to 3D (lucida-4ne) (6e9691c)
  • one shared session and http layer for the CLI noun modules (lucida-nd0) (edb171b)
  • rename Plate dataset kind to Collection (neutral container vocabulary) (7cd929e)
  • rename positioning mode to Explicit/Derived (neutral, drop stage vocabulary) (1be0bca)
  • rename well/field entities to group/tile (neutral member vocabulary) (2a4d883)
  • replace biology proper-nouns in fixtures with neutral labels (9b794a0)
  • single always-compiled source for placement correction; wasm placement queries become delegates (lucida-q0x) (40db1f6)
  • split lucida-server workspace.rs into a layered workspace/ module (lucida-mi7) (9d9d96b)
  • typed TS command vocabulary with a real-wasm apply_command lock (lucida-8ci) (4450448)
  • web: remove dead BookmarkSidebar component (#819) (c2f1463)