NUScope-TOMO
Open FIB-SEM slice-and-view tomography — from raw slices to quantified, chemically resolved 3D microstructure.
Created by Roberto dos Reis (@rmsreis) · NUANCE Center, Northwestern University · NUANCE-IT/NUScope-TOMO
NUScope-TOMO is an open alternative to Thermo Fisher Avizo for FIB-SEM in materials science. It covers import, pre-processing (with a guided FIB-SEM wizard), AI segmentation, quantification, triple-phase boundaries, pore/particle networks, transport simulation, visualization/animation and recipes. It also adds correlative EDS chemistry. Everything is available as code, as reproducible YAML recipes and in a browser-based UI. PLAN.md maps each Avizo capability to its module.
FIB-SEM sample 335 (812 slices, 20 × 5 × 5 nm voxels) processed by examples/fib_sem_335.yaml
in under 5 minutes: dark phase with a grey-value cut-away (left) and 1 414 separated particles
coloured by equivalent diameter (right).
Materials analyses: steady-state diffusion through the matrix phase (left, tortuosity factor 1.4 along Z, 3.8–3.9 across) and the contact network of the dark-phase particles (right, mean coordination 3.0).
| Stage | What you get |
|---|---|
| Import | TIFF/PNG folders (natural sort), multipage TIFF, Thermo Fisher pixel-size tags, streamed into chunked Zarr v3, so stacks larger than RAM are fine |
| Pre-processing | block-face auto-crop (Pt cap / trench / padding), multi-baseline drift solve with already-registered detection, wavelet–FFT curtain removal, shading flattening, slice brightness normalisation, NLM / TV / anisotropic 3D denoising, binning, isotropic resampling, 52° tilt calibration |
| Segmentation | Otsu / multi-Otsu / hysteresis, random-forest classifier trained from a few scribbles (41 multi-scale features), majority smoothing, watershed separation of touching particles |
| Quantification | per object: volume, surface area, equivalent diameter, sphericity, solidity, Feret, ellipsoid axes, elongation/flatness, orientation, nearest neighbour, intensity/element means. Per phase: volume fraction, specific surface, interface density, Euler number, percolation, geodesic tortuosity, continuous size distribution |
| Materials analyses | triple-phase boundary length density (total / active), steady-state diffusion & conduction solver (D_eff/D₀, tortuosity factor, MacMullin number; Avizo XLab counterpart), pore- and particle-network model (throat/contact sizes, coordination numbers) |
| Beyond Avizo | data-health inspector (per-slice SNR, sharpness, curtaining, drift, blank/duplicate slices, automatic slice-thickness check), uncertainty on every number (integral-range sampling error, ±1-voxel segmentation sensitivity, representative-volume size), live acquisition mode (nuscope-tomo watch: analyse while the FIB mills, tells you when precision is reached), self-supervised Noise2Void denoising and a 2.5D U-Net trained from scribbles (Apple MPS / CUDA). See docs/IDEAS.md |
| Acquisition & experiment design | acquisition advisor (pixel size, slice thickness from feature sizes and an empirical "would coarser sampling change the answer?" test; depth / field of view for a target precision), cohort comparison (nuscope-tomo compare: sampling-aware statistics, Holm correction, minimum detectable difference, volume needed to detect it) |
| Sparse & fused chemistry | context-driven sparse EDS by deep kernel learning (after Kalinin, Ziatdinov et al.) with SE and BSE context; coupled-NMF pan-sharpening of a coarse EDS map with physically linked high-resolution channels (BSE, Castaing's rule; after Borodinov, Kalinin, Ovchinnikova et al., npj Comput. Mater. 2019); benchmark with SE-invisible chemistry |
| Self-driving slice-and-view | agent that refocuses, corrects drift, adapts dwell and slice thickness, takes sparse EDS and stops at the requested precision; Thermo Fisher AutoScript backend (dry-run by default, arming phrase, safety limits; not yet run on hardware), digital twin built from your own data, shadow mode that records the AutoScript calls an autonomous run would issue |
| Chemistry (EDS) | element-map stacks → registration to SE → 3D composition → unsupervised chemical phases (k-means / GMM / NMF) → composition per SE phase or object; forward simulator for validation |
| Visualization | GPU renders (volume, phase surfaces with cut-away, objects coloured by any measurement), turntable MP4s, figure panels with true aspect and scale bars |
| Studio | NUScope-TOMO Studio, a browser application: project home with pipeline status and key results; viewer (linked XY/XZ/YZ + WebGL 3D, layouts, voxel/phase readout, keyboard shortcuts); FIB-SEM Wizard; scribble annotation → random forest or U-Net; Measure, Confidence, Chemistry and Acquire workspaces with interactive charts; self-driving twin runs with live charts and a stop button; ⌘K search over pages, data and operations; light and dark themes. Every action is recorded as a recipe |
| Recipes | YAML pipelines, nuscope-tomo run; every step logged with parameters, timings and library versions in provenance.json |
Install
pip install nuscope-tomo # or "nuscope-tomo[ai]" for Noise2Void / U-Net (PyTorch)
For development, in a clone: uv pip install -e ".[dev]". With NUScope
installed, the same commands are also available as nuscope tomo .... With
NUANCE-MCP installed, NUScope-TOMO adds tools for tomography
projects (tomo_project, tomo_table, tomo_volume, tomo_phase_fractions, tomo_ops, tomo_run, tomo_job).
Use
nuscope-tomo run examples/fib_sem_335.yaml # full pipeline on a slice-and-view stack
nuscope-tomo studio projects/fib_sem_335 # open http://127.0.0.1:8765
nuscope-tomo ops # list operations and parameters
nuscope-tomo watch /acq/folder -p projects/run --voxel 20 5 5 --model rf.pkl # live mode
python examples/beyond_avizo.py # data health, Noise2Void, U-Net, RVE
nuscope-tomo compare A=projects/a/run B=projects/b/run --out cohort
python examples/chemical_fusion.py # sparse DKL vs pan-sharpening benchmark
python examples/self_driving.py agent # autonomous run on the digital twin
python examples/showcase.py # figures, renders and animation
From Python:
from nuscope_tomo import Volume
from nuscope_tomo.preprocess import auto_crop, align, destripe, denoise_nlm
from nuscope_tomo.segment import random_forest
from nuscope_tomo.analyze import measure_objects
vol = Volume.from_zarr("raw.zarr")
vol = denoise_nlm(destripe(align(auto_crop(vol))["volume"]))
phases = random_forest(vol, scribbles="annotations.json", classes=3)["volume"]
Remote use: run nuscope-tomo studio --host 0.0.0.0 on the workstation that holds the data
and open it from any laptop. The browser only receives slices and a downsampled 3D preview.
Design notes
- Out-of-core first. Volumes are Dask arrays over Zarr; slice-wise operations stream. Connected components, watershed and surface meshing run in memory, on a binned volume or an ROI for very large data.
- Anisotropy everywhere. FIB-SEM voxels are typically 5–10 nm in XY and 10–50 nm in Z. Distances, filters, surface areas and renders all use physical spacing.
- Validated against ground truth.
pytestruns 26 tests on synthetic phantoms. They cover drift recovery, stripe removal, sphere volume, area and sphericity (within 1–2 %), percolation and tortuosity, random-forest accuracy, watershed splitting, TPB length on a straight triple line, transport through a straight channel (τ = 1, D_eff = ε), the neck of two fused spheres, slice-thickness detection, integral-range error prediction, Noise2Void, U-Net, live ingestion, the advisor, cohort statistics, sparse DKL, pan-sharpening, the AutoScript dry-run and safety guards, the agent on a twin, EDS registration and phase recovery, the recipe engine and the Studio API. - Honest alignment. Correlation cannot separate stage drift from microstructure that is
inclined to the milling axis, which is especially a problem with thick slices.
aligntherefore detects stacks that are already registered and leaves them alone, and supports fiducial ROIs and a high-pass drift model.
Project layout
nuscope_tomo/
core/ Volume, operation registry, recipes + provenance
io/ slice import/export
preprocess/ geometry, alignment, artifact correction, denoising
segment/ thresholds, random-forest classifier, object separation
analyze/ object morphometry, phase metrics
chem/ EDS chemical tomography (+ simulator)
viz/ GPU rendering, animation, figures
studio/ FastAPI server + WebGL2 front-end
cli.py `nuscope` command
examples/ recipe for the sample dataset, showcase script
tests/ ground-truth tests
See PLAN.md for the Avizo feature map and roadmap: U-Net segmentation, Noise2Void,
3D multi-volume registration, permeability, native .h5oina / .bcf EDS readers.
Licence
MIT, see LICENSE. Copyright (c) 2026 Roberto dos Reis (@rmsreis).
Citation
If NUScope-TOMO helps your research, please cite it using CITATION.cff. Author: Roberto dos Reis (@rmsreis).
Metadata
Release files for nuscope-tomo 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| nuscope_tomo-0.3.2.tar.gz | 149.0 kB | With provenance | Details for nuscope_tomo-0.3.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| nuscope_tomo-0.3.2-py3-none-any.whl | Python 3 | none | any | Details for nuscope_tomo-0.3.2-py3-none-any.whl |
Total release size: 310.1 kB
Release files / nuscope_tomo-0.3.2.tar.gz
| Download URL | nuscope_tomo-0.3.2.tar.gz |
|---|---|
| Size | 149.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a9316f6a37c4ae5acfe8a89b98df5529ef86ea19f7b82678c19f9b40589795d7
|
|
BLAKE2b-256 checksum How to use checksums |
172961e96385bdece92a0085c4c0e434d27ce9f13ed9e4a1b12eb236d0be0fef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency logRelease files / nuscope_tomo-0.3.2-py3-none-any.whl
| Download URL | nuscope_tomo-0.3.2-py3-none-any.whl |
|---|---|
| Size | 161.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
861d18cce21c55c299f81e0dcafa31c4246d8e012132d4c9cedb20c7c9f7b7a2
|
|
BLAKE2b-256 checksum How to use checksums |
31432df398da0529077159d04cf1aee0f59fb77cb7894ea678759f68f313d955
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency logSecurity for nuscope-tomo 0.3.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for nuscope_tomo-0.3.2.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.