figures/ folder side by side, and run python make_manifest.py figures after making new figures (it writes figures/manifest.json, which lets any web server show the folder).
Run × Figure Viewer
Click Open folder… and choose the folder that holds your figures. The page finds every image in it (png, jpg, svg, webp, gif) and arranges them in a grid.
Automatic folder: when this page is served (Jupyter, the eLog, any web server) it looks for, in order: a figures/ folder next to this page, the page's own folder, then /sdf/home/t/timbvd/notebooks/overview/figures/. On a plain web server the folder needs a manifest.json (made by make_manifest.py) or a directory listing. Through Jupyter no manifest is needed and stacks are saved to the folder.
Default folder: /sdf/home/t/timbvd/notebooks/overview/figures/ opens automatically when this page is served from the same machine, e.g. opened through Jupyter (in JupyterLab: right-click the file → Open in New Browser Tab, so the address contains /files/) or a web server. A page opened directly as a file can't open folders by path, so use Open folder… there.
Layouts it recognizes without any setup:
run_0123/delay_scan.png: a subfolder per run, with the file names as figure namesrun0123_delay_scan.png: all files in one folder, where the run name is everything up to the first number
If your files are named differently, use Parsing… to enter your own pattern.
Run info: click any key or value under a run (e.g. Scan: lxt_fast) to show only runs with the same value; click it again to undo. Several clicked values combine.
A JSON file named after a run (run004.json, anywhere in the folder), or any .json inside a run's subfolder, is read as key/value pairs such as {"Temp": "5C", "Scan": "lxt_fast"} and shown under the run name. The run filter can search it too, e.g. Scan=lxt_fast or Temp<10.
The four icons at the top left open and close the menu bars: ☰ general menu, ★ saved selections, ▤ stacks (a dot means unsaved stack changes), ⛶ full screen. When the viewer is shown inside another page from the same server (e.g. the eLog Summaries tab), a fifth icon ◧ hides that page's side panel (remembered), and ⛶ makes the viewer cover the whole window. A highlighted icon means its bar is open; collapse them all to give the figures the whole page.
Saved selections: set up what's shown, then click + Save current… and give it a label. Click a saved selection (or press 1–9) to switch to it, and click ⋯ to rename, overwrite or delete it. Saved selections are stored in this browser for each folder, so they're still there next session.
Stacks: click run names in the grid to select them (shift-click for a range, or use Select shown runs), then click + New stack and give it a name like lxt_fast 0-1ps 10uj. Stack members get a colored row (diagonal stripes in each stack's color when a run is in several stacks) and a stack: line in their info. A run can be in any number of stacks: click a stack label, or ⊕ in the run header, to tick the stacks it belongs to. Click a stack in the Stacks bar to make it the target: Add to … then adds the ticked runs to it, and S in the full-size view adds or removes the current run. Each stack is saved as stacks/stack01.json, stack02.json, … in your folder, with the run list, name, comments, each run's info and figure paths, ready for an LLM. The run filter accepts stack=stack01, stack=any or stack=none.
To hide a figure for every run, or a run for every figure, click ✕ in its row or column header, or untick it in the sidebar. ◎ shows only that item. Click any image to view it full size, then use the arrow keys to move between figures and runs. Ctrl-click a figure to select its run; Shift-click figures to pick several, then Open as grid in new tab. Reset… in the general menu offers View (show everything again), Selections (delete saved selections), Stacks (delete stacks) or All; the folder is always kept.
Works best in Chrome or Edge, which can remember the folder and pick up new figures with Rescan or auto-refresh. Other browsers ask you to choose the folder again each time you rescan.