Changelog#

One line per release candidate: the main user-facing thing that changed. Newest first. Add an entry under Unreleased as you land a change; move it under the new rcN heading when that rc is published to TestPyPI.

Unreleased#

  • Depend on quantem.gpu[movie]>=0.0.1rc5 for the CUDA/MPS/CPU movie backend, keep migrated HDF5 and movie shims patch-compatible during the transition, and accept 3-axis Show3DSlices(pixel_size=...) tuples in release notebooks.

  • Keep display filtering consistent throughout review: Show3D reapplies denoise when a user scrubs to another frame, standalone Show2D/Show3D HTML paints denoised and frequency-filtered pixels on first load, and unlinked Show2D galleries show and edit each selected panel’s own denoise mode, sigma, and bin without changing neighboring panels.

  • Add display-side denoise for sparse maps (EDS, low dose) to Show2D and Show3D: a Denoise menu (none / gaussian / anscombe, the count-respecting Anscombe smoother) with denoise_sigma and denoise_bin knobs, a show_denoise gate that keeps the controls row hidden until needed, and an always-on banner whenever a reduction is active. It is purely a view transform: the stored array, the stats row, and every export of raw data keep the original counts, and none is the lossless default. Show2D adds per-panel lists for raw-vs-denoised A/B galleries and runs the filter through a browser-side WebGPU pipeline, so exported HTML denoises without a kernel. Replaces the earlier display_filter / display_sigma / spatial_bin kwargs, which stay accepted as aliases for one release.

  • Add a Show2D HAADF underlay: underlay=True on a (haadf, map) pair adds a third panel blending the map onto the HAADF lattice, with a magenta colormap so bright atomic columns render magenta instead of clipping to white. Tune with underlay_alpha and underlay_haadf_gain.

  • Add reversible crop-to-view and pad view ops to single-panel Show2D: crop_to_view() commits the browser viewport as the display extent (crop applies before denoise), the pad_ratio kwarg/trait adds a minimum-valued border, the toolbar View menu gains Crop to view / Pad 5-20% / Reset view entries, an always-on view: banner announces any active reduction, and reset_view_ops() restores the full frame bit-identically.

  • Move the gallery denoise scope toggle into the Link group (Link Zoom / Pan / Contrast / Denoise): checked applies denoise edits to every panel, unchecked scopes them to the selected panel; the denoise row keeps only the Filter / sigma / Bin knobs.

rc30 - 2026-07-10#

  • Serve all tutorial data from the widget-organized widget-tutorials/ tree on Hugging Face (show2d_gold, show4dstem_gold, … — one call per dataset), retarget the Colab workshop notebooks to it, and document the upload protocol so contributors can share datasets the same way.

  • Keep docs pages single-widget: docs/CI builds set QUANTEM_WIDGET_STATIC_FALLBACK=0 so the saved-notebook static preview never duplicates the live widget, and Colab bootstrap cells are hidden from built pages via remove-cell tags.

  • Adopt the scikit-package contribution standards (issue-first, one themed PR per issue, no force-push under review) in README/AGENTS/CONTRIBUTING, and reorganize the docs sidebar (Advanced section, API reference under Developers).

  • Refresh docs for accuracy: README lists all eight widgets (Show1D, ShowDiffraction added) and the tutorial dataset downloaders, the CLI reference drops the nonexistent --widget flag and documents jupyter/qw/github, the HTML export contract drops the unimplemented float16 encoding, performance notes describe the shipped Show4DSTEM paging and MPS lazy multi-dataset path, and the orphaned load / save-state pages are back in the docs sidebar.

  • Add kernel-side element detection to ShowEDS: detect_elements() finds significant peaks above a SNIP continuum background and ranks candidate elements with plain per-element reports (matched peaks, missing strong lines, energy error); a Detect button in the periodic-table menu fills the Auto-ID candidate chips, replacing the band-local single-channel heuristic.

  • Add ShowFolder as the session browser for microscopy folders, with live refresh, thumbnail/QC previews, metadata tooltips, and lazy paged Show4DSTEM loading for folders of master files.

  • Add Show4DSTEM dataset paging and live-folder append workflows so new 4D-STEM acquisitions can appear in the same viewer without rebuilding the notebook.

  • Add Show4DSTEM multiple/compare views with panel curation, hide/star/reorder controls, selectable diffraction panels, cursor dragging across tiles, tighter mobile layouts, and safer GPU/memmap cleanup.

  • Add paged Show2D / Show3D galleries for iteration or lambda sweeps, including page playback, manual scrub pause, panel reorder controls, stable Show3D panel layouts, and better live rerender docs.

  • Add Show3D animation/export polish for GIF/MP4 sharing, frame labels, quality options, binned HTML export, and more reliable FFT overlays with zoom/pan behavior.

  • Add Show1D live review workflows for loss curves and reconstruction snapshots, including snapshot thumbnails, hide/star review controls, resizable plots, compact histograms, and a tutorial/API update.

  • Improve notebook/HTML sharing and maintainer automation: static widget fallbacks, WebP thumbnail guidance, browser smoke reports, timing/performance signoff, issue templates, and clearer agent/contributor commit guidance.

  • Improve I/O and real-data performance paths with GPU image-loading docs, generic helpers from quantem.live, direct uint8 HDF5 browsing, disk-aware Show4DSTEM loader benchmarks, and DataTransfer handoff guidance.

