Repository navigation
Help shows one line with the rest under an i, the tabs stay pinned, and the raw channel can be picked in both modes - #173
Merged
Merged
Conversation
The panels' help ran to paragraphs. A hint now keeps its first line in view and the rest in a <details class="more"> after it, its summary a small circled "i" (css/dark.css), so it opens by click or tap with no script, in both modes; dom.js hint() and setHint() build the same for text a script writes. The browser's finetune note is the first: one line on what trains, the rest of what it said behind the "i". Claude-Session: https://claude.ai/code/session_01EzWMS4pG3tm1ZtvKULfSfW
The Models tab's notes (Cellpose, the Server Config's time limit and queue moves, where models run), the Review tab's two, a zoo or Cellpose row's voxel-size line and Add a model's notes keep one line in view and the rest behind the "i" (dom.js hint), in both modes. So does the model advice: each banner's headline and its Apply stay, the reason, the values that differ and what the probe saw open under the "i"; Wrong scale keeps what to tick in view. The Cellpose line says 3D is the exception now. Claude-Session: https://claude.ai/code/session_01EzWMS4pG3tm1ZtvKULfSfW
The Save predictions tab's intro, its Models and Draw a box hints and the Output folder note, the connect panel's text, the folder permission prompt and the link's notices each keep a line in view and move the rest, unchanged where it could be, behind the "i". shared/hint.ts builds the same markup as the dashboard's dom.js hint() for the text the page's scripts write; a link notice's lines are a short and a more each. The connect panel's longer text, written by viewer/index.ts, had gone into the hidden "Opening…" line since that line took the first .no-data-desc: it is the template's now, behind the "i", and the script only sets the field's example URL. Claude-Session: https://claude.ai/code/session_01EzWMS4pG3tm1ZtvKULfSfW
A hint with more under its "i" is a <div class="form-text">, which took Bootstrap's own form-text colour, dark on the dark page; it now has the muted grey every <small> hint has. Placeholders are a little lighter, and the "i" a little brighter. The dashboard's tabs (Models, Processing, Finetune...) stay at the top of its column as it scrolls, in both modes. Claude-Session: https://claude.ai/code/session_01EzWMS4pG3tm1ZtvKULfSfW
Every help paragraph of both sub-tabs, in both modes, now keeps one short line in view and the rest of what it said behind the "i" (details.more): the no-model voxel row, Redraw Annotated Regions, the browser's paint store, the YAML and resume dialogs, the ranking's intro, Match legend, little-paint warning and Cellpose line, the Channel, Epochs, both learning rates, Distillation Scope, Shift+R, the Hugging Face token hint, Private, and the two upload costs. Lines a script writes get the same through setHint: the AI credentials hints, the consent hint, the Training field, Batch and Tile Size, the browser's augmentation advice, LoRA Rank's notes, a model that cannot train, and the per-model costs. The hints a script saves and puts back (the Batch Size hint, the two costs) are kept as nodes, so their "i" comes back with them. The AI consent box keeps where the planes go in its label; an aside of the destination's (Vertex's "Google may process the data in any region") opens under an "i" beside it, and the acknowledgement still sends, and the log still names, the destination word for word. The Credentials header has a gap before its state, which wraps under it whole. Claude-Session: https://claude.ai/code/session_01EzWMS4pG3tm1ZtvKULfSfW
…s raw is read A raw of several channels (light microscopy's OME-Zarr with a c axis, an N5 or precomputed volume of several) gets a Channel at the top of the Processing tab's input normalization, its options named by the OME-Zarr's omero labels (GET /api/raw/channels: channels, labels, selected). A pick is the chain's ChannelSelector, put first in the input list and applied as the Apply bar applies, and the list's ChannelSelector row moves the select with it. PUT /api/pipeline refuses a channel the raw does not have. The finetune trainer read channel 0 whatever was picked (its process's chain is empty), and now reads the session's. The ranking scores each model on the picked channel (portable/rank.py on_channel, which both modes run), a model's start sets its declared normalization after a picked channel instead of skipping it, and the model advice compares the normalization without it and keeps it when a suggestion is applied. Claude-Session: https://claude.ai/code/session_01EzWMS4pG3tm1ZtvKULfSfW
The shortened label put what followed the destination's first sentence, or its closing aside, under an "i": Vertex's "Google may process the data in any region" and Gemini's free tier, on which Google may train on what is sent. Both are part of what the box agrees to, so the whole destination is its label again. Claude-Session: https://claude.ai/code/session_01EzWMS4pG3tm1ZtvKULfSfW
…hain picks
The browser refused a volume of several channels (and read an OME-Zarr's c
axis as channel 0 without saying). It now counts them (an OME-Zarr's c axis
from its metadata, with its omero labels; a precomputed volume's from its
reader) and every raw read takes the channel the input chain's
ChannelSelector picks, channel 0 without one, as the server reads it: the
model stage (its own channel of a block read with all of them, or a view of
the source pinned to it), the finetune's samples and whole-network tiles
(the volume's chain, the one it was painted over), the AI annotation's plane
and the ranking's raw window (the session's). Neuroglancer's raw layer shows
the channel picked and follows a new pick.
GET /api/raw/channels answers {channels, labels, selected} as the server's
does, after the session's volume has opened. PUT /api/pipeline takes a
ChannelSelector (its Python class now says browser = True) and refuses a
channel the raw has not got. A model's declared normalization goes after a
pick, the model advice compares without it, and a pick another volume has
not got is dropped when that volume is opened.
Claude-Session: https://claude.ai/code/session_01EzWMS4pG3tm1ZtvKULfSfW
This was referenced Oct 29, 2026
davidackerman
added a commit
that referenced
this pull request
Oct 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
On top of #172 (its base); merge #172 first. Each part is a branch merged in with its own merge commit.
Help shows one line, the rest under an "i" (both modes: the browser renders the same templates and scripts):
<details class="more">after it, opened by a click or a tap on a small circled "i" (css/dark.css);lib/dom.jshint()/setHint()build the same for text a script writes (web/src/shared/hint.tsfor the TypeScript). Nothing is deleted: the rest is under the "i".<div>is the grey the rest is (it took Bootstrap's form-text colour, dark on the dark page); placeholders are a little lighter.Pick the raw channel the models read, in both modes (light microscopy's OME-Zarr with a
caxis, N5 or precomputed of several channels):omerolabels when there are any. A pick is the chain'sChannelSelectorstep, put first and applied at once;GET /api/raw/channelsanswers the count, the labels and the pick in both modes; a channel the raw lacks is refused at Apply.On the merged branch: Python 1287 passed (8 skipped); web: render, both typechecks, vitest 592 passed, the generated files and the exported data current. Not tried in a real browser on multi-channel data yet.
https://claude.ai/code/session_01EzWMS4pG3tm1ZtvKULfSfW