Releases: HohlbeinLab/webSMLM
Release list
webSMLM v0.5.0 — 3D astigmatism
Adds astigmatism-based 3D localization (Phasor 3D), a full calibration workflow, and depth-coded rendering.
Try it: https://hohlbeinlab.github.io/webSMLM/
3D astigmatism
- Calibration. Load a bead z-stack, set the frame range and z-step, and Calibrate. Every spot in each plane is detected and fitted with an elliptical Gaussian (independent σ_x, σ_y), pooled across the field (a stage z-scan means all emitters in a plane share z). The right panel shows a scatter of σ_x (green) / σ_y (magenta) vs z with vertex-quadratic fits σ = a(z−c)² + b, and z=0 is placed at the σ_x=σ_y focus. Calibrations save/load as JSON.
- Phasor 3D fit method. Assigns z per localization from the phasor width ratio via a monotonic z(ratio) fit (~137 nm axial RMS on the test beads). "Phasor (fast)" is now "Phasor 2D".
- Depth-coded rendering. Colour by z (hue = z, brightness = density) with an adjustable z range (out-of-range renders black, so you can optically section), a depth colourbar, and a Turbo blue-green-red map.
z [nm]is added to the CSV export.
Also in this release
- Frame scrubber under the raw panel (slider or mouse-wheel) to browse any stack.
- Loader fix: contiguous ImageJ stacks with trailing ROI/overlay metadata now load fully (previously such a stack could load as one frame).
- Consistent Save-As handling for CSV and calibration exports, with a clear note on the
file://download limitation.
Known limitations
3D is astigmatism-only; the Gaussian fitter is 2D least-squares (not MLE); dense overlapping PSFs bias single-emitter fits; intensities are ADU unless a camera gain is set. The astigmatism calibration is a vertex-quadratic per axis — a local approximation, best over a cropped z-range.
Licensed CC BY 4.0.
webSMLM v0.4.0
Localization export, very large stacks, and a much faster pipeline.
Try it: https://hohlbeinlab.github.io/webSMLM/
Localization export
- ThunderSTORM-compatible CSV, with a Save-As dialog and a filename derived from the loaded stack.
- Phasor now estimates background from the ROI perimeter, so
intensity [photon]is background-subtracted rather than a raw ROI sum. uncertainty [nm]via Thompson/Larson/Webb, including pixelation and background terms.- Camera gain/offset inputs. With gain 1 the intensities are ADU, not photons, and the app says so — see
docs/REFACTOR_PLAN.mdfor why this matters more on sCMOS than EMCCD.
Very large stacks
- Contiguous ImageJ stacks (a single directory entry with frames laid out after it, as written above ~4 GB) are now read frame by frame with
File.slice(), so the file is never held in memory. Previously a 4.89 GB / 40,000-frame stack loaded as one frame and reported success. - That stack now processes in ~24 s — 4.36 M localizations at ~182,000 loc/s, 91% worker utilisation.
Performance (from 0.2.0)
| Dataset | 0.2.0 | 0.4.0 |
|---|---|---|
| GATTA-PAINT 80R, 1999 × 82×83 | 5.4 s | ~0.7 s |
| Nile Red / L. lactis, 1173 × 256×256 | 20.5 s | ~0.68 s |
Web Worker pool, box-filter background approximation (with an Exact band-pass option for reproducibility), symmetric Gaussian kernels, precomputed mirrored index maps, and an unclamped yield.
Also
- Colour maps (Fire / Inferno / Viridis / Grey) and percentile display scaling.
- Live reconstruction preview and a Stop button that keeps partial results.
- Small-screen layout with pinch-to-zoom.
Known limitations
2D only; least-squares rather than Poisson MLE; single-emitter fitting biases dense samples with overlapping PSFs; intensities are ADU without a camera gain.
Licensed CC BY 4.0.
webSMLM v0.1.0
First release of webSMLM — a browser-based single-molecule localization microscopy (SMLM) tool. Load a raw TIFF stack, detect and localize single emitters, and reconstruct a super-resolution image entirely client-side. Nothing is uploaded.
Try it: https://hohlbeinlab.github.io/webSMLM/ (or download webSMLM.html and open it in any modern browser).
Highlights
- Loads multi-frame TIFF stacks (8/16/32-bit, little- or big-endian, uncompressed or deflate/LZW), with memory-aware in-RAM caching and automatic streaming fallback for large stacks.
- DoG band-pass detection with a mean + k·σ threshold.
- Phasor (fast, non-iterative) or least-squares 2D Gaussian localization.
- Instant super-resolution re-render (magnification/blur) with zoom, pan, and a scale bar.
Fixes since the initial commit
- run(): errors no longer lock the Run button (try/finally recovery).
- 32-bit big-endian float TIFFs now decode with correct byte order.
- Stale synthetic ground-truth no longer logged on real-data runs.
- Time-budgeted UI yielding in run() and synthetic generation.
- Band-pass reuses scratch buffers; zoom-aware pan clamping; scale-bar rect clamp.
Licensed CC BY 4.0. See the in-app Help & guide for methods and references.