rc29 - 2026-07-03#

  • Dead-code sweep: drop unused imports and add __future__ annotations across the package (no behavior change; the feature bullets accumulated between rc27 and rc30 are listed under rc30).

rc28 - 2026-06-30#

  • Add real-data widget tutorials and offline 4D-STEM support.

rc27 - 2026-06-30#

  • Add ShowDiffraction for calibrated diffraction images and stacks, including d-spacing/ring tools, k calibration, tutorial, API docs, and tests.

  • Standardize the widget-level HTML export protocol across viewers, document the notebook/HTML/GitHub sharing paths, and add release/contributor/performance guidance for future widget work.

  • Improve Show2D / Show3D / Show3DSlices / Show4DSTEM interaction polish: faster histogram center dragging, mobile/touch controls, tighter panel alignment, hosted example-data docs, and clearer docs navigation.

  • Add the merged ShowEDS spectrum-image explorer baseline as experimental; the newer direct-EMD sparse-stream real-data path is still under active testing and is intentionally not part of this release-candidate signoff.

rc26 - 2026-06-24#

  • Show2D hover readout (row, col, value, top-right of the image) is now clearly visible: larger, bold, opaque background instead of the old faint translucent text.

  • The Hugging Face dataset hub (upload/download) moved to the shared quantem.data package; quantem.widget.io.hub re-exports it, so existing call sites keep working and data distribution is decoupled from the widgets.

  • Show3D / Show3DSlices now take sampling + units like Show2D / Show4DSTEM (canonical; pixel_size kept as a legacy alias), the FFT backend (hardware WebGPU vs CPU) shows in the info tooltip, plus several offline-render and multi-panel FFT fixes.

rc25 - 2026-06-24#

  • quantem jupyter now prints a highlighted banner with a copy-paste one-liner per OS (macOS / Linux / Windows) that opens the SSH tunnel and your laptop browser in one shot, so you paste a single line and the lab tab appears. JupyterLab’s INFO log spam is silenced so the banner stands out, with fallback URL / tunnel-only lines and a link to SSH setup if you have no key yet.

rc24 - 2026-06-24#

  • quantem jupyter <notebook> now runs on the GPU box itself and prints a paste-ready http://localhost:<port>/... URL for your laptop browser: kernel + GPU on the box, widgets in your browser, no laptop-side SSH or setup. First launch saves the SSH target so the printed tunnel line (ssh -L ...) is ready to copy. Bring your own tunnel (SSH -L or VS Code Remote-SSH), the same model as quantem.live.

rc23 - 2026-06-24#

  • New quantem command line: quantem show <path> (auto-detect) plus show2d / show3d / show4dstem. Render an image, a folder of images, or 4D-STEM master(s) straight to a standalone HTML (images) or a live notebook (4D-STEM, or --html); saves to ~/Downloads and opens automatically. Runs on CUDA / Apple Silicon (MPS) / CPU.

  • quantem show4dstem A B ... (or a folder) stacks several masters into one 5D viewer with a Dataset slider to flip between scans; --combined --html writes that as one offline-WebGPU file.

  • Widget HTML export is now a size-labeled dropdown showing the resulting detector resolution (e.g. “uint8 96x96”); PNG / PDF / ZIP figure export removed (HTML only, plus Copy).

  • Show4DSTEM HTML export detector binning is now MEAN, not sum, so the bright field no longer clips at uint8 on real-count detectors; binning happens at load so the full stack never has to fit in memory.

  • The export button is hidden in the already-exported HTML, and the exported 4D viewer paints its virtual image on mount (no longer blank until you nudge a control).

  • Show3D temporal averaging (avg_window) moved to a GPU compute shader - avg=15 scrubs as fast as avg=1 (was a CPU per-pixel loop on the UI thread).

  • io.read_image loads any common format (tif/png/jpg/bmp/npy/dm3/dm4 + non-Velox emd) into a Dataset2d.

  • io.read_images(folder) loads a whole folder of mixed-format images into a list[Dataset2d].

rc22#

  • Scale bar auto-picks nm/Å/pm so labels are clean integers (no more 0.5 nm decimals).

rc16#

  • Show4DSTEM browser folder-GUI workflow fix.