Exporting Data¶
playNano supports saving processed AFM video stacks and analysis results in several interoperable formats. Exports can include raw data, processed frames, masks, provenance, and optional animated visualizations.
Overview¶
Data can be exported using the command-line interface (CLI) or from Python
using the functions in playnano.io.export_data and
playnano.io.gif_export.
Supported export formats include:
OME-TIFF Export - Multi-frame image stack compatible with ImageJ/Fiji.
NPZ Export - NumPy zipped archive with data arrays and metadata.
HDF5 Export - Hierarchical HDF5 bundle including data and provenance.
GIF Export - Annotated animation with timestamps, scale bar, and color map.
Format Comparison¶
The following table summarises the key features of each export format:
Format |
Raw |
Processed Data |
Masks |
Provenance / Metadata |
|---|---|---|---|---|
OME-TIFF |
Yes |
Yes |
No |
Limited |
GIF |
Yes |
Yes |
No |
No |
NPZ |
Yes |
Yes |
Yes |
Full |
HDF5 |
Yes |
Yes |
Yes |
Full, hierarchical |
Using the CLI¶
Exports are most commonly produced when running the process subcommand.
You can specify one or more export formats and control filenames and output
directories with these options:
playnano process input_folder --export npz hdf5 --make-gif \
--output-folder exports --output-name test_stack
CLI Flags¶
--export- Choose one or more formats (tif,npz,hdf5).--make-gif- Generate an annotated GIF (requires timing metadata).--output-folder- Destination directory (default:output/).--output-name- Base name for exported files (default: derived from input).
The GIF annotations can be further customised using --scale-bar-nm,
--zmin, and --zmax options; see GIF Export for details.
For full syntax, see Command Line Interface (CLI). Files can also be exported from the GUI window, see GUI: Interactive Playback for details.
Example
playnano process sample_data --processing "remove_plane" --export tif npz hdf5 --output-folder exports --output-name test_stack
This processes an AFM stack using the remove_plane filter and exports OME-TIFF, NPZ, and HDF5 bundles to `exports/.
Example output structure
exports/
├── test_stack_filtered.ome.tif
├── test_stack_filtered.npz
├── test_stack_filtered.h5
└── test_stack_filtered.gif
Files include the suffix _filtered when exported from a processed stack.
Raw exports can also be produced using the --raw flag.
—
OME-TIFF Export¶
Format: .ome.tif (single multi-frame image stack)
playnano.io.export_data.save_ome_tiff_stack() exports OME-TIFF files.
The OME-TIFF export stores the processed AFM video from the
data attribute as a single stack
of frames in a format compatible with ImageJ, Fiji, Bio-Formats, and general
image analysis tools.
Contents
Each frame stored as a TIFF plane
Global metadata including pixel size, timestamps, and channel name
OME-XML header describing acquisition
Use cases
Visualisation and measurement in ImageJ/Fiji
Conversion to other microscopy formats
Sharing of processed image stacks
Programmatic TIFF Export¶
from pathlib import Path
from playnano.io.export_data import save_ome_tiff_stack
save_ome_tiff_stack(Path("exports/stack_filtered.ome.tif"), stack)
save_ome_tiff_stack(Path("exports/stack_raw.ome.tif"), stack, raw=True)
Note
OME-TIFF exports contain only a single stack. Derived data such as masks or filtered layers are not included; use HDF5 Export or NPZ Export for multi-layer outputs.
—
NPZ Export¶
Format: .npz (NumPy compressed archive)
playnano.io.export_data.save_npz_bundle() exports NPZ bundles.
Contents
data- raw or processed image stackprocessed__<step>- processed frame arraysmasks__<mask>- Boolean mask arraysframe_metadata_json- per-frame metadata including timestampsprovenance_json- full processing and analysis historypixel_size_nm- pixel size in nanometreschannel- data channel name
Example structure
data
processed__step_1_flatten
masks__feature_mask
frame_metadata_json
provenance_json
pixel_size_nm
channel
Programmatic NPZ Export¶
from pathlib import Path
from playnano.io.export_data import save_npz_bundle
save_npz_bundle(Path("exports/stack_filtered.npz"), stack)
save_npz_bundle(Path("exports/stack_raw.npz"), stack, raw=True)
Reloading
from playnano.io.loaders import load_npz_bundle
stack = load_npz_bundle("exports/stack_filtered.npz")
—
HDF5 Export¶
Format: .h5 (Hierarchical data container)
playnano.io.export_data.save_h5_bundle() exports HDF5 bundles.
Contents
/data- raw or processed image stack/processed/<step>- filtered or analysis layers/masks/<mask>- Boolean masks/frame_metadata_json- per-frame metadata including timestamps/provenance_json- full processing and analysis history
Attributes
pixel_size_nm- pixel size in nanometreschannel- channel name
Example structure
/data
/processed/step_1_flatten
/masks/feature_mask
/frame_metadata_json
/provenance_json
.attrs:
pixel_size_nm
channel
Programmatic HDF5 Export¶
from pathlib import Path
from playnano.io.export_data import save_h5_bundle
save_h5_bundle(Path("exports/stack_filtered.h5"), stack)
save_h5_bundle(Path("exports/stack_raw.h5"), stack, raw=True)
Reloading
from playnano.io.loaders import load_h5_bundle
stack = load_h5_bundle("exports/stack_filtered.h5")
—
GIF Export¶
Format: .gif (annotated animation)
playnano.io.gif_export.export_gif() creates annotated GIFs.
GIF exports provide a compact visualisation of the AFM video or processed stack, with optional annotations.
Annotations
Timestamps - derived from frame metadata
Scale bar - physical calibration (default 100 nm)
Colour map - default
afmhotnormalisationFrame rate - determined from timing metadata
GIF Export Options (CLI)¶
When exporting GIFs, the following flags control the annotations and scaling:
playnano process input_folder --make-gif --output-name my_video \
--scale-bar-nm 100 --zmin auto --zmax auto
Flags
--make-gif- Generate an animated GIF after processing.--scale-bar-nm- Integer length of the scale bar in nanometres (default: 100).--zmin- Minimum value of the z scale; can be a float orauto(default: auto).--zmax- Maximum value of the z scale; can be a float orauto(default: auto).
These options let you control the visual appearance of the GIF:
Scale bar shows a physical size reference.
Z scale sets the height (colour) mapping; auto uses min/max of the data.
GIFs can be combined with the usual
--exportoptions to produce NPZ, HDF5, or TIFF bundles simultaneously.
Example
playnano process sample_data --processing "remove_plane" \
--make-gif --output-name test_stack --scale-bar-nm 150 --zmin 0 --zmax 20
Programmatic GIF Export¶
from playnano.io.gif_export import export_gif
export_gif(
stack,
make_gif=True,
output_folder="exports",
output_name="sample",
scale_bar_nm=100,
zmin="auto",
zmax="auto",
draw_ts=True,
)
—
Advanced / Programmatic Usage¶
Unified Export¶
Use export_bundles() to export multiple formats in one call.
from pathlib import Path
from playnano.io.export_data import export_bundles
export_bundles(
afm_stack=stack,
output_folder=Path("exports"),
base_name="my_stack",
formats=["tif", "npz", "h5"],
raw=False,
)
Use raw=True to export unprocessed snapshots only.
—
Notes¶
NPZ and HDF5 exports contain processed layers, masks, timestamps, and full provenance for round-trip reconstruction.
OME-TIFF is primarily for viewing in ImageJ/Fiji and does not include masks or processed layers.
Use HDF5 for reproducible workflows and archiving.
Use NPZ for lightweight interoperability within Python.
GIFs are primarily for communication, figures, and quick inspection.
—
Provenance Tracking¶
All exports except OME-TIFF include a provenance record that lists:
Each processing step and its parameters
Input/output file names and timestamps
Versions of filters, plugins, and the playNano package
Provenance is stored in provenance_json (NPZ/HDF5) or as an attribute in
AFMImageStack.provenance.