Widgets¶
Every panel, tab and window, control by control. For what to do with them, see the how-to guides.
The main window¶
One window holds one or more views. A view is a scatter plot, a 3D viewer and their shared control panel — see working in several views.
Pane layout¶
Three buttons sit in the top-right corner of each pane:
| Button | Tooltip | Effect |
|---|---|---|
| Show only scatter | One pane fills the window | |
| Stack widgets vertically | Scatter above, viewer below (the default) | |
| Place widgets side by side | Scatter left, viewer right |
Drag the splitter between the panes to change the ratio. View → Reset Layout restores the default stacked 50/50 arrangement.
Each pane also has a chevron toggle for its own sidebar.
The status bar¶
Bottom of the window. Shows a running selection count (Selected: 2,604) and is
where the meta staleness banner
appears when a project's snapshot is more than a day old.
The control panel¶
The sidebar on the left of the scatter pane. Toggle with C over the plot, or View → Toggle Figure Controls. Five tabs.
General¶
| Group | Control | Does |
|---|---|---|
| Search | search field | Find points. Hover the field for the syntax. |
| Previous / Next | Step through matches | |
| Select | Select all matches | |
| Labels | Labels: |
Which meta column is drawn as text on the plot |
| Show label counts | Append the number of points to each label | |
| Show label outlines | Outline labels for legibility over dense points | |
| Colors | Color by: |
Which meta column drives point colour |
Palette: |
The colour map, with previews | |
| range slider | Clamp the colour range. Three handles (min / centre / max) over a histogram of the values. | |
| Point Size | Size by: |
Which meta column drives point size |
| range slider | Clamp the size range | |
| Scope | + Add filter | Add a filter row hiding non-matching points. Rows combine with AND/OR; a live count shows how many match. |
| filter editor | Depends on the column: numeric gets a range slider, few distinct values get checkboxes (plus an (empty) box when some rows are missing or blank), many get a substring/regex field with an any / empty / non-empty selector. |
|
| Selection Behavior | Add as group | Track each addition as a distinct group (on by default) |
| Deselect on double-click | Double-clicking empty space clears the selection | |
| Deselect on empty selection | An empty box/lasso clears the selection | |
| Configure Tab toggle | Set what Tab flips between — see shortcuts |
The column dropdowns have an inline filter box, which matters when your meta table has a hundred columns.
Labels only appear once you have zoomed in far enough that a manageable number of points is in view. They are then automatically arranged around their points to avoid covering points or each other — a label may shift to the other side of its point, and in very crowded spots labels that cannot be placed without overlap are hidden until you zoom in further. A short connector line ties each label to its point. Labels of selected points and of search matches get placed first. All of this is configurable via View → Labels: decluttering and the connector lines can be turned off, and labels that don't fit can be hidden (the default), shown dimmed (tucked behind the points), or shown normally. These choices are remembered across sessions (the Show Labels toggle itself is not — it resets to on, like the camera).
As an alternative to labeling every point, View → Labels → Declutter Mode → One Label Per Group shows a single label per unique value instead: the label sits at the edge of its group of points, kept within the current view, with connector lines fanning out to all of its points (drawn behind them). If a value's points form several clearly separated islands, each island gets its own copy of the label with its own local connector lines — rather than one label with lines running across the whole view. Labeling every unique value takes precedence: the extra island labels are only added where space is left, so they never crowd out another value's only label. Double-clicking a group label highlights/selects its points just like a regular label.
Embeddings¶
Recomputes the scatter plot's layout. See recompute the embedding for the full parameter reference.
| Group | Control | Does |
|---|---|---|
| Re-calculate positions | Run it | |
| Auto run | Recompute on every parameter change | |
| Input | Method: |
UMAP, MDS, t-SNE, PaCMAP (PaCMAP needs features; a KNN graph limits you to UMAP and t-SNE) |
Data: |
Which data source to embed | |
| Feature Subset | checkboxes | One per top-level feature group. Only present with MultiIndex feature columns. |
| Feature Options | Feature metric: |
cosine, euclidean, manhattan, correlation, chebyshev |
Feature rebalancing: |
none, z-score, robust (median/IQR), log1p + z-score |
|
| Enable PCA + components | Reduce to N principal components first | |
| Method Settings | Random seed: |
Empty means random initialisation |
| method-specific | See the parameter tables |
Fidelity¶
Answers "is this embedding lying to me?".
| Group | Control | Does |
|---|---|---|
| Input | Data: / Metric: |
The ground truth to compare the layout against |
| Neighborhood Fidelity | k neighbors: |
How many neighbours to compare |
| Use rank | Score by neighbour rank rather than raw overlap | |
| Compute | Run it. Results become a colourable column. | |
| K-Nearest Neighbors | Show: |
Off, Selected only, All points — draws edges to each point's true nearest neighbours |
k neighbors: |
How many edges per point | |
| Evaluate Labels | Show: | Score the current labels |
Method: |
Silhouette or Neighbor consistency |
|
Metric: / Data: |
What to score against | |
| Sync w/ labels | Follow the label column automatically | |
| Distances | Show: + Threshold: |
Draw lines between points closer than a threshold |
Drawing KNN edges for All points on a large project will slow the plot
noticeably. Selected only is usually what you want.
Cluster¶
See reclustering for the full method reference.
| Group | Control | Does |
|---|---|---|
| Run / Clear | Run or discard the clustering | |
| folder button | Load cluster assignments from a previously exported CSV | |
| Input | Data: / Metric: |
What to cluster |
| Algorithm | Method: |
HDBSCAN, Agglomerative, K-Means, Spectral (a KNN graph limits you to HDBSCAN and Spectral) |
| method-specific | See the method reference | |
| Output | Result: |
What you got |
| Apply labels | Colour the scatter plot by the clustering | |
| Export | Save as CSV with id and bigclust_cluster |
|
| Manual Refinement | Target cluster: + Set Cluster |
Move the current selection into an existing cluster |
| New Cluster | Move the selection into a fresh cluster | |
| Reset | Discard manual edits |
Settings¶
| Control | Does |
|---|---|
Render trigger: |
Continuous, Reactive or Active Window. Reactive redraws only on change — use it on a laptop on battery. |
Max frame rate: |
Cap the frame rate |
Font size: |
Label size (also Left / Right) |
Point scale: |
Marker size (also Up / Down) |
Max visible labels: |
How many labels may be drawn at once |
Cache neurons + Max cache size: |
Keep fetched neuron meshes in memory |
| Clear cache | Drop the cache |
The 3D viewer¶
A Neuroglancer-style viewer showing the morphology of whatever is selected. Controls are in shortcuts. Press C over the viewer for its legend, and use its own sidebar toggle for viewer settings.
View → Synchronize Viewer (on by default) is what couples the scatter selection to the viewer. Untick it when working with very large selections — see the cost of a big selection.
Opening the data widgets¶
The Connectivity Table, Distance Heatmap and Feature Comparison read an embedding's features or distances, so what can be opened depends on the embedding rather than on the project. In a project with several embeddings the View entries are therefore submenus — View → Feature Comparison → connectivity (UMAP) — listing embeddings without the data as disabled. See the View menu.
A widget opened that way belongs to the embedding you picked: its title carries the embedding's name, each embedding gets its own instance, and the active embedding is left as it was. The keyboard shortcuts below always open the widget for the active embedding.
Connectivity Table¶
View → Connectivity Table (Shift+Cmd+C). Up- and downstream partners of the current selection, shown three ways:
- Table — the raw matrix, neurons as rows and partners as columns.
- Profile — one line per neuron across its partners, for comparing connectivity patterns at a glance.
- Network — a node-link diagram of the selection and its partners.
All three read from the same filtered view. The sidebar's Data tab shapes that view for every tab at once; the second sidebar tab holds display options and follows whichever tab is active.
Data controls¶
| Group | Control | Does |
|---|---|---|
| Rows | Labels: |
ID or any meta column |
Sort: |
No sort, By label, By distance |
|
Filter: |
Filter rows by name (regex) | |
| Collapse rows by label | Aggregate rows sharing a label | |
| Columns (partners) | Upstream / Downstream | Which directions to show |
Threshold: |
Hide partners whose strongest connection is below N synapses | |
Top N: |
Keep only the N strongest partners per direction (All = no limit) |
|
Sort: |
No sort, By synapse count, By label, By distance |
|
Filter: |
Filter columns by name (regex) | |
| Normalize | Show each connection as a fraction of that neuron's total input/output rather than a raw count. Up- and downstream are normalised separately. |
Always on top, Copy and Export CSV sit below the sidebar tabs and apply whatever tab you are on. Copy refuses views over 200 rows — use Export CSV for those.
Display controls¶
| Tab | Control | Does |
|---|---|---|
| Table | Hide zero values | Leave cells with no connection blank |
| Color cells | Shade cells by connection strength | |
Scale: |
Scale cells relative to content (also Cmd++ / Cmd+-) | |
| Profile | Color by: |
Up/Downstream, ID, or any meta column |
Line width: / Max partners: / Max rows: |
Density limits | |
| Network | Layout: |
Layered puts upstream partners left, the selection in the middle and downstream partners right, ordering each column to reduce edge crossings. Spring uses a force-directed layout. |
Color by: |
Colours the selected neurons — ID or any meta column. Partners are always coloured by direction. |
|
Max partners: / Max rows: |
Density limits | |
Max edge width: |
Width of the strongest edge; thinner edges scale down from it | |
| Show node labels | Skipped automatically above 120 nodes |
Node size tracks a neuron's total synapse count and edge width its connection strength. Very dense views are refused rather than drawn — lower the limits or raise the threshold when that happens.
Finding things in the scatter plot: double-click a row or column header in the table, or click a node in the network (or a point in the profile), and the scatter plot jumps to it.
Distance Heatmap¶
View → Distance Heatmap (Shift+Cmd+D). Pairwise distances within the selection, as a heatmap with rotated column headers.
Two modes: reading a precomputed matrix, or computing distances for the current selection from features. The second is capped at 5,000 selected neurons, with a hint shown when you exceed it. Disabled entirely for KNN-graph projects.
| Group | Control | Does |
|---|---|---|
| Compute (feature mode) | metric dropdown | euclidean, cosine, manhattan, correlation, chebyshev |
| Normalize per neuron | ||
| Display | row-label dropdown | ID or any meta column |
| ordering dropdown | None, Label or Linkage. Linkage (the default) orders rows and columns by a Ward-linkage dendrogram, which is what makes blocks visible. |
|
| Hide diagonal | Drop the always-zero diagonal | |
| Hide upper triangle | The matrix is symmetric | |
| Color cells | Colour by value | |
| decimals spin | Digits shown per cell | |
| cell-size slider | ||
| Always on top | ||
| Copy table to clipboard |
Feature Comparison¶
View → Feature Comparison (Shift+Cmd+F). Ranks the features separating two groups. See finding what separates two groups for the full control reference including scoring.
| Group | Control | Does |
|---|---|---|
| Groups | Group A / Group B → Copy Selection | Take the current figure selection |
| Edit | Pick members by ID or label | |
| Eval. separation | Score whether the split is real | |
| Data | Aggregation, Top-level filters, Min synapse count, Normalize per neuron |
Prepare the features |
| Scoring | Metric |
L1 logistic regression or permutation importance |
| Table tab | feature filter, Show Top N:, Top N by: |
|
| Graph tab | Orientation:, Transpose graph, Feature jitter:, Show KDE |
Click any table row for a per-feature detail dialog with its own distribution plot.
Find Nearest¶
Selection → Find Nearest…. For each query neuron, finds its top-N most similar neurons drawn from a candidate pool you define. Built for "select a group on one side of the brain, find the closest matches on the other side": the pool is independent of the Scope, so it can deliberately exclude the query neurons — something Scope cannot do, because scoping to the other side would deselect them.
The query set is pinned from the figure selection when the widget opens; it does not follow the selection afterwards unless you ask it to. Press Find Nearest Neighbours to fill the table — nothing is computed until you do, since the pool can be the whole dataset.
| Group | Control | Does |
|---|---|---|
| Query neurons | count label | How many neurons are pinned as queries |
| From Selection | Recapture the current figure selection as the query set | |
| Sync to Selection | Follow the figure selection live instead of staying pinned (off by default) | |
| Similarity | Source: |
Which space to measure distance in — Embedding (screen), KNN graph, Distance matrix or Feature space, whichever the active embedding provides (same set as Grow/Shrink) |
Metric: |
euclidean, cosine, cityblock, correlation — feature source only |
|
Neighbours: |
How many neighbours to find per query neuron | |
| Search through graph (approximate) | KNN source only — see below | |
| Candidate pool | + Add filter | Restrict the pool by metadata, using the same dtype-aware filter rows as the Scope panel (checkboxes, range sliders, regex), combined with AND/OR. A live count shows how many neurons match. |
| Exclude query neurons from pool | On by default — keeps the query neurons out of the results. Off lets query neurons match each other (a neuron never matches itself either way). | |
| Find Nearest Neighbours | Run it | |
Table layout: |
Wide (neighbours across columns, one row per query) or Long (one row per query–neighbour match, with Rank and Distance columns) |
In Wide layout each neighbour cell shows the neighbour's id over its distance (label + full distance on hover); blank cells mean fewer than N in-pool neighbours were found (common with a KNN-graph source and a strict pool). Double-click a query or neighbour cell to jump to it in the scatter plot.
The action buttons sit below the table:
| Button | Does |
|---|---|
| Add to Figure | Add the de-duplicated union of all found neighbours to the current selection (the queries stay selected) |
| Open in New View | Open that union in its own view |
| Copy / Export CSV | The results as a flat table, matching the current layout. Copy refuses more than 500 rows. |
Always on top is on the left of the same row. The widget follows the active embedding: it refreshes on show, so reopen it after switching embeddings to pick up that embedding's similarity data.
The KNN source¶
A KNN-graph source stores only each neuron's top-k neighbours, so "nearest" is a lookup into that stored list, not a fresh search. A pool filter can only narrow the stored list — it can't reach a neuron that was never in the top-k. So with a strict pool you often get fewer than N results, or none. This matters most for left → right matching: a neuron's stored neighbours are usually same-side, so its contralateral match is rarely in the list. Prefer the feature or distance-matrix source there — those search the whole pool.
Search through graph (approximate) makes the KNN source reach further by walking the graph outward (shortest path over the stored edges) until it finds N in-pool members. Use it when a KNN graph is your only similarity source. The reported distances then become accumulated graph-path distances — an approximation, not the true query-to-neighbour distance — so the results are ranked by reachability rather than by exact similarity, and the distance column is labelled Graph distance to make that explicit.
Left → right in three steps
Select the left-side neurons, open Find Nearest, add a pool filter
somaSide = R, set the neighbour count, Find Nearest Neighbours, then
Add to Figure to bring the matched right-side neurons into the selection.
Meta Data Explorer¶
View → Meta Data Explorer (Shift+Cmd+M). The full meta table, filterable, and the entry point to both meta-update routes.
| Group | Control | Does |
|---|---|---|
| Filters | Add Filter | Add a column / operator / value row |
| Clear Filters | ||
Logic: |
Combine rows with AND or OR |
|
| count label | Showing n / total rows |
|
| selection-mode combo | Filtered rows or Highlighted rows |
|
| copy combo | To Clipboard, Selected rows, IDs only |
|
| Save | Write the selected rows to CSV | |
| Update ▸ From Remote… | Meta Data Sources dialog | |
| Update ▸ From Local… | Update Meta From Local File dialog | |
| Select in Main Window | Push these rows to the scatter plot as a selection | |
| Open in New View | Open them in their own view |
The Update button is the only way into the two meta dialogs — they are not in the menu bar.
Meta Data Sources¶
Meta Data Explorer → Update → From Remote…. Configures where each dataset's annotations are read from, and pulls them. Never writes to a backend. See refreshing meta data.
Table columns: Dataset, Rows, Backend, Configuration, Column mapping.
| Control | Does |
|---|---|
| backend combo | Pick a backend per dataset |
| Edit mapping… | Map your meta columns onto the source's column names |
| Auto-map | Guess the obvious mappings |
| Save sources | Store the definitions in the project info |
| Update meta now | Pull fresh values, on a background thread |
In the mapping dialog, DO_NOT_UPDATE is the first choice for every column and
means "leave this alone".
Update Meta From Local File¶
Meta Data Explorer → Update → From Local…. Merges a local file into the meta
table. Accepts .csv, .tsv, .parquet and .feather. See route
2.
| Group | Control | Does |
|---|---|---|
File: + Browse… + Load |
Read the file and list its columns | |
| Join on | column list | Which columns to match rows by |
| Columns to import | table | Import, File column, Import as, Status |
| Only fill empty cells | Never overwrite existing values | |
| Empty file cells clear existing values | A blank means "delete" rather than "no opinion" | |
| Sanity check | Check merge | Preview without changing anything |
| Apply | Apply the merge. Disabled until Check merge has run. |
Meta rows never change; unmatched file rows are reported and ignored. Nothing is written to disk.
Push Annotations¶
Selection → Set Annotations (Cmd+A / Ctrl+A). The only dialog that writes to a live backend. See pushing annotations — read it before using this.
| Tab | Control | Does |
|---|---|---|
| Configuration | Group same backend/repository | Batch writes sharing a destination |
| dataset table | Dataset, Selected neurons, Backend, Configuration |
|
| Validate | Connect and check config + credentials. Unlocks the Submit tab. | |
| Submit Annotations | Value |
What to write |
Fields |
Comma-separated field names, per dataset | |
| Clear fields | Write empty instead of the value | |
| recent field plans | Re-apply one of your last five setups | |
| Submit | Write. No further confirmation. |
Build Project¶
File → Build Project… authors a new project directory from local tables,
without hand-writing the info file. It is a form over the same engine as the
ProjectBuilder
Python API, so both produce identical projects.
| Section | Does |
|---|---|
| Project | Name, description, dataset label and the output folder to write into |
| Meta table | Pick a .parquet / .feather / .csv / .tsv table, then map which of its columns supply the required id, label and dataset fields (they need not be named that way). A column literally named id/label/dataset that you don't map is kept under a suffixed name rather than dropped. Choose optional Color and Neuroglancer columns |
| Embeddings | Add one or more. Each takes its coordinates either from two meta columns or a 2-column file, with optional distances and features tables attached |
| 3D viewer | Optional neuroglancer source and neuropil mesh. Picking a Neuroglancer column above turns this on and fills in its source automatically |
Build project stays disabled until an output folder, a meta table and at least one embedding are set. It then writes the files; validation errors (e.g. a non-square distance matrix) are surfaced before anything is written. Leave Open the project after building (on by default) ticked to load the new project straight into the current view.
Command¶
Help → Command shows the command line that re-opens the current view — its
source and filters — in both the uvx bigclust2@latest … and installed
bigclust2 … forms, each with a copy button. Enabled once a project is loaded.
See the command-line reference.
Other dialogs¶
| Dialog | Reached from | Does |
|---|---|---|
| Open Project | File → Open Project (Cmd+O) | Pick a project, filter it, choose an embedding strategy |
| Credentials | Window → Credentials… (macOS: Preferences) | Set or clear service tokens — see credentials |
| Project Details | Window → Show Project Details | The info file as a tree |
| Annotation Log | Window → Show Annotation Log | Every push this session, as plain text, JSON or CSV |
| Keyboard Shortcuts | Help → Keyboard Shortcuts | The list on this page |
has features / has distances in Project Details can read False incorrectly
Those two rows only inspect the top level of the info file. In a
multiple-embeddings project where the
sources are declared per entry, they report False even though the sources
are present and working. Trust the Embeddings tab's Data: dropdown instead.