Snouty (AndrewGYork single-objective light-sheet) reader plugin for zarrmony.
Project description
zarrmony-snouty
Snouty (single-objective light-sheet, "SOLS") reader plugin for
zarrmony. Detects a single Snouty GUI
acquisition subdirectory (*_ht_sols_snap or *_ht_sols_acquire) and
converts the raw skewed volume it contains to OME-NGFF 0.5:
zarrmony convert /path/to/<ts>_000_ht_sols_snap ./out
Install
pip install zarrmony-snouty
Not yet on PyPI. Until the first release, install from source:
pip install git+https://github.com/ferrinm/zarrmony-snouty
This pulls zarrmony from PyPI as a transitive dependency.
Verify the plugin registered
from zarrmony.readers.plugin import list_plugins
print([p.name for p in list_plugins()])
# -> [..., 'zarrmony-snouty']
For a clean-venv install smoke test (the same shape CI runs):
uv venv .venv-smoke
source .venv-smoke/bin/activate
uv pip install .
python -c "from zarrmony.readers.plugin import list_plugins; \
assert 'zarrmony-snouty' in {p.name for p in list_plugins()}"
The same assertion runs in CI as tests/test_install_smoke.py.
Use
zarrmony inspect /path/to/2026-07-14_10-15-35_000_ht_sols_snap # dims, channels, pixel sizes
zarrmony convert /path/to/2026-07-14_10-15-35_000_ht_sols_snap ./out
Output is a single <dir-basename>.ome.zarr store with dims (T=1, C=1, Z, Y, X),
physical pixel sizes (X=sample_px_um, Y=sample_px_um, Z=scan_step_size_um)
copied from the vendor's metadata/<name>.txt sidecar, and channel names from
channels_per_slice. The verbatim sidecar text is preserved in the audit at
<store>/OME/source/raw.snouty.txt.
The Z spacing reported here is the raw scan step — the physical distance
the scan mirror moves between successive slices — not the de-sheared/rotated
orthogonal Z. Downstream tools that need real orthogonal geometry will need
to deshear the volume (see Roadmap below) or apply the sidecar's
voxel_aspect_ratio themselves.
Supported acquisitions
- Single-position, single-timepoint, single-channel snap or acquire runs. This is the simplest observed Snouty output shape and the target of v0.1. Multi-position, multi-timepoint, and multi-channel runs are detected and rejected with actionable errors (see Limitations).
Detection requires a directory whose name ends in _ht_sols_snap or
_ht_sols_acquire and which contains sibling data/ and metadata/
subdirectories with at least one .tif and one .txt file respectively.
Limitations
- No multi-position support. Data files named
*_pNNNNNN.tifraiseSnoutyMultipositionUnsupportedError(aNotImplementedError). Tracked for v0.2. - No multi-timepoint support. More than one
.tifindata/(orvolumes_per_buffer > 1) raisesSnoutyMultiTimepointUnsupportedError. Tracked for v0.2. - No multi-channel support.
channels_per_slicewith more than one entry raisesSnoutyMultiChannelUnsupportedError. Tracked for v0.2. - No deshear or rotation. The output volume is the raw skewed
(Z, Y, X)from the vendor's TIFF, with the top 8 rows (PCO BCD timestamp strip) cropped off. Deshear and traditional-view (rotated) modes are tracked for v0.2 — the reference algorithm lives in../snouty-folderand will be ported. - No top-level GUI-session-dir support. Users must point
zarrmony convertat individual*_ht_sols_*subdirs, not the parent*_ht_sols_gui/directory. Multi-scene enumeration across a whole GUI session is tracked for v0.3.
Roadmap
- v0.2 — deshear and traditional-view output modes (opt-in), ported from
the CPU implementation in
snouty-folder; multi-timepoint via T-concat acrossdata/*.tif; multi-position (one scene per position); multi-channel wiring. - v0.3 — top-level
*_ht_sols_gui/directory as the input, one scene per subdir. Consider whether the XY position list surfaces as plate-shaped metadata.
Why a separate package?
Snouty is a custom-built microscope with no bioio backend. The vendor metadata is a bespoke key=value plaintext file, not OME-XML. The raw pixel data is a plain multi-slice TIFF but the geometry (55° light-sheet tilt, scan-shear along Y) requires a plugin that understands the sidecar to expose correct pixel sizes and eventually to deshear. See ADR-0001 for the rationale and the reader-plugin authoring guide for how to build your own plugin.
License
Apache-2.0. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zarrmony_snouty-0.1.0.tar.gz.
File metadata
- Download URL: zarrmony_snouty-0.1.0.tar.gz
- Upload date:
- Size: 138.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a94de02a7219d901b4c88926e0458dd4948a39e73e9d26abb06c0fdc82e4775
|
|
| MD5 |
5f143bc6f16647a82c192a1686477a26
|
|
| BLAKE2b-256 |
121e1f98feaf5094cafba13193b38a1f3d771aa94d8144b66ddbce3024311f8e
|
Provenance
The following attestation bundles were made for zarrmony_snouty-0.1.0.tar.gz:
Publisher:
release.yml on ferrinm/zarrmony-snouty
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zarrmony_snouty-0.1.0.tar.gz -
Subject digest:
4a94de02a7219d901b4c88926e0458dd4948a39e73e9d26abb06c0fdc82e4775 - Sigstore transparency entry: 2170022778
- Sigstore integration time:
-
Permalink:
ferrinm/zarrmony-snouty@af61677bd4c66f887e4161f7c0f6b566f09b40ee -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ferrinm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@af61677bd4c66f887e4161f7c0f6b566f09b40ee -
Trigger Event:
push
-
Statement type:
File details
Details for the file zarrmony_snouty-0.1.0-py3-none-any.whl.
File metadata
- Download URL: zarrmony_snouty-0.1.0-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c73efea2a5f152193071d4b07935a9c973b20ca4cd640c511c9f1c04e7252786
|
|
| MD5 |
fc393fd9660de0cccee2d40162f7a2b5
|
|
| BLAKE2b-256 |
69b9174c63439c58534bf43460e995a78a71b05b3ee4db19a173c154892f2f46
|
Provenance
The following attestation bundles were made for zarrmony_snouty-0.1.0-py3-none-any.whl:
Publisher:
release.yml on ferrinm/zarrmony-snouty
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zarrmony_snouty-0.1.0-py3-none-any.whl -
Subject digest:
c73efea2a5f152193071d4b07935a9c973b20ca4cd640c511c9f1c04e7252786 - Sigstore transparency entry: 2170022882
- Sigstore integration time:
-
Permalink:
ferrinm/zarrmony-snouty@af61677bd4c66f887e4161f7c0f6b566f09b40ee -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ferrinm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@af61677bd4c66f887e4161f7c0f6b566f09b40ee -
Trigger Event:
push
-
Statement type: