Command line#
Installing quantem.widget adds a quantem command (and a short qw alias).
Point it at a file or a folder and it renders the right viewer - no notebook,
no Python.
quantem show ./anything/ # auto-detect content, pick the viewer
quantem show2d scan.png # an image -> Show2D
quantem show3d ./frames/ # a folder of frames -> Show3D scrub
quantem show2d ./frames/ --watch # live folder -> append new images
quantem show4dstem ./masters/ # *_master.h5 -> live Show4DSTEM
quantem show4dstem a_master.h5 b_master.h5 # several masters -> one 5D multi-tilt viewer
quantem show4dstem ./masters/ --html # 4D-STEM -> shareable offline HTML
quantem showfolder ./session/ # microscopy folder -> ShowFolder notebook/HTML
quantem data-transfer plan ./raw/ /ssd0/run /ssd1/run --manifest run.json
quantem data-transfer show4dstem --manifest run.json --gpus 0,1 --dtype u8 --bin 1
quantem html tutorial.ipynb # a notebook -> standalone interactive HTML
quantem github tutorial_github.ipynb --no-execute # optional static copy for GitHub preview
Subcommands#
Command |
Input |
Output |
|---|---|---|
|
anything |
auto-detects and dispatches to one of the below |
|
one image, or a folder |
a Show2D HTML (a folder becomes a gallery); with |
|
a folder of same-size frames |
a Show3D scrub HTML; with |
|
one or more |
a live Show4DSTEM notebook (or |
|
microscopy session folder |
a ShowFolder notebook (or |
|
|
manifest-backed transfer planning, state inspection, explicit copy, resume/update, ready-master listing, and Show4DSTEM notebook handoff |
|
a notebook you wrote |
runs it, or with |
|
an optional static copy of a notebook |
strips widget state and embeds compressed pictures for GitHub’s notebook preview |
|
nothing (run on the GPU box) |
starts JupyterLab ( |
Images save a standalone HTML and open in your browser. 4D-STEM opens a
live, kernel-backed notebook by default (full real-time interaction); --html
instead writes a self-contained offline viewer that runs entirely on WebGPU -
drag detectors, switch BF/ABF/ADF, pan diffraction, all with no kernel.
Several masters (a folder, or listed explicitly) stack into one 5D viewer with a
Dataset slider to flip between scans. --combined --html writes that as one
offline file (served locally, since a file:// page can’t fetch its companion).
Everything lands in ~/Downloads (or the current directory on machines without
one) and opens automatically on a desktop.
DataTransfer#
Use data-transfer before heavy multi-GPU browsing or ptychography when a
session should be split across fast disks. It writes a durable manifest that the
CLI, Python utilities, and downstream tools can inspect later.
quantem data-transfer plan ./raw_session/ /nvme0/session /nvme1/session --manifest session.json
quantem data-transfer inspect --manifest session.json
quantem data-transfer copy --manifest session.json # dry-run by default
quantem data-transfer copy --manifest session.json --execute
quantem data-transfer masters --manifest session.json
quantem data-transfer show4dstem --manifest session.json --gpus 0,1 --dtype u8 --bin 1
copy writes through *.partial files and refuses mismatched existing targets.
Default verification is by file size for speed; add --hash sha256 at planning
time and --verify hash at inspect/copy time when the extra full-file reads are
worth the stronger guarantee.
update rescans the original source folder and appends new masters without
moving old target assignments:
quantem data-transfer update --manifest session.json
quantem data-transfer copy --manifest session.json --execute
masters prints only target masters whose full acquisition group is complete by
default. Use --all-masters when you want the planned target paths before the
copy has finished. show4dstem writes a live notebook from those ready target
masters. The command is GPU-friendly but still explicit: --gpus 0,1 becomes
load(masters, devices=[0, 1], ...) in the generated notebook, --dtype u8
uses direct uint8 browse decoding for fast screening, and --bin 1 keeps native
detector sampling.
Python equivalent:
from quantem.widget import Show4DSTEM, load
from quantem.widget.io import read_data_transfer_manifest, target_masters
plan = read_data_transfer_manifest("session.json")
masters = [str(path) for path in target_masters(plan)]
data = load(masters, det_bin=1, dtype="u8", devices=[0, 1])
Show4DSTEM(data, page_budget="auto", page_device=[0, 1])
If all targets resolve to one physical disk, the CLI warns that cold load speed is still disk-bound. Multiple GPUs help capacity, but fast cold flips need files spread across independent disks.
For notebook sharing, keep the full-state .ipynb for collaborators and use
quantem html --no-execute for an interactive web artifact. Use quantem github --no-execute only when you specifically need a non-interactive copy for
GitHub’s native notebook renderer. GitHub blob/raw pages do not execute exported
HTML; serve HTML from GitHub Pages or another static host.
Options#
Option |
Effect |
|---|---|
|
detector mean-bin factor for 4D-STEM (default 8 for |
|
4D-STEM: write the offline-WebGPU HTML instead of a notebook |
|
folder: write a live ShowFolder-watched notebook; Show2D/Show3D append new image files, Show4DSTEM opens lazy masters |
|
watched Show4DSTEM: pick CUDA cards and GPU-resident dataset cache policy |
|
many masters -> one 5D HTML viewer (served locally) |
|
output file or directory (default |
|
write the file(s) without launching a browser or Jupyter |
|
page title; verbose progress |
Backends#
The loader picks the backend automatically - CUDA on an NVIDIA box, Apple Metal (MPS) on a Mac, CPU otherwise. No flag needed. On a MacBook:
quantem show4dstem ./masters/ --html --bin 8
loads on Metal, mean-bins the detector to fit the laptop, and writes a double-clickable HTML in seconds. The detector is mean-binned (not summed) so the bright field never clips at uint8, and binning happens at load so the full multi-gigabyte stack never has to fit in memory. See Load and I/O for the backend + binning details.