Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
0eb5dd1
feat: implement 0.6 in NgffMultiscales class
jo-mueller May 18, 2026
44b4253
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] May 18, 2026
1414726
feat: add NgffScene class
jo-mueller May 18, 2026
bf584ab
docs: add example notebook to docs
jo-mueller May 18, 2026
5f768a0
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] May 18, 2026
f478f73
feat: add ozmp parsers
jo-mueller May 21, 2026
544c117
Update create_scenes.ipynb
jo-mueller May 21, 2026
e05d925
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] May 21, 2026
d68b21a
Merge branch 'introduce-image-class' into introduce-image-class-v06
jo-mueller May 28, 2026
a5d61d5
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] May 28, 2026
4f7777d
Merge branch 'introduce-image-class-v06' into introduce-scene-class
jo-mueller Jun 1, 2026
5942274
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 1, 2026
2c5b8fa
use latest models and classes
jo-mueller Jun 1, 2026
c5f44b5
Merge branch 'introduce-scene-class' of https://github.com/jo-mueller…
jo-mueller Jun 1, 2026
9b8cb63
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 1, 2026
d611762
refactor: change naming and use graph building
jo-mueller Jun 1, 2026
c1a7675
Merge branch 'introduce-scene-class' of https://github.com/jo-mueller…
jo-mueller Jun 1, 2026
f47f2bf
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 1, 2026
8d2b586
update
jo-mueller Jun 3, 2026
eb321e3
Merge branch 'introduce-scene-class' of https://github.com/jo-mueller…
jo-mueller Jun 3, 2026
bd2980f
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 3, 2026
4eeb8c8
feat: store images along with paths
jo-mueller Jun 3, 2026
f697e3a
Merge branch 'introduce-scene-class' of https://github.com/jo-mueller…
jo-mueller Jun 3, 2026
4259f77
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 3, 2026
e358103
add mapaxis
jo-mueller Jun 9, 2026
9ae38cb
remove # from colors
jo-mueller Jun 9, 2026
f823481
add transformnd to deps
jo-mueller Jun 9, 2026
f568199
feat: add utility function to discover coordinate system instances
jo-mueller Jun 11, 2026
4dc336d
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 11, 2026
319693a
Merge branch 'introduce-image-class-v06' into introduce-scene-class
jo-mueller Jun 23, 2026
dd84c37
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 23, 2026
c76e0c2
docs: more demo
jo-mueller Jun 24, 2026
6afd3df
feat: better handle displacements and other transforms
jo-mueller Jun 24, 2026
711efec
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 24, 2026
66649a3
Merge branch 'introduce-image-class-v06' into introduce-scene-class
jo-mueller Jun 29, 2026
940bf8c
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 29, 2026
f02a412
feat: write correct version number in scenes
jo-mueller Jun 29, 2026
de8aea0
tests: add first tests for scenes
jo-mueller Jun 29, 2026
fdedbab
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 29, 2026
aa8ea93
deps: pin tnd to higher version
jo-mueller Jun 29, 2026
242ad2e
Merge branch 'introduce-scene-class' of https://github.com/jo-mueller…
jo-mueller Jun 29, 2026
0ea7b73
unpin tnd
jo-mueller Jun 29, 2026
60ff588
Revert "unpin tnd"
jo-mueller Jun 29, 2026
ca5ea28
deps: try higher python
jo-mueller Jun 29, 2026
984777f
deps: pin to newer pythons
jo-mueller Jun 29, 2026
f02f3a4
chore: style
jo-mueller Jul 1, 2026
38516ea
deps: add tqdm to dependencies
jo-mueller Jul 1, 2026
32b429b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 1, 2026
29aea78
chore: typo and rerun
jo-mueller Jul 1, 2026
4e47ef8
Merge branch 'introduce-scene-class' of https://github.com/jo-mueller…
jo-mueller Jul 1, 2026
e7529fd
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 1, 2026
1e71f6c
Merge branch 'master' into introduce-scene-class
jo-mueller Jul 20, 2026
ebd4605
chore: undo python<4 version pin
jo-mueller Jul 20, 2026
208f627
tests: add more description to test cases
jo-mueller Jul 20, 2026
5994ac8
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 20, 2026
c306121
docs: Apply suggestions from code review
jo-mueller Jul 21, 2026
550a93c
fix: correct PEP style of dep
jo-mueller Jul 21, 2026
d4b5f37
test: avoid mutating in-place
jo-mueller Jul 21, 2026
e9fdfd8
tests: use fixtures+functions instead of testing class
jo-mueller Jul 21, 2026
ddcad55
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 21, 2026
f5683df
fix: correct overwrite casing
jo-mueller Jul 21, 2026
60af263
tests: added a test for appending data to a scene
jo-mueller Jul 21, 2026
ff99cb3
Merge branch 'introduce-scene-class' of https://github.com/jo-mueller…
jo-mueller Jul 21, 2026
fe748c7
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 21, 2026
03000c8
tests: fix test
jo-mueller Jul 21, 2026
0ff48ad
Merge branch 'introduce-scene-class' of https://github.com/jo-mueller…
jo-mueller Jul 21, 2026
8355ab1
refactor: set up spaces before parsing transforms
jo-mueller Jul 22, 2026
403f7f5
set up spaces first
jo-mueller Jul 22, 2026
cf64333
feat: retrieve coordinate systems during ozmp->tnd parsing to know dims
jo-mueller Jul 22, 2026
4d09712
docs: add notebook for changing dims
jo-mueller Jul 22, 2026
a354a12
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 22, 2026
58e4252
deps: require latest ozmp prerelease
jo-mueller Jul 24, 2026
97b802c
Merge branch 'introduce-scene-class' of https://github.com/jo-mueller…
jo-mueller Jul 24, 2026
3a1551a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 24, 2026
2f972c3
feat: write 0.6, not 0.6.dev4
jo-mueller Jul 24, 2026
129c351
feat write 0.6
jo-mueller Jul 24, 2026
ee3bc31
feat: add missing version checks in additional metadata
jo-mueller Jul 24, 2026
37149fb
tests: add 0.6 to tested versions in writer
jo-mueller Jul 24, 2026
40c7a70
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 24, 2026
9c7e4f0
tests: pull out scale transforms correctly irrespective of version
jo-mueller Jul 24, 2026
dc07c55
feat: default to 0.6 for writing
jo-mueller Jul 30, 2026
b12fb12
feat: add formatV06 class
jo-mueller Jul 30, 2026
75b9402
tests: add checks for what version is encountered
jo-mueller Jul 30, 2026
e0a03cd
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 30, 2026
934096c
Revert "[pre-commit.ci] auto fixes from pre-commit.com hooks"
jo-mueller Jul 31, 2026
62ecec6
Revert "tests: add checks for what version is encountered"
jo-mueller Jul 31, 2026
a9da128
Revert "feat: add formatV06 class"
jo-mueller Jul 31, 2026
dcd3858
deps: pin to zarr-python <3.3.0
jo-mueller Jul 31, 2026
75d9b10
fix(tests): support plain-string codec attributes in zarr >= 3.3
d-v-b Jul 31, 2026
90be359
Revert "deps: pin to zarr-python <3.3.0"
jo-mueller Jul 31, 2026
1265847
docs: fix jupyter notebook
jo-mueller Jul 31, 2026
f3d47bb
chore: pre-commit fixes
jo-mueller Jul 31, 2026
baeb9f4
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 31, 2026
bafd348
docs: add loading to documentation
jo-mueller Jul 31, 2026
2a9127d
feat: use ozmp classes to read and validate scene metadata
jo-mueller Jul 31, 2026
5307a50
Merge branch 'introduce-scene-class' of https://github.com/jo-mueller…
jo-mueller Jul 31, 2026
345fa86
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 31, 2026
32887a1
chore: remove unused variable
jo-mueller Jul 31, 2026
a9bfeae
chore: pre-commit fix
jo-mueller Jul 31, 2026
9a22b92
feat: store coordinateTransformations under according subgroup
jo-mueller Jul 31, 2026
1c6cbec
tests: add test for scene
jo-mueller Jul 31, 2026
762b487
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 31, 2026
89ae7f8
Merge branch 'claude/zarr-codec-enum-compat-d9bf40' into ready-for-06
jo-mueller Aug 3, 2026
924bc2c
Merge branch 'claude/zarr-codec-enum-compat-d9bf40' into introduce-sc…
jo-mueller Aug 3, 2026
c56ab5c
deps: undo dependency changes
jo-mueller Aug 3, 2026
f3ec4f3
feat: load coordinates/displacements back in before building graph
jo-mueller Aug 3, 2026
196ef15
tests: load displacements back in
jo-mueller Aug 3, 2026
5b1136a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 3, 2026
d0898e1
feat: write latest version
jo-mueller Aug 3, 2026
c89523b
Merge branch 'ready-for-06' into introduce-scene-class
jo-mueller Aug 3, 2026
dbae43d
Merge branch 'introduce-scene-class' of https://github.com/jo-mueller…
jo-mueller Aug 3, 2026
ea5d2f0
feat: infer image paths from metadata
jo-mueller Aug 3, 2026
96b2ac7
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 3, 2026
cba2c89
tests: add more chekcs about displacement field
jo-mueller Aug 4, 2026
52cab11
Merge branch 'introduce-scene-class' of https://github.com/jo-mueller…
jo-mueller Aug 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions docs/source/_toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ parts:
- file: advanced/transforms/index
sections:
- file: advanced/transforms/add_transforms_to_multiscales
- file: advanced/transforms/create_scenes
- file: advanced/transforms/reading_scenes
- file: advanced/transforms/scene_2d_to_3d

