Skip to content

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
davidackerman merged 16 commits into
mainfrom
words-and-channels
Oct 29, 2026
Merged

davidackerman merged 16 commits into
mainfrom
words-and-channels

Conversation

@davidackerman

Copy link
Copy Markdown
Collaborator

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):

  • Every long hint keeps one short line in view and the rest of what it said in a <details class="more"> after it, opened by a click or a tap on a small circled "i" (css/dark.css); lib/dom.js hint()/setHint() build the same for text a script writes (web/src/shared/hint.ts for the TypeScript). Nothing is deleted: the rest is under the "i".
  • About 37 hints on the Finetune tab (Annotation Crops, Training, AI annotation's credentials and consent, Publish, LoRA rank), 17 on the Models and Review tabs and in the model advice, 13 on the browser's Save predictions tab, connect panel, folder prompt and link notices.
  • A consent box keeps everything it agrees to in view (where the planes go, Google's regions, Gemini's free tier).
  • The dashboard's tabs stay at the top of its column as it scrolls. Help in a <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 c axis, N5 or precomputed of several channels):

  • The Processing tab's input normalization starts with a Channel select when the raw has more than one channel, named by the OME omero labels when there are any. A pick is the chain's ChannelSelector step, put first and applied at once; GET /api/raw/channels answers the count, the labels and the pick in both modes; a channel the raw lacks is refused at Apply.
  • Server: everything that reads the raw for a model reads that channel. The finetune trainer read channel 0 whatever was picked; the ranking scored each model on channel 0 through its own normalization; a pick kept a model's start from setting its declared normalization, and the advice's Apply dropped it.
  • Browser: it opens volumes of several channels (it refused precomputed ones and read an OME-Zarr's channel 0 without saying); the models, the training samples, AI annotation's plane, the ranking and the raw layer read the picked channel.

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

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
davidackerman added a commit that referenced this pull request Oct 29, 2026
Base automatically changed from merge-168-171 to main October 29, 2026 04:43
@davidackerman
davidackerman merged commit 1b456de into main Oct 29, 2026
7 checks passed
@davidackerman
davidackerman deleted the words-and-channels branch October 29, 2026 04:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant