Skip to content

FigureLab v3.15.0 - channels, time, and three dead drags

Choose a tag to compare

@mbaffour mbaffour released this 15 Sep 03:37
· 32 commits to master since this release

Open figure_lab.html in a browser — no installation, no server, no network.

Channels, time, and three labels that looked draggable and were not.

  • Inset outlines are vector in the SVG export. The outline on the parent, its letter and the connector lines are held out of the raster and written as <rect>, <text> and <line>, so they stay editable and never pixelate — the same treatment the labels have always had.

  • ✛ Axes annotation: an orientation marker for histology and embryo panels — two crossed arrows lettered D V A P by default; select it and type four letters (R C M L, S I A P…) to change them. Placed with a click, on a panel or the figure, exported as vector.

  • Counter markers now reach the SVG export. They were dropped entirely: the export empties the annotation list for the raster and re-emitted only the types it knew.

  • Sync display range by channel (a panel's settings, and ⌘K): the reference panel's black/white points and gamma go to every other panel and extra channel that shows the same channel — DAPI levels to every DAPI, GFP to every GFP — and nothing else changes, not the LUT and not a panel showing a different channel. What QuickFigures and OMERO.figure call synchronising the rendering settings, and what "identical display settings" in a legend has to mean. One undo step.

  • ▤ Key annotation: a channel key for the figure — every channel the visible panels show, once, each with its colour swatch, derived at draw time so it cannot fall out of step with the panels; placed with a click, background and text editable, exported as vector.

  • Black and white points for every extra channel, as two small sliders under each channel in the panel's channel list. The values existed and were read by the composite and written by Sync by channel, but nothing in the interface could set them.

  • Compliance: display ranges by channel. A warning row when compared panels show the same channel at different black–white ranges — "GFP: A 10–200, B 0–255" — with Sync by channel one click away. Compared panels should share a range, or the legend should say why not.

  • A quiet empty figure. With no images loaded, the Images section showed a wall of inert panel tools — sort, channel detection, subsets, a red Delete hidden panels — on a figure that was still empty. They now appear once there is something for them to act on, and one line says so: the app's existing "hidden with the reason shown" rule applied to the empty case. The IA guard test probes it that way.

  • Command palette input restored to full width. The global input[type=text]{width:76px} rule outranks a bare class selector, so the palette box was 76 px wide and its placeholder read "Type a co…".

  • Icon browser shows 12 per group with "Show all N" instead of rendering every icon at startup (Annotate & Draw: 233 buttons → 108). Search still returns everything that matches. AI suggestion chips fold away under the prompt.

  • Accessibility: .field labels are associated with their controls at startup (for derived, not hand-edited) — 40 inputs a screen reader announced as unlabelled now have names, and clicking the label focuses the control. Muted helper text has a 10 px floor.

  • Fixed: the footer carried its own hard-coded version string (v3.9.0) and had drifted behind the header badge; both now stamp from the one constant.

  • ⏱ Tag from acquisition time. A time-lapse dropped in as a multi-page TIFF becomes a row of panels; this reads the time the microscope recorded for each — OME-TIFF Plane DeltaT (with its unit), an ImageJ frame interval, or the baseline TIFF DateTime tag — and tags the panels with the elapsed time from the earliest of them, in whichever of s / min / h keeps the numbers small. Panels whose file carried no time are left alone, and a figure mixing relative and absolute times is refused rather than given a made-up zero. The time as read also goes into the metadata CSV.

  • Tags and intensity-bar numbers can be dragged, like every other label, and double-clicked to reset. They were already in the draggable-text layer, so a drag started and the cursor changed — but there was nowhere to store the offset, so nothing moved.

  • Group band labels can be dragged, the third label with the same dead-drag bug; the offset is saved with the session.

  • A tag no longer lands on top of the panel letter. The letter and the tag are placed by two independent settings; sent to the same corner, the tag now steps below the letter.

440 Playwright tests pass. Full history in the README changelog.