- file: advanced/sharding
- file: advanced/build_custom_pyramid
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": null,
"id": "2e7d870d",
"metadata": {},
"outputs": [
Expand All @@ -175,7 +175,7 @@
"source": [
"ms.to_ome_zarr(\n",
" \"multiscale_with_transforms.ome.zarr\",\n",
" version=\"0.6.dev4\", # specify the desired ome-zarr version\n",
" version=\"0.6\", # specify the desired ome-zarr version\n",
" overwrite=True,\n",
")"
]
Expand Down
255 changes: 255 additions & 0 deletions docs/source/advanced/transforms/create_scenes.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,255 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "8b0be7e9",
"metadata": {},
"source": [
"# Create Scenes\n",
"\n",
"(advanced:create-scenes)=\n",
"\n",
"This tutorial demonstrates basic usage around writing and reading [Ngff Scenes](https://ngff.openmicroscopy.org/specifications/dev/index.html#scene-metadata) using the {py:class}`ome_zarr.classes.scene.OMEZarrScene` class."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "a49ec1c2",
"metadata": {},
"outputs": [],
"source": [
"from skimage import data\n",
"\n",
"from ome_zarr import OMEZarrImage, OMEZarrMultiscale, OMEZarrScene"
]
},
{
"cell_type": "markdown",
"id": "98bbabd7",
"metadata": {},
"source": [
"We create some sample data, which we will store as a tiled layout in a scene zarr group:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "e3023c95",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\johan\\Documents\\GitHub\\ome-zarr-py\\.venv\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
" from .autonotebook import tqdm as notebook_tqdm\n"
]
},
{
"data": {
"text/plain": [
"(512, 512)"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"example_image = data.human_mitosis()\n",
"example_image.shape"
]
},
{
"cell_type": "markdown",
"id": "71e31e2a",
"metadata": {},
"source": [
"First, we cut the image into four tiles and convert them into instances of {py:class}`ome_zarr.classes.image.OMEZarrMultiscale`:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "017d4c59",
"metadata": {},
"outputs": [],
"source": [
"img1 = OMEZarrImage(data=example_image[:256, :256], axes=[\"y\", \"x\"], name=\"img1\")\n",
"img2 = OMEZarrImage(data=example_image[256:, :256], axes=[\"y\", \"x\"], name=\"img2\")\n",
"img3 = OMEZarrImage(data=example_image[:256, 256:], axes=[\"y\", \"x\"], name=\"img3\")\n",
"img4 = OMEZarrImage(data=example_image[256:, 256:], axes=[\"y\", \"x\"], name=\"img4\")\n",
"\n",
"img1_ms = OMEZarrMultiscale(img1)\n",
"img2_ms = OMEZarrMultiscale(img2)\n",
"img3_ms = OMEZarrMultiscale(img3)\n",
"img4_ms = OMEZarrMultiscale(img4)"
]
},
{
"cell_type": "markdown",
"id": "cf59df32",
"metadata": {},
"source": [
"Next, we need to define a coordinate system into which all images are projected.\n",
"This is defined in accordance with the NGFF [coordinate systems specification](https://ngff.openmicroscopy.org/specifications/dev/index.html#coordinatesystems-metadata)."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "994674c2",
"metadata": {},
"outputs": [],
"source": [
"coordinate_system = {\n",
" \"name\": \"world\",\n",
" \"axes\": [\n",
" {\"name\": \"y\", \"type\": \"space\"},\n",
" {\"name\": \"x\", \"type\": \"space\"},\n",
" ],\n",
"}"
]
},
{
"cell_type": "markdown",
"id": "c1d629be",
"metadata": {},
"source": [
"We then define translations that move each tile into the appropriate position in the world coordinate system.\n",
"In this example, these are simple translations in the y and x dimensions:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "d6329caa",
"metadata": {},
"outputs": [],
"source": [
"coordinate_transformations = [\n",
" {\n",
" \"type\": \"translation\",\n",
" \"translation\": [0, 0],\n",
" \"input\": {\"path\": \"img1\", \"name\": \"physical\"},\n",
" \"output\": {\"name\": \"world\"},\n",
" },\n",
" {\n",
" \"type\": \"translation\",\n",
" \"translation\": [256, 0],\n",
" \"input\": {\"path\": \"img2\", \"name\": \"physical\"},\n",
" \"output\": {\"name\": \"world\"},\n",
" },\n",
" {\n",
" \"type\": \"translation\",\n",
" \"translation\": [0, 256],\n",
" \"input\": {\"path\": \"img3\", \"name\": \"physical\"},\n",
" \"output\": {\"name\": \"world\"},\n",
" },\n",
" {\n",
" \"type\": \"translation\",\n",
" \"translation\": [256, 256],\n",
" \"input\": {\"path\": \"img4\", \"name\": \"physical\"},\n",
" \"output\": {\"name\": \"world\"},\n",
" },\n",
"]"
]
},
{
"cell_type": "markdown",
"id": "4444a8d3",
"metadata": {},
"source": [
"We can then create and write a scene like this:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "d05be093",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Writing images: 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 4/4 [00:00<00:00, 7.08it/s]\n"
]
}
],
"source": [
"scene = OMEZarrScene(\n",
" images=[img1_ms, img2_ms, img3_ms, img4_ms],\n",
" coordinate_systems=[coordinate_system],\n",
" coordinate_transformations=coordinate_transformations\n",
")\n",
"\n",
"scene.to_ome_zarr(\"test_example_scene.zarr\", overwrite=True)"
]
},
{
"cell_type": "markdown",
"id": "9333cd91",
"metadata": {},
"source": [
"....and load it back like this:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "8b87b923",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(Translation(type='translation', input=CoordinateSystemIdentifier(name='physical', path='img1'), output=CoordinateSystemIdentifier(name='world', path=None), name=None, translation=(0.0, 0.0)),\n",
" Translation(type='translation', input=CoordinateSystemIdentifier(name='physical', path='img2'), output=CoordinateSystemIdentifier(name='world', path=None), name=None, translation=(256.0, 0.0)),\n",
" Translation(type='translation', input=CoordinateSystemIdentifier(name='physical', path='img3'), output=CoordinateSystemIdentifier(name='world', path=None), name=None, translation=(0.0, 256.0)),\n",
" Translation(type='translation', input=CoordinateSystemIdentifier(name='physical', path='img4'), output=CoordinateSystemIdentifier(name='world', path=None), name=None, translation=(256.0, 256.0)))"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"loaded_scene = OMEZarrScene.from_ome_zarr(\"test_example_scene.zarr\")\n",
"loaded_scene.coordinate_transformations"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cd5dda7c",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "ome-zarr (3.13.12)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
92 changes: 92 additions & 0 deletions docs/source/advanced/transforms/reading_scenes.ipynb

Large diffs are not rendered by default.

Loading
Loading