Skip to content

File layout

HDF5 (.h5, .nxs)

/                                   NX_class=NXroot, creator=NUScope
  @nuscope_seal                     seal id (SHA-256 of the manifest)
  @nuscope_signed_by                "Name [fingerprint]; ..." or "unsigned"
  entry/                            NXentry, definition NXem (SEM/TEM/STEM/FIB) or NXdata
    title
    data/                           NXdata, signal=data
      data                          the array (gzip), @sha256
      <axis name>                   axis values, @units
    instrument/                     NXinstrument: vendor, model ... as attributes
      beam/ optics/ detector/ acquisition/ sample/
    nuscope/                        NXcollection, @name, @signal, @seal_id
      metadata                      JSON
      original_metadata             JSON
      axes                          JSON
      provenance                    JSON (nuscope.provenance/1)
      seal                          JSON (nuscope.seal/1)

Zarr (.zarr)

The array is data; the NUScope document (name, signal, axes, metadata, original_metadata, provenance, seal) is in the group attribute nuscope.

TIFF (.tif)

The image description starts with NUScope dataset v1 on its own line, followed by the NUScope document as JSON. Resolution tags carry the pixel size.

The seal (nuscope.seal/1)

{
  "manifest": {
    "schema": "nuscope.seal/1",
    "created": "2026-10-13T23:19:22.320+00:00",
    "data": {"sha256": "…", "dtype": "<f4", "shape": [448, 640]},
    "axes_sha256": "…",
    "metadata_sha256": "…",
    "provenance_sha256": "…",
    "provenance_heads": ["…"],
    "steps": 3,
    "instruments": [{"doi": "10.82427/nuance.epic.sem.s3400.2025.000001", "name": "EPIC SEM Hitachi S-3400"}]
  },
  "signatures": [
    {"signer": {"name": "…", "orcid": "https://orcid.org/…", "fingerprint": "…", "public_key": "…",
                "alg": "Ed25519", "role": "author", "signed_at": "…"},
     "signature": "…"}
  ]
}

Hashes are SHA-256 of canonical JSON (sorted keys, no whitespace, UTF-8). The data hash covers the dtype, the shape and the C-ordered bytes. A signature covers {"seal": <seal id>, "signer": <signer record>}.