You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Every object is keyed by its `label_id`, and selection/gates live in shared state
42
-
— the groundwork for the planned bidirectional link between the scatter and the
43
-
3D view.
99
+
Load entry points: `public/LocalZipViewer.tsx` (the `/local` route) and
100
+
`website/components/Modals/LoadModal.tsx` (the **Load URL** / **Load .zip** buttons).
44
101
45
-
The scatter works from any entry point that feeds the viewer a `.zip`: the main
46
-
**Load .zip** button, or the minimal standalone picker at the `/local` route.
102
+
---
47
103
48
-
## Quick start
104
+
## Installation
49
105
50
-
Requires [pixi](https://pixi.sh) (it provides the pinned Node.js).
106
+
Requires [pixi](https://pixi.sh) (it provides the pinned Node.js — no global Node
107
+
needed).
51
108
52
109
```bash
53
110
pixi run setup # install deps + build vole-core + link it into vole-app
54
111
pixi run dev # start the dev server at http://localhost:9020
55
112
```
56
113
57
-
Then open http://localhost:9020, click **Load .zip**, and pick a local
58
-
`.ome.zarr.zip`. The first three channels are enabled by default.
114
+
Then open http://localhost:9020 and click **Load .zip**.
115
+
116
+
> After editing anything in `vole-core/src`, run `pixi run rebuild-core` (or
117
+
> `pixi run build-core`) so the app picks up the rebuilt engine — `vole-app`
118
+
> consumes the **built**`vole-core/es`, not its source.
119
+
120
+
---
121
+
122
+
## Loading data & options
123
+
124
+
-**Load .zip** — drag-and-drop **one or more** local `.ome.zarr.zip` files.
125
+
-**Load URL** — load a remote OME-Zarr by `https://`, `s3://`, or `gs://` URL.
126
+
127
+
With **several** files, a toggle appears:
128
+
129
+
| Mode | Behavior | Use when |
130
+
|---|---|---|
131
+
|**Separate scenes** (default) | one volume per zip, switchable via the scene picker; each scene keeps its own channel settings | the files are unrelated / different shapes |
132
+
|**Overlay channels**| merge every zip's channels into a single volume | the files share identical pixel dimensions |
133
+
134
+
Overlay requires matching dimensions and fails clearly otherwise, which is why
135
+
**Separate scenes** is the default.
136
+
137
+
### Feature panels
138
+
139
+
When a loaded zarr contains `tables/measurements`, a **Features** tab appears with:
140
+
141
+
- an interactive **scatter** — pick X / Y / color-by, click or box-select objects,
142
+
set per-feature **min/max gates**, and **export CSV** (selection, gated, or full);
143
+
- a **correlation heatmap** across features;
144
+
-**manual annotation** labels.
145
+
146
+
Selection and gates live in shared state keyed by each object's `label_id`.
59
147
60
148
### Preparing a `.zip`
61
149
62
150
Package the `.ome.zarr` folder with **no compression** (STORE mode) — Zarr chunks
63
-
are already compressed, so zip deflate would only slow reads:
151
+
are already compressed, so zip deflate only slows reads:
64
152
65
153
```python
66
154
import zipfile, os
@@ -74,16 +162,57 @@ with zipfile.ZipFile("image.ome.zarr.zip", "w", zipfile.ZIP_STORED) as zf:
74
162
zf.write(full, arc)
75
163
```
76
164
165
+
---
166
+
167
+
## Integrating into your own app
168
+
169
+
Two levels of reuse:
170
+
171
+
### 1. The engine (`vole-core`) — read a local zip anywhere
172
+
173
+
`ZipStore` + `OmeZarrLoader` work outside this app. Point the loader at one or more
0 commit comments