From b7cd3811469c2207e7fd45c870010a2470c2c9d2 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 24 Sep 2025 23:43:41 +0200 Subject: [PATCH 01/55] Create .gitignore --- .gitignore | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..7cbb3e98 --- /dev/null +++ b/.gitignore @@ -0,0 +1,97 @@ +*/.DS_Store +**/__pycache__/* +*/index.html +_build +_bikeshed +.tox +.vscode +.*plist + +# do not sync auto-generated md files +docs/examples/ +docs/schemas/ + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg +*_version.py + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ +.napari_cache + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask instance folder +instance/ + +# Sphinx documentation +docs/_build/ + +# MkDocs documentation +/site/ + +# PyBuilder +target/ + +# IPython Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# OS +.DS_Store + +# written by setuptools_scm +*/_version.py + +# PyBuilder +.idea +venv/ From e20b3e9f1f49b818021211d61e48d98acaa6f1c5 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 24 Sep 2025 23:43:48 +0200 Subject: [PATCH 02/55] Create .readthedocs.yaml --- .readthedocs.yaml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .readthedocs.yaml diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000..e9d6c16b --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,30 @@ +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3.11" + jobs: + pre_build: + # Generate the Sphinx configuration for this Jupyter Book so it builds. + - "jupyter-book config sphinx docs/" + - "python ./docs/pre_build.py" + +python: + install: + - method: pip + path: . + extra_requirements: + - sphinx + - sphinx-book-theme + - sphinx-proof + - sphinx-inline-tabs + - sphinx-examples + - json-schema-for-humans + - myst-parser + - json_with_comments + +sphinx: + configuration: docs/conf.py + builder: html + fail_on_warning: true \ No newline at end of file From 5cc0e82dc12d945d8cc967b65e3fa8fbba280043 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 24 Sep 2025 23:44:07 +0200 Subject: [PATCH 03/55] configure jupyter-book --- _config.yml | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ _toc.yml | 15 +++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 _config.yml create mode 100644 _toc.yml diff --git a/_config.yml b/_config.yml new file mode 100644 index 00000000..84fe012f --- /dev/null +++ b/_config.yml @@ -0,0 +1,48 @@ +# Book settings +# Learn more at https://jupyterbook.org/customize/config.html +# Comprehensive example: https://github.com/executablebooks/jupyter-book/blob/master/docs/_config.yml + +title: Next-generation file format specification +author: Josh Moore +logo: https://www.openmicroscopy.org/img/logos/ome-logomark.svg + +# Force re-execution of notebooks on each build. +# See https://jupyterbook.org/content/execute.html +execute: + execute_notebooks: off + +# Define the name of the latex output file for PDF builds +latex: + latex_documents: + targetname: book.tex + +# Add a bibtex file so that we can create citations +bibtex_bibfiles: + - references.bib + +# Information about where the book exists on the web +repository: + url: https://github.com/ome/ngff-spec # Online location of your book + path_to_book: docs # Optional path to your book, relative to the repository root + branch: main # Which branch of the repository should be used when creating links (optional) + +# Add GitHub buttons to your book +# See https://jupyterbook.org/customize/config.html#add-a-link-to-your-repository +html: + use_issues_button: true + use_repository_button: true + + +sphinx: + extra_extensions: + - sphinx.ext.autosummary + - sphinx.ext.autodoc + - sphinx.ext.napoleon # Enable support for NumPy and Google style docstrings + - sphinx.ext.intersphinx + - sphinx_inline_tabs + - sphinx_proof + - sphinx_examples + + config: + add_module_names: True + autosummary_generate: True \ No newline at end of file diff --git a/_toc.yml b/_toc.yml new file mode 100644 index 00000000..827d9776 --- /dev/null +++ b/_toc.yml @@ -0,0 +1,15 @@ +# Table of contents +# Learn more at https://jupyterbook.org/customize/toc.html + +format: jb-book +root: intro + +chapters: +- file: specification +- file: docs/examples + sections: + - glob: docs/examples/* + exclude: docs/examples/examples.md +- file: docs/schemas + sections: + - glob: docs/schemas/* \ No newline at end of file From 7a615b81dd2ed8e784a30ab5ee0edfe4cae259d2 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 24 Sep 2025 23:44:25 +0200 Subject: [PATCH 04/55] moved _includes to new directory --- copyright.include => docs/_includes/copyright.include | 0 header.include => docs/_includes/header.include | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename copyright.include => docs/_includes/copyright.include (100%) rename header.include => docs/_includes/header.include (100%) diff --git a/copyright.include b/docs/_includes/copyright.include similarity index 100% rename from copyright.include rename to docs/_includes/copyright.include diff --git a/header.include b/docs/_includes/header.include similarity index 100% rename from header.include rename to docs/_includes/header.include From ef34d197025067c0c179ee9e4e817d734c24c052 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 24 Sep 2025 23:44:46 +0200 Subject: [PATCH 05/55] renamed bikeshed file to specification.md --- index.bs => specification.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename index.bs => specification.md (99%) diff --git a/index.bs b/specification.md similarity index 99% rename from index.bs rename to specification.md index 6211d398..805229f3 100644 --- a/index.bs +++ b/specification.md @@ -21,7 +21,7 @@ Status Text: will be provided between numbered versions. Data written with these Status Text: (an "editor's draft") will not necessarily be supported. -OME-Zarr specification {#ome-zarr} +# OME-Zarr specification {#ome-zarr} ---------------------------------- The conventions and specifications defined in this document are designed to @@ -69,7 +69,7 @@ The following layout describes the expected Zarr hierarchy for images with multiple levels of resolutions and optionally associated labels. Note that the number of dimensions is variable between 2 and 5 and that axis names are arbitrary, see [[#multiscale-md]] for details. -
+```
 ├── 123.zarr                  # One OME-Zarr image (id=123).
 │   ...
 │
@@ -107,7 +107,7 @@ Note that the number of dimensions is variable between 2 and 5 and that axis nam
                 ├── 0         # Each multiscale level is stored as a separate Zarr array, as above, but only integer values
                 └── ...       # are supported.
                 
-
+``` From 4c80c2ad68622c48445cc4514856d1ff18d39bad Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 24 Sep 2025 23:44:55 +0200 Subject: [PATCH 06/55] added ngff reference --- references.bib | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 references.bib diff --git a/references.bib b/references.bib new file mode 100644 index 00000000..cea36a61 --- /dev/null +++ b/references.bib @@ -0,0 +1,10 @@ +@article{moore2021ome, + title={OME-NGFF: a next-generation file format for expanding bioimaging data-access strategies}, + author={Moore, Josh and Allan, Chris and Besson, S{\'e}bastien and Burel, Jean-Marie and Diel, Erin and Gault, David and Kozlowski, Kevin and Lindner, Dominik and Linkert, Melissa and Manz, Trevor and others}, + journal={Nature methods}, + volume={18}, + number={12}, + pages={1496--1498}, + year={2021}, + publisher={Nature Publishing Group US New York} +} \ No newline at end of file From d47a52913752d6cf94f8ca0b92b7526c6ca2863c Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 25 Sep 2025 00:09:26 +0200 Subject: [PATCH 07/55] Create intro.md --- intro.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 intro.md diff --git a/intro.md b/intro.md new file mode 100644 index 00000000..1f8feeb5 --- /dev/null +++ b/intro.md @@ -0,0 +1,3 @@ +# NGFF + +This page contains next-generation file format (NGFF) specifications for storing bioimaging data in the cloud. All specifications are submitted to the https://image.sc community for review. It also provides example metadata files as well as json schema files to ease practical implementation and provide validation targets for datasets in the field. \ No newline at end of file From 62c89fc403867c8568f8d37c1c2c7e7fbaf610e3 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 25 Sep 2025 00:09:42 +0200 Subject: [PATCH 08/55] create section header files --- docs/examples.md | 3 +++ docs/schemas.md | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 docs/examples.md create mode 100644 docs/schemas.md diff --git a/docs/examples.md b/docs/examples.md new file mode 100644 index 00000000..d7c1c369 --- /dev/null +++ b/docs/examples.md @@ -0,0 +1,3 @@ +# JSON Examples + +This document contains JSON examples for ngff-compliant metadata layouts. \ No newline at end of file diff --git a/docs/schemas.md b/docs/schemas.md new file mode 100644 index 00000000..46bd9a73 --- /dev/null +++ b/docs/schemas.md @@ -0,0 +1,3 @@ +# JSON schemas + +Here is some information on the json schemas \ No newline at end of file From 6606a9c50ef91ceb125c29acb385ee42cc917436 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 25 Sep 2025 00:09:53 +0200 Subject: [PATCH 09/55] Create pre_build.py --- docs/pre_build.py | 91 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 docs/pre_build.py diff --git a/docs/pre_build.py b/docs/pre_build.py new file mode 100644 index 00000000..e77fa0d2 --- /dev/null +++ b/docs/pre_build.py @@ -0,0 +1,91 @@ +# %% +import os +import json +import glob +from pathlib import Path +import jsonc as json +import yaml + +# %% +# change working directory to the location of this script +os.chdir(os.path.dirname(os.path.abspath(__file__))) + +# %% +# glob recursively to find all json files +input_directory = '../examples' +output_directory = 'examples' +os.makedirs(output_directory, exist_ok=True) +example_types = os.listdir(input_directory) + + +md_files = [] + +for example in example_types: + json_files = glob.glob(os.path.join(input_directory, example, '*.json'), recursive=True) + + example_directory = os.path.join(output_directory, example) + markdown_file_name = os.path.join(output_directory, f'{example}.md') + + # add header + markdown_content = f"""# {example}\n\n + +This document contains JSON examples for {example} metadata layouts. + +""" + + # append each json file content + for json_file in json_files: + print(f'Processing {json_file}...') + with open(json_file, 'r') as file: + json_data = json.load(file) + json_str = json.dumps(json_data, indent=4) + json_file_name = Path(json_file).stem + + # Create the Markdown content + markdown_content += f""" +## {os.path.splitext(json_file_name)[0]} +(examples:{example}:{Path(json_file).stem})= + +```{{code-block}} json +:caption: {json_file_name} +:linenos: + +{json_str} +``` +""" + + # create + with open(markdown_file_name, 'w') as md_file: + + md_file.write(markdown_content) + md_files.append(markdown_file_name) + +# %% [markdown] +# ## json schema + +# %% +from json_schema_for_humans.generate import generate_from_filename +from json_schema_for_humans.generation_configuration import GenerationConfiguration + +schema_source_dir = '../schemas' +output_directory = 'schemas' +schema_files = glob.glob(os.path.join(schema_source_dir, '*.schema'), recursive=True) + +for schema_file in schema_files: + output_md_path = os.path.join(output_directory, f"{Path(schema_file).stem}.md") + print(f'Processing {schema_file}...') + + # Generate the documentation + config = GenerationConfiguration( + template_name='md', + with_footer=True, + show_toc=True, + link_to_reused_ref=False) + try: + generate_from_filename( + schema_file, + result_file_name=output_md_path, + config=config + ) + except Exception as e: + print(f"Error processing {schema_file}: {e}") From 640cdcf588327e54aa235948240523723f0d11bc Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 25 Sep 2025 00:10:00 +0200 Subject: [PATCH 10/55] Update _config.yml --- _config.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 84fe012f..1be635af 100644 --- a/_config.yml +++ b/_config.yml @@ -8,8 +8,8 @@ logo: https://www.openmicroscopy.org/img/logos/ome-logomark.svg # Force re-execution of notebooks on each build. # See https://jupyterbook.org/content/execute.html -execute: - execute_notebooks: off +# execute: +# execute_notebooks: off # Define the name of the latex output file for PDF builds latex: @@ -32,6 +32,13 @@ html: use_issues_button: true use_repository_button: true +myst: + enable_extensions: + - colon_fence + - deflist + - dollarmath + - linkify + - substitution sphinx: extra_extensions: From 5ef390b7f652e954a2a83bb38202a6f189e6a4d5 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 25 Sep 2025 00:10:08 +0200 Subject: [PATCH 11/55] create propper title --- specification.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/specification.md b/specification.md index 805229f3..4dc4e3bd 100644 --- a/specification.md +++ b/specification.md @@ -1,3 +1,5 @@ +# OME-Zarr specification +
 Title: OME-Zarr specification
 Shortname: ome-zarr

From 35e39833dd5fd2ab27a926730c5a0dc7900b2d88 Mon Sep 17 00:00:00 2001
From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com>
Date: Thu, 25 Sep 2025 13:53:47 +0200
Subject: [PATCH 12/55] added header information to project

---
 _config.yml                      | 28 ++++++++++++++++++++--
 docs/_includes/copyright.include |  4 ----
 specification.md                 | 41 +++++++++++++-------------------
 3 files changed, 43 insertions(+), 30 deletions(-)
 delete mode 100644 docs/_includes/copyright.include

diff --git a/_config.yml b/_config.yml
index 1be635af..f432f91d 100644
--- a/_config.yml
+++ b/_config.yml
@@ -31,6 +31,16 @@ repository:
 html:
   use_issues_button: true
   use_repository_button: true
+  extra_footer: |
+      
+ Copyright © 2020- + OME® + (U. Dundee). + OME trademark rules apply. +
+ myst: enable_extensions: @@ -40,6 +50,7 @@ myst: - linkify - substitution + sphinx: extra_extensions: - sphinx.ext.autosummary @@ -49,7 +60,20 @@ sphinx: - sphinx_inline_tabs - sphinx_proof - sphinx_examples - config: + html_show_copyright: false add_module_names: True - autosummary_generate: True \ No newline at end of file + autosummary_generate: True + + myst_substitutions: + title: "OME-Zarr specification" + shortname: "ome-zarr" + level: "1" + status: "CG-FINAL" + tr_url: "https://ngff.openmicroscopy.org/0.5/" + url: "https://ngff.openmicroscopy.org/0.6-dev/" + issue_tracking: "[Forum](https://forum.image.sc/tag/ome-ngff), [Github](https://github.com/ome/ngff/issues)" + logo: "http://www.openmicroscopy.org/img/logos/ome-logomark.svg" + editor_name: "[Josh Moore](https://gerbi-gmb.de/)" + editor_affiliation: "German BioImaging e.V." + editor_orcid: "[https://orcid.org/0000-0003-4028-811X](https://orcid.org/0000-0003-4028-811X)" \ No newline at end of file diff --git a/docs/_includes/copyright.include b/docs/_includes/copyright.include deleted file mode 100644 index f0def708..00000000 --- a/docs/_includes/copyright.include +++ /dev/null @@ -1,4 +0,0 @@ -Copyright © 2020-[YEAR] -OME® -(U. Dundee). -OME trademark rules apply. diff --git a/specification.md b/specification.md index 4dc4e3bd..b80fe125 100644 --- a/specification.md +++ b/specification.md @@ -1,27 +1,20 @@ -# OME-Zarr specification - -
-Title: OME-Zarr specification
-Shortname: ome-zarr
-Level: 1
-Status: w3c/CG-FINAL
-TR: https://ngff.openmicroscopy.org/0.5/
-URL: https://ngff.openmicroscopy.org/0.6-dev/
-Repository: https://github.com/ome/ngff
-Issue Tracking: Forums https://forum.image.sc/tag/ome-ngff
-Logo: http://www.openmicroscopy.org/img/logos/ome-logomark.svg
-Local Boilerplate: header yes, copyright yes
-Boilerplate: style-darkmode off
-Markup Shorthands: markdown yes
-Editor: Josh Moore, German BioImaging e.V., https://gerbi-gmb.de/, https://orcid.org/0000-0003-4028-811X
-Text Macro: NGFFVERSION 0.5
-Abstract: This document contains next-generation file format (NGFF)
-Abstract: specifications for storing bioimaging data in the cloud.
-Abstract: All specifications are submitted to the https://image.sc community for review.
-Status Text: The current released version of this specification is 0.5. Migration scripts
-Status Text: will be provided between numbered versions. Data written with these latest changes
-Status Text: (an "editor's draft") will not necessarily be supported.
-
+# {{ title }} + +**Shortname:** {{ shortname }}
+**Level:** {{ level }}
+**Status:** {{ status }}
+ +**Feedback:** {{ issue_tracking }}
+ +**Editor:** {{ editor_name }}, ({{ editor_affiliation }}), {{ editor_orcid }} + +## Abstract + +This document contains next-generation file format (NGFF) specifications for storing bioimaging data in the cloud. All specifications are submitted to the https://image.sc community for review. + +## Status of This Document + +The current released version of this specification is 0.5. Migration scripts will be provided between numbered versions. Data written with these latest changes (an "editor's draft") will not necessarily be supported. # OME-Zarr specification {#ome-zarr} ---------------------------------- From d24b1fd0ecf0a3cbdcf126d55832287c2bd0bfb5 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 25 Sep 2025 13:53:57 +0200 Subject: [PATCH 13/55] make code cleaner --- docs/pre_build.py | 118 ++++++++++++++++++++++------------------------ 1 file changed, 57 insertions(+), 61 deletions(-) diff --git a/docs/pre_build.py b/docs/pre_build.py index e77fa0d2..94c964db 100644 --- a/docs/pre_build.py +++ b/docs/pre_build.py @@ -6,43 +6,39 @@ import jsonc as json import yaml -# %% # change working directory to the location of this script os.chdir(os.path.dirname(os.path.abspath(__file__))) -# %% -# glob recursively to find all json files -input_directory = '../examples' -output_directory = 'examples' -os.makedirs(output_directory, exist_ok=True) -example_types = os.listdir(input_directory) - -md_files = [] +def build_json_examples(): + """Build markdown files from json examples.""" + # glob recursively to find all json files + input_directory = '../examples' + output_directory = 'examples' + os.makedirs(output_directory, exist_ok=True) + example_types = os.listdir(input_directory) -for example in example_types: - json_files = glob.glob(os.path.join(input_directory, example, '*.json'), recursive=True) + for example in example_types: + json_files = glob.glob(os.path.join(input_directory, example, '*.json'), recursive=True) + markdown_file_name = os.path.join(output_directory, f'{example}.md') - example_directory = os.path.join(output_directory, example) - markdown_file_name = os.path.join(output_directory, f'{example}.md') - - # add header - markdown_content = f"""# {example}\n\n + # add header + markdown_content = f"""# {example}\n\n This document contains JSON examples for {example} metadata layouts. """ - # append each json file content - for json_file in json_files: - print(f'Processing {json_file}...') - with open(json_file, 'r') as file: - json_data = json.load(file) - json_str = json.dumps(json_data, indent=4) - json_file_name = Path(json_file).stem + # append each json file content + for json_file in json_files: + print(f'Processing {json_file}...') + with open(json_file, 'r') as file: + json_data = json.load(file) + json_str = json.dumps(json_data, indent=4) + json_file_name = Path(json_file).stem - # Create the Markdown content - markdown_content += f""" + # Create the Markdown content + markdown_content += f""" ## {os.path.splitext(json_file_name)[0]} (examples:{example}:{Path(json_file).stem})= @@ -53,39 +49,39 @@ {json_str} ``` """ - - # create - with open(markdown_file_name, 'w') as md_file: - - md_file.write(markdown_content) - md_files.append(markdown_file_name) - -# %% [markdown] -# ## json schema - -# %% -from json_schema_for_humans.generate import generate_from_filename -from json_schema_for_humans.generation_configuration import GenerationConfiguration - -schema_source_dir = '../schemas' -output_directory = 'schemas' -schema_files = glob.glob(os.path.join(schema_source_dir, '*.schema'), recursive=True) - -for schema_file in schema_files: - output_md_path = os.path.join(output_directory, f"{Path(schema_file).stem}.md") - print(f'Processing {schema_file}...') - - # Generate the documentation - config = GenerationConfiguration( - template_name='md', - with_footer=True, - show_toc=True, - link_to_reused_ref=False) - try: - generate_from_filename( - schema_file, - result_file_name=output_md_path, - config=config - ) - except Exception as e: - print(f"Error processing {schema_file}: {e}") + # create + with open(markdown_file_name, 'w') as md_file: + md_file.write(markdown_content) + +def build_json_schemas(): + from json_schema_for_humans.generate import generate_from_filename + from json_schema_for_humans.generation_configuration import GenerationConfiguration + + schema_source_dir = '../schemas' + output_directory = 'schemas' + os.makedirs(output_directory, exist_ok=True) + schema_files = glob.glob(os.path.join(schema_source_dir, '*.schema'), recursive=True) + + for schema_file in schema_files: + if 'strict' in schema_file: + continue # skip strict schemas + output_md_path = os.path.join(output_directory, f"{Path(schema_file).stem}.md") + print(f'Processing {schema_file}...') + + # Generate the documentation + config = GenerationConfiguration( + template_name='md', + with_footer=True, + show_toc=False, + link_to_reused_ref=False) + try: + generate_from_filename( + os.path.abspath(schema_file), + result_file_name=os.path.abspath(output_md_path), + config=config + ) + except Exception as e: + print(f"Error processing {schema_file}: {e}") + +build_json_examples() +build_json_schemas() From e64e4ff8517781a5ebd937a8bc5dc1146d552b94 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 25 Sep 2025 13:54:05 +0200 Subject: [PATCH 14/55] fixed myst references --- specification.md | 59 +++++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/specification.md b/specification.md index b80fe125..4b91a35c 100644 --- a/specification.md +++ b/specification.md @@ -16,8 +16,6 @@ This document contains next-generation file format (NGFF) specifications for sto The current released version of this specification is 0.5. Migration scripts will be provided between numbered versions. Data written with these latest changes (an "editor's draft") will not necessarily be supported. -# OME-Zarr specification {#ome-zarr} ----------------------------------- The conventions and specifications defined in this document are designed to enable next-generation file formats to represent the same bioimaging data @@ -42,8 +40,8 @@ implementations that are later submitted as a formal specification. (See [[#bf2r Some of the JSON examples in this document include comments. However, these are only for clarity purposes and comments MUST NOT be included in JSON objects. -Storage format {#storage-format} -================================ +Storage format +============== OME-Zarr is implemented using the Zarr format as defined by the [version 3 of the Zarr specification](https://zarr-specs.readthedocs.io/en/latest/v3/core/v3.0.html). @@ -57,12 +55,12 @@ is represented here as it would appear locally but could equally be stored on a web server to be accessed via HTTP or in object storage like S3 or GCS. -Images {#image-layout} ----------------------- +Images +------ The following layout describes the expected Zarr hierarchy for images with multiple levels of resolutions and optionally associated labels. -Note that the number of dimensions is variable between 2 and 5 and that axis names are arbitrary, see [[#multiscale-md]] for details. +Note that the number of dimensions is variable between 2 and 5 and that axis names are arbitrary, see [multiscales metadata](multiscale-md) for details. ``` ├── 123.zarr # One OME-Zarr image (id=123). @@ -106,19 +104,19 @@ Note that the number of dimensions is variable between 2 and 5 and that axis nam -High-content screening {#hcs-layout} ------------------------------------- +High-content screening +---------------------- The following specification defines the hierarchy for a high-content screening dataset. Three groups MUST be defined above the images: - the group above the images defines the well and MUST implement the - [well specification](#well-md). All images contained in a well are fields + [well specification](well-md). All images contained in a well are fields of view of the same well - the group above the well defines a row of wells - the group above the well row defines an entire plate i.e. a two-dimensional collection of wells organized in rows and columns. It MUST implement the - [plate specification](#plate-md) + [plate specification](plate-md) A well row group SHOULD NOT be present if there are no images in the well row. A well group SHOULD NOT be present if there are no images in the well. @@ -171,11 +169,13 @@ The OME-Zarr Metadata version MUST be consistent within a hierarchy. } ``` -"axes" metadata {#axes-md} +"axes" metadata -------------------------- +{#axes-md} + "axes" describes the dimensions of a coordinate systems and adds an interpretation to the data along that dimension. A named collection -of axes forms a coordinate system ([[#coord-sys-md]]) (see below). +of axes forms a [coordinate system](coord-sys-md). It is a list of dictionaries, where each dictionary describes a dimension (axis) and: - MUST contain the field "name" that gives the name for this dimension. The values MUST be unique across all "name" fields. - SHOULD contain the field "type". It SHOULD be one of the strings "array", "space", "time", "channel", "coordinate", or @@ -185,7 +185,7 @@ It is a list of dictionaries, where each dictionary describes a dimension (axis) - Units for "time" axes: 'attosecond', 'centisecond', 'day', 'decisecond', 'exasecond', 'femtosecond', 'gigasecond', 'hectosecond', 'hour', 'kilosecond', 'megasecond', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'petasecond', 'picosecond', 'second', 'terasecond', 'yoctosecond', 'yottasecond', 'zeptosecond', 'zettasecond' - MAY contain the field "longName". The value MUST be a string, and can provide a longer name or description of an axis and its properties. -The "axes" are used as part of [[#multiscale-md]]. The length of "axes" MUST be equal to the number of dimensions of the arrays that contain the image data. +The "axes" are used as part of [multiscales metadata](multiscales-md). The length of "axes" MUST be equal to the number of dimensions of the arrays that contain the image data. The "dimension_names" attribute MUST be included in the `zarr.json` of the Zarr array of a multiscale level and MUST match the names in the "axes" metadata. @@ -238,9 +238,11 @@ to the discrete axis `"c"`. Indexing an image at the point `(1, 0.2, 0.3, 0.4)` -"coordinateSystems" metadata {#coord-sys-md} +"coordinateSystems" metadata -------------------------- +{#coord-sys-md} + A "coordinate system" is a collection of "axes" / dimensions with a name. Every coordinate system: - MUST contain the field "name". The value MUST be a non-empty string that is unique among `coordinateSystem`s. - MUST contain the field "axes", whose value is an array of valid "axes". @@ -280,7 +282,7 @@ collected at different angles, a measurement by instrument 1 at the point with c measurement at the same point in instrument 2 (i.e., it may not be the same physical location in the sample). To analyze both images together, they must be in the same coordinate system. -The set of coordinate transformations ([[#trafo-md]]) encodes relationships between coordinate systems, specifically, how to +The set of [coordinate transformations](trafo-md) encodes relationships between coordinate systems, specifically, how to convert points and images to different coordinate systems. Implementations can apply the coordinate transform to images or points in coordinate system "sampleA_instrument2" to bring them into the "sampleA_instrument1" coordinate system. In this case, the ROI should be transformed to the "sampleA_image1" coordinate system, then used for quantification with the instrument 1 @@ -477,9 +479,11 @@ Conforming readers: - MAY ignore other groups or arrays under the root of the hierarchy. -"coordinateTransformations" metadata {#trafo-md} +"coordinateTransformations" metadata ------------------------------------------------ +{#trafo-md} + "coordinateTransformations" describe the mapping between two coordinate systems (defined by "axes"). For example, to map an array's discrete coordinate system to its corresponding physical coordinates. Coordinate transforms are in the "forward" direction. They represent functions from *points* in the @@ -547,7 +551,7 @@ Conforming readers: - SHOULD be able to apply transformations to points; - SHOULD be able to apply transformations to images; -Coordinate transformations from array to physical coordinates MUST be stored in multiscales ([[#multiscale-md]]). +Coordinate transformations from array to physical coordinates MUST be stored in [multiscales](multiscale-md). Transformations between different images MUST be stored in the attributes of a parent zarr group. For transformations that store data or parameters in a zarr array, those zarr arrays SHOULD be stored in a zarr group `"coordinateTransformations"`. @@ -1335,8 +1339,9 @@ highlight: json -"multiscales" metadata {#multiscale-md} ---------------------------------------- +"multiscales" metadata +---------------------- +(multiscale-md)= Metadata about an image can be found under the "multiscales" key in the group-level OME-Zarr Metadata. Here, image refers to 2 to 5 dimensional data representing image or volumetric data with optional time or channel axes. @@ -1344,7 +1349,7 @@ It is stored in a multiple resolution representation. "multiscales" contains a list of dictionaries where each entry describes a multiscale image. -Each "multiscales" dictionary MUST contain the field "coordinateSystems", see [[#coord-sys-md]], with the following constraints. +Each "multiscales" dictionary MUST contain the field "coordinateSystems", see [coordinateSystems metadata](coord-sys-md), with the following constraints. The length of "axes" must be between 2 and 5 and MUST be equal to the dimensionality of the zarr arrays storing the image data (see "datasets:path"). The "axes" MUST contain 2 or 3 entries of "type:space" and MAY contain one additional entry of "type:time" and MAY contain one additional entry of "type:channel" or a null / custom type. The order of the entries MUST correspond to the order of dimensions of the zarr arrays. In addition, the entries MUST be ordered by "type" where the "time" axis must come first (if present), followed by the "channel" or custom axis (if present) and the axes of type "space". @@ -1356,7 +1361,7 @@ to the current zarr group. The "path"s MUST be ordered from largest (i.e. highes Each "datasets" dictionary MUST have the same number of dimensions and MUST NOT have more than 5 dimensions. The number of dimensions and order MUST correspond to number and order of "axes". Each dictionary in "datasets" MUST contain the field "coordinateTransformations", which contains a list of transformations that map the data coordinates to the physical coordinates (as specified by "axes") for this resolution level. -The transformations are defined according to [[#trafo-md]]. +The transformations are defined according to [coordinateTransformations metadata](trafo-md). They MUST contain exactly one `scale` transformation that specifies the pixel size in physical units or time duration. If scaling information is not available or applicable for one of the axes, the value MUST express the scaling factor between the current resolution and the first resolution for the given axis, defaulting to 1.0 if there is no downsampling along the axis. It MAY contain exactly one `translation` that specifies the offset from the origin in physical units. If `translation` is given it MUST be listed after `scale` to ensure that it is given in physical coordinates. @@ -1510,7 +1515,7 @@ The `plate` dictionary MAY contain an `acquisitions` key whose value MUST be a l JSON objects defining the acquisitions for a given plate to which wells can refer to. Each acquisition object MUST contain an `id` key whose value MUST be an unique integer identifier greater than or equal to 0 within the context of the plate to which fields of view can refer -to (see #well-md). +to (see [well metadata](well-md)). Each acquisition object SHOULD contain a `name` key whose value MUST be a string identifying the name of the acquisition. Each acquisition object SHOULD contain a `maximumfieldcount` key whose value MUST be a positive integer indicating the maximum number of fields of view for the @@ -1572,8 +1577,10 @@ path: examples/plate_strict/plate_2wells.json highlight: json
-"well" metadata {#well-md} --------------------------- +"well" metadata +--------------- + +{#well-md} For high-content screening datasets, the metadata about all fields of views under a given well can be found under the "well" key in the attributes of the @@ -1585,7 +1592,7 @@ specifying all fields of views for a given well. Each image object MUST contain MUST contain only alphanumeric characters, MUST be case-sensitive, and MUST NOT be a duplicate of any other `path` in the `images` list. If multiple acquisitions were performed in the plate, it MUST contain an `acquisition` key whose value MUST be an integer identifying the acquisition -which MUST match one of the acquisition JSON objects defined in the plate metadata (see #plate-md). +which MUST match one of the acquisition JSON objects defined in the [plate metadata](plate-md). The `well` dictionary SHOULD contain a `version` key whose value MUST be a string specifying the version of the well specification. From 169fe30aec4a02ba0955cc8e61c3d137e736d08c Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 25 Sep 2025 13:55:26 +0200 Subject: [PATCH 15/55] Create requirements.txt --- requirements.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..e4cf6cc4 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +jupyter-book +json-schema-for-humans +jason-with-comments +sphinx-inline-tabs +sphinx-proof +sphinx-examples \ No newline at end of file From b0bed90a0215a5f6aab499960dd9c5826f33c18f Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 25 Sep 2025 14:01:44 +0200 Subject: [PATCH 16/55] move requirements to separate file --- .readthedocs.yaml | 11 ++--------- docs/requirements.txt | 9 +++++++++ 2 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 docs/requirements.txt diff --git a/.readthedocs.yaml b/.readthedocs.yaml index e9d6c16b..5291fb87 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -12,17 +12,10 @@ build: python: install: + - requirements: docs/requirements.txt - method: pip path: . - extra_requirements: - - sphinx - - sphinx-book-theme - - sphinx-proof - - sphinx-inline-tabs - - sphinx-examples - - json-schema-for-humans - - myst-parser - - json_with_comments + sphinx: configuration: docs/conf.py diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 00000000..4201ed42 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,9 @@ +sphinx +sphinx-book-theme +sphinx-proof +sphinx-inline-tabs +sphinx-examples +json-schema-for-humans +myst-parser +json_with_comments +jupyter-book \ No newline at end of file From f9273408eb4e66ea517d3833461b5b1994670846 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 25 Sep 2025 14:05:38 +0200 Subject: [PATCH 17/55] remove installation attempt --- .readthedocs.yaml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 5291fb87..64d55372 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -3,7 +3,7 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3.11" + python: "3.13" jobs: pre_build: # Generate the Sphinx configuration for this Jupyter Book so it builds. @@ -13,11 +13,7 @@ build: python: install: - requirements: docs/requirements.txt - - method: pip - path: . sphinx: - configuration: docs/conf.py - builder: html - fail_on_warning: true \ No newline at end of file + configuration: docs/conf.py \ No newline at end of file From 7c37de8218697455efe5dae01ab07650a5e32955 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 25 Sep 2025 14:12:11 +0200 Subject: [PATCH 18/55] change conversion target folder --- .readthedocs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 64d55372..360f7af7 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -7,7 +7,7 @@ build: jobs: pre_build: # Generate the Sphinx configuration for this Jupyter Book so it builds. - - "jupyter-book config sphinx docs/" + - "jupyter-book config sphinx ." - "python ./docs/pre_build.py" python: From 780e89f27fc3d275e8f2817494f24c8bce8c30a2 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 25 Sep 2025 14:16:18 +0200 Subject: [PATCH 19/55] fix conf.py location --- .readthedocs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 360f7af7..cc67767f 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -16,4 +16,4 @@ python: sphinx: - configuration: docs/conf.py \ No newline at end of file + configuration: conf.py \ No newline at end of file From d9539b6fe4978e54698c3ab2c7846d34211d7025 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 25 Sep 2025 14:36:40 +0200 Subject: [PATCH 20/55] Use spec-text as front-page --- _toc.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/_toc.yml b/_toc.yml index 827d9776..1cdd0bf9 100644 --- a/_toc.yml +++ b/_toc.yml @@ -2,10 +2,9 @@ # Learn more at https://jupyterbook.org/customize/toc.html format: jb-book -root: intro +root: specification chapters: -- file: specification - file: docs/examples sections: - glob: docs/examples/* From 2cb1c2dba672fdedb18871e12c0a1207b8d121d3 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:52:15 +0200 Subject: [PATCH 21/55] convert links to myst-references --- specification.md | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/specification.md b/specification.md index 4b91a35c..dde0cbca 100644 --- a/specification.md +++ b/specification.md @@ -34,7 +34,7 @@ The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL intention of removing it in the future. Implementations may be expected (MUST) or encouraged (SHOULD) to support the reading of the data, but writing will usually be optional (MAY). Examples of transitional metadata include custom additions by -implementations that are later submitted as a formal specification. (See [[#bf2raw]]) +implementations that are later submitted as a formal specification. (See [bioformats2raw](bf2raw))

Some of the JSON examples in this document include comments. However, these are only for @@ -400,8 +400,9 @@ half-open interval `[-0.5, 0.5) x [-0.5, 0.5)` (i.e., -0.5 is included, +0.5 is -"bioformats2raw.layout" (transitional) {#bf2raw} ------------------------------------------------- +"bioformats2raw.layout" (transitional) +-------------------------------------- +(bf2raw)= [=Transitional=] "bioformats2raw.layout" metadata identifies a group which implicitly describes a series of images. The need for the collection stems from the common "multi-image file" scenario in microscopy. Parsers like Bio-Formats @@ -435,7 +436,7 @@ highlight: json If the top-level group represents a plate, the `bioformats2raw.layout` metadata will be present but -the "plate" key MUST also be present, takes precedence and parsing of such datasets should follow [[#plate-md]]. It is not +the "plate" key MUST also be present, takes precedence and parsing of such datasets should follow (see [plate metadata](plate-md)). It is not possible to mix collections of images with plates at present.
@@ -1396,8 +1397,9 @@ if not datasets:
     datasets = [x["path"] for x in multiscales[0]["datasets"]]
 ```
 
-"omero" metadata (transitional) {#omero-md}
--------------------------------------------
+"omero" metadata (transitional)
+-------------------------------
+(omero-md)=
 
 [=Transitional=] information specific to the channels of an image and how to render it
 can be found under the "omero" key in the group-level metadata:
@@ -1437,8 +1439,9 @@ Each dictionary in "channels" MUST contain the field "window", which is a dictio
 The field "window" MUST contain the fields "min" and "max", which are the minimum and maximum values of the window, respectively.
 It MUST also contain the fields "start" and "end", which are the start and end values of the window, respectively.
 
-"labels" metadata {#labels-md}
-------------------------------
+"labels" metadata
+-----------------
+(labels-md)=
 
 In OME-Zarr, Zarr arrays representing pixel-annotation data are stored in a group called "labels". Some applications--notably image segmentation--produce 
 a new image that is in the same coordinate system as a corresponding multiscale image (usually having the same dimensions and coordinate transformations). 
@@ -1505,8 +1508,9 @@ highlight: json
 In this case, the pixels consisting of a 0 in the Zarr array will be displayed as 50% blue and 50% opacity. Pixels with a 1 in the Zarr array, 
 which correspond to cellular space, will be displayed as 50% green and 50% opacity. 
 
-"plate" metadata {#plate-md}
-----------------------------
+"plate" metadata
+----------------
+(plate-md)=
 
 For high-content screening datasets, the plate layout can be found under the
 custom attributes of the plate group under the `plate` key in the group-level metadata.

From 53ab4295cf78ac82e6fec610a43e58b53fb369af Mon Sep 17 00:00:00 2001
From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com>
Date: Wed, 1 Oct 2025 14:22:23 +0200
Subject: [PATCH 22/55] add zenodo reference

---
 references.bib | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/references.bib b/references.bib
index cea36a61..90d674c8 100644
--- a/references.bib
+++ b/references.bib
@@ -7,4 +7,18 @@ @article{moore2021ome
   pages={1496--1498},
   year={2021},
   publisher={Nature Publishing Group US New York}
+}
+
+@software{ngff_spec_latest,
+  author       = {Josh Moore},
+  title        = {ome/ngff: Next-generation file format (NGFF)
+                   specifications for storing bioimaging data in the
+                   cloud.
+                  },
+  month        = nov,
+  year         = 2020,
+  publisher    = {Zenodo},
+  version      = {0.0.1},
+  doi          = {10.5281/zenodo.4282107},
+  url          = {https://ngff.openmicroscopy.org/latest/},
 }
\ No newline at end of file

From bec14e4e575a538e85f919589187acd063016fee Mon Sep 17 00:00:00 2001
From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com>
Date: Wed, 1 Oct 2025 14:22:27 +0200
Subject: [PATCH 23/55] Delete intro.md

---
 intro.md | 3 ---
 1 file changed, 3 deletions(-)
 delete mode 100644 intro.md

diff --git a/intro.md b/intro.md
deleted file mode 100644
index 1f8feeb5..00000000
--- a/intro.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# NGFF
-
-This page contains next-generation file format (NGFF) specifications for storing bioimaging data in the cloud. All specifications are submitted to the https://image.sc community for review. It also provides example metadata files as well as json schema files to ease practical implementation and provide validation targets for datasets in the field.
\ No newline at end of file

From ce2d7ce3e7fb6829c6734be41a1b82c368e7bff9 Mon Sep 17 00:00:00 2001
From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com>
Date: Wed, 1 Oct 2025 14:22:51 +0200
Subject: [PATCH 24/55] Moved citation info to separate section

---
 citing.md        | 13 +++++++++++++
 specification.md |  8 --------
 2 files changed, 13 insertions(+), 8 deletions(-)
 create mode 100644 citing.md

diff --git a/citing.md b/citing.md
new file mode 100644
index 00000000..3e4777d0
--- /dev/null
+++ b/citing.md
@@ -0,0 +1,13 @@
+Citing
+======
+(citing)=
+
+[Next-generation file format (NGFF) specifications for storing bioimaging data in the cloud.](https://ngff.openmicroscopy.org/0.4)
+J. Moore, *et al*. Open Microscopy Environment Consortium, 8 February 2022.
+
+This edition of the specification is [https://ngff.openmicroscopy.org/{{version}}](https://ngff.openmicroscopy.org/{{version}}]).
+The latest edition is publically available {cite}`ngff_spec_latest`.
+
+```{bibliography}
+:style: unsrt
+```
\ No newline at end of file
diff --git a/specification.md b/specification.md
index dde0cbca..d1c61367 100644
--- a/specification.md
+++ b/specification.md
@@ -1631,14 +1631,6 @@ Implementations {#implementations}
 
 See [Tools](https://ngff.openmicroscopy.org/tools/index.html).
 
-Citing {#citing}
-================
-
-[Next-generation file format (NGFF) specifications for storing bioimaging data in the cloud.](https://ngff.openmicroscopy.org/0.4)
-J. Moore, *et al*. Open Microscopy Environment Consortium, 8 February 2022.
-This edition of the specification is [https://ngff.openmicroscopy.org/0.5/](https://ngff.openmicroscopy.org/0.5/]).
-The latest edition is available at [https://ngff.openmicroscopy.org/latest/](https://ngff.openmicroscopy.org/latest/).
-[(doi:10.5281/zenodo.4282107)](https://doi.org/10.5281/zenodo.4282107)
 
 Version History {#history}
 ==========================

From b47a7053f5043cdcb383cf91184cb03f4ddbdf5a Mon Sep 17 00:00:00 2001
From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com>
Date: Wed, 1 Oct 2025 14:23:16 +0200
Subject: [PATCH 25/55] updated author and editor orchid details

---
 _config.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/_config.yml b/_config.yml
index f432f91d..fffd4bd8 100644
--- a/_config.yml
+++ b/_config.yml
@@ -3,7 +3,7 @@
 # Comprehensive example: https://github.com/executablebooks/jupyter-book/blob/master/docs/_config.yml
 
 title: Next-generation file format specification
-author: Josh Moore
+author: NGFF-community
 logo: https://www.openmicroscopy.org/img/logos/ome-logomark.svg
 
 # Force re-execution of notebooks on each build.
@@ -76,4 +76,4 @@ sphinx:
       logo: "http://www.openmicroscopy.org/img/logos/ome-logomark.svg"
       editor_name: "[Josh Moore](https://gerbi-gmb.de/)"
       editor_affiliation: "German BioImaging e.V."
-      editor_orcid: "[https://orcid.org/0000-0003-4028-811X](https://orcid.org/0000-0003-4028-811X)"
\ No newline at end of file
+      editor_orcid: "[https://orcid.org/0000-0003-4028-811X](https://orcid.org/0000-0003-4028-811X)"

From 099e34bfca862728d040ca9c4012e1efccdf9ad0 Mon Sep 17 00:00:00 2001
From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com>
Date: Wed, 1 Oct 2025 14:23:35 +0200
Subject: [PATCH 26/55] added version substitution

---
 _config.yml      | 1 +
 specification.md | 1 +
 2 files changed, 2 insertions(+)

diff --git a/_config.yml b/_config.yml
index fffd4bd8..74c0252e 100644
--- a/_config.yml
+++ b/_config.yml
@@ -77,3 +77,4 @@ sphinx:
       editor_name: "[Josh Moore](https://gerbi-gmb.de/)"
       editor_affiliation: "German BioImaging e.V."
       editor_orcid: "[https://orcid.org/0000-0003-4028-811X](https://orcid.org/0000-0003-4028-811X)"
+      version: "0.6.dev1"
\ No newline at end of file
diff --git a/specification.md b/specification.md
index d1c61367..cb12d786 100644
--- a/specification.md
+++ b/specification.md
@@ -1,5 +1,6 @@
 # {{ title }}
 
+**Version**: {{version}} 
**Shortname:** {{ shortname }}
**Level:** {{ level }}
**Status:** {{ status }}
From 6ee7518bf01dab99897391046b71332d9cc4322d Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 1 Oct 2025 14:23:51 +0200 Subject: [PATCH 27/55] Use myST references throughout document --- specification.md | 51 +++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/specification.md b/specification.md index cb12d786..f42c66c3 100644 --- a/specification.md +++ b/specification.md @@ -61,7 +61,7 @@ Images The following layout describes the expected Zarr hierarchy for images with multiple levels of resolutions and optionally associated labels. -Note that the number of dimensions is variable between 2 and 5 and that axis names are arbitrary, see [multiscales metadata](multiscale-md) for details. +Note that the number of dimensions is variable between 2 and 5 and that axis names are arbitrary, see [multiscales metadata](multiscales-md) for details. ``` ├── 123.zarr # One OME-Zarr image (id=123). @@ -145,8 +145,9 @@ A well group SHOULD NOT be present if there are no images in the well. └── ... # Other rows
-OME-Zarr Metadata {#metadata} -============================= +OME-Zarr Metadata +================= +(metadata)= The "OME-Zarr Metadata" contains metadata keys as specified below for discovering certain types of data, especially images. @@ -172,8 +173,7 @@ The OME-Zarr Metadata version MUST be consistent within a hierarchy. "axes" metadata -------------------------- - -{#axes-md} +(axes-md)= "axes" describes the dimensions of a coordinate systems and adds an interpretation to the data along that dimension. A named collection of axes forms a [coordinate system](coord-sys-md). @@ -241,8 +241,7 @@ to the discrete axis `"c"`. Indexing an image at the point `(1, 0.2, 0.3, 0.4)` "coordinateSystems" metadata -------------------------- - -{#coord-sys-md} +(coord-sys-md)= A "coordinate system" is a collection of "axes" / dimensions with a name. Every coordinate system: - MUST contain the field "name". The value MUST be a non-empty string that is unique among `coordinateSystem`s. @@ -483,8 +482,7 @@ Conforming readers: "coordinateTransformations" metadata ------------------------------------------------ - -{#trafo-md} +(trafo-md)= "coordinateTransformations" describe the mapping between two coordinate systems (defined by "axes"). For example, to map an array's discrete coordinate system to its corresponding physical coordinates. @@ -553,7 +551,7 @@ Conforming readers: - SHOULD be able to apply transformations to points; - SHOULD be able to apply transformations to images; -Coordinate transformations from array to physical coordinates MUST be stored in [multiscales](multiscale-md). +Coordinate transformations from array to physical coordinates MUST be stored in [multiscales](multiscales-md). Transformations between different images MUST be stored in the attributes of a parent zarr group. For transformations that store data or parameters in a zarr array, those zarr arrays SHOULD be stored in a zarr group `"coordinateTransformations"`. @@ -675,14 +673,15 @@ transformation type, for example: ``` Implementations SHOULD be able to compute and apply the inverse of some coordinate transformations when they -are computable in closed-form (as the [Transformation types](#transformation-types) section below indicates). If an +are computable in closed-form (as the [Transformation types](transformation-types) section below indicates). If an operation is requested that requires the inverse of a transformation that can not be inverted in closed-form, implementations MAY estimate an inverse, or MAY output a warning that the requested operation is unsupported. #### Matrix transformations +(matrix-transformations)= -Two transformation types ([affine](#affine) and [rotation](#rotation)) are parametrized by matrices. Matrices are applied to +Two transformation types ([affine](affine) and [rotation](rotation)) are parametrized by matrices. Matrices are applied to column vectors that represent points in the input coordinate system. The first (last) axis in a coordinate system is the top (bottom) entry in the column vector. Matrices are stored as two-dimensional arrays, either as json or in a zarr array. When stored as a 2D zarr array, the first dimension indexes rows and the second dimension indexes columns (e.g., an array of @@ -718,6 +717,7 @@ results in the point [2,-1,3] because it is computed with the matrix-vector mult ### Transformation types +(transformation-types)= Input and output dimensionality may be determined by the value of the "input" and "output" fields, respectively. If the value of "input" is an array, it's length gives the input dimension, otherwise the length of "axes" for the coordinate @@ -864,8 +864,9 @@ y = 2 * j #### affine +(affine)= -`affine`s are [matrix transformations](#matrix-transformations) from N-dimensional inputs to M-dimensional outputs are +`affine`s are [matrix transformations](matrix-transformations) from N-dimensional inputs to M-dimensional outputs are represented as the upper `(M)x(N+1)` sub-matrix of a `(M+1)x(N+1)` matrix in [homogeneous coordinates](https://en.wikipedia.org/wiki/Homogeneous_coordinates) (see examples). This transformation type may be (but is not necessarily) invertible when `N` equals `M`. The matrix MUST be stored as a 2D array either as json or as a zarr array. @@ -939,8 +940,9 @@ necessarily) invertible when `N` equals `M`. The matrix MUST be stored as a 2D a #### rotation +(rotation)= -`rotation`s are [matrix transformations](#matrix-transformations) that are special cases of affine transformations. When possible, a rotation +`rotation`s are [matrix transformations](matrix-transformations) that are special cases of affine transformations. When possible, a rotation transformation SHOULD be preferred to its equivalent affine. Input and output dimensionality (N) MUST be identical. Rotations are stored as `NxN` matrices, see below, and MUST have determinant equal to one, with orthonormal rows and columns. The matrix MUST be stored as a 2D array either as json or in a zarr array. `rotation` transformations are invertible. @@ -1343,7 +1345,7 @@ highlight: json "multiscales" metadata ---------------------- -(multiscale-md)= +(multiscales-md)= Metadata about an image can be found under the "multiscales" key in the group-level OME-Zarr Metadata. Here, image refers to 2 to 5 dimensional data representing image or volumetric data with optional time or channel axes. @@ -1584,8 +1586,7 @@ highlight: json "well" metadata --------------- - -{#well-md} +(well-md)= For high-content screening datasets, the metadata about all fields of views under a given well can be found under the "well" key in the attributes of the @@ -1620,21 +1621,23 @@ path: examples/well_strict/well_2fields.json highlight: json -Specification naming style {#naming-style} -========================================== +Specification naming style +========================== +(naming-style)= Multi-word keys in this specification should use the `camelCase` style. NB: some parts of the specification don't obey this convention as they were added before this was adopted, but they should be updated in due course. -Implementations {#implementations} -================================== +Implementations +=============== +(implementations)= See [Tools](https://ngff.openmicroscopy.org/tools/index.html). - -Version History {#history} -========================== +Version History +=============== +(history)= From 7455e8fd85fe2d34b9fcd5b52b2b1d49adfdf053 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 1 Oct 2025 15:55:51 +0200 Subject: [PATCH 28/55] move version history in separate page --- _toc.yml | 4 ++- version_history.md | 83 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 version_history.md diff --git a/_toc.yml b/_toc.yml index 1cdd0bf9..5cd8b29c 100644 --- a/_toc.yml +++ b/_toc.yml @@ -11,4 +11,6 @@ chapters: exclude: docs/examples/examples.md - file: docs/schemas sections: - - glob: docs/schemas/* \ No newline at end of file + - glob: docs/schemas/* +- file: citing +- file: version_history \ No newline at end of file diff --git a/version_history.md b/version_history.md new file mode 100644 index 00000000..a3214f19 --- /dev/null +++ b/version_history.md @@ -0,0 +1,83 @@ +Version History +=============== +(history)= + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RevisionDateDescription
0.5.22025-01-10Clarify that the dimension_names field in axes MUST be included.
0.5.12025-01-10Re-add the improved omero description in PR-191.
0.5.02024-11-21use Zarr v3 in OME-Zarr, see RFC-2.
0.4.12023-02-09expand on "labels" description
0.4.12022-09-26transitional metadata for image collections ("bioformats2raw.layout")
0.4.02022-02-08multiscales: add axes type, units and coordinateTransformations
0.4.02022-02-08plate: add rowIndex/columnIndex
0.3.02021-08-24Add axes field to multiscale metadata
0.2.02021-03-29Change chunk dimension separator to "/"
0.1.42020-11-26Add HCS specification
0.1.32020-09-14Add labels specification
0.1.2 2020-05-07Add description of "omero" metadata
0.1.1 2020-05-06Add info on the ordering of resolutions
0.1.0 2020-04-20First version for internal demo
\ No newline at end of file From 37cb58ff8fe15e51f644fb4462364ea80b020221 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 1 Oct 2025 15:56:07 +0200 Subject: [PATCH 29/55] Update schemas.md --- docs/schemas.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/schemas.md b/docs/schemas.md index 46bd9a73..cb4301ab 100644 --- a/docs/schemas.md +++ b/docs/schemas.md @@ -1,3 +1,4 @@ -# JSON schemas -Here is some information on the json schemas \ No newline at end of file +# JSON Schemas + +Below you find schemas for the NGFF specification in both Markdown and HTML format. \ No newline at end of file From 4043ae23681df0ae273764718ed8d73fc78c0360 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 1 Oct 2025 15:56:22 +0200 Subject: [PATCH 30/55] removed unnecessary exclude in toc --- _toc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_toc.yml b/_toc.yml index 5cd8b29c..5eecfc0c 100644 --- a/_toc.yml +++ b/_toc.yml @@ -8,9 +8,9 @@ chapters: - file: docs/examples sections: - glob: docs/examples/* - exclude: docs/examples/examples.md - file: docs/schemas sections: - glob: docs/schemas/* + - file: citing - file: version_history \ No newline at end of file From 68cf5d2469d2eb07d533d4274ae77114368a51ff Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 2 Oct 2025 10:06:18 +0200 Subject: [PATCH 31/55] use consistent header formatting in document --- specification.md | 76 ++++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 42 deletions(-) diff --git a/specification.md b/specification.md index f42c66c3..7e96d971 100644 --- a/specification.md +++ b/specification.md @@ -23,8 +23,7 @@ enable next-generation file formats to represent the same bioimaging data that can be represented in \[OME-TIFF](http://www.openmicroscopy.org/ome-files/) and beyond. -Document conventions --------------------- +## Document conventions The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” are to be interpreted as described in @@ -41,8 +40,7 @@ implementations that are later submitted as a formal specification. (See [biofor Some of the JSON examples in this document include comments. However, these are only for clarity purposes and comments MUST NOT be included in JSON objects. -Storage format -============== +# Storage format OME-Zarr is implemented using the Zarr format as defined by the [version 3 of the Zarr specification](https://zarr-specs.readthedocs.io/en/latest/v3/core/v3.0.html). @@ -56,8 +54,7 @@ is represented here as it would appear locally but could equally be stored on a web server to be accessed via HTTP or in object storage like S3 or GCS. -Images ------- +## Images The following layout describes the expected Zarr hierarchy for images with multiple levels of resolutions and optionally associated labels. @@ -105,8 +102,7 @@ Note that the number of dimensions is variable between 2 and 5 and that axis nam -High-content screening ----------------------- +## High-content screening The following specification defines the hierarchy for a high-content screening dataset. Three groups MUST be defined above the images: @@ -145,8 +141,7 @@ A well group SHOULD NOT be present if there are no images in the well. └── ... # Other rows -OME-Zarr Metadata -================= +# OME-Zarr Metadata (metadata)= The "OME-Zarr Metadata" contains metadata keys as specified below @@ -171,8 +166,7 @@ The OME-Zarr Metadata version MUST be consistent within a hierarchy. } ``` -"axes" metadata --------------------------- +## "axes" metadata (axes-md)= "axes" describes the dimensions of a coordinate systems and adds an interpretation to the data along that dimension. A named collection @@ -239,8 +233,7 @@ to the discrete axis `"c"`. Indexing an image at the point `(1, 0.2, 0.3, 0.4)` -"coordinateSystems" metadata --------------------------- +## "coordinateSystems" metadata (coord-sys-md)= A "coordinate system" is a collection of "axes" / dimensions with a name. Every coordinate system: @@ -480,8 +473,7 @@ Conforming readers: - MAY ignore other groups or arrays under the root of the hierarchy. -"coordinateTransformations" metadata ------------------------------------------------- +## "coordinateTransformations" metadata (trafo-md)= "coordinateTransformations" describe the mapping between two coordinate systems (defined by "axes"). @@ -726,7 +718,8 @@ length gives the input dimension, otherwise it is given by the length of "axes" the name of the "input". If the value of "output" is an array, its length gives the output dimension, otherwise it is given by the length of "axes" for the coordinate system with the name of the "output". -#### identity +#### identity +(identity)= `identity` transformations map input coordinates to output coordinates without modification. The position of the ith axis of the output coordinate system is set to the position of the ith axis of the input coordinate @@ -749,7 +742,8 @@ y = j -#### mapAxis +#### mapAxis +(mapAxis)= `mapAxis` transformations describe axis permutations as a mapping of axis names. Transformations MUST include a `mapAxis` field whose value is an object, all of whose values are strings. If the object contains `"x":"i"`, then the transform sets the value @@ -803,7 +797,8 @@ z = b ``` -#### translation +#### translation +(translation)= `translation` transformations are special cases of affine transformations. When possible, a translation transformation should be preferred to its equivalent affine. Input and output dimensionality MUST be @@ -834,6 +829,7 @@ y = j - 1.42 #### scale +(scale)= `scale` transformations are special cases of affine transformations. When possible, a scale transformation SHOULD be preferred to its equivalent affine. Input and output dimensionality MUST be identical and MUST equal @@ -863,7 +859,7 @@ y = 2 * j ``` -#### affine +#### affine (affine)= `affine`s are [matrix transformations](matrix-transformations) from N-dimensional inputs to M-dimensional outputs are @@ -939,7 +935,7 @@ necessarily) invertible when `N` equals `M`. The matrix MUST be stored as a 2D a -#### rotation +#### rotation (rotation)= `rotation`s are [matrix transformations](matrix-transformations) that are special cases of affine transformations. When possible, a rotation @@ -972,7 +968,8 @@ MUST be stored as a 2D array either as json or in a zarr array. `rotation` trans -#### inverseOf +#### inverseOf +(inverseOf)= An `inverseOf` transformation contains another transformation (often non-linear), and indicates that transforming points from output to input coordinate systems is possible using the contained transformation. @@ -997,7 +994,8 @@ transformation (if it exists). -#### sequence +#### sequence +(sequence)= A `sequence` transformation consists of an ordered array of coordinate transformations, and is invertible if every coordinate transform in the array is invertible (though could be invertible in other cases as well). To apply a sequence transformation @@ -1058,7 +1056,8 @@ and is invertible. -#### coordinates and displacements +#### coordinates and displacements +(coordinates-displacements)= `coordinates` and `displacements` transformations store coordinates or displacements in an array and interpret them as a vector field that defines a transformation. The arrays must have a dimension corresponding to every axis of the input coordinate @@ -1247,7 +1246,8 @@ The transformation specifies linear interpolation, which in this case yields input point, hence the output is `1.0 + (-0.5) = 0.5`. -#### byDimension +#### byDimension +(byDimension)= `byDimension` transformations build a high dimensional transformation using lower dimensional transformations on subsets of dimensions. @@ -1311,7 +1311,8 @@ This transformation is invalid because the output axis `x` appears in more than -#### bijection +#### bijection +(bijection)= A bijection transformation is an invertible transformation in which both the `forward` and `inverse` transformations are explicitly defined. Each direction SHOULD be a transformation type that is not closed-form invertible. @@ -1343,8 +1344,7 @@ highlight: json -"multiscales" metadata ----------------------- +## "multiscales" metadata (multiscales-md)= Metadata about an image can be found under the "multiscales" key in the group-level OME-Zarr Metadata. @@ -1400,8 +1400,7 @@ if not datasets: datasets = [x["path"] for x in multiscales[0]["datasets"]] ``` -"omero" metadata (transitional) -------------------------------- +## "omero" metadata (transitional) (omero-md)= [=Transitional=] information specific to the channels of an image and how to render it @@ -1442,8 +1441,7 @@ Each dictionary in "channels" MUST contain the field "window", which is a dictio The field "window" MUST contain the fields "min" and "max", which are the minimum and maximum values of the window, respectively. It MUST also contain the fields "start" and "end", which are the start and end values of the window, respectively. -"labels" metadata ------------------ +## "labels" metadata (labels-md)= In OME-Zarr, Zarr arrays representing pixel-annotation data are stored in a group called "labels". Some applications--notably image segmentation--produce @@ -1511,8 +1509,7 @@ highlight: json In this case, the pixels consisting of a 0 in the Zarr array will be displayed as 50% blue and 50% opacity. Pixels with a 1 in the Zarr array, which correspond to cellular space, will be displayed as 50% green and 50% opacity. -"plate" metadata ----------------- +## "plate" metadata (plate-md)= For high-content screening datasets, the plate layout can be found under the @@ -1584,8 +1581,7 @@ path: examples/plate_strict/plate_2wells.json highlight: json -"well" metadata ---------------- +## "well" metadata (well-md)= For high-content screening datasets, the metadata about all fields of views @@ -1621,20 +1617,16 @@ path: examples/well_strict/well_2fields.json highlight: json -Specification naming style -========================== +# Specification naming style (naming-style)= Multi-word keys in this specification should use the `camelCase` style. NB: some parts of the specification don't obey this convention as they were added before this was adopted, but they should be updated in due course. -Implementations -=============== +# Implementations (implementations)= -See [Tools](https://ngff.openmicroscopy.org/tools/index.html). - Version History =============== (history)= From 0d3a60728f884413ea660f3b40d87646372ec4d0 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 2 Oct 2025 10:06:29 +0200 Subject: [PATCH 32/55] move version history to separate page --- specification.md | 164 +---------------------------------------------- 1 file changed, 1 insertion(+), 163 deletions(-) diff --git a/specification.md b/specification.md index 7e96d971..d39acef6 100644 --- a/specification.md +++ b/specification.md @@ -1627,166 +1627,4 @@ were added before this was adopted, but they should be updated in due course. # Implementations (implementations)= -Version History -=============== -(history)= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RevisionDateDescription
0.5.22025-01-10Clarify that the dimension_names field in axes MUST be included.
0.5.12025-01-10Re-add the improved omero description in PR-191.
0.5.02024-11-21use Zarr v3 in OME-Zarr, see RFC-2.
0.4.12023-02-09expand on "labels" description
0.4.12022-09-26transitional metadata for image collections ("bioformats2raw.layout")
0.4.02022-02-08multiscales: add axes type, units and coordinateTransformations
0.4.02022-02-08plate: add rowIndex/columnIndex
0.3.02021-08-24Add axes field to multiscale metadata
0.2.02021-03-29Change chunk dimension separator to "/"
0.1.42020-11-26Add HCS specification
0.1.32020-09-14Add labels specification
0.1.2 2020-05-07Add description of "omero" metadata
0.1.1 2020-05-06Add info on the ordering of resolutions
0.1.0 2020-04-20First version for internal demo
- - -
-{
-  "blogNov2020": {
-    "href": "https://blog.openmicroscopy.org/file-formats/community/2020/11/04/zarr-data/",
-    "title": "Public OME-Zarr data (Nov. 2020)",
-    "authors": [
-      "OME Team"
-    ],
-    "status": "Informational",
-    "publisher": "OME",
-    "id": "blogNov2020",
-    "date": "04 November 2020"
-  },
-  "imagesc26952": {
-    "href": "https://forum.image.sc/t/ome-s-position-regarding-file-formats/26952",
-    "title": "OME’s position regarding file formats",
-    "authors": [
-      "OME Team"
-    ],
-    "status": "Informational",
-    "publisher": "OME",
-    "id": "imagesc26952",
-    "date": "19 June 2020"
-  },
-  "n5": {
-    "id": "n5",
-    "href": "https://github.com/saalfeldlab/n5/issues/62",
-    "title": "N5---a scalable Java API for hierarchies of chunked n-dimensional tensors and structured meta-data",
-    "status": "Informational",
-    "authors": [
-      "John A. Bogovic",
-      "Igor Pisarev",
-      "Philipp Hanslovsky",
-      "Neil Thistlethwaite",
-      "Stephan Saalfeld"
-    ],
-    "date": "2020"
-  },
-  "ome-zarr-py": {
-    "id": "ome-zarr-py",
-    "href": "https://doi.org/10.5281/zenodo.4113931",
-    "title": "ome-zarr-py: Experimental implementation of next-generation file format (NGFF) specifications for storing bioimaging data in the cloud.",
-    "status": "Informational",
-    "publisher": "Zenodo",
-    "authors": [
-      "OME",
-      "et al"
-    ],
-    "date": "06 October 2020"
-  },
-  "zarr": {
-    "id": "zarr",
-    "href": "https://doi.org/10.5281/zenodo.4069231",
-    "title": "Zarr: An implementation of chunked, compressed, N-dimensional arrays for Python.",
-    "status": "Informational",
-    "publisher": "Zenodo",
-    "authors": [
-      "Alistair Miles",
-      "et al"
-    ],
-    "date": "06 October 2020"
-  },
-  "itk":{
-    "id": "itk-book",
-    "href": "https://itk.org/ItkSoftwareGuide.pdf",
-    "title": "The ITK Software Guide",
-    "status": "Informational",
-    "publisher": "ITK",
-    "authors": [
-      "Hans J. Johnson",
-      "Matthew M. McCormick",
-      "Luis Ibanez",
-      "Insight Software Consortium"
-    ],
-    "date": "16 April 2021"
-  }
-}
-
+See [Tools](https://ngff.openmicroscopy.org/tools/index.html). \ No newline at end of file From 6df99af0a094c3904ba141a1a7ea11933510b1a1 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 2 Oct 2025 10:06:41 +0200 Subject: [PATCH 33/55] increase header depth --- _config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/_config.yml b/_config.yml index 74c0252e..8feb92b1 100644 --- a/_config.yml +++ b/_config.yml @@ -42,6 +42,9 @@ html: document.getElementById('current-year').textContent = new Date().getFullYear(); +parse: + myst_heading_anchors: 3 + myst: enable_extensions: - colon_fence From 9526cfbe508d54df92269ac35b38077f813ec1ea Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 2 Oct 2025 14:58:06 +0200 Subject: [PATCH 34/55] Use MyST admonitions to format examples and hints --- specification.md | 445 +++++++++++++++++++++++------------------------ 1 file changed, 217 insertions(+), 228 deletions(-) diff --git a/specification.md b/specification.md index d39acef6..4ef71a08 100644 --- a/specification.md +++ b/specification.md @@ -154,7 +154,7 @@ The version of the OME-Zarr Metadata is denoted as a string in the `version` att The OME-Zarr Metadata version MUST be consistent within a hierarchy. -```json +
 {
   ...
   "attributes": {
@@ -164,7 +164,7 @@ The OME-Zarr Metadata version MUST be consistent within a hierarchy.
     }
   }
 }
-```
+
## "axes" metadata (axes-md)= @@ -184,7 +184,7 @@ The "axes" are used as part of [multiscales metadata](multiscales-md). The lengt The "dimension_names" attribute MUST be included in the `zarr.json` of the Zarr array of a multiscale level and MUST match the names in the "axes" metadata. -
+````{admonition} Example Examples of valid axes: @@ -199,7 +199,7 @@ Examples of valid axes: {"name": "freq", "type": "frequency", "unit": "megahertz"} ] ``` -
+```` Arrays are inherently discrete (see Array coordinate systems, below) but are often used to store discrete samples of a continuous variable. The continuous values "in between" discrete samples can be retrieved using an *interpolation* method. If an @@ -212,11 +212,11 @@ Note: The most common methods for interpolation are "nearest neighbor", "linear" to any method that obtains values at real valued coordinates using discrete samples as an "interpolator". As such, label images may be interpolated using "nearest neighbor" to obtain labels at points along the continuum. -
+````{admonition} Example For the coordinate system: -```json +``` { "name" : "index and interpolation", "axes" : [ @@ -230,7 +230,8 @@ For the coordinate system: Indexing an image at the point `(0.1, 0.2, 0.3, 0.4)` is not valid, because the value of the first coordinate (`0.1`) refers to the discrete axis `"c"`. Indexing an image at the point `(1, 0.2, 0.3, 0.4)` is valid. -
+ +```` ## "coordinateSystems" metadata @@ -240,7 +241,9 @@ A "coordinate system" is a collection of "axes" / dimensions with a name. Every - MUST contain the field "name". The value MUST be a non-empty string that is unique among `coordinateSystem`s. - MUST contain the field "axes", whose value is an array of valid "axes". -
+````{admonition} Example + +Example of valid `coordinateSystems` metadata: ```json { @@ -252,7 +255,7 @@ A "coordinate system" is a collection of "axes" / dimensions with a name. Every ] } ``` -
+```` The order of the `"axes"` list matters and defines the index of each array dimension and coordinates for points in that coordinate system. For the above example, the `"x"` dimension is the last dimension. The "dimensionality" of a coordinate system @@ -265,7 +268,7 @@ point refer to different physical entities and therefore should not be analyzed regions of interest, etc., SHOULD ensure that they are in the same coordinate system (same name, with identical axes) or can be transformed to the same coordinate system before doing analysis. See the example below. -
+````{admonition} Example Two instruments simultaneously image the same sample from two different angles, and the 3D data from both instruments are calibrated to "micrometer" units. Two samples are collected ("sampleA" and "sampleB"). An analysis of sample A requires @@ -310,7 +313,7 @@ image. ] ``` -
+```` ### Array coordinate systems @@ -323,7 +326,8 @@ choice explicitly will be important for interoperability. This is possible by us Every array has a default coordinate system whose parameters need not be explicitly defined. Its name is the path to the array in the container, its axes have `"type":"array"`, are unitless, and have default "name"s. The ith axis has `"name":"dim_i"` (these are the same default names used by [xarray](https://docs.xarray.dev/en/stable/user-guide/terminology.html)). -
+ +````{admonition} Example For example, a 3D array at path `0` defines the coordinate system: ```json @@ -338,7 +342,8 @@ For example, a 3D array at path `0` defines the coordinate system: ``` though this object should not and need not explicitly appear in metadata. -
+ +```` The dimensionality of each array coordinate system equals the dimensionality of its corresponding zarr array. The axis with @@ -347,11 +352,11 @@ attribute in the zarr array attributes, and whose data depends on the byte order chunks. As described in the [zarr array metadata](https://zarr-specs.readthedocs.io/en/latest/v3/core/v3.0.html#array-metadata), the last dimension of an array in "C" order are stored contiguously on disk or in-memory when directly loaded. -
+````{admonition} Example For example, if `0/zarr.json` contains: -```json +``` { "zarr_format": 3, "node_type": "array", @@ -361,23 +366,22 @@ For example, if `0/zarr.json` contains: ``` Then `dim_0` has length 4, `dim_1` has length 3, and `dim_2` has length 5. -
+```` The name and axes names MAY be customized by including a `arrayCoordinateSystem` field in the user-defined attributes of the array whose value is a coordinate system object. The length of `axes` MUST be equal to the dimensionality. The value of `"type"` for each object in the axes array MUST equal `"array"`. -
+````{admonition} Example -
-path: examples/coordSystems/arrayCoordSys.json
-highlight: json
-
+ +```{literalinclude} examples/coordSystems/arrayCoordSys.json +``` Note that dimension `i` is contiguous in memory. -
+```` ### Coordinate convention @@ -392,9 +396,7 @@ system `(0.0, 0.0)` (when the transformation is the identity). The continuous re half-open interval `[-0.5, 0.5) x [-0.5, 0.5)` (i.e., -0.5 is included, +0.5 is excluded). See chapter 4 and figure 4.1 of the ITK Software Guide [[itk]]. - -"bioformats2raw.layout" (transitional) --------------------------------------- +## bioformats2raw.layout (bf2raw)= [=Transitional=] "bioformats2raw.layout" metadata identifies a group which implicitly describes a series of images. @@ -405,11 +407,12 @@ In order to capture that information within an OME-Zarr dataset, `bioformats2raw The bioformats2raw layout has been added to v0.4 as a transitional specification to specify filesets that already exist in the wild. An upcoming NGFF specification will replace this layout with explicit metadata. -

Layout

+### Layout +(bf2raw-layout)= Typical Zarr layout produced by running `bioformats2raw` on a fileset that contains more than one image (series > 1): -
+```
 series.ome.zarr               # One converted fileset from bioformats2raw
     ├── zarr.json             # Contains "bioformats2raw.layout" metadata
     ├── OME                   # Special group for containing OME metadata
@@ -418,33 +421,32 @@ series.ome.zarr               # One converted fileset from bioformats2raw
     ├── 0                     # First image in the collection
     ├── 1                     # Second image in the collection
     └── ...
-
+``` -

Attributes

+### bf2raw-attributes +(bf2raw-attributes)= The OME-Zarr Metadata in the top-level `zarr.json` file must contain the `bioformats2raw.layout` key: -
-path: examples/bf2raw/image.json
-highlight: json
-
+ +```{literalinclude} examples/bf2raw/image.json +:language: json +``` If the top-level group represents a plate, the `bioformats2raw.layout` metadata will be present but the "plate" key MUST also be present, takes precedence and parsing of such datasets should follow (see [plate metadata](plate-md)). It is not possible to mix collections of images with plates at present. -
-path: examples/bf2raw/plate.json
-highlight: json
-
+```{literalinclude} examples/bf2raw/plate.json +``` The OME-Zarr Metadata in the `zarr.json` file within the OME group may contain the "series" key: -
-path: examples/ome/series-2.json
-highlight: json
-
+```{literalinclude} examples/ome/series-2.json +:language: json +``` -

Details

+### Details +(bf2raw-details)= Conforming groups: @@ -547,7 +549,7 @@ Coordinate transformations from array to physical coordinates MUST be stored in Transformations between different images MUST be stored in the attributes of a parent zarr group. For transformations that store data or parameters in a zarr array, those zarr arrays SHOULD be stored in a zarr group `"coordinateTransformations"`. -
+```
 store.zarr                      # Root folder of the zarr store
 │
 ├── zarr.json                   # coordinate transformations describing the relationship between two image coordinate systems
@@ -570,7 +572,7 @@ store.zarr                      # Root folder of the zarr store
         └── image               # a zarr array
             └── zarr.json       # physical coordinate system and transformations here
                                 # the array attributes
-
+``` ### Additional details @@ -586,7 +588,7 @@ Transformations in the `transformations` list of a `byDimensions` transformation of strings corresponding to axis names of the parent transformation's input and output coordinate systems (see below for details). -
+````{admonition} Example The sequence transformation's input corresponds to an array coordinate system at path "my/array". @@ -635,7 +637,7 @@ The sequence transformation's input corresponds to an array coordinate system at ] ``` -
+```` Coordinate transformations are functions of *points* in the input space to *points* in the output space. We call this the "forward" direction. Points are ordered lists of coordinates, where a coordinate is the location/value of that point along its corresponding axis. @@ -680,12 +682,19 @@ stored as a 2D zarr array, the first dimension indexes rows and the second dimen `"shape":[3,4]` has 3 rows and 4 columns). When stored as a 2D json array, the inner array contains rows (e.g. `[[1,2,3], [4,5,6]]` has 2 rows and 3 columns). -
+````{admonition} Example For matrix transformations, points in the coordinate system: -``` -{ "name" : "in", "axes" : [{"name" : "z"}, {"name" : "y"}, {"name":"x"}] }, +```json +{ + "name" : "in", + "axes" : [ + {"name" : "z"}, + {"name" : "y"}, + {"name":"x"} + ] +}, ``` are represented as column vectors: @@ -705,8 +714,7 @@ results in the point [2,-1,3] because it is computed with the matrix-vector mult [ 0 0 -1] [3] [-3] ``` -
- +```` ### Transformation types (transformation-types)= @@ -725,12 +733,11 @@ otherwise it is given by the length of "axes" for the coordinate system with the the ith axis of the output coordinate system is set to the position of the ith axis of the input coordinate system. `identity` transformations are invertible. -
+````{admonition} Example -
-path: examples/transformations/identity.json
-highlight: json
-
+```{literalinclude} examples/transformations/identity.json +:language: json +``` defines the function: @@ -739,7 +746,7 @@ x = i y = j ``` -
+```` #### mapAxis @@ -752,12 +759,11 @@ system, the `mapAxis` MUST have a corresponding field. For every value of the ob coordinate system with that name. Note that the order of the keys could be reversed. -
+````{admonition} Example -
-path: examples/transformations/mapAxis1.json
-highlight: json
-
+```{literalinclude} examples/transformations/mapAxis1.json +:language: json +``` The "equivalent to identity" transformation defines the function: @@ -773,14 +779,13 @@ x = j y = i ``` -
+```` -
+````{admonition} Example -
-path: examples/transformations/mapAxis2.json
-highlight: json
-
+```{literalinclude} examples/transformations/mapAxis2.json +:language: json +``` The "projection_down" transformation defines the function: @@ -795,7 +800,7 @@ x = a y = b z = b ``` -
+```` #### translation (translation)= @@ -813,12 +818,11 @@ invertible.
The scale parameters stored as a JSON list of numbers. The list MUST have length `N`.
-
+````{admonition} Example -
-path: examples/transformations/translation.json
-highlight: json
-
+```{literalinclude} examples/transformations/translation.json +:language: json +``` defines the function: @@ -826,7 +830,7 @@ defines the function: x = i + 9 y = j - 1.42 ``` -
+```` #### scale (scale)= @@ -844,12 +848,11 @@ transformations are invertible.
The scale parameters stored as a JSON list of numbers. The list MUST have length `N`.
-
+````{admonition} Example -
-path: examples/transformations/scale.json
-highlight: json
-
+```{literalinclude} examples/transformations/scale.json +:language: json +``` defines the function: @@ -857,8 +860,7 @@ defines the function: x = 3.12 * i y = 2 * j ``` -
- +```` #### affine (affine)= @@ -875,64 +877,62 @@ necessarily) invertible when `N` equals `M`. The matrix MUST be stored as a 2D a
The affine parameters stored in JSON. The matrix MUST be stored as 2D nested array where the outer array MUST be length `M` and the inner arrays MUST be length `N+1`.
-
- A 2D-2D example: +````{admonition} Example +A 2D-2D example: -
-    path: examples/transformations/affine2d2d.json
-    highlight: json
-    
+```{literalinclude} examples/transformations/affine2d2d.json +:language: json +``` - defines the function: +defines the function: - ``` - x = 1*i + 2*j + 3 - y = 4*i + 5*j + 6 - ``` +``` +x = 1*i + 2*j + 3 +y = 4*i + 5*j + 6 +``` - it is equivalent to this matrix-vector multiplication in homogeneous coordinates: +it is equivalent to this matrix-vector multiplication in homogeneous coordinates: - ``` - [ 1 2 3 ][ i ] [ x ] - [ 4 5 6 ][ j ] = [ y ] - [ 0 0 1 ][ 1 ] [ 1 ] - ``` +``` +[ 1 2 3 ][ i ] [ x ] +[ 4 5 6 ][ j ] = [ y ] +[ 0 0 1 ][ 1 ] [ 1 ] +``` - where the last row `[0 0 1]` is omitted in the JSON representation. +where the last row `[0 0 1]` is omitted in the JSON representation. -
+```` -
- An example with two dimensional inputs and three dimensional outputs. +````{admonition} Example +An example with two dimensional inputs and three dimensional outputs. - Note that the order of the axes can in general be determined by the application or user. - These axes relate to the memory or on-disk order insofar as the last dimension is contiguous - when the zarr array is c-order (the default for zarr version 2, and the only option for zarr version 3). +Note that the order of the axes can in general be determined by the application or user. +These axes relate to the memory or on-disk order insofar as the last dimension is contiguous +when the zarr array is c-order (the default for zarr version 2, and the only option for zarr version 3). -
-    path: examples/transformations/affine2d3d.json
-    highlight: json
-    
+```{literalinclude} examples/transformations/affine2d3d.json +:language: json +``` - defines the function: +defines the function: - ``` - x = 1*i + 2*j + 3 - y = 4*i + 5*j + 6 - z = 7*i + 8*j + 9 - ``` +``` +x = 1*i + 2*j + 3 +y = 4*i + 5*j + 6 +z = 7*i + 8*j + 9 +``` - it is equivalent to this matrix-vector multiplication in homogeneous coordinates: +it is equivalent to this matrix-vector multiplication in homogeneous coordinates: - ``` - [ 1 2 3 ][ i ] [ x ] - [ 4 5 6 ][ j ] = [ y ] - [ 7 8 9 ][ 1 ] [ z ] - [ 0 0 1 ] [ 1 ] - ``` +``` +[ 1 2 3 ][ i ] [ x ] +[ 4 5 6 ][ j ] = [ y ] +[ 7 8 9 ][ 1 ] [ z ] +[ 0 0 1 ] [ 1 ] +``` - where the last row `[0 0 1]` is omitted in the JSON representation. -
+where the last row `[0 0 1]` is omitted in the JSON representation. +```` #### rotation @@ -951,21 +951,20 @@ MUST be stored as a 2D array either as json or in a zarr array. `rotation` trans
The parameters stored in JSON. The matrix MUST be stored as a 2D nested array where the outer array MUST be length `N` and the inner arrays MUST be length `N`.
-
- A 2D example +````{admonition} Example +A 2D example -
-    path: examples/transformations/rotation.json
-    highlight: json
-    
+```{literalinclude} examples/transformations/rotation.json +:language: json +``` - defines the function: +defines the function: - ``` - x = 0*i - 1*j - y = 1*i + 0*j - ``` -
+``` +x = 0*i - 1*j +y = 1*i + 0*j + ``` +```` #### inverseOf @@ -976,23 +975,21 @@ transforming points from output to input coordinate systems is possible using th Transforming points from the input to the output coordinate systems requires the inverse of the contained transformation (if it exists). -
- Software libraries that perform image registration often return the transformation from fixed image - coordinates to moving image coordinates, because this "inverse" transformation is most often required - when rendering the transformed moving image. Results such as this may be enclosed in an `inverseOf` - transformation. This enables the "outer" coordinate transformation to specify the moving image coordinates - as `input` and fixed image coordinates as `output`, a choice that many users and developers find intuitive. -
- +```{note} +Software libraries that perform image registration often return the transformation from fixed image +coordinates to moving image coordinates, because this "inverse" transformation is most often required +when rendering the transformed moving image. Results such as this may be enclosed in an `inverseOf` +transformation. This enables the "outer" coordinate transformation to specify the moving image coordinates +as `input` and fixed image coordinates as `output`, a choice that many users and developers find intuitive. +``` -
-
-    path: examples/transformations/inverseOf.json
-    highlight: json
-    
+````{admonition} Example -
+```{literalinclude} examples/transformations/inverseOf.json +:language: json +``` +```` #### sequence (sequence)= @@ -1003,7 +1000,7 @@ to a point in the input coordinate system, apply the first transformation in the transformation to the result. Repeat until every transformation has been applied. The output of the last transformation is the result of the sequence. -
+````{note} Considering transformations as functions of points, if the list contains transformations `[f0, f1, f2]` in that order, applying this sequence to point `x` is equivalent to: @@ -1014,7 +1011,7 @@ f2(f1(f0(x))) `f0` is applied first, `f1` is applied second, and `f2` is applied last. -
+```` The transformations included in the `transformations` array may omit their `input` and `output` fields under the conditions outlined below: @@ -1036,14 +1033,13 @@ outlined below:
A non-empty array of transformations.
-
+````{admonition} Example This sequence: -
-path: examples/transformations/sequence.json
-highlight: json
-
+```{literalinclude} examples/transformations/sequence.json +:language: json +``` describes the function @@ -1053,7 +1049,7 @@ y = (j + 0.9) * 3 ``` and is invertible. -
+```` #### coordinates and displacements @@ -1078,7 +1074,7 @@ metadata for the array ("field coordinate system"). The `i`th value of the array along the `coordinate` or `displacement` axis refers to the coordinate or displacement of the `i`th output axis. See the example below. -
+````{admonition} Example In this example, the array located at `"displacementField"` MUST have three dimensions. One dimension MUST correspond to an axis with `type : displacement` (in this example, the last dimension), the other two dimensions MUST be axes @@ -1119,8 +1115,7 @@ x_displacement = displacementField[y][x][1] I.e. the y-displacement is first, because the y-axis is the first element of the input and output coordinate systems. -
- +```` `coordinates` and `displacements` transformations are not invertible in general, but implementations MAY approximate their inverses. Metadata for these coordinate transforms have the following field: @@ -1262,53 +1257,47 @@ on subsets of dimensions. -
+````{admonition} Example A valid `byDimension` transformation: -
-path: examples/transformations/byDimension1.json
-highlight: json
-
- -
+```{literalinclude} examples/transformations/byDimension1.json +:language: json +``` +```` -
+````{admonition} Example Another valid `byDimension` transformation: -
-path: examples/transformations/byDimension2.json
-highlight: json
-
- -
+```{literalinclude} examples/transformations/byDimension2.json +:language: json +``` +```` -
+````{admonition} Example This is an **invalid** `byDimension` transform: -
-path: examples/transformations/byDimensionInvalid1.json
-highlight: json
-
+```{literalinclude} examples/transformations/byDimensionInvalid1.json +:language: json +``` It is invalid for two reasons. First because input `0` used by the scale transformation is not an axis of the `byDimension` transformation's `input`. Second, the `x` axis of the `output` does not appear in the `output` of any child transformation. -
+```` -
+````{admonition} Example Another **invalid** `byDimension` transform: -
-path: examples/transformations/byDimensionInvalid2.json
-highlight: json
-
+```{literalinclude} examples/transformations/byDimensionInvalid2.json +:language: json +``` This transformation is invalid because the output axis `x` appears in more than one transformation in the `transformations` list. -
+```` #### bijection @@ -1327,21 +1316,19 @@ Practically, non-invertible transformations have finite extents, so bijection tr to be correct / consistent for points that fall within those extents. It may not be correct for any point of appropriate dimensionality. -
+````{admonition} Example -
-path: examples/transformations/bijection.json
-highlight: json
-
+```{literalinclude} examples/transformations/bijection.json +:language: json +``` the input and output of the `forward` and `inverse` transformations are understood to be: -
-path: examples/transformations/bijection_verbose.json
-highlight: json
-
+```{literalinclude} examples/transformations/bijection_verbose.json +:language: json +``` -
+```` ## "multiscales" metadata @@ -1380,11 +1367,11 @@ Each "multiscales" dictionary SHOULD contain the field "name". Each "multiscales" dictionary SHOULD contain the field "type", which gives the type of downscaling method used to generate the multiscale image pyramid. It SHOULD contain the field "metadata", which contains a dictionary with additional information about the downscaling method. -
-path: examples/multiscales_strict/multiscales_example.json
-highlight: json
-
- +````{admonition} Example +```{literalinclude} examples/multiscales_strict/multiscales_example.json +:language: json +``` +```` If only one multiscale is provided, use it. Otherwise, the user can choose by name, using the first multiscale as a fallback: @@ -1456,11 +1443,12 @@ The "labels" group is not itself an image; it contains images. The pixels of the but these MUST NOT contain metadata. Names of the images in the "labels" group are arbitrary. The OME-Zarr Metadata in the `zarr.json` file associated with the "labels" group MUST contain a JSON object with the key `labels`, whose value is a JSON array of paths to the -labeled multiscale image(s). All label images SHOULD be listed within this metadata file. For example: +labeled multiscale image(s). All label images SHOULD be listed within this metadata file. +````{admonition} Example +For example: ```json { - ... "attributes": { "ome": { "version": "0.5", @@ -1471,6 +1459,7 @@ labeled multiscale image(s). All label images SHOULD be listed within this metad } } ``` +```` The `zarr.json` file for the label image MUST implement the multiscales specification. Within the `multiscales` object, the JSON array associated with the `datasets` key MUST have the same number of entries (scale levels) as the original unlabeled image. @@ -1499,15 +1488,15 @@ The value of the `source` key MUST be a JSON object containing information about This object MAY include a key `image`, whose value MUST be a string specifying the relative path to a Zarr image group. The default value is `../../` since most labeled images are stored in a "labels" group that is nested within the original image group. -Here is an example of a simple `image-label` object for a label image in which 0s and 1s represent intercellular and cellular space, respectively: -
-path: examples/label_strict/colors_properties.json
-highlight: json
-
+````{admonition} Example +Here is an example of a simple `image-label` object for a label image in which 0s and 1s represent intercellular and cellular space, respectively: +```{literalinclude} examples/label_strict/colors_properties.json +:language: json +``` +In this case, the pixels consisting of a 0 in the Zarr array will be displayed as 50% blue and 50% opacity. Pixels with a 1 in the Zarr array, which correspond to cellular space, will be displayed as 50% green and 50% opacity. +```` -In this case, the pixels consisting of a 0 in the Zarr array will be displayed as 50% blue and 50% opacity. Pixels with a 1 in the Zarr array, -which correspond to cellular space, will be displayed as 50% green and 50% opacity. ## "plate" metadata (plate-md)= @@ -1565,21 +1554,21 @@ the index into the `rows` list and a `columnIndex` key whose value MUST be an in the index into the `columns` list. `rowIndex` and `columnIndex` MUST be 0-based. The `rowIndex`, `columnIndex`, and `path` MUST all refer to the same row/column pair. +````{admonition} Example For example the following JSON object defines a plate with two acquisitions and 6 wells (2 rows and 3 columns), containing up to 2 fields of view per acquisition. -
-path: examples/plate_strict/plate_6wells.json
-highlight: json
-
+```{literalinclude} examples/plate_strict/plate_6wells.json +:language: json +``` The following JSON object defines a sparse plate with one acquisition and 2 wells in a 96 well plate, containing one field of view per acquisition. -
-path: examples/plate_strict/plate_2wells.json
-highlight: json
-
+```{literalinclude} examples/plate_strict/plate_2wells.json +:language: json +``` +```` ## "well" metadata (well-md)= @@ -1599,23 +1588,23 @@ which MUST match one of the acquisition JSON objects defined in the [plate metad The `well` dictionary SHOULD contain a `version` key whose value MUST be a string specifying the version of the well specification. +````{admonition} Example For example the following JSON object defines a well with four fields of view. The first two fields of view were part of the first acquisition while the last two fields of view were part of the second acquisition. -
-path: examples/well_strict/well_4fields.json
-highlight: json
-
+```{literalinclude} examples/well_strict/well_4fields.json +:language: json +``` The following JSON object defines a well with two fields of view in a plate with four acquisitions. The first field is part of the first acquisition, and the second field is part of the last acquisition. -
-path: examples/well_strict/well_2fields.json
-highlight: json
-
+```{literalinclude} examples/well_strict/well_2fields.json +:language: json +``` +```` # Specification naming style (naming-style)= From 993ccc557f5f91a8f3485970a30f4d1e9b3e4b40 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 2 Oct 2025 14:58:19 +0200 Subject: [PATCH 35/55] Explain styling in contribution guide --- contribute.md | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 contribute.md diff --git a/contribute.md b/contribute.md new file mode 100644 index 00000000..fec8c1c6 --- /dev/null +++ b/contribute.md @@ -0,0 +1,83 @@ +# Contribution guide + +Contributions to the spec text, examples and schemas are highly welcome and +appreciated by the ngff community. If you propose an RFC (i.e., major change) +or a aminor change (pull request), please make sure to follow [these guidelines](https://ngff.openmicroscopy.org/contributing/index.html). + +Major changes should follow the RFC process as it was laid out in [RFC1 ](https://ngff.openmicroscopy.org/rfc/1/index.html). + +## Building the documentation + +Build and inspect changes to the documentation before submitting a PR. To do so, you first need +to install the necessary dependecies: + +```bash +pip install -r requirements.txt +``` + +This document uses [jupyter-book](https://jupyterbook.org) to generate the pages and [MyST](https://mystmd.org) +markdown for formatting. After installing these via the dependencies, navigate into the repository on your machine +and build the book using the following command: + +```bash +python docs/pre_build.py +jupyter-book build . --path-output docs +``` + +You'll find the built webpages under `docs/_build/html`. + +### Formating hints + +The specification uses MyST extensively for a number of formatting options to make the text +readible and improve structure. + +#### Referencing + +MyST allows a number of ways to reference and cross-reference inside this text and across +several of the pages in this repo. For an overview of supported referencing syntax, see the +[MyST doc pages](https://mystmd.org/guide/cross-references). It is recommended to use the +following syntax in this document for consitency: +``` +anchor: (your-reference-name)= +reference: [This is a reference](your-reference-name) +``` + +#### Admonitions + +We suggest using [admonitions](https://mystmd.org/guide/admonitions) for example code and +other highlighting. For examples, please use the following syntax to highlight your examples: + +`````markdown +````{admonition} Example + +Some informative text about your example +```json +"key": "value" +``` +```` +````` + +which results in + +````{admonition} Example + +Some informative text about your example +```json +"key": "value" +``` +```` + +If you want to link in example metadata from somewhere in this repo (i.e, a json file), +use this syntax: + +`````markdown +````{admonition} Example + +Some informative text about your example +```{literalinclude} path/to/example.json +:language: json +``` +```` +````` + +Other useful admonitions (e.g., `hint`, `note`) can be found [here](https://mystmd.org/guide/directives) From 928e411945a39e1c98342e5572ec1f8737ad698e Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 2 Oct 2025 14:58:22 +0200 Subject: [PATCH 36/55] Delete header.include --- docs/_includes/header.include | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 docs/_includes/header.include diff --git a/docs/_includes/header.include b/docs/_includes/header.include deleted file mode 100644 index 7bd9e500..00000000 --- a/docs/_includes/header.include +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - [TITLE] - - - -
- - OME logo (6 circles in a hexagon) - -

[TITLE]

-

[LONGSTATUS], -

-
-
- -
-
- -
- -

Status of this document

-
-
- - -
From bb9e5e66611337b2a4ee09202532180da6625a86 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 2 Oct 2025 14:58:40 +0200 Subject: [PATCH 37/55] add contribution section to toc --- _toc.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/_toc.yml b/_toc.yml index 5eecfc0c..d4ac723f 100644 --- a/_toc.yml +++ b/_toc.yml @@ -12,5 +12,6 @@ chapters: sections: - glob: docs/schemas/* +- file: contribute - file: citing - file: version_history \ No newline at end of file From 73c94cd3b4f7990ec29bb2ad9c25d0e8fb8f2113 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 2 Oct 2025 15:34:56 +0200 Subject: [PATCH 38/55] Add warning about WIP status --- specification.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/specification.md b/specification.md index 4ef71a08..f452602a 100644 --- a/specification.md +++ b/specification.md @@ -11,6 +11,11 @@ ## Abstract +```{warning} +This is **not** the released version of the ngff-specficication. It is an explorative, work-in-progress document. + +``` + This document contains next-generation file format (NGFF) specifications for storing bioimaging data in the cloud. All specifications are submitted to the https://image.sc community for review. ## Status of This Document From 3b642c37cc71266ba70b3c445b71822186f2fa05 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 2 Oct 2025 23:09:56 +0200 Subject: [PATCH 39/55] fix typo --- specification.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification.md b/specification.md index f452602a..80e529e8 100644 --- a/specification.md +++ b/specification.md @@ -12,7 +12,7 @@ ## Abstract ```{warning} -This is **not** the released version of the ngff-specficication. It is an explorative, work-in-progress document. +This is **not** the released version of the ngff-specification. It is an explorative, work-in-progress document. ``` From 625cc2d144d1c5be1f55272ac16731dfd128f461 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Tue, 7 Oct 2025 16:05:04 +0200 Subject: [PATCH 40/55] update `multiscales_strict` example --- .../multiscales_example.json | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/examples/multiscales_strict/multiscales_example.json b/examples/multiscales_strict/multiscales_example.json index 4b2c718a..d8b53993 100644 --- a/examples/multiscales_strict/multiscales_example.json +++ b/examples/multiscales_strict/multiscales_example.json @@ -6,13 +6,18 @@ "version": "0.5", "multiscales": [ { - "name": "example", - "axes": [ - { "name": "t", "type": "time", "unit": "millisecond" }, - { "name": "c", "type": "channel" }, - { "name": "z", "type": "space", "unit": "micrometer" }, - { "name": "y", "type": "space", "unit": "micrometer" }, - { "name": "x", "type": "space", "unit": "micrometer" } + "name": "physical", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { "name": "t", "type": "time", "unit": "millisecond" }, + { "name": "c", "type": "channel" }, + { "name": "z", "type": "space", "unit": "micrometer" }, + { "name": "y", "type": "space", "unit": "micrometer" }, + { "name": "x", "type": "space", "unit": "micrometer" } + ] + } ], "datasets": [ { @@ -20,8 +25,11 @@ "coordinateTransformations": [ { // the voxel size for the first scale level (0.5 micrometer) + // and the time unit (0.1 milliseconds), which is the same for each scale level "type": "scale", - "scale": [1.0, 1.0, 0.5, 0.5, 0.5] + "scale": [1.0, 1.0, 0.5, 0.5, 0.5], + "input": "0", + "output": "example" } ] }, @@ -29,9 +37,12 @@ "path": "1", "coordinateTransformations": [ { - // the voxel size for the second scale level (downscaled by a factor of 2 -> 1 micrometer) + // the voxel size for the first scale level (0.5 micrometer) + // and the time unit (0.1 milliseconds), which is the same for each scale level "type": "scale", - "scale": [1.0, 1.0, 1.0, 1.0, 1.0] + "scale": [1.0, 1.0, 1.0, 1.0, 1.0], + "input": "1", + "output": "example" } ] }, @@ -39,11 +50,14 @@ "path": "2", "coordinateTransformations": [ { - // the voxel size for the third scale level (downscaled by a factor of 4 -> 2 micrometer) + // the voxel size for the first scale level (0.5 micrometer) + // and the time unit (0.1 milliseconds), which is the same for each scale level "type": "scale", - "scale": [1.0, 1.0, 2.0, 2.0, 2.0] + "scale": [1.0, 1.0, 2.0, 2.0, 2.0], + "input": "2", + "output": "example" } - ] + ] } ], "coordinateTransformations": [ From bc54631c8b5a0dcc027f39186d60180ad3ff9928 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Tue, 7 Oct 2025 16:58:13 +0200 Subject: [PATCH 41/55] remove duplicate sentence --- specification.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/specification.md b/specification.md index 80e529e8..82ea06e0 100644 --- a/specification.md +++ b/specification.md @@ -724,12 +724,9 @@ results in the point [2,-1,3] because it is computed with the matrix-vector mult ### Transformation types (transformation-types)= -Input and output dimensionality may be determined by the value of the "input" and "output" fields, respectively. If the value -of "input" is an array, it's length gives the input dimension, otherwise the length of "axes" for the coordinate -system with the name of the "input" value gives the input dimension. If the value of "input" is an array, it's -length gives the input dimension, otherwise it is given by the length of "axes" for the coordinate system with -the name of the "input". If the value of "output" is an array, its length gives the output dimension, -otherwise it is given by the length of "axes" for the coordinate system with the name of the "output". +Input and output dimensionality may be determined by the value of the "input" and "output" fields, respectively. +If the value of “input” is an array, it’s length gives the input dimension, otherwise it is given by the length of “axes” for the coordinate system with the name of the “input”. +If the value of "output" is an array, its length gives the output dimension, otherwise it is given by the length of "axes" for the coordinate system with the name of the "output". #### identity (identity)= From bb9f6561a325ff23813c98980ebfd426491b0e59 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Tue, 7 Oct 2025 23:43:45 +0200 Subject: [PATCH 42/55] removed missleading comments and merged time-scaling back into multiscales --- .../multiscales_example.json | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/examples/multiscales_strict/multiscales_example.json b/examples/multiscales_strict/multiscales_example.json index d8b53993..c8f1282e 100644 --- a/examples/multiscales_strict/multiscales_example.json +++ b/examples/multiscales_strict/multiscales_example.json @@ -25,9 +25,9 @@ "coordinateTransformations": [ { // the voxel size for the first scale level (0.5 micrometer) - // and the time unit (0.1 milliseconds), which is the same for each scale level + // the time unit (0.1 milliseconds), which is the same for each scale level "type": "scale", - "scale": [1.0, 1.0, 0.5, 0.5, 0.5], + "scale": [0.1, 1.0, 0.5, 0.5, 0.5], "input": "0", "output": "example" } @@ -37,10 +37,10 @@ "path": "1", "coordinateTransformations": [ { - // the voxel size for the first scale level (0.5 micrometer) - // and the time unit (0.1 milliseconds), which is the same for each scale level + // the voxel size for the second scale level (1 micrometer) + // the time unit (0.1 milliseconds), which is the same for each scale level "type": "scale", - "scale": [1.0, 1.0, 1.0, 1.0, 1.0], + "scale": [0.1, 1.0, 1.0, 1.0, 1.0], "input": "1", "output": "example" } @@ -50,23 +50,16 @@ "path": "2", "coordinateTransformations": [ { - // the voxel size for the first scale level (0.5 micrometer) - // and the time unit (0.1 milliseconds), which is the same for each scale level + // the voxel size for the third scale level (2 micrometer) + // the time unit (0.1 milliseconds), which is the same for each scale level "type": "scale", - "scale": [1.0, 1.0, 2.0, 2.0, 2.0], + "scale": [0.1, 1.0, 2.0, 2.0, 2.0], "input": "2", "output": "example" } ] } ], - "coordinateTransformations": [ - { - // the time unit (0.1 milliseconds), which is the same for each scale level - "type": "scale", - "scale": [0.1, 1.0, 1.0, 1.0, 1.0] - } - ], "type": "gaussian", "metadata": { "description": "the fields in metadata depend on the downscaling implementation. Here, the parameters passed to the skimage function are given", From 3e04ec40a360fd5411e653385c0281f135d09129 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Tue, 7 Oct 2025 23:44:03 +0200 Subject: [PATCH 43/55] updated version --- examples/multiscales_strict/multiscales_example.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/multiscales_strict/multiscales_example.json b/examples/multiscales_strict/multiscales_example.json index c8f1282e..ee3421ad 100644 --- a/examples/multiscales_strict/multiscales_example.json +++ b/examples/multiscales_strict/multiscales_example.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.5", + "version": "0.6dev2", "multiscales": [ { "name": "physical", From c467423d71d71ad7e5189a0c4f56c562bc1beac9 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Tue, 7 Oct 2025 23:57:59 +0200 Subject: [PATCH 44/55] correct output coordinate system --- examples/multiscales_strict/multiscales_example.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/multiscales_strict/multiscales_example.json b/examples/multiscales_strict/multiscales_example.json index ee3421ad..55799eb2 100644 --- a/examples/multiscales_strict/multiscales_example.json +++ b/examples/multiscales_strict/multiscales_example.json @@ -29,7 +29,7 @@ "type": "scale", "scale": [0.1, 1.0, 0.5, 0.5, 0.5], "input": "0", - "output": "example" + "output": "physical" } ] }, @@ -42,7 +42,7 @@ "type": "scale", "scale": [0.1, 1.0, 1.0, 1.0, 1.0], "input": "1", - "output": "example" + "output": "physical" } ] }, @@ -55,7 +55,7 @@ "type": "scale", "scale": [0.1, 1.0, 2.0, 2.0, 2.0], "input": "2", - "output": "example" + "output": "physical" } ] } From 6c259c4b52d3de45f3e3d5d819c6ad2da7655564 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 8 Oct 2025 12:20:42 +0200 Subject: [PATCH 45/55] Delete schemas.md --- docs/schemas.md | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 docs/schemas.md diff --git a/docs/schemas.md b/docs/schemas.md deleted file mode 100644 index cb4301ab..00000000 --- a/docs/schemas.md +++ /dev/null @@ -1,4 +0,0 @@ - -# JSON Schemas - -Below you find schemas for the NGFF specification in both Markdown and HTML format. \ No newline at end of file From 1a6d1565f3b09c9c237f877a32e1ec5c11fc04c8 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 8 Oct 2025 12:20:56 +0200 Subject: [PATCH 46/55] merge requirements files --- docs/requirements.txt | 3 ++- requirements.txt | 6 ------ 2 files changed, 2 insertions(+), 7 deletions(-) delete mode 100644 requirements.txt diff --git a/docs/requirements.txt b/docs/requirements.txt index 4201ed42..cfc70258 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -6,4 +6,5 @@ sphinx-examples json-schema-for-humans myst-parser json_with_comments -jupyter-book \ No newline at end of file +jupyter-book +jsonschema_markdown \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index e4cf6cc4..00000000 --- a/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -jupyter-book -json-schema-for-humans -jason-with-comments -sphinx-inline-tabs -sphinx-proof -sphinx-examples \ No newline at end of file From afc0090fb2edadf60175db59990bb51499f49be6 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 8 Oct 2025 12:20:59 +0200 Subject: [PATCH 47/55] Delete transform-details.bs --- transform-details.bs | 106 ------------------------------------------- 1 file changed, 106 deletions(-) delete mode 100644 transform-details.bs diff --git a/transform-details.bs b/transform-details.bs deleted file mode 100644 index b2b744c8..00000000 --- a/transform-details.bs +++ /dev/null @@ -1,106 +0,0 @@ -
-Title: Coordinates and Transformations
-Shortname: ome-ngff-transformations
-Level: 1
-Status: LS-COMMIT
-Status: w3c/ED
-Group: ome
-URL: https://ngff.openmicroscopy.org/latest/
-Repository: https://github.com/ome/ngff
-Issue Tracking: Forums https://forum.image.sc/tag/ome-ngff
-Logo: http://www.openmicroscopy.org/img/logos/ome-logomark.svg
-Local Boilerplate: header no
-Local Boilerplate: copyright no
-Boilerplate: style-darkmode off
-Markup Shorthands: markdown yes
-Editor: Josh Moore, Open Microscopy Environment (OME) https://www.openmicroscopy.org
-Editor: Sébastien Besson, Open Microscopy Environment (OME) https://www.openmicroscopy.org
-Editor: Constantin Pape, European Molecular Biology Laboratory (EMBL) https://www.embl.org/sites/heidelberg/
-Editor: John Bogovic, Hughes Medical Institute Janelia (HHMI) https://www.janelia.org/ 
-Abstract: This document contains next-generation file format (NGFF)
-Abstract: specifications for storing bioimaging data in the cloud.
-Abstract: All specifications are submitted to the https://image.sc community for review.
-Status Text: The current released version of this specification is
-Status Text: will be provided between numbered versions. Data written with these latest changes
-Status Text: (an "editor's draft") will not necessarily be supported.
-
- -Coordinates and Axes {#coords-axes} -===================== - -OME-NGFF datasets are arrays that hold values. The arrays may be indexed by discrete (integer) -coordinates in order to obtain a corresponding value. If values are desired at continuous (real-valued) -coordinates, then interpolation is required. - -Interpolation {#interp} ---------------------- - -Interpolation is the process of producing values at continuous coordinates from data sampled at discrete -coordinates. "Nearest-neighbor" and "N-Linear" are the two most commonly used interpolation methods. - - -Pixel coordinates {#pix-coords} ---------------------- - -**The pixel center is the origin of the continuous coordinate system.** - -### Top-left convention - -A common alternative convention is for the origin in the continuous space is at the "top-left" of the pixel. -This is not recommended, but can be acheived by explicitly adding a half-pixel translation, for example: - -```json -{ - "name": "center_to_top-left", - "type": "translation", - "translation" : [0.5, 0.5], - "output_space" : "top-left-space" -} -``` - -Coordinate Transformations {#coord-tforms} -===================== - -This document describes background and motivation that is outside the NGFF specification. - - -Direction {#direction} ---------------------- - -Specified coordinate transforms are in the "forward" direction. They represent functions -from *points* in the input space to *points* in the output space. For example, the transformation `"ij2xy"` - - -```json -{ - "name": "ij2xy", - "type": "scale", - "scale": [2, 0.5] - "input_axes" : ["i", "j"] - "output_axes" : ["x", "y"] -} -``` - -representes the function - -``` -x = 2 * i -y = 0.5 * j -``` - - -Recommendations {#recommendations} -===================== - - -"Native" physical space ---------------------- - -Datasets SHOULD define a transformation from array space to their "native physical space." -This transformation SHOULD describe physical pixel spacing and origin only, and therefore SHOULD consist of -`scale` and/or `translation` types only. - -Subsequent reorientation / registration transformations SHOULD use this native space as their `input_space`, -i.e., transformations should be defined in physical coordinates. - - From ca04a60fc7f68ad14c4197e9333691a8ee8f3333 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 8 Oct 2025 13:22:09 +0200 Subject: [PATCH 48/55] removed obsolete schema --- schemas/coordinateTransformations.schema | 296 ----------------------- 1 file changed, 296 deletions(-) delete mode 100644 schemas/coordinateTransformations.schema diff --git a/schemas/coordinateTransformations.schema b/schemas/coordinateTransformations.schema deleted file mode 100644 index 8bd35f4f..00000000 --- a/schemas/coordinateTransformations.schema +++ /dev/null @@ -1,296 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/latest/schemas/coordinateTransformations.schema", - "title": "NGFF Coordinate Transformations", - "description": "JSON from OME-NGFF .zattrs", - "type": "array", - "minItems": 1, - "contains": { - "type": "object" - }, - "maxContains": 1, - "items": { - "$ref": "#/$defs/transformation" - }, - "$defs": { - "transformation" : { - "oneOf": [ - { - "$ref": "#/$defs/scaleTransformation" - }, - { - "$ref": "#/$defs/translationTransformation" - }, - { - "$ref": "#/$defs/affineTransformation" - }, - { - "$ref": "#/$defs/rotationTransformation" - }, - { - "$ref": "#/$defs/inverseOfTransformation" - }, - { - "$ref": "#/$defs/sequenceTransformation" - }, - { - "$ref": "#/$defs/coordinatesTransformation" - }, - { - "$ref": "#/$defs/displacementsTransformation" - }, - { - "$ref": "#/$defs/byDimensionTransformation" - }, - { - "$ref": "#/$defs/bijectionTransformation" - } - ] - }, - "scaleTransformation": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "scale" - ] - }, - "scale": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - }, - "path": { - "type": "string" - } - }, - "required": [ - "type" - ], - "oneOf": [ - { - "required": ["scale"] - }, - { - "required": ["path"] - } - ] - }, - "translationTransformation": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "translation" - ] - }, - "translation": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - }, - "path": { - "type": "string" - } - }, - "required": [ - "type" - ], - "oneOf": [ - { - "required": ["translation"] - }, - { - "required": ["path"] - } - ] - }, - "affineTransformation": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "affine" - ] - }, - "affine": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - }, - "path": { - "type": "string" - } - }, - "required": [ - "type" - ], - "oneOf": [ - { - "required": ["affine"] - }, - { - "required": ["path"] - } - ] - }, - "rotationTransformation": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "rotation" - ] - }, - "rotation": { - "type": "object", - "minItems": 2, - "items": { - "type": "number" - } - }, - "path": { - "type": "string" - } - }, - "required": [ - "type" - ], - "oneOf": [ - { - "required": ["rotation"] - }, - { - "required": ["path"] - } - ] - }, - "inverseOfTransformation": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "inverseOf" - ] - }, - "transformation": { - "type": "object" - } - }, - "required": [ - "type", "transformation" - ] - }, - "sequenceTransformation": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "sequence" - ] - }, - "transformations": { - "type": "array" - } - }, - "required": [ - "type", "transformations" - ] - }, - "coordinatesTransformation": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "coordinates" - ] - }, - "path": { - "type": "string" - }, - "interpolation": { - "type": "string", - "enum": [ - "nearest", "linear", "cubic" - ] - } - }, - "required": [ - "type", "path", "interpolation" - ] - }, - "displacementsTransformation": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "displacements" - ] - }, - "path": { - "type": "string" - }, - "interpolation": { - "type": "string", - "enum": [ - "nearest", "linear", "cubic" - ] - } - }, - "required": [ - "type", "path", "interpolation" - ] - }, - "byDimensionTransformation": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "byDimension" - ] - }, - "transformations": { - "type": "array" - } - }, - "required": [ - "type", "transformations" - ] - }, - "bijectionTransformation": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bijection" - ] - }, - "forward": { - "type": "object" - }, - "inverse": { - "type": "object" - } - }, - "required": [ - "type", "forward", "inverse" - ] - } - } -} From 655493da8f5db3321849bba58275992bb2475172 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 8 Oct 2025 13:22:43 +0200 Subject: [PATCH 49/55] generate html files --- docs/pre_build.py | 48 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/docs/pre_build.py b/docs/pre_build.py index 94c964db..5f7b16a6 100644 --- a/docs/pre_build.py +++ b/docs/pre_build.py @@ -62,26 +62,66 @@ def build_json_schemas(): os.makedirs(output_directory, exist_ok=True) schema_files = glob.glob(os.path.join(schema_source_dir, '*.schema'), recursive=True) + index_markdown = """# JSON Schemas + +This section contains JSON schemas for various metadata layouts. +Find below links to autogenerated markdown pages or interactive HTML pages for each schema. + +| Schema | Markdown | HTML | +|--------|----------|------| +""" + for schema_file in schema_files: if 'strict' in schema_file: continue # skip strict schemas - output_md_path = os.path.join(output_directory, f"{Path(schema_file).stem}.md") + print(f'Processing {schema_file}...') + output_path_md = os.path.join(output_directory, "markdown", f"{Path(schema_file).stem}" + ".md") + output_path_html = os.path.join(output_directory, "html", f"{Path(schema_file).stem}" + ".html") + os.makedirs(os.path.dirname(output_path_md), exist_ok=True) + os.makedirs(os.path.dirname(output_path_html), exist_ok=True) # Generate the documentation - config = GenerationConfiguration( + config_md = GenerationConfiguration( template_name='md', with_footer=True, show_toc=False, link_to_reused_ref=False) + config_html = GenerationConfiguration( + template_name='js', + with_footer=True, + show_toc=False, + link_to_reused_ref=False) try: generate_from_filename( os.path.abspath(schema_file), - result_file_name=os.path.abspath(output_md_path), - config=config + result_file_name=os.path.abspath(output_path_md), + config=config_md ) + generate_from_filename( + os.path.abspath(schema_file), + result_file_name=os.path.abspath(output_path_html), + config=config_html + ) + + # insert mySt crossreference at top of markdown files + with open(output_path_md, 'r') as md_file: + md_content = md_file.read() + crossref = f"(schemas:{Path(schema_file).stem})" + md_content = f"{crossref}\n\n{md_content}" + with open(output_path_md, 'w') as md_file: + md_file.write(md_content) + except Exception as e: print(f"Error processing {schema_file}: {e}") + continue + + link_markdown = f"[{Path(schema_file).stem}]{crossref}" + link_html = f"[{Path(schema_file).stem}]({output_path_html})" + index_markdown += f"| {Path(schema_file).stem} | {link_markdown} | {link_html} |\n" + + with open(os.path.join(output_directory, "index.md"), 'w') as index_file: + index_file.write(index_markdown) build_json_examples() build_json_schemas() From b34b6dfe18022bf9f9f61ab32ddf0ae34a21fbc0 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 8 Oct 2025 13:42:40 +0200 Subject: [PATCH 50/55] add index page to schemas --- _toc.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_toc.yml b/_toc.yml index d4ac723f..9df6edc7 100644 --- a/_toc.yml +++ b/_toc.yml @@ -8,9 +8,9 @@ chapters: - file: docs/examples sections: - glob: docs/examples/* -- file: docs/schemas +- file: docs/schemas/index sections: - - glob: docs/schemas/* + - glob: docs/schemas/markdown/* - file: contribute - file: citing From c4983689cda17a00db1215e55f46fe647a493be2 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 8 Oct 2025 13:42:50 +0200 Subject: [PATCH 51/55] build both html and md --- docs/pre_build.py | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/docs/pre_build.py b/docs/pre_build.py index 5f7b16a6..873ea0dc 100644 --- a/docs/pre_build.py +++ b/docs/pre_build.py @@ -82,27 +82,17 @@ def build_json_schemas(): os.makedirs(os.path.dirname(output_path_html), exist_ok=True) # Generate the documentation - config_md = GenerationConfiguration( - template_name='md', - with_footer=True, - show_toc=False, - link_to_reused_ref=False) - config_html = GenerationConfiguration( - template_name='js', - with_footer=True, - show_toc=False, - link_to_reused_ref=False) try: + config_md = GenerationConfiguration( + template_name='md', + with_footer=True, + show_toc=False, + link_to_reused_ref=False) generate_from_filename( os.path.abspath(schema_file), result_file_name=os.path.abspath(output_path_md), config=config_md ) - generate_from_filename( - os.path.abspath(schema_file), - result_file_name=os.path.abspath(output_path_html), - config=config_html - ) # insert mySt crossreference at top of markdown files with open(output_path_md, 'r') as md_file: @@ -111,13 +101,28 @@ def build_json_schemas(): md_content = f"{crossref}\n\n{md_content}" with open(output_path_md, 'w') as md_file: md_file.write(md_content) + + link_markdown = f"[{Path(schema_file).stem}]{crossref}" + except Exception as e: + link_markdown = "" + + try: + config_html = GenerationConfiguration( + template_name='js', + with_footer=True, + show_toc=False, + link_to_reused_ref=False) + + generate_from_filename( + os.path.abspath(schema_file), + result_file_name=os.path.abspath(output_path_html), + config=config_html + ) + link_html = f"[{Path(schema_file).stem}]({output_path_html})" except Exception as e: - print(f"Error processing {schema_file}: {e}") - continue + link_html = "" - link_markdown = f"[{Path(schema_file).stem}]{crossref}" - link_html = f"[{Path(schema_file).stem}]({output_path_html})" index_markdown += f"| {Path(schema_file).stem} | {link_markdown} | {link_html} |\n" with open(os.path.join(output_directory, "index.md"), 'w') as index_file: From a56352ba19ef9e6ec4d6e79bf369bc14d355babb Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 8 Oct 2025 14:43:13 +0200 Subject: [PATCH 52/55] fix link to requirements file in contrib pages --- contribute.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute.md b/contribute.md index fec8c1c6..ce0777a4 100644 --- a/contribute.md +++ b/contribute.md @@ -12,7 +12,7 @@ Build and inspect changes to the documentation before submitting a PR. To do so, to install the necessary dependecies: ```bash -pip install -r requirements.txt +pip install -r docs/requirements.txt ``` This document uses [jupyter-book](https://jupyterbook.org) to generate the pages and [MyST](https://mystmd.org) From 0041999c72f9a7ad8dc93c2a117accd048c66d63 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 8 Oct 2025 16:49:37 +0200 Subject: [PATCH 53/55] text structure and clarity --- specification.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/specification.md b/specification.md index 82ea06e0..4e88b3dc 100644 --- a/specification.md +++ b/specification.md @@ -724,9 +724,11 @@ results in the point [2,-1,3] because it is computed with the matrix-vector mult ### Transformation types (transformation-types)= -Input and output dimensionality may be determined by the value of the "input" and "output" fields, respectively. -If the value of “input” is an array, it’s length gives the input dimension, otherwise it is given by the length of “axes” for the coordinate system with the name of the “input”. -If the value of "output" is an array, its length gives the output dimension, otherwise it is given by the length of "axes" for the coordinate system with the name of the "output". +Input and output dimensionality may be determined by the value of the "input" and "output" fields, respectively. +If the value of "input" is an array, its shape gives the input dimension, +otherwise it is given by the length of "axes" for the coordinate system with the name of the "input". +If the value of "output" is an array, its shape gives the output dimension, +otherwise it is given by the length of "axes" for the coordinate system with the name of the "output". #### identity (identity)= From 8eb5eab093d74316a45899ebc057692b638a8442 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 8 Oct 2025 17:18:59 +0200 Subject: [PATCH 54/55] upgraded to Jupyter-book 2 and reorder repo move build output to special readthedocs folder fix dependency name moved package installation into post_install field correctly configure uv scrape uv use correct output path correct output path Update .readthedocs.yaml change build path Update .readthedocs.yaml Reorganize repo revert autodocs config Update .readthedocs.yaml Update .readthedocs.yaml specified output dir revert autodoc config --- .readthedocs.yaml | 12 +- docs/examples.md | 3 - _config.yml => ngff_spec/_config.yml | 0 _toc.yml => ngff_spec/_toc.yml | 9 +- ngff_spec/autodocs/examples.md | 3 + ngff_spec/autodocs/examples/bf2raw.md | 70 + ngff_spec/autodocs/examples/coordSystems.md | 34 + ngff_spec/autodocs/examples/examples.md.md | 6 + ngff_spec/autodocs/examples/label_strict.md | 62 + .../autodocs/examples/multiscales_strict.md | 332 +++++ ngff_spec/autodocs/examples/ome.md | 28 + ngff_spec/autodocs/examples/plate_strict.md | 199 +++ ngff_spec/autodocs/examples/subspace.md | 163 +++ .../autodocs/examples/transformations.md | 1197 +++++++++++++++++ ngff_spec/autodocs/examples/well_strict.md | 74 + ngff_spec/autodocs/schemas.md | 19 + ngff_spec/autodocs/schemas/html/_version.html | 1 + ngff_spec/autodocs/schemas/html/axes.html | 1 + ngff_spec/autodocs/schemas/html/bf2raw.html | 1 + .../schemas/html/coordinate_systems.html | 1 + ngff_spec/autodocs/schemas/html/label.html | 1 + ngff_spec/autodocs/schemas/html/ome.html | 1 + ngff_spec/autodocs/schemas/html/ome_zarr.html | 1 + ngff_spec/autodocs/schemas/html/plate.html | 1 + .../autodocs/schemas/html/schema_doc.css | 181 +++ .../autodocs/schemas/html/schema_doc.min.js | 1 + ngff_spec/autodocs/schemas/html/well.html | 1 + .../autodocs/schemas/markdown/_version.md | 18 + ngff_spec/autodocs/schemas/markdown/axes.md | 127 ++ ngff_spec/autodocs/schemas/markdown/bf2raw.md | 56 + .../schemas/markdown/coordinate_systems.md | 174 +++ ngff_spec/autodocs/schemas/markdown/label.md | 198 +++ ngff_spec/autodocs/schemas/markdown/ome.md | 72 + .../autodocs/schemas/markdown/ome_zarr.md | 85 ++ ngff_spec/autodocs/schemas/markdown/plate.md | 357 +++++ ngff_spec/autodocs/schemas/markdown/well.md | 112 ++ citing.md => ngff_spec/citing.md | 0 contribute.md => ngff_spec/contribute.md | 8 +- .../examples}/bf2raw/.config.json | 0 .../examples}/bf2raw/image.json | 0 .../examples}/bf2raw/plate.json | 0 .../examples}/coordSystems/.config.json | 0 .../examples}/coordSystems/arrayCoordSys.json | 0 .../examples}/label_strict/.config.json | 0 .../label_strict/colors_properties.json | 0 .../examples}/multiscales_strict/.config.json | 0 .../multiscales_example.json | 0 .../multiscales_example_relative.json | 0 .../multiscales_transformations.json | 0 .../examples}/ome/.config.json | 0 .../examples}/ome/series-2.json | 0 .../examples}/plate_strict/.config.json | 0 .../examples}/plate_strict/plate_2wells.json | 0 .../examples}/plate_strict/plate_6wells.json | 0 .../examples}/subspace/.config.json | 0 .../examples}/subspace/subspaceMultidim.json | 0 .../examples}/subspace/subspacePermute.json | 0 .../examples}/transformations/.config.json | 0 .../examples}/transformations/affine2d2d.json | 0 .../examples}/transformations/affine2d3d.json | 0 .../examples}/transformations/bijection.json | 0 .../transformations/bijection_verbose.json | 0 .../transformations/byDimension1.json | 34 +- .../transformations/byDimension2.json | 84 +- .../transformations/byDimensionInvalid1.json | 34 +- .../transformations/byDimensionInvalid2.json | 34 +- .../transformations/byDimensionXarray.json | 78 +- .../transformations/coordinates1d.json | 0 .../transformations/displacement1d.json | 0 .../examples}/transformations/identity.json | 0 .../examples}/transformations/inverseOf.json | 0 .../examples}/transformations/mapAxis1.json | 0 .../examples}/transformations/mapAxis2.json | 0 .../examples}/transformations/rotation.json | 0 .../examples}/transformations/scale.json | 0 .../examples}/transformations/sequence.json | 0 .../transformations/sequenceSubspace1.json | 0 .../transformations/translation.json | 0 .../examples}/transformations/xarrayLike.json | 0 .../examples}/well_strict/.config.json | 0 .../examples}/well_strict/well_2fields.json | 0 .../examples}/well_strict/well_4fields.json | 0 {docs => ngff_spec}/pre_build.py | 10 +- references.bib => ngff_spec/references.bib | 0 .../schemas}/_version.schema | 0 {schemas => ngff_spec/schemas}/axes.schema | 0 {schemas => ngff_spec/schemas}/bf2raw.schema | 0 .../schemas}/coordinate_systems.schema | 0 .../coordinate_systems_and_transforms.schema | 0 .../schemas}/coordinate_transformation.schema | 0 {schemas => ngff_spec/schemas}/image.schema | 0 {schemas => ngff_spec/schemas}/label.schema | 0 {schemas => ngff_spec/schemas}/ome.schema | 0 .../schemas}/ome_zarr.schema | 0 {schemas => ngff_spec/schemas}/plate.schema | 0 .../schemas}/strict_axes.schema | 0 .../schemas}/strict_coordinate_systems.schema | 0 .../schemas}/strict_image.schema | 0 .../schemas}/strict_label.schema | 0 .../schemas}/strict_plate.schema | 0 .../schemas}/strict_well.schema | 0 {schemas => ngff_spec/schemas}/well.schema | 0 .../specification.md | 0 {tests => ngff_spec/tests}/image_suite.json | 0 {tests => ngff_spec/tests}/label_suite.json | 0 {tests => ngff_spec/tests}/plate_suite.json | 0 .../tests}/strict_image_suite.json | 0 .../tests}/strict_label_suite.json | 0 .../tests}/strict_plate_suite.json | 0 .../tests}/strict_well_suite.json | 0 {tests => ngff_spec/tests}/test_validation.py | 0 {tests => ngff_spec/tests}/well_suite.json | 0 .../version_history.md | 0 docs/requirements.txt => requirements.txt | 2 +- 114 files changed, 3730 insertions(+), 155 deletions(-) delete mode 100644 docs/examples.md rename _config.yml => ngff_spec/_config.yml (100%) rename _toc.yml => ngff_spec/_toc.yml (63%) create mode 100644 ngff_spec/autodocs/examples.md create mode 100644 ngff_spec/autodocs/examples/bf2raw.md create mode 100644 ngff_spec/autodocs/examples/coordSystems.md create mode 100644 ngff_spec/autodocs/examples/examples.md.md create mode 100644 ngff_spec/autodocs/examples/label_strict.md create mode 100644 ngff_spec/autodocs/examples/multiscales_strict.md create mode 100644 ngff_spec/autodocs/examples/ome.md create mode 100644 ngff_spec/autodocs/examples/plate_strict.md create mode 100644 ngff_spec/autodocs/examples/subspace.md create mode 100644 ngff_spec/autodocs/examples/transformations.md create mode 100644 ngff_spec/autodocs/examples/well_strict.md create mode 100644 ngff_spec/autodocs/schemas.md create mode 100644 ngff_spec/autodocs/schemas/html/_version.html create mode 100644 ngff_spec/autodocs/schemas/html/axes.html create mode 100644 ngff_spec/autodocs/schemas/html/bf2raw.html create mode 100644 ngff_spec/autodocs/schemas/html/coordinate_systems.html create mode 100644 ngff_spec/autodocs/schemas/html/label.html create mode 100644 ngff_spec/autodocs/schemas/html/ome.html create mode 100644 ngff_spec/autodocs/schemas/html/ome_zarr.html create mode 100644 ngff_spec/autodocs/schemas/html/plate.html create mode 100644 ngff_spec/autodocs/schemas/html/schema_doc.css create mode 100644 ngff_spec/autodocs/schemas/html/schema_doc.min.js create mode 100644 ngff_spec/autodocs/schemas/html/well.html create mode 100644 ngff_spec/autodocs/schemas/markdown/_version.md create mode 100644 ngff_spec/autodocs/schemas/markdown/axes.md create mode 100644 ngff_spec/autodocs/schemas/markdown/bf2raw.md create mode 100644 ngff_spec/autodocs/schemas/markdown/coordinate_systems.md create mode 100644 ngff_spec/autodocs/schemas/markdown/label.md create mode 100644 ngff_spec/autodocs/schemas/markdown/ome.md create mode 100644 ngff_spec/autodocs/schemas/markdown/ome_zarr.md create mode 100644 ngff_spec/autodocs/schemas/markdown/plate.md create mode 100644 ngff_spec/autodocs/schemas/markdown/well.md rename citing.md => ngff_spec/citing.md (100%) rename contribute.md => ngff_spec/contribute.md (93%) rename {examples => ngff_spec/examples}/bf2raw/.config.json (100%) rename {examples => ngff_spec/examples}/bf2raw/image.json (100%) rename {examples => ngff_spec/examples}/bf2raw/plate.json (100%) rename {examples => ngff_spec/examples}/coordSystems/.config.json (100%) rename {examples => ngff_spec/examples}/coordSystems/arrayCoordSys.json (100%) rename {examples => ngff_spec/examples}/label_strict/.config.json (100%) rename {examples => ngff_spec/examples}/label_strict/colors_properties.json (100%) rename {examples => ngff_spec/examples}/multiscales_strict/.config.json (100%) rename {examples => ngff_spec/examples}/multiscales_strict/multiscales_example.json (100%) rename {examples => ngff_spec/examples}/multiscales_strict/multiscales_example_relative.json (100%) rename {examples => ngff_spec/examples}/multiscales_strict/multiscales_transformations.json (100%) rename {examples => ngff_spec/examples}/ome/.config.json (100%) rename {examples => ngff_spec/examples}/ome/series-2.json (100%) rename {examples => ngff_spec/examples}/plate_strict/.config.json (100%) rename {examples => ngff_spec/examples}/plate_strict/plate_2wells.json (100%) rename {examples => ngff_spec/examples}/plate_strict/plate_6wells.json (100%) rename {examples => ngff_spec/examples}/subspace/.config.json (100%) rename {examples => ngff_spec/examples}/subspace/subspaceMultidim.json (100%) rename {examples => ngff_spec/examples}/subspace/subspacePermute.json (100%) rename {examples => ngff_spec/examples}/transformations/.config.json (100%) rename {examples => ngff_spec/examples}/transformations/affine2d2d.json (100%) rename {examples => ngff_spec/examples}/transformations/affine2d3d.json (100%) rename {examples => ngff_spec/examples}/transformations/bijection.json (100%) rename {examples => ngff_spec/examples}/transformations/bijection_verbose.json (100%) rename {examples => ngff_spec/examples}/transformations/byDimension1.json (97%) rename {examples => ngff_spec/examples}/transformations/byDimension2.json (95%) rename {examples => ngff_spec/examples}/transformations/byDimensionInvalid1.json (97%) rename {examples => ngff_spec/examples}/transformations/byDimensionInvalid2.json (97%) rename {examples => ngff_spec/examples}/transformations/byDimensionXarray.json (95%) rename {examples => ngff_spec/examples}/transformations/coordinates1d.json (100%) rename {examples => ngff_spec/examples}/transformations/displacement1d.json (100%) rename {examples => ngff_spec/examples}/transformations/identity.json (100%) rename {examples => ngff_spec/examples}/transformations/inverseOf.json (100%) rename {examples => ngff_spec/examples}/transformations/mapAxis1.json (100%) rename {examples => ngff_spec/examples}/transformations/mapAxis2.json (100%) rename {examples => ngff_spec/examples}/transformations/rotation.json (100%) rename {examples => ngff_spec/examples}/transformations/scale.json (100%) rename {examples => ngff_spec/examples}/transformations/sequence.json (100%) rename {examples => ngff_spec/examples}/transformations/sequenceSubspace1.json (100%) rename {examples => ngff_spec/examples}/transformations/translation.json (100%) rename {examples => ngff_spec/examples}/transformations/xarrayLike.json (100%) rename {examples => ngff_spec/examples}/well_strict/.config.json (100%) rename {examples => ngff_spec/examples}/well_strict/well_2fields.json (100%) rename {examples => ngff_spec/examples}/well_strict/well_4fields.json (100%) rename {docs => ngff_spec}/pre_build.py (94%) rename references.bib => ngff_spec/references.bib (100%) rename {schemas => ngff_spec/schemas}/_version.schema (100%) rename {schemas => ngff_spec/schemas}/axes.schema (100%) rename {schemas => ngff_spec/schemas}/bf2raw.schema (100%) rename {schemas => ngff_spec/schemas}/coordinate_systems.schema (100%) rename {schemas => ngff_spec/schemas}/coordinate_systems_and_transforms.schema (100%) rename {schemas => ngff_spec/schemas}/coordinate_transformation.schema (100%) rename {schemas => ngff_spec/schemas}/image.schema (100%) rename {schemas => ngff_spec/schemas}/label.schema (100%) rename {schemas => ngff_spec/schemas}/ome.schema (100%) rename {schemas => ngff_spec/schemas}/ome_zarr.schema (100%) rename {schemas => ngff_spec/schemas}/plate.schema (100%) rename {schemas => ngff_spec/schemas}/strict_axes.schema (100%) rename {schemas => ngff_spec/schemas}/strict_coordinate_systems.schema (100%) rename {schemas => ngff_spec/schemas}/strict_image.schema (100%) rename {schemas => ngff_spec/schemas}/strict_label.schema (100%) rename {schemas => ngff_spec/schemas}/strict_plate.schema (100%) rename {schemas => ngff_spec/schemas}/strict_well.schema (100%) rename {schemas => ngff_spec/schemas}/well.schema (100%) rename specification.md => ngff_spec/specification.md (100%) rename {tests => ngff_spec/tests}/image_suite.json (100%) rename {tests => ngff_spec/tests}/label_suite.json (100%) rename {tests => ngff_spec/tests}/plate_suite.json (100%) rename {tests => ngff_spec/tests}/strict_image_suite.json (100%) rename {tests => ngff_spec/tests}/strict_label_suite.json (100%) rename {tests => ngff_spec/tests}/strict_plate_suite.json (100%) rename {tests => ngff_spec/tests}/strict_well_suite.json (100%) rename {tests => ngff_spec/tests}/test_validation.py (100%) rename {tests => ngff_spec/tests}/well_suite.json (100%) rename version_history.md => ngff_spec/version_history.md (100%) rename docs/requirements.txt => requirements.txt (88%) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index cc67767f..47854b34 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -3,17 +3,19 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3.13" + python: "3.11" jobs: pre_build: # Generate the Sphinx configuration for this Jupyter Book so it builds. - - "jupyter-book config sphinx ." - - "python ./docs/pre_build.py" + - "jupyter-book config sphinx ngff_spec/" + - "python ./ngff_spec/pre_build.py" python: install: - - requirements: docs/requirements.txt + - requirements: requirements.txt sphinx: - configuration: conf.py \ No newline at end of file + configuration: ngff_spec/conf.py + builder: html + fail_on_warning: true \ No newline at end of file diff --git a/docs/examples.md b/docs/examples.md deleted file mode 100644 index d7c1c369..00000000 --- a/docs/examples.md +++ /dev/null @@ -1,3 +0,0 @@ -# JSON Examples - -This document contains JSON examples for ngff-compliant metadata layouts. \ No newline at end of file diff --git a/_config.yml b/ngff_spec/_config.yml similarity index 100% rename from _config.yml rename to ngff_spec/_config.yml diff --git a/_toc.yml b/ngff_spec/_toc.yml similarity index 63% rename from _toc.yml rename to ngff_spec/_toc.yml index 9df6edc7..61c2ba50 100644 --- a/_toc.yml +++ b/ngff_spec/_toc.yml @@ -5,13 +5,12 @@ format: jb-book root: specification chapters: -- file: docs/examples +- file: autodocs/examples sections: - - glob: docs/examples/* -- file: docs/schemas/index + - glob: autodocs/examples/* +- file: autodocs/schemas sections: - - glob: docs/schemas/markdown/* - + - glob: autodocs/schemas/markdown/* - file: contribute - file: citing - file: version_history \ No newline at end of file diff --git a/ngff_spec/autodocs/examples.md b/ngff_spec/autodocs/examples.md new file mode 100644 index 00000000..e051521a --- /dev/null +++ b/ngff_spec/autodocs/examples.md @@ -0,0 +1,3 @@ +# JSON examples + +This section contains practical examples for the metadata structures laid out in the specification document. \ No newline at end of file diff --git a/ngff_spec/autodocs/examples/bf2raw.md b/ngff_spec/autodocs/examples/bf2raw.md new file mode 100644 index 00000000..8b850bc3 --- /dev/null +++ b/ngff_spec/autodocs/examples/bf2raw.md @@ -0,0 +1,70 @@ +# bf2raw + + + +This document contains JSON examples for bf2raw metadata layouts. + + +## image +(examples:bf2raw:image)= + +```{code-block} json +:caption: image +:linenos: + +{ + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.5", + "bioformats2raw.layout": 3 + } + } +} +``` + +## plate +(examples:bf2raw:plate)= + +```{code-block} json +:caption: plate +:linenos: + +{ + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.5", + "bioformats2raw.layout": 3, + "plate": { + "columns": [ + { + "name": "1" + } + ], + "name": "Plate Name 0", + "wells": [ + { + "path": "A/1", + "rowIndex": 0, + "columnIndex": 0 + } + ], + "field_count": 1, + "rows": [ + { + "name": "A" + } + ], + "acquisitions": [ + { + "id": 0 + } + ] + } + } + } +} +``` diff --git a/ngff_spec/autodocs/examples/coordSystems.md b/ngff_spec/autodocs/examples/coordSystems.md new file mode 100644 index 00000000..906ebd11 --- /dev/null +++ b/ngff_spec/autodocs/examples/coordSystems.md @@ -0,0 +1,34 @@ +# coordSystems + + + +This document contains JSON examples for coordSystems metadata layouts. + + +## arrayCoordSys +(examples:coordSystems:arrayCoordSys)= + +```{code-block} json +:caption: arrayCoordSys +:linenos: + +{ + "arrayCoordinateSystem": { + "name": "myDataArray", + "axes": [ + { + "name": "k", + "type": "array" + }, + { + "name": "j", + "type": "array" + }, + { + "name": "i", + "type": "array" + } + ] + } +} +``` diff --git a/ngff_spec/autodocs/examples/examples.md.md b/ngff_spec/autodocs/examples/examples.md.md new file mode 100644 index 00000000..cb30e93b --- /dev/null +++ b/ngff_spec/autodocs/examples/examples.md.md @@ -0,0 +1,6 @@ +# examples.md + + + +This document contains JSON examples for examples.md metadata layouts. + diff --git a/ngff_spec/autodocs/examples/label_strict.md b/ngff_spec/autodocs/examples/label_strict.md new file mode 100644 index 00000000..e24812ed --- /dev/null +++ b/ngff_spec/autodocs/examples/label_strict.md @@ -0,0 +1,62 @@ +# label_strict + + + +This document contains JSON examples for label_strict metadata layouts. + + +## colors_properties +(examples:label_strict:colors_properties)= + +```{code-block} json +:caption: colors_properties +:linenos: + +{ + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.5", + "image-label": { + "colors": [ + { + "label-value": 0, + "rgba": [ + 0, + 0, + 128, + 128 + ] + }, + { + "label-value": 1, + "rgba": [ + 0, + 128, + 0, + 128 + ] + } + ], + "properties": [ + { + "label-value": 0, + "area (pixels)": 1200, + "class": "intercellular space" + }, + { + "label-value": 1, + "area (pixels)": 1650, + "class": "cell", + "cell type": "neuron" + } + ], + "source": { + "image": "../../" + } + } + } + } +} +``` diff --git a/ngff_spec/autodocs/examples/multiscales_strict.md b/ngff_spec/autodocs/examples/multiscales_strict.md new file mode 100644 index 00000000..3dc7ae03 --- /dev/null +++ b/ngff_spec/autodocs/examples/multiscales_strict.md @@ -0,0 +1,332 @@ +# multiscales_strict + + + +This document contains JSON examples for multiscales_strict metadata layouts. + + +## multiscales_example +(examples:multiscales_strict:multiscales_example)= + +```{code-block} json +:caption: multiscales_example +:linenos: + +{ + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.6dev2", + "multiscales": [ + { + "name": "physical", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "name": "t", + "type": "time", + "unit": "millisecond" + }, + { + "name": "c", + "type": "channel" + }, + { + "name": "z", + "type": "space", + "unit": "micrometer" + }, + { + "name": "y", + "type": "space", + "unit": "micrometer" + }, + { + "name": "x", + "type": "space", + "unit": "micrometer" + } + ] + } + ], + "datasets": [ + { + "path": "0", + "coordinateTransformations": [ + { + "type": "scale", + "scale": [ + 0.1, + 1.0, + 0.5, + 0.5, + 0.5 + ], + "input": "0", + "output": "physical" + } + ] + }, + { + "path": "1", + "coordinateTransformations": [ + { + "type": "scale", + "scale": [ + 0.1, + 1.0, + 1.0, + 1.0, + 1.0 + ], + "input": "1", + "output": "physical" + } + ] + }, + { + "path": "2", + "coordinateTransformations": [ + { + "type": "scale", + "scale": [ + 0.1, + 1.0, + 2.0, + 2.0, + 2.0 + ], + "input": "2", + "output": "physical" + } + ] + } + ], + "type": "gaussian", + "metadata": { + "description": "the fields in metadata depend on the downscaling implementation. Here, the parameters passed to the skimage function are given", + "method": "skimage.transform.pyramid_gaussian", + "version": "0.16.1", + "args": "[true]", + "kwargs": { + "multichannel": true + } + } + } + ] + } + } +} +``` + +## multiscales_example_relative +(examples:multiscales_strict:multiscales_example_relative)= + +```{code-block} json +:caption: multiscales_example_relative +:linenos: + +{ + "multiscales": [ + { + "version": "0.5-dev", + "name": "example", + "coordinateSystems": [ + { + "name": "exampleCoordinateSystem", + "axes": [ + { + "name": "t", + "type": "time", + "unit": "millisecond" + }, + { + "name": "c", + "type": "channel" + }, + { + "name": "z", + "type": "space", + "unit": "micrometer" + }, + { + "name": "y", + "type": "space", + "unit": "micrometer" + }, + { + "name": "x", + "type": "space", + "unit": "micrometer" + } + ] + }, + { + "name": "array_0", + "axes": [ + { + "name": "t", + "type": "time", + "unit": "millisecond" + }, + { + "name": "c", + "type": "channel" + }, + { + "name": "z", + "type": "space", + "unit": "micrometer" + }, + { + "name": "y", + "type": "space", + "unit": "micrometer" + }, + { + "name": "x", + "type": "space", + "unit": "micrometer" + } + ] + } + ], + "datasets": [ + { + "path": "0", + "coordinateTransformations": [ + { + "type": "identity", + "input": "/0", + "output": "array_0" + } + ] + }, + { + "path": "1", + "coordinateTransformations": [ + { + "type": "scale", + "scale": [ + 1, + 1, + 2, + 2, + 2 + ], + "input": "/1", + "output": "array_0" + } + ] + }, + { + "path": "2", + "coordinateTransformations": [ + { + "type": "scale", + "scale": [ + 1, + 1, + 4, + 4, + 4 + ], + "input": "/2", + "output": "array_0" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "scale", + "scale": [ + 0.1, + 1.0, + 0.5, + 0.5, + 0.5 + ], + "input": "array_0", + "output": "exampleCoordinateSystem" + } + ], + "type": "gaussian", + "metadata": { + "description": "the fields in metadata depend on the downscaling implementation. Here, the parameters passed to the skimage function are given", + "method": "skimage.transform.pyramid_gaussian", + "version": "0.16.1", + "args": "[true]", + "kwargs": { + "multichannel": true + } + } + } + ] +} +``` + +## multiscales_transformations +(examples:multiscales_strict:multiscales_transformations)= + +```{code-block} json +:caption: multiscales_transformations +:linenos: + +{ + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.5", + "multiscales": [ + { + "axes": [ + { + "name": "y", + "type": "space", + "unit": "micrometer" + }, + { + "name": "x", + "type": "space", + "unit": "micrometer" + } + ], + "datasets": [ + { + "path": "0", + "coordinateTransformations": [ + { + "scale": [ + 1, + 1 + ], + "type": "scale" + } + ] + } + ], + "coordinateTransformations": [ + { + "scale": [ + 10, + 10 + ], + "type": "scale" + } + ], + "name": "image_with_coordinateTransformations", + "type": "foo", + "metadata": { + "key": "value" + } + } + ] + } + } +} +``` diff --git a/ngff_spec/autodocs/examples/ome.md b/ngff_spec/autodocs/examples/ome.md new file mode 100644 index 00000000..89d2bfbe --- /dev/null +++ b/ngff_spec/autodocs/examples/ome.md @@ -0,0 +1,28 @@ +# ome + + + +This document contains JSON examples for ome metadata layouts. + + +## series-2 +(examples:ome:series-2)= + +```{code-block} json +:caption: series-2 +:linenos: + +{ + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.5", + "series": [ + "0", + "1" + ] + } + } +} +``` diff --git a/ngff_spec/autodocs/examples/plate_strict.md b/ngff_spec/autodocs/examples/plate_strict.md new file mode 100644 index 00000000..d022eee6 --- /dev/null +++ b/ngff_spec/autodocs/examples/plate_strict.md @@ -0,0 +1,199 @@ +# plate_strict + + + +This document contains JSON examples for plate_strict metadata layouts. + + +## plate_2wells +(examples:plate_strict:plate_2wells)= + +```{code-block} json +:caption: plate_2wells +:linenos: + +{ + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.5", + "plate": { + "acquisitions": [ + { + "id": 1, + "maximumfieldcount": 1, + "name": "single acquisition", + "starttime": 1343731272000 + } + ], + "columns": [ + { + "name": "1" + }, + { + "name": "2" + }, + { + "name": "3" + }, + { + "name": "4" + }, + { + "name": "5" + }, + { + "name": "6" + }, + { + "name": "7" + }, + { + "name": "8" + }, + { + "name": "9" + }, + { + "name": "10" + }, + { + "name": "11" + }, + { + "name": "12" + } + ], + "field_count": 1, + "name": "sparse test", + "rows": [ + { + "name": "A" + }, + { + "name": "B" + }, + { + "name": "C" + }, + { + "name": "D" + }, + { + "name": "E" + }, + { + "name": "F" + }, + { + "name": "G" + }, + { + "name": "H" + } + ], + "wells": [ + { + "path": "C/5", + "rowIndex": 2, + "columnIndex": 4 + }, + { + "path": "D/7", + "rowIndex": 3, + "columnIndex": 6 + } + ] + } + } + } +} +``` + +## plate_6wells +(examples:plate_strict:plate_6wells)= + +```{code-block} json +:caption: plate_6wells +:linenos: + +{ + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.5", + "plate": { + "acquisitions": [ + { + "id": 1, + "maximumfieldcount": 2, + "name": "Meas_01(2012-07-31_10-41-12)", + "starttime": 1343731272000 + }, + { + "id": 2, + "maximumfieldcount": 2, + "name": "Meas_02(201207-31_11-56-41)", + "starttime": 1343735801000 + } + ], + "columns": [ + { + "name": "1" + }, + { + "name": "2" + }, + { + "name": "3" + } + ], + "field_count": 4, + "name": "test", + "rows": [ + { + "name": "A" + }, + { + "name": "B" + } + ], + "wells": [ + { + "path": "A/1", + "rowIndex": 0, + "columnIndex": 0 + }, + { + "path": "A/2", + "rowIndex": 0, + "columnIndex": 1 + }, + { + "path": "A/3", + "rowIndex": 0, + "columnIndex": 2 + }, + { + "path": "B/1", + "rowIndex": 1, + "columnIndex": 0 + }, + { + "path": "B/2", + "rowIndex": 1, + "columnIndex": 1 + }, + { + "path": "B/3", + "rowIndex": 1, + "columnIndex": 2 + } + ] + } + } + } +} +``` diff --git a/ngff_spec/autodocs/examples/subspace.md b/ngff_spec/autodocs/examples/subspace.md new file mode 100644 index 00000000..be4c5527 --- /dev/null +++ b/ngff_spec/autodocs/examples/subspace.md @@ -0,0 +1,163 @@ +# subspace + + + +This document contains JSON examples for subspace metadata layouts. + + +## subspaceMultidim +(examples:subspace:subspaceMultidim)= + +```{code-block} json +:caption: subspaceMultidim +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "0", + "type": "array" + }, + { + "name": "1", + "type": "array" + }, + { + "name": "2", + "type": "array" + }, + { + "name": "3", + "type": "array" + }, + { + "name": "4", + "type": "array" + } + ] + }, + { + "name": "out", + "axes": [ + { + "name": "x", + "type": "space" + }, + { + "name": "y", + "type": "space" + }, + { + "name": "z", + "type": "space" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "name": "5D-to-3D-not-contiguous", + "input": "in", + "output": "out", + "transformations": [ + { + "type": "mapAxis", + "mapAxis": { + "0": "x", + "2": "z" + }, + "input": [ + "0", + "2" + ], + "output": [ + "x", + "z" + ] + }, + { + "type": "scale", + "scale": [ + 2 + ], + "input": [ + "1" + ], + "output": [ + "y" + ] + } + ] + } + ] +} +``` + +## subspacePermute +(examples:subspace:subspacePermute)= + +```{code-block} json +:caption: subspacePermute +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "i" + }, + { + "name": "j" + } + ] + }, + { + "name": "out", + "axes": [ + { + "name": "x" + }, + { + "name": "y" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { + "type": "identity", + "input": [ + "j" + ], + "output": [ + "x" + ] + }, + { + "type": "scale", + "scale": [ + 2 + ], + "input": [ + "i" + ], + "output": [ + "y" + ] + } + ] + } + ] +} +``` diff --git a/ngff_spec/autodocs/examples/transformations.md b/ngff_spec/autodocs/examples/transformations.md new file mode 100644 index 00000000..fcafd75d --- /dev/null +++ b/ngff_spec/autodocs/examples/transformations.md @@ -0,0 +1,1197 @@ +# transformations + + + +This document contains JSON examples for transformations metadata layouts. + + +## affine2d2d +(examples:transformations:affine2d2d)= + +```{code-block} json +:caption: affine2d2d +:linenos: + +{ + "coordinateSystems": [ + { + "name": "ji", + "axes": [ + { + "name": "j" + }, + { + "name": "i" + } + ] + }, + { + "name": "yx", + "axes": [ + { + "name": "y" + }, + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "affine", + "affine": [ + [ + 1, + 2, + 3 + ], + [ + 4, + 5, + 6 + ] + ], + "input": "ji", + "output": "yx" + } + ] +} +``` + +## affine2d3d +(examples:transformations:affine2d3d)= + +```{code-block} json +:caption: affine2d3d +:linenos: + +{ + "coordinateSystems": [ + { + "name": "ij", + "axes": [ + { + "name": "i" + }, + { + "name": "j" + } + ] + }, + { + "name": "xyz", + "axes": [ + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "z" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "affine", + "affine": [ + [ + 1, + 2, + 3 + ], + [ + 4, + 5, + 6 + ], + [ + 7, + 8, + 9 + ] + ], + "input": "ij", + "output": "xyz" + } + ] +} +``` + +## bijection +(examples:transformations:bijection)= + +```{code-block} json +:caption: bijection +:linenos: + +{ + "coordinateSystems": [ + { + "name": "src", + "axes": [ + { + "name": "j" + }, + { + "name": "i" + } + ] + }, + { + "name": "tgt", + "axes": [ + { + "name": "y" + }, + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "bijection", + "forward": { + "type": "coordinates", + "path": "forward_coordinates" + }, + "inverse": { + "type": "coordinates", + "path": "inverse_coordinates" + }, + "input": "src", + "output": "tgt" + } + ] +} +``` + +## bijection_verbose +(examples:transformations:bijection_verbose)= + +```{code-block} json +:caption: bijection_verbose +:linenos: + +{ + "type": "bijection", + "forward": { + "type": "coordinates", + "path": "forward_coordinates", + "input": "src", + "output": "tgt" + }, + "inverse": { + "type": "coordinates", + "path": "inverse_coordinates", + "input": "tgt", + "output": "src" + }, + "input": "src", + "output": "tgt" +} +``` + +## byDimension1 +(examples:transformations:byDimension1)= + +```{code-block} json +:caption: byDimension1 +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "j" + }, + { + "name": "i" + } + ] + }, + { + "name": "out", + "axes": [ + { + "name": "y" + }, + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { + "type": "translation", + "translation": [ + -1.0 + ], + "input": [ + "i" + ], + "output": [ + "x" + ] + }, + { + "type": "scale", + "scale": [ + 2.0 + ], + "input": [ + "j" + ], + "output": [ + "y" + ] + } + ] + } + ] +} +``` + +## byDimension2 +(examples:transformations:byDimension2)= + +```{code-block} json +:caption: byDimension2 +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "l", + "type": "array" + }, + { + "name": "j", + "type": "array" + }, + { + "name": "k", + "type": "array" + }, + { + "name": "i", + "type": "array" + } + ] + }, + { + "name": "out", + "axes": [ + { + "name": "z", + "type": "array" + }, + { + "name": "y", + "type": "array" + }, + { + "name": "x", + "type": "array" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { + "type": "translation", + "translation": [ + 1, + 3 + ], + "input": [ + "i", + "k" + ], + "output": [ + "y", + "x" + ] + }, + { + "type": "scale", + "scale": [ + 2 + ], + "input": [ + "j" + ], + "output": [ + "z" + ] + } + ] + } + ] +} +``` + +## byDimensionInvalid1 +(examples:transformations:byDimensionInvalid1)= + +```{code-block} json +:caption: byDimensionInvalid1 +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "j" + }, + { + "name": "i" + } + ] + }, + { + "name": "out", + "axes": [ + { + "name": "y" + }, + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { + "type": "translation", + "translation": [ + -1.0 + ], + "input": [ + "i" + ], + "output": [ + "z" + ] + }, + { + "type": "scale", + "scale": [ + 2.0 + ], + "input": [ + "0" + ], + "output": [ + "y" + ] + } + ] + } + ] +} +``` + +## byDimensionInvalid2 +(examples:transformations:byDimensionInvalid2)= + +```{code-block} json +:caption: byDimensionInvalid2 +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "j" + }, + { + "name": "i" + } + ] + }, + { + "name": "out", + "axes": [ + { + "name": "y" + }, + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { + "type": "translation", + "translation": [ + -1.0 + ], + "input": [ + "i" + ], + "output": [ + "x" + ] + }, + { + "type": "scale", + "scale": [ + 2.0 + ], + "input": [ + "i" + ], + "output": [ + "x" + ] + } + ] + } + ] +} +``` + +## byDimensionXarray +(examples:transformations:byDimensionXarray)= + +```{code-block} json +:caption: byDimensionXarray +:linenos: + +{ + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "name": "x", + "type": "space", + "unit": "micrometer" + }, + { + "name": "y", + "type": "space", + "unit": "micrometer" + } + ] + }, + { + "name": "array", + "axes": [ + { + "name": "dim_0", + "type": "array" + }, + { + "name": "dim_1", + "type": "array" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "array", + "output": "physical", + "transformations": [ + { + "type": "coordinates", + "path": "xCoordinates", + "input": [ + "dim_0" + ], + "output": [ + "x" + ] + }, + { + "type": "coordinates", + "path": "yCoordinates", + "input": [ + "dim_1" + ], + "output": [ + "y" + ] + } + ] + } + ] +} +``` + +## coordinates1d +(examples:transformations:coordinates1d)= + +```{code-block} json +:caption: coordinates1d +:linenos: + +{ + "coordinateSystems": [ + { + "name": "i", + "axes": [ + { + "name": "i" + } + ] + }, + { + "name": "x", + "axes": [ + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "name": "a coordinate field transform", + "type": "coordinates", + "path": "i2xCoordinates", + "input": "i", + "output": "x", + "interpolation": "nearest" + } + ] +} +``` + +## displacement1d +(examples:transformations:displacement1d)= + +```{code-block} json +:caption: displacement1d +:linenos: + +{ + "coordinateSystems": [ + { + "name": "i", + "axes": [ + { + "name": "i" + } + ] + }, + { + "name": "x", + "axes": [ + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "name": "a displacement field transform", + "type": "displacements", + "path": "i2xCoordinates", + "input": "i", + "output": "x", + "interpolation": "nearest" + } + ] +} +``` + +## identity +(examples:transformations:identity)= + +```{code-block} json +:caption: identity +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "j" + }, + { + "name": "i" + } + ] + }, + { + "name": "out", + "axes": [ + { + "name": "y" + }, + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "identity", + "input": "in", + "output": "out" + } + ] +} +``` + +## inverseOf +(examples:transformations:inverseOf)= + +```{code-block} json +:caption: inverseOf +:linenos: + +{ + "coordinateSystems": [ + { + "name": "moving", + "axes": [ + { + "name": "y-moving" + }, + { + "name": "x-moving" + } + ] + }, + { + "name": "fixed", + "axes": [ + { + "name": "y-fixed" + }, + { + "name": "x-fixed" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "inverseOf", + "transformation": { + "type": "displacements", + "path": "path/to/displacements" + }, + "input": "moving", + "output": "fixed" + } + ] +} +``` + +## mapAxis1 +(examples:transformations:mapAxis1)= + +```{code-block} json +:caption: mapAxis1 +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "j" + }, + { + "name": "i" + } + ] + }, + { + "name": "out1", + "axes": [ + { + "name": "y" + }, + { + "name": "x" + } + ] + }, + { + "name": "out2", + "axes": [ + { + "name": "y" + }, + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "name": "equivalent to identity", + "type": "mapAxis", + "mapAxis": { + "x": "i", + "y": "j" + }, + "input": "in", + "output": "out1" + }, + { + "name": "permutation", + "type": "mapAxis", + "mapAxis": { + "y": "i", + "x": "j" + }, + "input": "in", + "output": "out2" + } + ] +} +``` + +## mapAxis2 +(examples:transformations:mapAxis2)= + +```{code-block} json +:caption: mapAxis2 +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "a" + }, + { + "name": "b" + } + ] + }, + { + "name": "out_down", + "axes": [ + { + "name": "x" + } + ] + }, + { + "name": "out_up", + "axes": [ + { + "name": "z" + }, + { + "name": "y" + }, + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "name": "projection down", + "type": "mapAxis", + "mapAxis": { + "x": "b" + }, + "input": "in", + "output": "out_down" + }, + { + "name": "projection up", + "type": "mapAxis", + "mapAxis": { + "z": "b", + "y": "b", + "x": "a" + }, + "input": "in", + "output": "out_up" + } + ] +} +``` + +## rotation +(examples:transformations:rotation)= + +```{code-block} json +:caption: rotation +:linenos: + +{ + "coordinateSystems": [ + { + "name": "ji", + "axes": [ + { + "name": "j" + }, + { + "name": "i" + } + ] + }, + { + "name": "yx", + "axes": [ + { + "name": "y" + }, + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "rotation", + "rotation": [ + [ + 0, + -1 + ], + [ + 1, + 0 + ] + ], + "input": "ji", + "output": "yx" + } + ] +} +``` + +## scale +(examples:transformations:scale)= + +```{code-block} json +:caption: scale +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "j" + }, + { + "name": "i" + } + ] + }, + { + "name": "out", + "axes": [ + { + "name": "y" + }, + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "scale", + "scale": [ + 3.12, + 2 + ], + "input": "in", + "output": "out" + } + ] +} +``` + +## sequence +(examples:transformations:sequence)= + +```{code-block} json +:caption: sequence +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "j" + }, + { + "name": "i" + } + ] + }, + { + "name": "out", + "axes": [ + { + "name": "y" + }, + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "sequence", + "input": "in", + "output": "out", + "transformations": [ + { + "type": "translation", + "translation": [ + 0.1, + 0.9 + ] + }, + { + "type": "scale", + "scale": [ + 2, + 3 + ] + } + ] + } + ] +} +``` + +## sequenceSubspace1 +(examples:transformations:sequenceSubspace1)= + +```{code-block} json +:caption: sequenceSubspace1 +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "i" + }, + { + "name": "j" + } + ] + }, + { + "name": "out", + "axes": [ + { + "name": "x" + }, + { + "name": "y" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "sequence", + "input": "in", + "output": "out", + "transformations": [ + { + "type": "coordinates", + "path": "/coordinates", + "inputAxes": [ + "i" + ], + "outputAxes": [ + "x" + ] + }, + { + "type": "scale", + "scale": [ + 2.0 + ], + "inputAxes": [ + "j" + ], + "outputAxes": [ + "y" + ] + } + ] + } + ] +} +``` + +## translation +(examples:transformations:translation)= + +```{code-block} json +:caption: translation +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "j" + }, + { + "name": "i" + } + ] + }, + { + "name": "out", + "axes": [ + { + "name": "y" + }, + { + "name": "x" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "translation", + "input": "in", + "output": "out", + "translation": [ + 9, + -1.42 + ] + } + ] +} +``` + +## xarrayLike +(examples:transformations:xarrayLike)= + +```{code-block} json +:caption: xarrayLike +:linenos: + +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { + "name": "i", + "type": "array" + }, + { + "name": "j", + "type": "array" + } + ] + }, + { + "name": "out", + "axes": [ + { + "name": "x", + "type": "space" + }, + { + "name": "y", + "type": "space" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { + "type": "coordinates", + "path": "/xCoordinates", + "input": [ + "i" + ], + "output": [ + "x" + ] + }, + { + "type": "coordinates", + "path": "/yCoordinates", + "input": [ + "j" + ], + "output": [ + "y" + ] + } + ] + } + ] +} +``` diff --git a/ngff_spec/autodocs/examples/well_strict.md b/ngff_spec/autodocs/examples/well_strict.md new file mode 100644 index 00000000..f98d6ca7 --- /dev/null +++ b/ngff_spec/autodocs/examples/well_strict.md @@ -0,0 +1,74 @@ +# well_strict + + + +This document contains JSON examples for well_strict metadata layouts. + + +## well_2fields +(examples:well_strict:well_2fields)= + +```{code-block} json +:caption: well_2fields +:linenos: + +{ + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.5", + "well": { + "images": [ + { + "acquisition": 0, + "path": "0" + }, + { + "acquisition": 3, + "path": "1" + } + ] + } + } + } +} +``` + +## well_4fields +(examples:well_strict:well_4fields)= + +```{code-block} json +:caption: well_4fields +:linenos: + +{ + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.5", + "well": { + "images": [ + { + "acquisition": 1, + "path": "0" + }, + { + "acquisition": 1, + "path": "1" + }, + { + "acquisition": 2, + "path": "2" + }, + { + "acquisition": 2, + "path": "3" + } + ] + } + } + } +} +``` diff --git a/ngff_spec/autodocs/schemas.md b/ngff_spec/autodocs/schemas.md new file mode 100644 index 00000000..ffe93762 --- /dev/null +++ b/ngff_spec/autodocs/schemas.md @@ -0,0 +1,19 @@ +# JSON Schemas + +This section contains JSON schemas for various metadata layouts. +Find below links to autogenerated markdown pages or interactive HTML pages for each schema. + +| Schema | Markdown | HTML | +|--------|----------|------| +| axes | [axes](schemas:axes) | [axes](autodocs/schemas\html\axes.html) | +| bf2raw | | [bf2raw](autodocs/schemas\html\bf2raw.html) | +| coordinate_systems | [coordinate_systems](schemas:coordinate_systems) | [coordinate_systems](autodocs/schemas\html\coordinate_systems.html) | +| coordinate_systems_and_transforms | | | +| coordinate_transformation | | | +| image | | | +| label | | [label](autodocs/schemas\html\label.html) | +| ome | | [ome](autodocs/schemas\html\ome.html) | +| ome_zarr | | [ome_zarr](autodocs/schemas\html\ome_zarr.html) | +| plate | | [plate](autodocs/schemas\html\plate.html) | +| well | | [well](autodocs/schemas\html\well.html) | +| _version | [_version](schemas:_version) | [_version](autodocs/schemas\html\_version.html) | diff --git a/ngff_spec/autodocs/schemas/html/_version.html b/ngff_spec/autodocs/schemas/html/_version.html new file mode 100644 index 00000000..40f80bb6 --- /dev/null +++ b/ngff_spec/autodocs/schemas/html/_version.html @@ -0,0 +1 @@ + OME-Zarr Metadata version

OME-Zarr Metadata version

Type: enum (of string)

The version of the OME-Zarr Metadata

Must be one of:

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/axes.html b/ngff_spec/autodocs/schemas/html/axes.html new file mode 100644 index 00000000..3c4c7d8e --- /dev/null +++ b/ngff_spec/autodocs/schemas/html/axes.html @@ -0,0 +1 @@ + NGFF Axes

NGFF Axes

Type: array

JSON from OME-NGFF .zattrs

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: string

Name of the axis

Type: string

Longer name or description of the axis.

Type: string

Dimension of the axis

Type: boolean

Whether the dimension is discrete

Type: string

Unit for the axis

At least one of the items must be:

Type: object

Type: string

Type: enum (of string)

Must be one of:

  • "space"

Type: string
\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/bf2raw.html b/ngff_spec/autodocs/schemas/html/bf2raw.html new file mode 100644 index 00000000..4e20c93a --- /dev/null +++ b/ngff_spec/autodocs/schemas/html/bf2raw.html @@ -0,0 +1 @@ + OME-Zarr container produced by bioformats2raw

OME-Zarr container produced by bioformats2raw

Type: object

The zarr.json attributes key

Type: object

The versioned OME-Zarr Metadata namespace

Type: enum (of integer)

The top-level identifier metadata added by bioformats2raw

Must be one of:

  • 3

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/coordinate_systems.html b/ngff_spec/autodocs/schemas/html/coordinate_systems.html new file mode 100644 index 00000000..ad19506a --- /dev/null +++ b/ngff_spec/autodocs/schemas/html/coordinate_systems.html @@ -0,0 +1 @@ + NGFF CoordinateSystem

NGFF CoordinateSystem

Type: array

JSON from OME-NGFF .zattrs

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Coordinate Systems for OME-NGFF

Type: string

Name of coordinate system

Type: array

JSON from OME-NGFF .zattrs

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: string

Name of the axis

Type: string

Longer name or description of the axis.

Type: string

Dimension of the axis

Type: boolean

Whether the dimension is discrete

Type: string

Unit for the axis

At least one of the items must be:

Type: object

Type: string

Type: enum (of string)

Must be one of:

  • "space"

Type: string
\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/label.html b/ngff_spec/autodocs/schemas/html/label.html new file mode 100644 index 00000000..3b879442 --- /dev/null +++ b/ngff_spec/autodocs/schemas/html/label.html @@ -0,0 +1 @@ + OME-Zarr labelled image schema

OME-Zarr labelled image schema

Type: object

The zarr.json attributes key

Type: object

The versioned OME-Zarr Metadata namespace

Type: object

Type: array of object

The colors for this label image

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: number

The value of the label

Type: array of integer

The RGBA color stored as an array of four integers between 0 and 255

Must contain a minimum of 4 items

Must contain a maximum of 4 items

No Additional Items

Each item of this array must be:

Type: integer

Value must be greater or equal to 0 and lesser or equal to 255

Type: array of object

The properties for this label image

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: integer

The pixel value for this label

Type: object

The source of this label image

Type: string

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/ome.html b/ngff_spec/autodocs/schemas/html/ome.html new file mode 100644 index 00000000..e75bc793 --- /dev/null +++ b/ngff_spec/autodocs/schemas/html/ome.html @@ -0,0 +1 @@ + OME-Zarr group produced by bioformats2raw to contain OME metadata

OME-Zarr group produced by bioformats2raw to contain OME metadata

Type: object

The zarr.json attributes key

Type: object

The versioned OME-Zarr Metadata namespace

Type: array of string

An array of the same length and the same order as the images defined in the OME-XML

No Additional Items

Each item of this array must be:

Type: string

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/ome_zarr.html b/ngff_spec/autodocs/schemas/html/ome_zarr.html new file mode 100644 index 00000000..e3503f45 --- /dev/null +++ b/ngff_spec/autodocs/schemas/html/ome_zarr.html @@ -0,0 +1 @@ + Schema Docs

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/plate.html b/ngff_spec/autodocs/schemas/html/plate.html new file mode 100644 index 00000000..e342e058 --- /dev/null +++ b/ngff_spec/autodocs/schemas/html/plate.html @@ -0,0 +1 @@ + OME-Zarr plate schema

OME-Zarr plate schema

Type: object

The zarr.json attributes key

Type: object

The versioned OME-Zarr Metadata namespace

Type: object

Type: array of object

The acquisitions for this plate

No Additional Items

Each item of this array must be:

Type: object

Type: integer

A unique identifier within the context of the plate

Value must be greater or equal to 0

Type: integer

The maximum number of fields of view for the acquisition

Value must be strictly greater than 0

Type: string

The name of the acquisition

Type: string

The description of the acquisition

Type: integer

The start timestamp of the acquisition, expressed as epoch time i.e. the number seconds since the Epoch

Value must be greater or equal to 0

Type: integer

The end timestamp of the acquisition, expressed as epoch time i.e. the number seconds since the Epoch

Value must be greater or equal to 0

Type: integer

The maximum number of fields per view across all wells

Value must be strictly greater than 0

Type: string

The name of the plate

Type: array of object

The columns of the plate

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: string

The column name

Must match regular expression: ^[A-Za-z0-9]+$

Type: array of object

The rows of the plate

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: string

The row name

Must match regular expression: ^[A-Za-z0-9]+$

Type: array of object

The wells of the plate

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: string

The path to the well subgroup

Must match regular expression: ^[A-Za-z0-9]+/[A-Za-z0-9]+$

Type: integer

The index of the well in the rows list

Value must be greater or equal to 0

Type: integer

The index of the well in the columns list

Value must be greater or equal to 0

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/schema_doc.css b/ngff_spec/autodocs/schemas/html/schema_doc.css new file mode 100644 index 00000000..e1f3a511 --- /dev/null +++ b/ngff_spec/autodocs/schemas/html/schema_doc.css @@ -0,0 +1,181 @@ +body { + font: 16px/1.5em "Overpass", "Open Sans", Helvetica, sans-serif; + color: #333; + font-weight: 300; + padding: 40px; +} + +.btn.btn-link { + font-size: 18px; + user-select: text; +} + +.jsfh-animated-property { + animation: eclair; + animation-iteration-count: 1; + animation-fill-mode: forwards; + animation-duration: .75s; + +} + +@keyframes eclair { + 0%,100% { + transform: scale(1); + } + 50% { + transform: scale(1.03); + } +} + +.btn.btn-primary { + margin: 10px; +} + +.btn.example-show.collapsed:before { + content: "show" +} + +.btn.example-show:before { + content: "hide" +} + +.description.collapse:not(.show) { + max-height: 100px !important; + overflow: hidden; + + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} + +.description.collapsing { + min-height: 100px !important; +} + +.collapse-description-link.collapsed:after { + content: '+ Read More'; +} + +.collapse-description-link:not(.collapsed):after { + content: '- Read Less'; +} + +.badge { + font-size: 100%; + margin-bottom: 0.5rem; + margin-top: 0.5rem; +} + +.badge.value-type { + font-size: 120%; + margin-right: 5px; + margin-bottom: 10px; +} + + +.badge.default-value { + font-size: 120%; + margin-left: 5px; + margin-bottom: 10px; +} + +.badge.restriction { + display: inline-block; +} + +.badge.required-property,.badge.deprecated-property,.badge.pattern-property,.badge.no-additional { + font-size: 100%; + margin-left: 10px; +} + +.accordion div.card:only-child { + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} + +.examples { + padding: 1rem !important; +} + +.examples pre { + margin-bottom: 0; +} + +.highlight.jumbotron { + padding: 1rem !important; +} + +.generated-by-footer { + margin-top: 1em; + text-align: right; +} + +/* From https://github.com/richleland/pygments-css/blob/master/friendly.css, see https://github.com/trentm/python-markdown2/wiki/fenced-code-blocks */ +.highlight { background: #e9ecef; } /* Changed from #f0f0f0 in the original style to be the same as bootstrap's jumbotron */ +.highlight .hll { background-color: #ffffcc } +.highlight .c { color: #60a0b0; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #60a0b0; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #60a0b0; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #40a070 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #40a070 } /* Literal.Number.Bin */ +.highlight .mf { color: #40a070 } /* Literal.Number.Float */ +.highlight .mh { color: #40a070 } /* Literal.Number.Hex */ +.highlight .mi { color: #40a070 } /* Literal.Number.Integer */ +.highlight .mo { color: #40a070 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e } /* Name.Function.Magic */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .il { color: #40a070 } /* Literal.Number.Integer.Long */ diff --git a/ngff_spec/autodocs/schemas/html/schema_doc.min.js b/ngff_spec/autodocs/schemas/html/schema_doc.min.js new file mode 100644 index 00000000..17eceaf5 --- /dev/null +++ b/ngff_spec/autodocs/schemas/html/schema_doc.min.js @@ -0,0 +1 @@ +$(document).on("click",'a[href^="#"]',function(event){event.preventDefault();history.pushState({},"",this.href)});function flashElement(elementId){myElement=document.getElementById(elementId);myElement.classList.add("jsfh-animated-property");setTimeout(function(){myElement.classList.remove("jsfh-animated-property")},1e3)}function setAnchor(anchorLinkDestination){history.pushState({},"",anchorLinkDestination)}function anchorOnLoad(){let linkTarget=decodeURIComponent(window.location.hash.split("?")[0].split("&")[0]);if(linkTarget[0]==="#"){linkTarget=linkTarget.substr(1)}if(linkTarget.length>0){anchorLink(linkTarget)}}function anchorLink(linkTarget){const target=$("#"+linkTarget);target.parents().addBack().filter(".collapse:not(.show), .tab-pane, [role='tab']").each(function(index){if($(this).hasClass("collapse")){$(this).collapse("show")}else if($(this).hasClass("tab-pane")){const tabToShow=$("a[href='#"+$(this).attr("id")+"']");if(tabToShow){tabToShow.tab("show")}}else if($(this).attr("role")==="tab"){$(this).tab("show")}});setTimeout(function(){let targetElement=document.getElementById(linkTarget);if(targetElement){targetElement.scrollIntoView({block:"center",behavior:"smooth"});setTimeout(function(){flashElement(linkTarget)},500)}},1e3)} \ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/well.html b/ngff_spec/autodocs/schemas/html/well.html new file mode 100644 index 00000000..a3c3760d --- /dev/null +++ b/ngff_spec/autodocs/schemas/html/well.html @@ -0,0 +1 @@ + OME-Zarr well schema

OME-Zarr well schema

Type: object

JSON from OME-Zarr zarr.json

Type: object

The versioned OME-Zarr Metadata namespace

Type: object

Type: array of object

The fields of view for this well

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: integer

A unique identifier within the context of the plate

Type: string

The path for this field of view subgroup

Must match regular expression: ^[A-Za-z0-9]+$

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/markdown/_version.md b/ngff_spec/autodocs/schemas/markdown/_version.md new file mode 100644 index 00000000..0b23cbdf --- /dev/null +++ b/ngff_spec/autodocs/schemas/markdown/_version.md @@ -0,0 +1,18 @@ +(schemas:_version) + +# OME-Zarr Metadata version + +**Title:** OME-Zarr Metadata version + +| | | +| ------------ | ------------------ | +| **Type** | `enum (of string)` | +| **Required** | No | + +**Description:** The version of the OME-Zarr Metadata + +Must be one of: +* "0.6.dev1" + +---------------------------------------------------------------------------------------------------------------------------- +Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:35:17 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/axes.md b/ngff_spec/autodocs/schemas/markdown/axes.md new file mode 100644 index 00000000..48d6cea9 --- /dev/null +++ b/ngff_spec/autodocs/schemas/markdown/axes.md @@ -0,0 +1,127 @@ +(schemas:axes) + +# NGFF Axes + +**Title:** NGFF Axes + +| | | +| ------------ | ------- | +| **Type** | `array` | +| **Required** | No | + +**Description:** JSON from OME-NGFF .zattrs + +| | Array restrictions | +| -------------------- | ------------------ | +| **Min items** | 1 | +| **Max items** | N/A | +| **Items unicity** | True | +| **Additional items** | False | +| **Tuple validation** | See below | + +| Each item of this array must be | Description | +| ------------------------------- | ----------- | +| [axis](#items) | - | + +## 1. NGFF Axes > axis + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | #/$defs/axis | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ------------------------------ | ------- | ------- | ---------- | ---------- | --------------------------------------- | +| + [name](#items_name ) | No | string | No | - | Name of the axis | +| - [longName](#items_longName ) | No | string | No | - | Longer name or description of the axis. | +| - [type](#items_type ) | No | string | No | - | Dimension of the axis | +| - [discrete](#items_discrete ) | No | boolean | No | - | Whether the dimension is discrete | +| - [unit](#items_unit ) | No | string | No | - | Unit for the axis | + +### 1.1. Property `NGFF Axes > root items > name` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | Yes | + +**Description:** Name of the axis + +### 1.2. Property `NGFF Axes > root items > longName` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +**Description:** Longer name or description of the axis. + +### 1.3. Property `NGFF Axes > root items > type` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +**Description:** Dimension of the axis + +### 1.4. Property `NGFF Axes > root items > discrete` + +| | | +| ------------ | --------- | +| **Type** | `boolean` | +| **Required** | No | + +**Description:** Whether the dimension is discrete + +### 1.5. Property `NGFF Axes > root items > unit` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +**Description:** Unit for the axis + +## 2. At least one of the items must be + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ------------------------- | ------- | ---------------- | ---------- | ---------- | ----------------- | +| - [name](#contains_name ) | No | string | No | - | - | +| - [type](#contains_type ) | No | enum (of string) | No | - | - | +| - [unit](#contains_unit ) | No | string | No | - | - | + +### 2.1. Property `NGFF Axes > contains > name` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +### 2.2. Property `NGFF Axes > contains > type` + +| | | +| ------------ | ------------------ | +| **Type** | `enum (of string)` | +| **Required** | No | + +Must be one of: +* "space" + +### 2.3. Property `NGFF Axes > contains > unit` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +---------------------------------------------------------------------------------------------------------------------------- +Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:34:13 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/bf2raw.md b/ngff_spec/autodocs/schemas/markdown/bf2raw.md new file mode 100644 index 00000000..d0107ec5 --- /dev/null +++ b/ngff_spec/autodocs/schemas/markdown/bf2raw.md @@ -0,0 +1,56 @@ +# OME-Zarr container produced by bioformats2raw + +**Title:** OME-Zarr container produced by bioformats2raw + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +**Description:** The zarr.json attributes key + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| -------------- | ------- | ------ | ---------- | ---------- | ----------------------------------------- | +| + [ome](#ome ) | No | object | No | - | The versioned OME-Zarr Metadata namespace | + +## 1. Property `OME-Zarr container produced by bioformats2raw > ome` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | Yes | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +**Description:** The versioned OME-Zarr Metadata namespace + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ----------------------------------------------------- | ------- | ----------------- | ---------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| + [bioformats2raw.layout](#ome_bioformats2rawlayout ) | No | enum (of integer) | No | - | The top-level identifier metadata added by bioformats2raw | +| + [version](#ome_version ) | No | object | No | In https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ | + +### 1.1. Property `OME-Zarr container produced by bioformats2raw > ome > bioformats2raw.layout` + +| | | +| ------------ | ------------------- | +| **Type** | `enum (of integer)` | +| **Required** | Yes | + +**Description:** The top-level identifier metadata added by bioformats2raw + +Must be one of: +* 3 + +### 1.2. Property `OME-Zarr container produced by bioformats2raw > ome > version` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | Yes | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | + +**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ + +---------------------------------------------------------------------------------------------------------------------------- +Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:34:14 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/coordinate_systems.md b/ngff_spec/autodocs/schemas/markdown/coordinate_systems.md new file mode 100644 index 00000000..3f50d555 --- /dev/null +++ b/ngff_spec/autodocs/schemas/markdown/coordinate_systems.md @@ -0,0 +1,174 @@ +(schemas:coordinate_systems) + +# NGFF CoordinateSystem + +**Title:** NGFF CoordinateSystem + +| | | +| ------------ | ------- | +| **Type** | `array` | +| **Required** | No | + +**Description:** JSON from OME-NGFF .zattrs + +| | Array restrictions | +| -------------------- | ------------------ | +| **Min items** | N/A | +| **Max items** | N/A | +| **Items unicity** | True | +| **Additional items** | False | +| **Tuple validation** | See below | + +| Each item of this array must be | Description | +| ------------------------------- | ------------------------------- | +| [coordinateSystem](#items) | Coordinate Systems for OME-NGFF | + +## 1. NGFF CoordinateSystem > coordinateSystem + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | #/$defs/coordinateSystem | + +**Description:** Coordinate Systems for OME-NGFF + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ---------------------- | ------- | ------ | ---------- | -------------- | -------------------------- | +| + [name](#items_name ) | No | string | No | - | Name of coordinate system | +| + [axes](#items_axes ) | No | array | No | In axes.schema | JSON from OME-NGFF .zattrs | + +### 1.1. Property `NGFF CoordinateSystem > root items > name` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | Yes | + +**Description:** Name of coordinate system + +### 1.2. Property `NGFF CoordinateSystem > root items > axes` + +| | | +| -------------- | ----------- | +| **Type** | `array` | +| **Required** | Yes | +| **Defined in** | axes.schema | + +**Description:** JSON from OME-NGFF .zattrs + +| | Array restrictions | +| -------------------- | ------------------ | +| **Min items** | 1 | +| **Max items** | N/A | +| **Items unicity** | True | +| **Additional items** | False | +| **Tuple validation** | See below | + +| Each item of this array must be | Description | +| ------------------------------- | ----------- | +| [axis](#items_axes_items) | - | + +#### 1.2.1. NGFF CoordinateSystem > root items > axes > axis + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | #/$defs/axis | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ----------------------------------------- | ------- | ------- | ---------- | ---------- | --------------------------------------- | +| + [name](#items_axes_items_name ) | No | string | No | - | Name of the axis | +| - [longName](#items_axes_items_longName ) | No | string | No | - | Longer name or description of the axis. | +| - [type](#items_axes_items_type ) | No | string | No | - | Dimension of the axis | +| - [discrete](#items_axes_items_discrete ) | No | boolean | No | - | Whether the dimension is discrete | +| - [unit](#items_axes_items_unit ) | No | string | No | - | Unit for the axis | + +##### 1.2.1.1. Property `NGFF CoordinateSystem > root items > axes > axes items > name` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | Yes | + +**Description:** Name of the axis + +##### 1.2.1.2. Property `NGFF CoordinateSystem > root items > axes > axes items > longName` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +**Description:** Longer name or description of the axis. + +##### 1.2.1.3. Property `NGFF CoordinateSystem > root items > axes > axes items > type` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +**Description:** Dimension of the axis + +##### 1.2.1.4. Property `NGFF CoordinateSystem > root items > axes > axes items > discrete` + +| | | +| ------------ | --------- | +| **Type** | `boolean` | +| **Required** | No | + +**Description:** Whether the dimension is discrete + +##### 1.2.1.5. Property `NGFF CoordinateSystem > root items > axes > axes items > unit` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +**Description:** Unit for the axis + +#### 1.2.2. At least one of the items must be + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ------------------------------------ | ------- | ---------------- | ---------- | ---------- | ----------------- | +| - [name](#items_axes_contains_name ) | No | string | No | - | - | +| - [type](#items_axes_contains_type ) | No | enum (of string) | No | - | - | +| - [unit](#items_axes_contains_unit ) | No | string | No | - | - | + +##### 1.2.2.1. Property `NGFF CoordinateSystem > root items > axes > contains > name` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +##### 1.2.2.2. Property `NGFF CoordinateSystem > root items > axes > contains > type` + +| | | +| ------------ | ------------------ | +| **Type** | `enum (of string)` | +| **Required** | No | + +Must be one of: +* "space" + +##### 1.2.2.3. Property `NGFF CoordinateSystem > root items > axes > contains > unit` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +---------------------------------------------------------------------------------------------------------------------------- +Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:34:14 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/label.md b/ngff_spec/autodocs/schemas/markdown/label.md new file mode 100644 index 00000000..2f0e1018 --- /dev/null +++ b/ngff_spec/autodocs/schemas/markdown/label.md @@ -0,0 +1,198 @@ +# OME-Zarr labelled image schema + +**Title:** OME-Zarr labelled image schema + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +**Description:** The zarr.json attributes key + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| -------------- | ------- | ------ | ---------- | ---------- | ----------------------------------------- | +| + [ome](#ome ) | No | object | No | - | The versioned OME-Zarr Metadata namespace | + +## 1. Property `OME-Zarr labelled image schema > ome` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | Yes | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +**Description:** The versioned OME-Zarr Metadata namespace + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ---------------------------------- | ------- | ------ | ---------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| + [image-label](#ome_image-label ) | No | object | No | In #/$defs/image-label | - | +| + [version](#ome_version ) | No | object | No | In https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ | + +### 1.1. Property `OME-Zarr labelled image schema > ome > image-label` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | Yes | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | #/$defs/image-label | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| -------------------------------------------- | ------- | --------------- | ---------- | ---------- | ----------------------------------- | +| - [colors](#ome_image-label_colors ) | No | array of object | No | - | The colors for this label image | +| - [properties](#ome_image-label_properties ) | No | array of object | No | - | The properties for this label image | +| - [source](#ome_image-label_source ) | No | object | No | - | The source of this label image | + +#### 1.1.1. Property `OME-Zarr labelled image schema > ome > image-label > colors` + +| | | +| ------------ | ----------------- | +| **Type** | `array of object` | +| **Required** | No | + +**Description:** The colors for this label image + +| | Array restrictions | +| -------------------- | ------------------ | +| **Min items** | 1 | +| **Max items** | N/A | +| **Items unicity** | True | +| **Additional items** | False | +| **Tuple validation** | See below | + +| Each item of this array must be | Description | +| --------------------------------------------- | ----------- | +| [colors items](#ome_image-label_colors_items) | - | + +##### 1.1.1.1. OME-Zarr labelled image schema > ome > image-label > colors > colors items + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ----------------------------------------------------------- | ------- | ---------------- | ---------- | ---------- | -------------------------------------------------------------------- | +| + [label-value](#ome_image-label_colors_items_label-value ) | No | number | No | - | The value of the label | +| - [rgba](#ome_image-label_colors_items_rgba ) | No | array of integer | No | - | The RGBA color stored as an array of four integers between 0 and 255 | + +###### 1.1.1.1.1. Property `OME-Zarr labelled image schema > ome > image-label > colors > colors items > label-value` + +| | | +| ------------ | -------- | +| **Type** | `number` | +| **Required** | Yes | + +**Description:** The value of the label + +###### 1.1.1.1.2. Property `OME-Zarr labelled image schema > ome > image-label > colors > colors items > rgba` + +| | | +| ------------ | ------------------ | +| **Type** | `array of integer` | +| **Required** | No | + +**Description:** The RGBA color stored as an array of four integers between 0 and 255 + +| | Array restrictions | +| -------------------- | ------------------ | +| **Min items** | 4 | +| **Max items** | 4 | +| **Items unicity** | False | +| **Additional items** | False | +| **Tuple validation** | See below | + +| Each item of this array must be | Description | +| ------------------------------------------------------ | ----------- | +| [rgba items](#ome_image-label_colors_items_rgba_items) | - | + +###### 1.1.1.1.2.1. OME-Zarr labelled image schema > ome > image-label > colors > colors items > rgba > rgba items + +| | | +| ------------ | --------- | +| **Type** | `integer` | +| **Required** | No | + +| Restrictions | | +| ------------ | -------- | +| **Minimum** | ≥ 0 | +| **Maximum** | ≤ 255 | + +#### 1.1.2. Property `OME-Zarr labelled image schema > ome > image-label > properties` + +| | | +| ------------ | ----------------- | +| **Type** | `array of object` | +| **Required** | No | + +**Description:** The properties for this label image + +| | Array restrictions | +| -------------------- | ------------------ | +| **Min items** | 1 | +| **Max items** | N/A | +| **Items unicity** | True | +| **Additional items** | False | +| **Tuple validation** | See below | + +| Each item of this array must be | Description | +| ----------------------------------------------------- | ----------- | +| [properties items](#ome_image-label_properties_items) | - | + +##### 1.1.2.1. OME-Zarr labelled image schema > ome > image-label > properties > properties items + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| --------------------------------------------------------------- | ------- | ------- | ---------- | ---------- | ------------------------------ | +| + [label-value](#ome_image-label_properties_items_label-value ) | No | integer | No | - | The pixel value for this label | + +###### 1.1.2.1.1. Property `OME-Zarr labelled image schema > ome > image-label > properties > properties items > label-value` + +| | | +| ------------ | --------- | +| **Type** | `integer` | +| **Required** | Yes | + +**Description:** The pixel value for this label + +#### 1.1.3. Property `OME-Zarr labelled image schema > ome > image-label > source` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +**Description:** The source of this label image + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ----------------------------------------- | ------- | ------ | ---------- | ---------- | ----------------- | +| - [image](#ome_image-label_source_image ) | No | string | No | - | - | + +##### 1.1.3.1. Property `OME-Zarr labelled image schema > ome > image-label > source > image` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +### 1.2. Property `OME-Zarr labelled image schema > ome > version` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | Yes | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | + +**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ + +---------------------------------------------------------------------------------------------------------------------------- +Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:35:12 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/ome.md b/ngff_spec/autodocs/schemas/markdown/ome.md new file mode 100644 index 00000000..0ba063ce --- /dev/null +++ b/ngff_spec/autodocs/schemas/markdown/ome.md @@ -0,0 +1,72 @@ +# OME-Zarr group produced by bioformats2raw to contain OME metadata + +**Title:** OME-Zarr group produced by bioformats2raw to contain OME metadata + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +**Description:** The zarr.json attributes key + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| -------------- | ------- | ------ | ---------- | ---------- | ----------------------------------------- | +| + [ome](#ome ) | No | object | No | - | The versioned OME-Zarr Metadata namespace | + +## 1. Property `OME-Zarr group produced by bioformats2raw to contain OME metadata > ome` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | Yes | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +**Description:** The versioned OME-Zarr Metadata namespace + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| -------------------------- | ------- | --------------- | ---------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| + [series](#ome_series ) | No | array of string | No | - | An array of the same length and the same order as the images defined in the OME-XML | +| + [version](#ome_version ) | No | object | No | In https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ | + +### 1.1. Property `OME-Zarr group produced by bioformats2raw to contain OME metadata > ome > series` + +| | | +| ------------ | ----------------- | +| **Type** | `array of string` | +| **Required** | Yes | + +**Description:** An array of the same length and the same order as the images defined in the OME-XML + +| | Array restrictions | +| -------------------- | ------------------ | +| **Min items** | N/A | +| **Max items** | N/A | +| **Items unicity** | False | +| **Additional items** | False | +| **Tuple validation** | See below | + +| Each item of this array must be | Description | +| --------------------------------- | ----------- | +| [series items](#ome_series_items) | - | + +#### 1.1.1. OME-Zarr group produced by bioformats2raw to contain OME metadata > ome > series > series items + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +### 1.2. Property `OME-Zarr group produced by bioformats2raw to contain OME metadata > ome > version` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | Yes | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | + +**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ + +---------------------------------------------------------------------------------------------------------------------------- +Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:35:13 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/ome_zarr.md b/ngff_spec/autodocs/schemas/markdown/ome_zarr.md new file mode 100644 index 00000000..60c7db24 --- /dev/null +++ b/ngff_spec/autodocs/schemas/markdown/ome_zarr.md @@ -0,0 +1,85 @@ +# Schema Docs + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `combining` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +| Any of(Option) | +| -------------------------- | +| [bf2raw.schema](#anyOf_i0) | +| [image.schema](#anyOf_i1) | +| [label.schema](#anyOf_i2) | +| [ome.schema](#anyOf_i3) | +| [plate.schema](#anyOf_i4) | +| [well.schema](#anyOf_i5) | + +## 1. Property `root > anyOf > bf2raw.schema` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/bf2raw.schema | + +**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ + +## 2. Property `root > anyOf > image.schema` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/image.schema | + +**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ + +## 3. Property `root > anyOf > label.schema` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/label.schema | + +**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ + +## 4. Property `root > anyOf > ome.schema` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/ome.schema | + +**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ + +## 5. Property `root > anyOf > plate.schema` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/plate.schema | + +**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ + +## 6. Property `root > anyOf > well.schema` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/well.schema | + +**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ + +---------------------------------------------------------------------------------------------------------------------------- +Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:35:15 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/plate.md b/ngff_spec/autodocs/schemas/markdown/plate.md new file mode 100644 index 00000000..1a68d311 --- /dev/null +++ b/ngff_spec/autodocs/schemas/markdown/plate.md @@ -0,0 +1,357 @@ +# OME-Zarr plate schema + +**Title:** OME-Zarr plate schema + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +**Description:** The zarr.json attributes key + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| -------------- | ------- | ------ | ---------- | ---------- | ----------------------------------------- | +| + [ome](#ome ) | No | object | No | - | The versioned OME-Zarr Metadata namespace | + +## 1. Property `OME-Zarr plate schema > ome` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | Yes | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +**Description:** The versioned OME-Zarr Metadata namespace + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| -------------------------- | ------- | ------ | ---------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| + [plate](#ome_plate ) | No | object | No | - | - | +| + [version](#ome_version ) | No | object | No | In https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ | + +### 1.1. Property `OME-Zarr plate schema > ome > plate` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | Yes | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ------------------------------------------ | ------- | --------------- | ---------- | ---------- | ------------------------------------------------------ | +| - [acquisitions](#ome_plate_acquisitions ) | No | array of object | No | - | The acquisitions for this plate | +| - [field_count](#ome_plate_field_count ) | No | integer | No | - | The maximum number of fields per view across all wells | +| - [name](#ome_plate_name ) | No | string | No | - | The name of the plate | +| + [columns](#ome_plate_columns ) | No | array of object | No | - | The columns of the plate | +| + [rows](#ome_plate_rows ) | No | array of object | No | - | The rows of the plate | +| + [wells](#ome_plate_wells ) | No | array of object | No | - | The wells of the plate | + +#### 1.1.1. Property `OME-Zarr plate schema > ome > plate > acquisitions` + +| | | +| ------------ | ----------------- | +| **Type** | `array of object` | +| **Required** | No | + +**Description:** The acquisitions for this plate + +| | Array restrictions | +| -------------------- | ------------------ | +| **Min items** | N/A | +| **Max items** | N/A | +| **Items unicity** | False | +| **Additional items** | False | +| **Tuple validation** | See below | + +| Each item of this array must be | Description | +| --------------------------------------------------- | ----------- | +| [acquisitions items](#ome_plate_acquisitions_items) | - | + +##### 1.1.1.1. OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ----------------------------------------------------------------------- | ------- | ------- | ---------- | ---------- | ------------------------------------------------------------------------------------------------------- | +| + [id](#ome_plate_acquisitions_items_id ) | No | integer | No | - | A unique identifier within the context of the plate | +| - [maximumfieldcount](#ome_plate_acquisitions_items_maximumfieldcount ) | No | integer | No | - | The maximum number of fields of view for the acquisition | +| - [name](#ome_plate_acquisitions_items_name ) | No | string | No | - | The name of the acquisition | +| - [description](#ome_plate_acquisitions_items_description ) | No | string | No | - | The description of the acquisition | +| - [starttime](#ome_plate_acquisitions_items_starttime ) | No | integer | No | - | The start timestamp of the acquisition, expressed as epoch time i.e. the number seconds since the Epoch | +| - [endtime](#ome_plate_acquisitions_items_endtime ) | No | integer | No | - | The end timestamp of the acquisition, expressed as epoch time i.e. the number seconds since the Epoch | + +###### 1.1.1.1.1. Property `OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items > id` + +| | | +| ------------ | --------- | +| **Type** | `integer` | +| **Required** | Yes | + +**Description:** A unique identifier within the context of the plate + +| Restrictions | | +| ------------ | ------ | +| **Minimum** | ≥ 0 | + +###### 1.1.1.1.2. Property `OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items > maximumfieldcount` + +| | | +| ------------ | --------- | +| **Type** | `integer` | +| **Required** | No | + +**Description:** The maximum number of fields of view for the acquisition + +| Restrictions | | +| ------------ | ------ | +| **Minimum** | > 0 | + +###### 1.1.1.1.3. Property `OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items > name` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +**Description:** The name of the acquisition + +###### 1.1.1.1.4. Property `OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items > description` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +**Description:** The description of the acquisition + +###### 1.1.1.1.5. Property `OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items > starttime` + +| | | +| ------------ | --------- | +| **Type** | `integer` | +| **Required** | No | + +**Description:** The start timestamp of the acquisition, expressed as epoch time i.e. the number seconds since the Epoch + +| Restrictions | | +| ------------ | ------ | +| **Minimum** | ≥ 0 | + +###### 1.1.1.1.6. Property `OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items > endtime` + +| | | +| ------------ | --------- | +| **Type** | `integer` | +| **Required** | No | + +**Description:** The end timestamp of the acquisition, expressed as epoch time i.e. the number seconds since the Epoch + +| Restrictions | | +| ------------ | ------ | +| **Minimum** | ≥ 0 | + +#### 1.1.2. Property `OME-Zarr plate schema > ome > plate > field_count` + +| | | +| ------------ | --------- | +| **Type** | `integer` | +| **Required** | No | + +**Description:** The maximum number of fields per view across all wells + +| Restrictions | | +| ------------ | ------ | +| **Minimum** | > 0 | + +#### 1.1.3. Property `OME-Zarr plate schema > ome > plate > name` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | No | + +**Description:** The name of the plate + +#### 1.1.4. Property `OME-Zarr plate schema > ome > plate > columns` + +| | | +| ------------ | ----------------- | +| **Type** | `array of object` | +| **Required** | Yes | + +**Description:** The columns of the plate + +| | Array restrictions | +| -------------------- | ------------------ | +| **Min items** | 1 | +| **Max items** | N/A | +| **Items unicity** | True | +| **Additional items** | False | +| **Tuple validation** | See below | + +| Each item of this array must be | Description | +| ----------------------------------------- | ----------- | +| [columns items](#ome_plate_columns_items) | - | + +##### 1.1.4.1. OME-Zarr plate schema > ome > plate > columns > columns items + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ---------------------------------------- | ------- | ------ | ---------- | ---------- | ----------------- | +| + [name](#ome_plate_columns_items_name ) | No | string | No | - | The column name | + +###### 1.1.4.1.1. Property `OME-Zarr plate schema > ome > plate > columns > columns items > name` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | Yes | + +**Description:** The column name + +| Restrictions | | +| --------------------------------- | --------------------------------------------------------------------------------- | +| **Must match regular expression** | ```^[A-Za-z0-9]+$``` [Test](https://regex101.com/?regex=%5E%5BA-Za-z0-9%5D%2B%24) | + +#### 1.1.5. Property `OME-Zarr plate schema > ome > plate > rows` + +| | | +| ------------ | ----------------- | +| **Type** | `array of object` | +| **Required** | Yes | + +**Description:** The rows of the plate + +| | Array restrictions | +| -------------------- | ------------------ | +| **Min items** | 1 | +| **Max items** | N/A | +| **Items unicity** | True | +| **Additional items** | False | +| **Tuple validation** | See below | + +| Each item of this array must be | Description | +| ----------------------------------- | ----------- | +| [rows items](#ome_plate_rows_items) | - | + +##### 1.1.5.1. OME-Zarr plate schema > ome > plate > rows > rows items + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ------------------------------------- | ------- | ------ | ---------- | ---------- | ----------------- | +| + [name](#ome_plate_rows_items_name ) | No | string | No | - | The row name | + +###### 1.1.5.1.1. Property `OME-Zarr plate schema > ome > plate > rows > rows items > name` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | Yes | + +**Description:** The row name + +| Restrictions | | +| --------------------------------- | --------------------------------------------------------------------------------- | +| **Must match regular expression** | ```^[A-Za-z0-9]+$``` [Test](https://regex101.com/?regex=%5E%5BA-Za-z0-9%5D%2B%24) | + +#### 1.1.6. Property `OME-Zarr plate schema > ome > plate > wells` + +| | | +| ------------ | ----------------- | +| **Type** | `array of object` | +| **Required** | Yes | + +**Description:** The wells of the plate + +| | Array restrictions | +| -------------------- | ------------------ | +| **Min items** | 1 | +| **Max items** | N/A | +| **Items unicity** | True | +| **Additional items** | False | +| **Tuple validation** | See below | + +| Each item of this array must be | Description | +| ------------------------------------- | ----------- | +| [wells items](#ome_plate_wells_items) | - | + +##### 1.1.6.1. OME-Zarr plate schema > ome > plate > wells > wells items + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ---------------------------------------------------- | ------- | ------- | ---------- | ---------- | ----------------------------------------- | +| + [path](#ome_plate_wells_items_path ) | No | string | No | - | The path to the well subgroup | +| + [rowIndex](#ome_plate_wells_items_rowIndex ) | No | integer | No | - | The index of the well in the rows list | +| + [columnIndex](#ome_plate_wells_items_columnIndex ) | No | integer | No | - | The index of the well in the columns list | + +###### 1.1.6.1.1. Property `OME-Zarr plate schema > ome > plate > wells > wells items > path` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | Yes | + +**Description:** The path to the well subgroup + +| Restrictions | | +| --------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| **Must match regular expression** | ```^[A-Za-z0-9]+/[A-Za-z0-9]+$``` [Test](https://regex101.com/?regex=%5E%5BA-Za-z0-9%5D%2B%2F%5BA-Za-z0-9%5D%2B%24) | + +###### 1.1.6.1.2. Property `OME-Zarr plate schema > ome > plate > wells > wells items > rowIndex` + +| | | +| ------------ | --------- | +| **Type** | `integer` | +| **Required** | Yes | + +**Description:** The index of the well in the rows list + +| Restrictions | | +| ------------ | ------ | +| **Minimum** | ≥ 0 | + +###### 1.1.6.1.3. Property `OME-Zarr plate schema > ome > plate > wells > wells items > columnIndex` + +| | | +| ------------ | --------- | +| **Type** | `integer` | +| **Required** | Yes | + +**Description:** The index of the well in the columns list + +| Restrictions | | +| ------------ | ------ | +| **Minimum** | ≥ 0 | + +### 1.2. Property `OME-Zarr plate schema > ome > version` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | Yes | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | + +**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ + +---------------------------------------------------------------------------------------------------------------------------- +Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:35:16 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/well.md b/ngff_spec/autodocs/schemas/markdown/well.md new file mode 100644 index 00000000..e8a29291 --- /dev/null +++ b/ngff_spec/autodocs/schemas/markdown/well.md @@ -0,0 +1,112 @@ +# OME-Zarr well schema + +**Title:** OME-Zarr well schema + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +**Description:** JSON from OME-Zarr zarr.json + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| -------------- | ------- | ------ | ---------- | ---------- | ----------------------------------------- | +| + [ome](#ome ) | No | object | No | - | The versioned OME-Zarr Metadata namespace | + +## 1. Property `OME-Zarr well schema > ome` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | Yes | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +**Description:** The versioned OME-Zarr Metadata namespace + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| -------------------------- | ------- | ------ | ---------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| + [well](#ome_well ) | No | object | No | - | - | +| + [version](#ome_version ) | No | object | No | In https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ | + +### 1.1. Property `OME-Zarr well schema > ome > well` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | Yes | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ----------------------------- | ------- | --------------- | ---------- | ---------- | -------------------------------- | +| + [images](#ome_well_images ) | No | array of object | No | - | The fields of view for this well | + +#### 1.1.1. Property `OME-Zarr well schema > ome > well > images` + +| | | +| ------------ | ----------------- | +| **Type** | `array of object` | +| **Required** | Yes | + +**Description:** The fields of view for this well + +| | Array restrictions | +| -------------------- | ------------------ | +| **Min items** | 1 | +| **Max items** | N/A | +| **Items unicity** | True | +| **Additional items** | False | +| **Tuple validation** | See below | + +| Each item of this array must be | Description | +| -------------------------------------- | ----------- | +| [images items](#ome_well_images_items) | - | + +##### 1.1.1.1. OME-Zarr well schema > ome > well > images > images items + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | No | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ---------------------------------------------------- | ------- | ------- | ---------- | ---------- | --------------------------------------------------- | +| - [acquisition](#ome_well_images_items_acquisition ) | No | integer | No | - | A unique identifier within the context of the plate | +| + [path](#ome_well_images_items_path ) | No | string | No | - | The path for this field of view subgroup | + +###### 1.1.1.1.1. Property `OME-Zarr well schema > ome > well > images > images items > acquisition` + +| | | +| ------------ | --------- | +| **Type** | `integer` | +| **Required** | No | + +**Description:** A unique identifier within the context of the plate + +###### 1.1.1.1.2. Property `OME-Zarr well schema > ome > well > images > images items > path` + +| | | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | Yes | + +**Description:** The path for this field of view subgroup + +| Restrictions | | +| --------------------------------- | --------------------------------------------------------------------------------- | +| **Must match regular expression** | ```^[A-Za-z0-9]+$``` [Test](https://regex101.com/?regex=%5E%5BA-Za-z0-9%5D%2B%24) | + +### 1.2. Property `OME-Zarr well schema > ome > version` + +| | | +| ------------------------- | ------------------------------------------------------------------------- | +| **Type** | `object` | +| **Required** | Yes | +| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | +| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | + +**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ + +---------------------------------------------------------------------------------------------------------------------------- +Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:35:17 +0200 diff --git a/citing.md b/ngff_spec/citing.md similarity index 100% rename from citing.md rename to ngff_spec/citing.md diff --git a/contribute.md b/ngff_spec/contribute.md similarity index 93% rename from contribute.md rename to ngff_spec/contribute.md index ce0777a4..742aad17 100644 --- a/contribute.md +++ b/ngff_spec/contribute.md @@ -12,7 +12,7 @@ Build and inspect changes to the documentation before submitting a PR. To do so, to install the necessary dependecies: ```bash -pip install -r docs/requirements.txt +pip install -r requirements.txt ``` This document uses [jupyter-book](https://jupyterbook.org) to generate the pages and [MyST](https://mystmd.org) @@ -20,11 +20,11 @@ markdown for formatting. After installing these via the dependencies, navigate i and build the book using the following command: ```bash -python docs/pre_build.py -jupyter-book build . --path-output docs +python ngff_spec/pre_build.py +jupyter-book build ngff_spec ``` -You'll find the built webpages under `docs/_build/html`. +You'll find the built webpages under `_build/html`. ### Formating hints diff --git a/examples/bf2raw/.config.json b/ngff_spec/examples/bf2raw/.config.json similarity index 100% rename from examples/bf2raw/.config.json rename to ngff_spec/examples/bf2raw/.config.json diff --git a/examples/bf2raw/image.json b/ngff_spec/examples/bf2raw/image.json similarity index 100% rename from examples/bf2raw/image.json rename to ngff_spec/examples/bf2raw/image.json diff --git a/examples/bf2raw/plate.json b/ngff_spec/examples/bf2raw/plate.json similarity index 100% rename from examples/bf2raw/plate.json rename to ngff_spec/examples/bf2raw/plate.json diff --git a/examples/coordSystems/.config.json b/ngff_spec/examples/coordSystems/.config.json similarity index 100% rename from examples/coordSystems/.config.json rename to ngff_spec/examples/coordSystems/.config.json diff --git a/examples/coordSystems/arrayCoordSys.json b/ngff_spec/examples/coordSystems/arrayCoordSys.json similarity index 100% rename from examples/coordSystems/arrayCoordSys.json rename to ngff_spec/examples/coordSystems/arrayCoordSys.json diff --git a/examples/label_strict/.config.json b/ngff_spec/examples/label_strict/.config.json similarity index 100% rename from examples/label_strict/.config.json rename to ngff_spec/examples/label_strict/.config.json diff --git a/examples/label_strict/colors_properties.json b/ngff_spec/examples/label_strict/colors_properties.json similarity index 100% rename from examples/label_strict/colors_properties.json rename to ngff_spec/examples/label_strict/colors_properties.json diff --git a/examples/multiscales_strict/.config.json b/ngff_spec/examples/multiscales_strict/.config.json similarity index 100% rename from examples/multiscales_strict/.config.json rename to ngff_spec/examples/multiscales_strict/.config.json diff --git a/examples/multiscales_strict/multiscales_example.json b/ngff_spec/examples/multiscales_strict/multiscales_example.json similarity index 100% rename from examples/multiscales_strict/multiscales_example.json rename to ngff_spec/examples/multiscales_strict/multiscales_example.json diff --git a/examples/multiscales_strict/multiscales_example_relative.json b/ngff_spec/examples/multiscales_strict/multiscales_example_relative.json similarity index 100% rename from examples/multiscales_strict/multiscales_example_relative.json rename to ngff_spec/examples/multiscales_strict/multiscales_example_relative.json diff --git a/examples/multiscales_strict/multiscales_transformations.json b/ngff_spec/examples/multiscales_strict/multiscales_transformations.json similarity index 100% rename from examples/multiscales_strict/multiscales_transformations.json rename to ngff_spec/examples/multiscales_strict/multiscales_transformations.json diff --git a/examples/ome/.config.json b/ngff_spec/examples/ome/.config.json similarity index 100% rename from examples/ome/.config.json rename to ngff_spec/examples/ome/.config.json diff --git a/examples/ome/series-2.json b/ngff_spec/examples/ome/series-2.json similarity index 100% rename from examples/ome/series-2.json rename to ngff_spec/examples/ome/series-2.json diff --git a/examples/plate_strict/.config.json b/ngff_spec/examples/plate_strict/.config.json similarity index 100% rename from examples/plate_strict/.config.json rename to ngff_spec/examples/plate_strict/.config.json diff --git a/examples/plate_strict/plate_2wells.json b/ngff_spec/examples/plate_strict/plate_2wells.json similarity index 100% rename from examples/plate_strict/plate_2wells.json rename to ngff_spec/examples/plate_strict/plate_2wells.json diff --git a/examples/plate_strict/plate_6wells.json b/ngff_spec/examples/plate_strict/plate_6wells.json similarity index 100% rename from examples/plate_strict/plate_6wells.json rename to ngff_spec/examples/plate_strict/plate_6wells.json diff --git a/examples/subspace/.config.json b/ngff_spec/examples/subspace/.config.json similarity index 100% rename from examples/subspace/.config.json rename to ngff_spec/examples/subspace/.config.json diff --git a/examples/subspace/subspaceMultidim.json b/ngff_spec/examples/subspace/subspaceMultidim.json similarity index 100% rename from examples/subspace/subspaceMultidim.json rename to ngff_spec/examples/subspace/subspaceMultidim.json diff --git a/examples/subspace/subspacePermute.json b/ngff_spec/examples/subspace/subspacePermute.json similarity index 100% rename from examples/subspace/subspacePermute.json rename to ngff_spec/examples/subspace/subspacePermute.json diff --git a/examples/transformations/.config.json b/ngff_spec/examples/transformations/.config.json similarity index 100% rename from examples/transformations/.config.json rename to ngff_spec/examples/transformations/.config.json diff --git a/examples/transformations/affine2d2d.json b/ngff_spec/examples/transformations/affine2d2d.json similarity index 100% rename from examples/transformations/affine2d2d.json rename to ngff_spec/examples/transformations/affine2d2d.json diff --git a/examples/transformations/affine2d3d.json b/ngff_spec/examples/transformations/affine2d3d.json similarity index 100% rename from examples/transformations/affine2d3d.json rename to ngff_spec/examples/transformations/affine2d3d.json diff --git a/examples/transformations/bijection.json b/ngff_spec/examples/transformations/bijection.json similarity index 100% rename from examples/transformations/bijection.json rename to ngff_spec/examples/transformations/bijection.json diff --git a/examples/transformations/bijection_verbose.json b/ngff_spec/examples/transformations/bijection_verbose.json similarity index 100% rename from examples/transformations/bijection_verbose.json rename to ngff_spec/examples/transformations/bijection_verbose.json diff --git a/examples/transformations/byDimension1.json b/ngff_spec/examples/transformations/byDimension1.json similarity index 97% rename from examples/transformations/byDimension1.json rename to ngff_spec/examples/transformations/byDimension1.json index f4f9c42e..3ade95e8 100644 --- a/examples/transformations/byDimension1.json +++ b/ngff_spec/examples/transformations/byDimension1.json @@ -1,17 +1,17 @@ -{ - "coordinateSystems": [ - { "name": "in", "axes": [ {"name": "j"}, {"name": "i"} ] }, - { "name": "out", "axes": [ {"name": "y"}, {"name": "x"} ] } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { "type": "translation", "translation": [-1.0], "input": ["i"], "output": ["x"]}, - { "type": "scale", "scale": [2.0], "input": ["j"], "output": ["y"]} - ] - } - ] -} +{ + "coordinateSystems": [ + { "name": "in", "axes": [ {"name": "j"}, {"name": "i"} ] }, + { "name": "out", "axes": [ {"name": "y"}, {"name": "x"} ] } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { "type": "translation", "translation": [-1.0], "input": ["i"], "output": ["x"]}, + { "type": "scale", "scale": [2.0], "input": ["j"], "output": ["y"]} + ] + } + ] +} diff --git a/examples/transformations/byDimension2.json b/ngff_spec/examples/transformations/byDimension2.json similarity index 95% rename from examples/transformations/byDimension2.json rename to ngff_spec/examples/transformations/byDimension2.json index ef2e29b4..bb642825 100644 --- a/examples/transformations/byDimension2.json +++ b/ngff_spec/examples/transformations/byDimension2.json @@ -1,42 +1,42 @@ -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { "name": "l", "type": "array" }, - { "name": "j", "type": "array" }, - { "name": "k", "type": "array" }, - { "name": "i", "type": "array" } - ] - }, - { - "name": "out", - "axes": [ - { "name": "z", "type": "array" }, - { "name": "y", "type": "array" }, - { "name": "x", "type": "array" } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { - "type": "translation", - "translation": [ 1, 3 ], - "input": [ "i", "k" ], - "output": [ "y", "x" ] - }, - { - "type": "scale", - "scale": [ 2 ], - "input": [ "j" ], - "output": [ "z" ] - } - ] - } - ] -} +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { "name": "l", "type": "array" }, + { "name": "j", "type": "array" }, + { "name": "k", "type": "array" }, + { "name": "i", "type": "array" } + ] + }, + { + "name": "out", + "axes": [ + { "name": "z", "type": "array" }, + { "name": "y", "type": "array" }, + { "name": "x", "type": "array" } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { + "type": "translation", + "translation": [ 1, 3 ], + "input": [ "i", "k" ], + "output": [ "y", "x" ] + }, + { + "type": "scale", + "scale": [ 2 ], + "input": [ "j" ], + "output": [ "z" ] + } + ] + } + ] +} diff --git a/examples/transformations/byDimensionInvalid1.json b/ngff_spec/examples/transformations/byDimensionInvalid1.json similarity index 97% rename from examples/transformations/byDimensionInvalid1.json rename to ngff_spec/examples/transformations/byDimensionInvalid1.json index 4054fc19..10498818 100644 --- a/examples/transformations/byDimensionInvalid1.json +++ b/ngff_spec/examples/transformations/byDimensionInvalid1.json @@ -1,17 +1,17 @@ -{ - "coordinateSystems": [ - { "name": "in", "axes": [ {"name": "j"}, {"name": "i"} ] }, - { "name": "out", "axes": [ {"name": "y"}, {"name": "x"} ] } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { "type": "translation", "translation": [-1.0], "input": ["i"], "output": ["z"]}, - { "type": "scale", "scale": [2.0], "input": ["0"], "output": ["y"]} - ] - } - ] -} +{ + "coordinateSystems": [ + { "name": "in", "axes": [ {"name": "j"}, {"name": "i"} ] }, + { "name": "out", "axes": [ {"name": "y"}, {"name": "x"} ] } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { "type": "translation", "translation": [-1.0], "input": ["i"], "output": ["z"]}, + { "type": "scale", "scale": [2.0], "input": ["0"], "output": ["y"]} + ] + } + ] +} diff --git a/examples/transformations/byDimensionInvalid2.json b/ngff_spec/examples/transformations/byDimensionInvalid2.json similarity index 97% rename from examples/transformations/byDimensionInvalid2.json rename to ngff_spec/examples/transformations/byDimensionInvalid2.json index 810f0c04..3b38a467 100644 --- a/examples/transformations/byDimensionInvalid2.json +++ b/ngff_spec/examples/transformations/byDimensionInvalid2.json @@ -1,17 +1,17 @@ -{ - "coordinateSystems": [ - { "name": "in", "axes": [ {"name": "j"}, {"name": "i"} ] }, - { "name": "out", "axes": [ {"name": "y"}, {"name": "x"} ] } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { "type": "translation", "translation": [-1.0], "input": ["i"], "output": ["x"]}, - { "type": "scale", "scale": [2.0], "input": ["i"], "output": ["x"]} - ] - } - ] -} +{ + "coordinateSystems": [ + { "name": "in", "axes": [ {"name": "j"}, {"name": "i"} ] }, + { "name": "out", "axes": [ {"name": "y"}, {"name": "x"} ] } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { "type": "translation", "translation": [-1.0], "input": ["i"], "output": ["x"]}, + { "type": "scale", "scale": [2.0], "input": ["i"], "output": ["x"]} + ] + } + ] +} diff --git a/examples/transformations/byDimensionXarray.json b/ngff_spec/examples/transformations/byDimensionXarray.json similarity index 95% rename from examples/transformations/byDimensionXarray.json rename to ngff_spec/examples/transformations/byDimensionXarray.json index 82531b0e..187ee1a1 100644 --- a/examples/transformations/byDimensionXarray.json +++ b/ngff_spec/examples/transformations/byDimensionXarray.json @@ -1,39 +1,39 @@ -{ - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { "name": "x", "type": "space", "unit": "micrometer" }, - { "name": "y", "type": "space", "unit": "micrometer" } - ] - }, - { - "name": "array", - "axes": [ - { "name": "dim_0", "type": "array" }, - { "name": "dim_1", "type": "array" } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "array", - "output": "physical", - "transformations": [ - { - "type": "coordinates", - "path": "xCoordinates", - "input": [ "dim_0" ], - "output": [ "x" ] - }, - { - "type": "coordinates", - "path": "yCoordinates", - "input": [ "dim_1" ], - "output": [ "y" ] - } - ] - } - ] -} +{ + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { "name": "x", "type": "space", "unit": "micrometer" }, + { "name": "y", "type": "space", "unit": "micrometer" } + ] + }, + { + "name": "array", + "axes": [ + { "name": "dim_0", "type": "array" }, + { "name": "dim_1", "type": "array" } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "array", + "output": "physical", + "transformations": [ + { + "type": "coordinates", + "path": "xCoordinates", + "input": [ "dim_0" ], + "output": [ "x" ] + }, + { + "type": "coordinates", + "path": "yCoordinates", + "input": [ "dim_1" ], + "output": [ "y" ] + } + ] + } + ] +} diff --git a/examples/transformations/coordinates1d.json b/ngff_spec/examples/transformations/coordinates1d.json similarity index 100% rename from examples/transformations/coordinates1d.json rename to ngff_spec/examples/transformations/coordinates1d.json diff --git a/examples/transformations/displacement1d.json b/ngff_spec/examples/transformations/displacement1d.json similarity index 100% rename from examples/transformations/displacement1d.json rename to ngff_spec/examples/transformations/displacement1d.json diff --git a/examples/transformations/identity.json b/ngff_spec/examples/transformations/identity.json similarity index 100% rename from examples/transformations/identity.json rename to ngff_spec/examples/transformations/identity.json diff --git a/examples/transformations/inverseOf.json b/ngff_spec/examples/transformations/inverseOf.json similarity index 100% rename from examples/transformations/inverseOf.json rename to ngff_spec/examples/transformations/inverseOf.json diff --git a/examples/transformations/mapAxis1.json b/ngff_spec/examples/transformations/mapAxis1.json similarity index 100% rename from examples/transformations/mapAxis1.json rename to ngff_spec/examples/transformations/mapAxis1.json diff --git a/examples/transformations/mapAxis2.json b/ngff_spec/examples/transformations/mapAxis2.json similarity index 100% rename from examples/transformations/mapAxis2.json rename to ngff_spec/examples/transformations/mapAxis2.json diff --git a/examples/transformations/rotation.json b/ngff_spec/examples/transformations/rotation.json similarity index 100% rename from examples/transformations/rotation.json rename to ngff_spec/examples/transformations/rotation.json diff --git a/examples/transformations/scale.json b/ngff_spec/examples/transformations/scale.json similarity index 100% rename from examples/transformations/scale.json rename to ngff_spec/examples/transformations/scale.json diff --git a/examples/transformations/sequence.json b/ngff_spec/examples/transformations/sequence.json similarity index 100% rename from examples/transformations/sequence.json rename to ngff_spec/examples/transformations/sequence.json diff --git a/examples/transformations/sequenceSubspace1.json b/ngff_spec/examples/transformations/sequenceSubspace1.json similarity index 100% rename from examples/transformations/sequenceSubspace1.json rename to ngff_spec/examples/transformations/sequenceSubspace1.json diff --git a/examples/transformations/translation.json b/ngff_spec/examples/transformations/translation.json similarity index 100% rename from examples/transformations/translation.json rename to ngff_spec/examples/transformations/translation.json diff --git a/examples/transformations/xarrayLike.json b/ngff_spec/examples/transformations/xarrayLike.json similarity index 100% rename from examples/transformations/xarrayLike.json rename to ngff_spec/examples/transformations/xarrayLike.json diff --git a/examples/well_strict/.config.json b/ngff_spec/examples/well_strict/.config.json similarity index 100% rename from examples/well_strict/.config.json rename to ngff_spec/examples/well_strict/.config.json diff --git a/examples/well_strict/well_2fields.json b/ngff_spec/examples/well_strict/well_2fields.json similarity index 100% rename from examples/well_strict/well_2fields.json rename to ngff_spec/examples/well_strict/well_2fields.json diff --git a/examples/well_strict/well_4fields.json b/ngff_spec/examples/well_strict/well_4fields.json similarity index 100% rename from examples/well_strict/well_4fields.json rename to ngff_spec/examples/well_strict/well_4fields.json diff --git a/docs/pre_build.py b/ngff_spec/pre_build.py similarity index 94% rename from docs/pre_build.py rename to ngff_spec/pre_build.py index 873ea0dc..fe634b92 100644 --- a/docs/pre_build.py +++ b/ngff_spec/pre_build.py @@ -13,8 +13,8 @@ def build_json_examples(): """Build markdown files from json examples.""" # glob recursively to find all json files - input_directory = '../examples' - output_directory = 'examples' + input_directory = 'examples' + output_directory = 'autodocs/examples' os.makedirs(output_directory, exist_ok=True) example_types = os.listdir(input_directory) @@ -57,8 +57,8 @@ def build_json_schemas(): from json_schema_for_humans.generate import generate_from_filename from json_schema_for_humans.generation_configuration import GenerationConfiguration - schema_source_dir = '../schemas' - output_directory = 'schemas' + schema_source_dir = 'schemas' + output_directory = 'autodocs/schemas' os.makedirs(output_directory, exist_ok=True) schema_files = glob.glob(os.path.join(schema_source_dir, '*.schema'), recursive=True) @@ -125,7 +125,7 @@ def build_json_schemas(): index_markdown += f"| {Path(schema_file).stem} | {link_markdown} | {link_html} |\n" - with open(os.path.join(output_directory, "index.md"), 'w') as index_file: + with open(os.path.join('autodocs', "schemas.md"), 'w') as index_file: index_file.write(index_markdown) build_json_examples() diff --git a/references.bib b/ngff_spec/references.bib similarity index 100% rename from references.bib rename to ngff_spec/references.bib diff --git a/schemas/_version.schema b/ngff_spec/schemas/_version.schema similarity index 100% rename from schemas/_version.schema rename to ngff_spec/schemas/_version.schema diff --git a/schemas/axes.schema b/ngff_spec/schemas/axes.schema similarity index 100% rename from schemas/axes.schema rename to ngff_spec/schemas/axes.schema diff --git a/schemas/bf2raw.schema b/ngff_spec/schemas/bf2raw.schema similarity index 100% rename from schemas/bf2raw.schema rename to ngff_spec/schemas/bf2raw.schema diff --git a/schemas/coordinate_systems.schema b/ngff_spec/schemas/coordinate_systems.schema similarity index 100% rename from schemas/coordinate_systems.schema rename to ngff_spec/schemas/coordinate_systems.schema diff --git a/schemas/coordinate_systems_and_transforms.schema b/ngff_spec/schemas/coordinate_systems_and_transforms.schema similarity index 100% rename from schemas/coordinate_systems_and_transforms.schema rename to ngff_spec/schemas/coordinate_systems_and_transforms.schema diff --git a/schemas/coordinate_transformation.schema b/ngff_spec/schemas/coordinate_transformation.schema similarity index 100% rename from schemas/coordinate_transformation.schema rename to ngff_spec/schemas/coordinate_transformation.schema diff --git a/schemas/image.schema b/ngff_spec/schemas/image.schema similarity index 100% rename from schemas/image.schema rename to ngff_spec/schemas/image.schema diff --git a/schemas/label.schema b/ngff_spec/schemas/label.schema similarity index 100% rename from schemas/label.schema rename to ngff_spec/schemas/label.schema diff --git a/schemas/ome.schema b/ngff_spec/schemas/ome.schema similarity index 100% rename from schemas/ome.schema rename to ngff_spec/schemas/ome.schema diff --git a/schemas/ome_zarr.schema b/ngff_spec/schemas/ome_zarr.schema similarity index 100% rename from schemas/ome_zarr.schema rename to ngff_spec/schemas/ome_zarr.schema diff --git a/schemas/plate.schema b/ngff_spec/schemas/plate.schema similarity index 100% rename from schemas/plate.schema rename to ngff_spec/schemas/plate.schema diff --git a/schemas/strict_axes.schema b/ngff_spec/schemas/strict_axes.schema similarity index 100% rename from schemas/strict_axes.schema rename to ngff_spec/schemas/strict_axes.schema diff --git a/schemas/strict_coordinate_systems.schema b/ngff_spec/schemas/strict_coordinate_systems.schema similarity index 100% rename from schemas/strict_coordinate_systems.schema rename to ngff_spec/schemas/strict_coordinate_systems.schema diff --git a/schemas/strict_image.schema b/ngff_spec/schemas/strict_image.schema similarity index 100% rename from schemas/strict_image.schema rename to ngff_spec/schemas/strict_image.schema diff --git a/schemas/strict_label.schema b/ngff_spec/schemas/strict_label.schema similarity index 100% rename from schemas/strict_label.schema rename to ngff_spec/schemas/strict_label.schema diff --git a/schemas/strict_plate.schema b/ngff_spec/schemas/strict_plate.schema similarity index 100% rename from schemas/strict_plate.schema rename to ngff_spec/schemas/strict_plate.schema diff --git a/schemas/strict_well.schema b/ngff_spec/schemas/strict_well.schema similarity index 100% rename from schemas/strict_well.schema rename to ngff_spec/schemas/strict_well.schema diff --git a/schemas/well.schema b/ngff_spec/schemas/well.schema similarity index 100% rename from schemas/well.schema rename to ngff_spec/schemas/well.schema diff --git a/specification.md b/ngff_spec/specification.md similarity index 100% rename from specification.md rename to ngff_spec/specification.md diff --git a/tests/image_suite.json b/ngff_spec/tests/image_suite.json similarity index 100% rename from tests/image_suite.json rename to ngff_spec/tests/image_suite.json diff --git a/tests/label_suite.json b/ngff_spec/tests/label_suite.json similarity index 100% rename from tests/label_suite.json rename to ngff_spec/tests/label_suite.json diff --git a/tests/plate_suite.json b/ngff_spec/tests/plate_suite.json similarity index 100% rename from tests/plate_suite.json rename to ngff_spec/tests/plate_suite.json diff --git a/tests/strict_image_suite.json b/ngff_spec/tests/strict_image_suite.json similarity index 100% rename from tests/strict_image_suite.json rename to ngff_spec/tests/strict_image_suite.json diff --git a/tests/strict_label_suite.json b/ngff_spec/tests/strict_label_suite.json similarity index 100% rename from tests/strict_label_suite.json rename to ngff_spec/tests/strict_label_suite.json diff --git a/tests/strict_plate_suite.json b/ngff_spec/tests/strict_plate_suite.json similarity index 100% rename from tests/strict_plate_suite.json rename to ngff_spec/tests/strict_plate_suite.json diff --git a/tests/strict_well_suite.json b/ngff_spec/tests/strict_well_suite.json similarity index 100% rename from tests/strict_well_suite.json rename to ngff_spec/tests/strict_well_suite.json diff --git a/tests/test_validation.py b/ngff_spec/tests/test_validation.py similarity index 100% rename from tests/test_validation.py rename to ngff_spec/tests/test_validation.py diff --git a/tests/well_suite.json b/ngff_spec/tests/well_suite.json similarity index 100% rename from tests/well_suite.json rename to ngff_spec/tests/well_suite.json diff --git a/version_history.md b/ngff_spec/version_history.md similarity index 100% rename from version_history.md rename to ngff_spec/version_history.md diff --git a/docs/requirements.txt b/requirements.txt similarity index 88% rename from docs/requirements.txt rename to requirements.txt index cfc70258..b2aed391 100644 --- a/docs/requirements.txt +++ b/requirements.txt @@ -5,6 +5,6 @@ sphinx-inline-tabs sphinx-examples json-schema-for-humans myst-parser -json_with_comments +json-with-comments jupyter-book jsonschema_markdown \ No newline at end of file From e038ec884dc120cd09255ca3842e8d1110758cb9 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 9 Oct 2025 13:50:33 +0200 Subject: [PATCH 55/55] Revert "upgraded to Jupyter-book 2 and reorder repo" This reverts commit 8eb5eab093d74316a45899ebc057692b638a8442. --- .readthedocs.yaml | 12 +- ngff_spec/_config.yml => _config.yml | 0 ngff_spec/_toc.yml => _toc.yml | 9 +- ngff_spec/citing.md => citing.md | 0 ngff_spec/contribute.md => contribute.md | 8 +- docs/examples.md | 3 + {ngff_spec => docs}/pre_build.py | 10 +- requirements.txt => docs/requirements.txt | 2 +- .../examples => examples}/bf2raw/.config.json | 0 .../examples => examples}/bf2raw/image.json | 0 .../examples => examples}/bf2raw/plate.json | 0 .../coordSystems/.config.json | 0 .../coordSystems/arrayCoordSys.json | 0 .../label_strict/.config.json | 0 .../label_strict/colors_properties.json | 0 .../multiscales_strict/.config.json | 0 .../multiscales_example.json | 0 .../multiscales_example_relative.json | 0 .../multiscales_transformations.json | 0 .../examples => examples}/ome/.config.json | 0 .../examples => examples}/ome/series-2.json | 0 .../plate_strict/.config.json | 0 .../plate_strict/plate_2wells.json | 0 .../plate_strict/plate_6wells.json | 0 .../subspace/.config.json | 0 .../subspace/subspaceMultidim.json | 0 .../subspace/subspacePermute.json | 0 .../transformations/.config.json | 0 .../transformations/affine2d2d.json | 0 .../transformations/affine2d3d.json | 0 .../transformations/bijection.json | 0 .../transformations/bijection_verbose.json | 0 .../transformations/byDimension1.json | 34 +- .../transformations/byDimension2.json | 84 +- .../transformations/byDimensionInvalid1.json | 34 +- .../transformations/byDimensionInvalid2.json | 34 +- .../transformations/byDimensionXarray.json | 78 +- .../transformations/coordinates1d.json | 0 .../transformations/displacement1d.json | 0 .../transformations/identity.json | 0 .../transformations/inverseOf.json | 0 .../transformations/mapAxis1.json | 0 .../transformations/mapAxis2.json | 0 .../transformations/rotation.json | 0 .../transformations/scale.json | 0 .../transformations/sequence.json | 0 .../transformations/sequenceSubspace1.json | 0 .../transformations/translation.json | 0 .../transformations/xarrayLike.json | 0 .../well_strict/.config.json | 0 .../well_strict/well_2fields.json | 0 .../well_strict/well_4fields.json | 0 ngff_spec/autodocs/examples.md | 3 - ngff_spec/autodocs/examples/bf2raw.md | 70 - ngff_spec/autodocs/examples/coordSystems.md | 34 - ngff_spec/autodocs/examples/examples.md.md | 6 - ngff_spec/autodocs/examples/label_strict.md | 62 - .../autodocs/examples/multiscales_strict.md | 332 ----- ngff_spec/autodocs/examples/ome.md | 28 - ngff_spec/autodocs/examples/plate_strict.md | 199 --- ngff_spec/autodocs/examples/subspace.md | 163 --- .../autodocs/examples/transformations.md | 1197 ----------------- ngff_spec/autodocs/examples/well_strict.md | 74 - ngff_spec/autodocs/schemas.md | 19 - ngff_spec/autodocs/schemas/html/_version.html | 1 - ngff_spec/autodocs/schemas/html/axes.html | 1 - ngff_spec/autodocs/schemas/html/bf2raw.html | 1 - .../schemas/html/coordinate_systems.html | 1 - ngff_spec/autodocs/schemas/html/label.html | 1 - ngff_spec/autodocs/schemas/html/ome.html | 1 - ngff_spec/autodocs/schemas/html/ome_zarr.html | 1 - ngff_spec/autodocs/schemas/html/plate.html | 1 - .../autodocs/schemas/html/schema_doc.css | 181 --- .../autodocs/schemas/html/schema_doc.min.js | 1 - ngff_spec/autodocs/schemas/html/well.html | 1 - .../autodocs/schemas/markdown/_version.md | 18 - ngff_spec/autodocs/schemas/markdown/axes.md | 127 -- ngff_spec/autodocs/schemas/markdown/bf2raw.md | 56 - .../schemas/markdown/coordinate_systems.md | 174 --- ngff_spec/autodocs/schemas/markdown/label.md | 198 --- ngff_spec/autodocs/schemas/markdown/ome.md | 72 - .../autodocs/schemas/markdown/ome_zarr.md | 85 -- ngff_spec/autodocs/schemas/markdown/plate.md | 357 ----- ngff_spec/autodocs/schemas/markdown/well.md | 112 -- ngff_spec/references.bib => references.bib | 0 .../schemas => schemas}/_version.schema | 0 {ngff_spec/schemas => schemas}/axes.schema | 0 {ngff_spec/schemas => schemas}/bf2raw.schema | 0 .../coordinate_systems.schema | 0 .../coordinate_systems_and_transforms.schema | 0 .../coordinate_transformation.schema | 0 {ngff_spec/schemas => schemas}/image.schema | 0 {ngff_spec/schemas => schemas}/label.schema | 0 {ngff_spec/schemas => schemas}/ome.schema | 0 .../schemas => schemas}/ome_zarr.schema | 0 {ngff_spec/schemas => schemas}/plate.schema | 0 .../schemas => schemas}/strict_axes.schema | 0 .../strict_coordinate_systems.schema | 0 .../schemas => schemas}/strict_image.schema | 0 .../schemas => schemas}/strict_label.schema | 0 .../schemas => schemas}/strict_plate.schema | 0 .../schemas => schemas}/strict_well.schema | 0 {ngff_spec/schemas => schemas}/well.schema | 0 .../specification.md => specification.md | 0 {ngff_spec/tests => tests}/image_suite.json | 0 {ngff_spec/tests => tests}/label_suite.json | 0 {ngff_spec/tests => tests}/plate_suite.json | 0 .../tests => tests}/strict_image_suite.json | 0 .../tests => tests}/strict_label_suite.json | 0 .../tests => tests}/strict_plate_suite.json | 0 .../tests => tests}/strict_well_suite.json | 0 {ngff_spec/tests => tests}/test_validation.py | 0 {ngff_spec/tests => tests}/well_suite.json | 0 .../version_history.md => version_history.md | 0 114 files changed, 155 insertions(+), 3730 deletions(-) rename ngff_spec/_config.yml => _config.yml (100%) rename ngff_spec/_toc.yml => _toc.yml (63%) rename ngff_spec/citing.md => citing.md (100%) rename ngff_spec/contribute.md => contribute.md (93%) create mode 100644 docs/examples.md rename {ngff_spec => docs}/pre_build.py (94%) rename requirements.txt => docs/requirements.txt (88%) rename {ngff_spec/examples => examples}/bf2raw/.config.json (100%) rename {ngff_spec/examples => examples}/bf2raw/image.json (100%) rename {ngff_spec/examples => examples}/bf2raw/plate.json (100%) rename {ngff_spec/examples => examples}/coordSystems/.config.json (100%) rename {ngff_spec/examples => examples}/coordSystems/arrayCoordSys.json (100%) rename {ngff_spec/examples => examples}/label_strict/.config.json (100%) rename {ngff_spec/examples => examples}/label_strict/colors_properties.json (100%) rename {ngff_spec/examples => examples}/multiscales_strict/.config.json (100%) rename {ngff_spec/examples => examples}/multiscales_strict/multiscales_example.json (100%) rename {ngff_spec/examples => examples}/multiscales_strict/multiscales_example_relative.json (100%) rename {ngff_spec/examples => examples}/multiscales_strict/multiscales_transformations.json (100%) rename {ngff_spec/examples => examples}/ome/.config.json (100%) rename {ngff_spec/examples => examples}/ome/series-2.json (100%) rename {ngff_spec/examples => examples}/plate_strict/.config.json (100%) rename {ngff_spec/examples => examples}/plate_strict/plate_2wells.json (100%) rename {ngff_spec/examples => examples}/plate_strict/plate_6wells.json (100%) rename {ngff_spec/examples => examples}/subspace/.config.json (100%) rename {ngff_spec/examples => examples}/subspace/subspaceMultidim.json (100%) rename {ngff_spec/examples => examples}/subspace/subspacePermute.json (100%) rename {ngff_spec/examples => examples}/transformations/.config.json (100%) rename {ngff_spec/examples => examples}/transformations/affine2d2d.json (100%) rename {ngff_spec/examples => examples}/transformations/affine2d3d.json (100%) rename {ngff_spec/examples => examples}/transformations/bijection.json (100%) rename {ngff_spec/examples => examples}/transformations/bijection_verbose.json (100%) rename {ngff_spec/examples => examples}/transformations/byDimension1.json (97%) rename {ngff_spec/examples => examples}/transformations/byDimension2.json (95%) rename {ngff_spec/examples => examples}/transformations/byDimensionInvalid1.json (97%) rename {ngff_spec/examples => examples}/transformations/byDimensionInvalid2.json (97%) rename {ngff_spec/examples => examples}/transformations/byDimensionXarray.json (95%) rename {ngff_spec/examples => examples}/transformations/coordinates1d.json (100%) rename {ngff_spec/examples => examples}/transformations/displacement1d.json (100%) rename {ngff_spec/examples => examples}/transformations/identity.json (100%) rename {ngff_spec/examples => examples}/transformations/inverseOf.json (100%) rename {ngff_spec/examples => examples}/transformations/mapAxis1.json (100%) rename {ngff_spec/examples => examples}/transformations/mapAxis2.json (100%) rename {ngff_spec/examples => examples}/transformations/rotation.json (100%) rename {ngff_spec/examples => examples}/transformations/scale.json (100%) rename {ngff_spec/examples => examples}/transformations/sequence.json (100%) rename {ngff_spec/examples => examples}/transformations/sequenceSubspace1.json (100%) rename {ngff_spec/examples => examples}/transformations/translation.json (100%) rename {ngff_spec/examples => examples}/transformations/xarrayLike.json (100%) rename {ngff_spec/examples => examples}/well_strict/.config.json (100%) rename {ngff_spec/examples => examples}/well_strict/well_2fields.json (100%) rename {ngff_spec/examples => examples}/well_strict/well_4fields.json (100%) delete mode 100644 ngff_spec/autodocs/examples.md delete mode 100644 ngff_spec/autodocs/examples/bf2raw.md delete mode 100644 ngff_spec/autodocs/examples/coordSystems.md delete mode 100644 ngff_spec/autodocs/examples/examples.md.md delete mode 100644 ngff_spec/autodocs/examples/label_strict.md delete mode 100644 ngff_spec/autodocs/examples/multiscales_strict.md delete mode 100644 ngff_spec/autodocs/examples/ome.md delete mode 100644 ngff_spec/autodocs/examples/plate_strict.md delete mode 100644 ngff_spec/autodocs/examples/subspace.md delete mode 100644 ngff_spec/autodocs/examples/transformations.md delete mode 100644 ngff_spec/autodocs/examples/well_strict.md delete mode 100644 ngff_spec/autodocs/schemas.md delete mode 100644 ngff_spec/autodocs/schemas/html/_version.html delete mode 100644 ngff_spec/autodocs/schemas/html/axes.html delete mode 100644 ngff_spec/autodocs/schemas/html/bf2raw.html delete mode 100644 ngff_spec/autodocs/schemas/html/coordinate_systems.html delete mode 100644 ngff_spec/autodocs/schemas/html/label.html delete mode 100644 ngff_spec/autodocs/schemas/html/ome.html delete mode 100644 ngff_spec/autodocs/schemas/html/ome_zarr.html delete mode 100644 ngff_spec/autodocs/schemas/html/plate.html delete mode 100644 ngff_spec/autodocs/schemas/html/schema_doc.css delete mode 100644 ngff_spec/autodocs/schemas/html/schema_doc.min.js delete mode 100644 ngff_spec/autodocs/schemas/html/well.html delete mode 100644 ngff_spec/autodocs/schemas/markdown/_version.md delete mode 100644 ngff_spec/autodocs/schemas/markdown/axes.md delete mode 100644 ngff_spec/autodocs/schemas/markdown/bf2raw.md delete mode 100644 ngff_spec/autodocs/schemas/markdown/coordinate_systems.md delete mode 100644 ngff_spec/autodocs/schemas/markdown/label.md delete mode 100644 ngff_spec/autodocs/schemas/markdown/ome.md delete mode 100644 ngff_spec/autodocs/schemas/markdown/ome_zarr.md delete mode 100644 ngff_spec/autodocs/schemas/markdown/plate.md delete mode 100644 ngff_spec/autodocs/schemas/markdown/well.md rename ngff_spec/references.bib => references.bib (100%) rename {ngff_spec/schemas => schemas}/_version.schema (100%) rename {ngff_spec/schemas => schemas}/axes.schema (100%) rename {ngff_spec/schemas => schemas}/bf2raw.schema (100%) rename {ngff_spec/schemas => schemas}/coordinate_systems.schema (100%) rename {ngff_spec/schemas => schemas}/coordinate_systems_and_transforms.schema (100%) rename {ngff_spec/schemas => schemas}/coordinate_transformation.schema (100%) rename {ngff_spec/schemas => schemas}/image.schema (100%) rename {ngff_spec/schemas => schemas}/label.schema (100%) rename {ngff_spec/schemas => schemas}/ome.schema (100%) rename {ngff_spec/schemas => schemas}/ome_zarr.schema (100%) rename {ngff_spec/schemas => schemas}/plate.schema (100%) rename {ngff_spec/schemas => schemas}/strict_axes.schema (100%) rename {ngff_spec/schemas => schemas}/strict_coordinate_systems.schema (100%) rename {ngff_spec/schemas => schemas}/strict_image.schema (100%) rename {ngff_spec/schemas => schemas}/strict_label.schema (100%) rename {ngff_spec/schemas => schemas}/strict_plate.schema (100%) rename {ngff_spec/schemas => schemas}/strict_well.schema (100%) rename {ngff_spec/schemas => schemas}/well.schema (100%) rename ngff_spec/specification.md => specification.md (100%) rename {ngff_spec/tests => tests}/image_suite.json (100%) rename {ngff_spec/tests => tests}/label_suite.json (100%) rename {ngff_spec/tests => tests}/plate_suite.json (100%) rename {ngff_spec/tests => tests}/strict_image_suite.json (100%) rename {ngff_spec/tests => tests}/strict_label_suite.json (100%) rename {ngff_spec/tests => tests}/strict_plate_suite.json (100%) rename {ngff_spec/tests => tests}/strict_well_suite.json (100%) rename {ngff_spec/tests => tests}/test_validation.py (100%) rename {ngff_spec/tests => tests}/well_suite.json (100%) rename ngff_spec/version_history.md => version_history.md (100%) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 47854b34..cc67767f 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -3,19 +3,17 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3.11" + python: "3.13" jobs: pre_build: # Generate the Sphinx configuration for this Jupyter Book so it builds. - - "jupyter-book config sphinx ngff_spec/" - - "python ./ngff_spec/pre_build.py" + - "jupyter-book config sphinx ." + - "python ./docs/pre_build.py" python: install: - - requirements: requirements.txt + - requirements: docs/requirements.txt sphinx: - configuration: ngff_spec/conf.py - builder: html - fail_on_warning: true \ No newline at end of file + configuration: conf.py \ No newline at end of file diff --git a/ngff_spec/_config.yml b/_config.yml similarity index 100% rename from ngff_spec/_config.yml rename to _config.yml diff --git a/ngff_spec/_toc.yml b/_toc.yml similarity index 63% rename from ngff_spec/_toc.yml rename to _toc.yml index 61c2ba50..9df6edc7 100644 --- a/ngff_spec/_toc.yml +++ b/_toc.yml @@ -5,12 +5,13 @@ format: jb-book root: specification chapters: -- file: autodocs/examples +- file: docs/examples sections: - - glob: autodocs/examples/* -- file: autodocs/schemas + - glob: docs/examples/* +- file: docs/schemas/index sections: - - glob: autodocs/schemas/markdown/* + - glob: docs/schemas/markdown/* + - file: contribute - file: citing - file: version_history \ No newline at end of file diff --git a/ngff_spec/citing.md b/citing.md similarity index 100% rename from ngff_spec/citing.md rename to citing.md diff --git a/ngff_spec/contribute.md b/contribute.md similarity index 93% rename from ngff_spec/contribute.md rename to contribute.md index 742aad17..ce0777a4 100644 --- a/ngff_spec/contribute.md +++ b/contribute.md @@ -12,7 +12,7 @@ Build and inspect changes to the documentation before submitting a PR. To do so, to install the necessary dependecies: ```bash -pip install -r requirements.txt +pip install -r docs/requirements.txt ``` This document uses [jupyter-book](https://jupyterbook.org) to generate the pages and [MyST](https://mystmd.org) @@ -20,11 +20,11 @@ markdown for formatting. After installing these via the dependencies, navigate i and build the book using the following command: ```bash -python ngff_spec/pre_build.py -jupyter-book build ngff_spec +python docs/pre_build.py +jupyter-book build . --path-output docs ``` -You'll find the built webpages under `_build/html`. +You'll find the built webpages under `docs/_build/html`. ### Formating hints diff --git a/docs/examples.md b/docs/examples.md new file mode 100644 index 00000000..d7c1c369 --- /dev/null +++ b/docs/examples.md @@ -0,0 +1,3 @@ +# JSON Examples + +This document contains JSON examples for ngff-compliant metadata layouts. \ No newline at end of file diff --git a/ngff_spec/pre_build.py b/docs/pre_build.py similarity index 94% rename from ngff_spec/pre_build.py rename to docs/pre_build.py index fe634b92..873ea0dc 100644 --- a/ngff_spec/pre_build.py +++ b/docs/pre_build.py @@ -13,8 +13,8 @@ def build_json_examples(): """Build markdown files from json examples.""" # glob recursively to find all json files - input_directory = 'examples' - output_directory = 'autodocs/examples' + input_directory = '../examples' + output_directory = 'examples' os.makedirs(output_directory, exist_ok=True) example_types = os.listdir(input_directory) @@ -57,8 +57,8 @@ def build_json_schemas(): from json_schema_for_humans.generate import generate_from_filename from json_schema_for_humans.generation_configuration import GenerationConfiguration - schema_source_dir = 'schemas' - output_directory = 'autodocs/schemas' + schema_source_dir = '../schemas' + output_directory = 'schemas' os.makedirs(output_directory, exist_ok=True) schema_files = glob.glob(os.path.join(schema_source_dir, '*.schema'), recursive=True) @@ -125,7 +125,7 @@ def build_json_schemas(): index_markdown += f"| {Path(schema_file).stem} | {link_markdown} | {link_html} |\n" - with open(os.path.join('autodocs', "schemas.md"), 'w') as index_file: + with open(os.path.join(output_directory, "index.md"), 'w') as index_file: index_file.write(index_markdown) build_json_examples() diff --git a/requirements.txt b/docs/requirements.txt similarity index 88% rename from requirements.txt rename to docs/requirements.txt index b2aed391..cfc70258 100644 --- a/requirements.txt +++ b/docs/requirements.txt @@ -5,6 +5,6 @@ sphinx-inline-tabs sphinx-examples json-schema-for-humans myst-parser -json-with-comments +json_with_comments jupyter-book jsonschema_markdown \ No newline at end of file diff --git a/ngff_spec/examples/bf2raw/.config.json b/examples/bf2raw/.config.json similarity index 100% rename from ngff_spec/examples/bf2raw/.config.json rename to examples/bf2raw/.config.json diff --git a/ngff_spec/examples/bf2raw/image.json b/examples/bf2raw/image.json similarity index 100% rename from ngff_spec/examples/bf2raw/image.json rename to examples/bf2raw/image.json diff --git a/ngff_spec/examples/bf2raw/plate.json b/examples/bf2raw/plate.json similarity index 100% rename from ngff_spec/examples/bf2raw/plate.json rename to examples/bf2raw/plate.json diff --git a/ngff_spec/examples/coordSystems/.config.json b/examples/coordSystems/.config.json similarity index 100% rename from ngff_spec/examples/coordSystems/.config.json rename to examples/coordSystems/.config.json diff --git a/ngff_spec/examples/coordSystems/arrayCoordSys.json b/examples/coordSystems/arrayCoordSys.json similarity index 100% rename from ngff_spec/examples/coordSystems/arrayCoordSys.json rename to examples/coordSystems/arrayCoordSys.json diff --git a/ngff_spec/examples/label_strict/.config.json b/examples/label_strict/.config.json similarity index 100% rename from ngff_spec/examples/label_strict/.config.json rename to examples/label_strict/.config.json diff --git a/ngff_spec/examples/label_strict/colors_properties.json b/examples/label_strict/colors_properties.json similarity index 100% rename from ngff_spec/examples/label_strict/colors_properties.json rename to examples/label_strict/colors_properties.json diff --git a/ngff_spec/examples/multiscales_strict/.config.json b/examples/multiscales_strict/.config.json similarity index 100% rename from ngff_spec/examples/multiscales_strict/.config.json rename to examples/multiscales_strict/.config.json diff --git a/ngff_spec/examples/multiscales_strict/multiscales_example.json b/examples/multiscales_strict/multiscales_example.json similarity index 100% rename from ngff_spec/examples/multiscales_strict/multiscales_example.json rename to examples/multiscales_strict/multiscales_example.json diff --git a/ngff_spec/examples/multiscales_strict/multiscales_example_relative.json b/examples/multiscales_strict/multiscales_example_relative.json similarity index 100% rename from ngff_spec/examples/multiscales_strict/multiscales_example_relative.json rename to examples/multiscales_strict/multiscales_example_relative.json diff --git a/ngff_spec/examples/multiscales_strict/multiscales_transformations.json b/examples/multiscales_strict/multiscales_transformations.json similarity index 100% rename from ngff_spec/examples/multiscales_strict/multiscales_transformations.json rename to examples/multiscales_strict/multiscales_transformations.json diff --git a/ngff_spec/examples/ome/.config.json b/examples/ome/.config.json similarity index 100% rename from ngff_spec/examples/ome/.config.json rename to examples/ome/.config.json diff --git a/ngff_spec/examples/ome/series-2.json b/examples/ome/series-2.json similarity index 100% rename from ngff_spec/examples/ome/series-2.json rename to examples/ome/series-2.json diff --git a/ngff_spec/examples/plate_strict/.config.json b/examples/plate_strict/.config.json similarity index 100% rename from ngff_spec/examples/plate_strict/.config.json rename to examples/plate_strict/.config.json diff --git a/ngff_spec/examples/plate_strict/plate_2wells.json b/examples/plate_strict/plate_2wells.json similarity index 100% rename from ngff_spec/examples/plate_strict/plate_2wells.json rename to examples/plate_strict/plate_2wells.json diff --git a/ngff_spec/examples/plate_strict/plate_6wells.json b/examples/plate_strict/plate_6wells.json similarity index 100% rename from ngff_spec/examples/plate_strict/plate_6wells.json rename to examples/plate_strict/plate_6wells.json diff --git a/ngff_spec/examples/subspace/.config.json b/examples/subspace/.config.json similarity index 100% rename from ngff_spec/examples/subspace/.config.json rename to examples/subspace/.config.json diff --git a/ngff_spec/examples/subspace/subspaceMultidim.json b/examples/subspace/subspaceMultidim.json similarity index 100% rename from ngff_spec/examples/subspace/subspaceMultidim.json rename to examples/subspace/subspaceMultidim.json diff --git a/ngff_spec/examples/subspace/subspacePermute.json b/examples/subspace/subspacePermute.json similarity index 100% rename from ngff_spec/examples/subspace/subspacePermute.json rename to examples/subspace/subspacePermute.json diff --git a/ngff_spec/examples/transformations/.config.json b/examples/transformations/.config.json similarity index 100% rename from ngff_spec/examples/transformations/.config.json rename to examples/transformations/.config.json diff --git a/ngff_spec/examples/transformations/affine2d2d.json b/examples/transformations/affine2d2d.json similarity index 100% rename from ngff_spec/examples/transformations/affine2d2d.json rename to examples/transformations/affine2d2d.json diff --git a/ngff_spec/examples/transformations/affine2d3d.json b/examples/transformations/affine2d3d.json similarity index 100% rename from ngff_spec/examples/transformations/affine2d3d.json rename to examples/transformations/affine2d3d.json diff --git a/ngff_spec/examples/transformations/bijection.json b/examples/transformations/bijection.json similarity index 100% rename from ngff_spec/examples/transformations/bijection.json rename to examples/transformations/bijection.json diff --git a/ngff_spec/examples/transformations/bijection_verbose.json b/examples/transformations/bijection_verbose.json similarity index 100% rename from ngff_spec/examples/transformations/bijection_verbose.json rename to examples/transformations/bijection_verbose.json diff --git a/ngff_spec/examples/transformations/byDimension1.json b/examples/transformations/byDimension1.json similarity index 97% rename from ngff_spec/examples/transformations/byDimension1.json rename to examples/transformations/byDimension1.json index 3ade95e8..f4f9c42e 100644 --- a/ngff_spec/examples/transformations/byDimension1.json +++ b/examples/transformations/byDimension1.json @@ -1,17 +1,17 @@ -{ - "coordinateSystems": [ - { "name": "in", "axes": [ {"name": "j"}, {"name": "i"} ] }, - { "name": "out", "axes": [ {"name": "y"}, {"name": "x"} ] } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { "type": "translation", "translation": [-1.0], "input": ["i"], "output": ["x"]}, - { "type": "scale", "scale": [2.0], "input": ["j"], "output": ["y"]} - ] - } - ] -} +{ + "coordinateSystems": [ + { "name": "in", "axes": [ {"name": "j"}, {"name": "i"} ] }, + { "name": "out", "axes": [ {"name": "y"}, {"name": "x"} ] } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { "type": "translation", "translation": [-1.0], "input": ["i"], "output": ["x"]}, + { "type": "scale", "scale": [2.0], "input": ["j"], "output": ["y"]} + ] + } + ] +} diff --git a/ngff_spec/examples/transformations/byDimension2.json b/examples/transformations/byDimension2.json similarity index 95% rename from ngff_spec/examples/transformations/byDimension2.json rename to examples/transformations/byDimension2.json index bb642825..ef2e29b4 100644 --- a/ngff_spec/examples/transformations/byDimension2.json +++ b/examples/transformations/byDimension2.json @@ -1,42 +1,42 @@ -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { "name": "l", "type": "array" }, - { "name": "j", "type": "array" }, - { "name": "k", "type": "array" }, - { "name": "i", "type": "array" } - ] - }, - { - "name": "out", - "axes": [ - { "name": "z", "type": "array" }, - { "name": "y", "type": "array" }, - { "name": "x", "type": "array" } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { - "type": "translation", - "translation": [ 1, 3 ], - "input": [ "i", "k" ], - "output": [ "y", "x" ] - }, - { - "type": "scale", - "scale": [ 2 ], - "input": [ "j" ], - "output": [ "z" ] - } - ] - } - ] -} +{ + "coordinateSystems": [ + { + "name": "in", + "axes": [ + { "name": "l", "type": "array" }, + { "name": "j", "type": "array" }, + { "name": "k", "type": "array" }, + { "name": "i", "type": "array" } + ] + }, + { + "name": "out", + "axes": [ + { "name": "z", "type": "array" }, + { "name": "y", "type": "array" }, + { "name": "x", "type": "array" } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { + "type": "translation", + "translation": [ 1, 3 ], + "input": [ "i", "k" ], + "output": [ "y", "x" ] + }, + { + "type": "scale", + "scale": [ 2 ], + "input": [ "j" ], + "output": [ "z" ] + } + ] + } + ] +} diff --git a/ngff_spec/examples/transformations/byDimensionInvalid1.json b/examples/transformations/byDimensionInvalid1.json similarity index 97% rename from ngff_spec/examples/transformations/byDimensionInvalid1.json rename to examples/transformations/byDimensionInvalid1.json index 10498818..4054fc19 100644 --- a/ngff_spec/examples/transformations/byDimensionInvalid1.json +++ b/examples/transformations/byDimensionInvalid1.json @@ -1,17 +1,17 @@ -{ - "coordinateSystems": [ - { "name": "in", "axes": [ {"name": "j"}, {"name": "i"} ] }, - { "name": "out", "axes": [ {"name": "y"}, {"name": "x"} ] } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { "type": "translation", "translation": [-1.0], "input": ["i"], "output": ["z"]}, - { "type": "scale", "scale": [2.0], "input": ["0"], "output": ["y"]} - ] - } - ] -} +{ + "coordinateSystems": [ + { "name": "in", "axes": [ {"name": "j"}, {"name": "i"} ] }, + { "name": "out", "axes": [ {"name": "y"}, {"name": "x"} ] } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { "type": "translation", "translation": [-1.0], "input": ["i"], "output": ["z"]}, + { "type": "scale", "scale": [2.0], "input": ["0"], "output": ["y"]} + ] + } + ] +} diff --git a/ngff_spec/examples/transformations/byDimensionInvalid2.json b/examples/transformations/byDimensionInvalid2.json similarity index 97% rename from ngff_spec/examples/transformations/byDimensionInvalid2.json rename to examples/transformations/byDimensionInvalid2.json index 3b38a467..810f0c04 100644 --- a/ngff_spec/examples/transformations/byDimensionInvalid2.json +++ b/examples/transformations/byDimensionInvalid2.json @@ -1,17 +1,17 @@ -{ - "coordinateSystems": [ - { "name": "in", "axes": [ {"name": "j"}, {"name": "i"} ] }, - { "name": "out", "axes": [ {"name": "y"}, {"name": "x"} ] } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { "type": "translation", "translation": [-1.0], "input": ["i"], "output": ["x"]}, - { "type": "scale", "scale": [2.0], "input": ["i"], "output": ["x"]} - ] - } - ] -} +{ + "coordinateSystems": [ + { "name": "in", "axes": [ {"name": "j"}, {"name": "i"} ] }, + { "name": "out", "axes": [ {"name": "y"}, {"name": "x"} ] } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "in", + "output": "out", + "transformations": [ + { "type": "translation", "translation": [-1.0], "input": ["i"], "output": ["x"]}, + { "type": "scale", "scale": [2.0], "input": ["i"], "output": ["x"]} + ] + } + ] +} diff --git a/ngff_spec/examples/transformations/byDimensionXarray.json b/examples/transformations/byDimensionXarray.json similarity index 95% rename from ngff_spec/examples/transformations/byDimensionXarray.json rename to examples/transformations/byDimensionXarray.json index 187ee1a1..82531b0e 100644 --- a/ngff_spec/examples/transformations/byDimensionXarray.json +++ b/examples/transformations/byDimensionXarray.json @@ -1,39 +1,39 @@ -{ - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { "name": "x", "type": "space", "unit": "micrometer" }, - { "name": "y", "type": "space", "unit": "micrometer" } - ] - }, - { - "name": "array", - "axes": [ - { "name": "dim_0", "type": "array" }, - { "name": "dim_1", "type": "array" } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "array", - "output": "physical", - "transformations": [ - { - "type": "coordinates", - "path": "xCoordinates", - "input": [ "dim_0" ], - "output": [ "x" ] - }, - { - "type": "coordinates", - "path": "yCoordinates", - "input": [ "dim_1" ], - "output": [ "y" ] - } - ] - } - ] -} +{ + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { "name": "x", "type": "space", "unit": "micrometer" }, + { "name": "y", "type": "space", "unit": "micrometer" } + ] + }, + { + "name": "array", + "axes": [ + { "name": "dim_0", "type": "array" }, + { "name": "dim_1", "type": "array" } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "input": "array", + "output": "physical", + "transformations": [ + { + "type": "coordinates", + "path": "xCoordinates", + "input": [ "dim_0" ], + "output": [ "x" ] + }, + { + "type": "coordinates", + "path": "yCoordinates", + "input": [ "dim_1" ], + "output": [ "y" ] + } + ] + } + ] +} diff --git a/ngff_spec/examples/transformations/coordinates1d.json b/examples/transformations/coordinates1d.json similarity index 100% rename from ngff_spec/examples/transformations/coordinates1d.json rename to examples/transformations/coordinates1d.json diff --git a/ngff_spec/examples/transformations/displacement1d.json b/examples/transformations/displacement1d.json similarity index 100% rename from ngff_spec/examples/transformations/displacement1d.json rename to examples/transformations/displacement1d.json diff --git a/ngff_spec/examples/transformations/identity.json b/examples/transformations/identity.json similarity index 100% rename from ngff_spec/examples/transformations/identity.json rename to examples/transformations/identity.json diff --git a/ngff_spec/examples/transformations/inverseOf.json b/examples/transformations/inverseOf.json similarity index 100% rename from ngff_spec/examples/transformations/inverseOf.json rename to examples/transformations/inverseOf.json diff --git a/ngff_spec/examples/transformations/mapAxis1.json b/examples/transformations/mapAxis1.json similarity index 100% rename from ngff_spec/examples/transformations/mapAxis1.json rename to examples/transformations/mapAxis1.json diff --git a/ngff_spec/examples/transformations/mapAxis2.json b/examples/transformations/mapAxis2.json similarity index 100% rename from ngff_spec/examples/transformations/mapAxis2.json rename to examples/transformations/mapAxis2.json diff --git a/ngff_spec/examples/transformations/rotation.json b/examples/transformations/rotation.json similarity index 100% rename from ngff_spec/examples/transformations/rotation.json rename to examples/transformations/rotation.json diff --git a/ngff_spec/examples/transformations/scale.json b/examples/transformations/scale.json similarity index 100% rename from ngff_spec/examples/transformations/scale.json rename to examples/transformations/scale.json diff --git a/ngff_spec/examples/transformations/sequence.json b/examples/transformations/sequence.json similarity index 100% rename from ngff_spec/examples/transformations/sequence.json rename to examples/transformations/sequence.json diff --git a/ngff_spec/examples/transformations/sequenceSubspace1.json b/examples/transformations/sequenceSubspace1.json similarity index 100% rename from ngff_spec/examples/transformations/sequenceSubspace1.json rename to examples/transformations/sequenceSubspace1.json diff --git a/ngff_spec/examples/transformations/translation.json b/examples/transformations/translation.json similarity index 100% rename from ngff_spec/examples/transformations/translation.json rename to examples/transformations/translation.json diff --git a/ngff_spec/examples/transformations/xarrayLike.json b/examples/transformations/xarrayLike.json similarity index 100% rename from ngff_spec/examples/transformations/xarrayLike.json rename to examples/transformations/xarrayLike.json diff --git a/ngff_spec/examples/well_strict/.config.json b/examples/well_strict/.config.json similarity index 100% rename from ngff_spec/examples/well_strict/.config.json rename to examples/well_strict/.config.json diff --git a/ngff_spec/examples/well_strict/well_2fields.json b/examples/well_strict/well_2fields.json similarity index 100% rename from ngff_spec/examples/well_strict/well_2fields.json rename to examples/well_strict/well_2fields.json diff --git a/ngff_spec/examples/well_strict/well_4fields.json b/examples/well_strict/well_4fields.json similarity index 100% rename from ngff_spec/examples/well_strict/well_4fields.json rename to examples/well_strict/well_4fields.json diff --git a/ngff_spec/autodocs/examples.md b/ngff_spec/autodocs/examples.md deleted file mode 100644 index e051521a..00000000 --- a/ngff_spec/autodocs/examples.md +++ /dev/null @@ -1,3 +0,0 @@ -# JSON examples - -This section contains practical examples for the metadata structures laid out in the specification document. \ No newline at end of file diff --git a/ngff_spec/autodocs/examples/bf2raw.md b/ngff_spec/autodocs/examples/bf2raw.md deleted file mode 100644 index 8b850bc3..00000000 --- a/ngff_spec/autodocs/examples/bf2raw.md +++ /dev/null @@ -1,70 +0,0 @@ -# bf2raw - - - -This document contains JSON examples for bf2raw metadata layouts. - - -## image -(examples:bf2raw:image)= - -```{code-block} json -:caption: image -:linenos: - -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.5", - "bioformats2raw.layout": 3 - } - } -} -``` - -## plate -(examples:bf2raw:plate)= - -```{code-block} json -:caption: plate -:linenos: - -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.5", - "bioformats2raw.layout": 3, - "plate": { - "columns": [ - { - "name": "1" - } - ], - "name": "Plate Name 0", - "wells": [ - { - "path": "A/1", - "rowIndex": 0, - "columnIndex": 0 - } - ], - "field_count": 1, - "rows": [ - { - "name": "A" - } - ], - "acquisitions": [ - { - "id": 0 - } - ] - } - } - } -} -``` diff --git a/ngff_spec/autodocs/examples/coordSystems.md b/ngff_spec/autodocs/examples/coordSystems.md deleted file mode 100644 index 906ebd11..00000000 --- a/ngff_spec/autodocs/examples/coordSystems.md +++ /dev/null @@ -1,34 +0,0 @@ -# coordSystems - - - -This document contains JSON examples for coordSystems metadata layouts. - - -## arrayCoordSys -(examples:coordSystems:arrayCoordSys)= - -```{code-block} json -:caption: arrayCoordSys -:linenos: - -{ - "arrayCoordinateSystem": { - "name": "myDataArray", - "axes": [ - { - "name": "k", - "type": "array" - }, - { - "name": "j", - "type": "array" - }, - { - "name": "i", - "type": "array" - } - ] - } -} -``` diff --git a/ngff_spec/autodocs/examples/examples.md.md b/ngff_spec/autodocs/examples/examples.md.md deleted file mode 100644 index cb30e93b..00000000 --- a/ngff_spec/autodocs/examples/examples.md.md +++ /dev/null @@ -1,6 +0,0 @@ -# examples.md - - - -This document contains JSON examples for examples.md metadata layouts. - diff --git a/ngff_spec/autodocs/examples/label_strict.md b/ngff_spec/autodocs/examples/label_strict.md deleted file mode 100644 index e24812ed..00000000 --- a/ngff_spec/autodocs/examples/label_strict.md +++ /dev/null @@ -1,62 +0,0 @@ -# label_strict - - - -This document contains JSON examples for label_strict metadata layouts. - - -## colors_properties -(examples:label_strict:colors_properties)= - -```{code-block} json -:caption: colors_properties -:linenos: - -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.5", - "image-label": { - "colors": [ - { - "label-value": 0, - "rgba": [ - 0, - 0, - 128, - 128 - ] - }, - { - "label-value": 1, - "rgba": [ - 0, - 128, - 0, - 128 - ] - } - ], - "properties": [ - { - "label-value": 0, - "area (pixels)": 1200, - "class": "intercellular space" - }, - { - "label-value": 1, - "area (pixels)": 1650, - "class": "cell", - "cell type": "neuron" - } - ], - "source": { - "image": "../../" - } - } - } - } -} -``` diff --git a/ngff_spec/autodocs/examples/multiscales_strict.md b/ngff_spec/autodocs/examples/multiscales_strict.md deleted file mode 100644 index 3dc7ae03..00000000 --- a/ngff_spec/autodocs/examples/multiscales_strict.md +++ /dev/null @@ -1,332 +0,0 @@ -# multiscales_strict - - - -This document contains JSON examples for multiscales_strict metadata layouts. - - -## multiscales_example -(examples:multiscales_strict:multiscales_example)= - -```{code-block} json -:caption: multiscales_example -:linenos: - -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6dev2", - "multiscales": [ - { - "name": "physical", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "name": "t", - "type": "time", - "unit": "millisecond" - }, - { - "name": "c", - "type": "channel" - }, - { - "name": "z", - "type": "space", - "unit": "micrometer" - }, - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - } - ], - "datasets": [ - { - "path": "0", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 0.1, - 1.0, - 0.5, - 0.5, - 0.5 - ], - "input": "0", - "output": "physical" - } - ] - }, - { - "path": "1", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 0.1, - 1.0, - 1.0, - 1.0, - 1.0 - ], - "input": "1", - "output": "physical" - } - ] - }, - { - "path": "2", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 0.1, - 1.0, - 2.0, - 2.0, - 2.0 - ], - "input": "2", - "output": "physical" - } - ] - } - ], - "type": "gaussian", - "metadata": { - "description": "the fields in metadata depend on the downscaling implementation. Here, the parameters passed to the skimage function are given", - "method": "skimage.transform.pyramid_gaussian", - "version": "0.16.1", - "args": "[true]", - "kwargs": { - "multichannel": true - } - } - } - ] - } - } -} -``` - -## multiscales_example_relative -(examples:multiscales_strict:multiscales_example_relative)= - -```{code-block} json -:caption: multiscales_example_relative -:linenos: - -{ - "multiscales": [ - { - "version": "0.5-dev", - "name": "example", - "coordinateSystems": [ - { - "name": "exampleCoordinateSystem", - "axes": [ - { - "name": "t", - "type": "time", - "unit": "millisecond" - }, - { - "name": "c", - "type": "channel" - }, - { - "name": "z", - "type": "space", - "unit": "micrometer" - }, - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - }, - { - "name": "array_0", - "axes": [ - { - "name": "t", - "type": "time", - "unit": "millisecond" - }, - { - "name": "c", - "type": "channel" - }, - { - "name": "z", - "type": "space", - "unit": "micrometer" - }, - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - } - ], - "datasets": [ - { - "path": "0", - "coordinateTransformations": [ - { - "type": "identity", - "input": "/0", - "output": "array_0" - } - ] - }, - { - "path": "1", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 1, - 1, - 2, - 2, - 2 - ], - "input": "/1", - "output": "array_0" - } - ] - }, - { - "path": "2", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 1, - 1, - 4, - 4, - 4 - ], - "input": "/2", - "output": "array_0" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 0.1, - 1.0, - 0.5, - 0.5, - 0.5 - ], - "input": "array_0", - "output": "exampleCoordinateSystem" - } - ], - "type": "gaussian", - "metadata": { - "description": "the fields in metadata depend on the downscaling implementation. Here, the parameters passed to the skimage function are given", - "method": "skimage.transform.pyramid_gaussian", - "version": "0.16.1", - "args": "[true]", - "kwargs": { - "multichannel": true - } - } - } - ] -} -``` - -## multiscales_transformations -(examples:multiscales_strict:multiscales_transformations)= - -```{code-block} json -:caption: multiscales_transformations -:linenos: - -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.5", - "multiscales": [ - { - "axes": [ - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ], - "datasets": [ - { - "path": "0", - "coordinateTransformations": [ - { - "scale": [ - 1, - 1 - ], - "type": "scale" - } - ] - } - ], - "coordinateTransformations": [ - { - "scale": [ - 10, - 10 - ], - "type": "scale" - } - ], - "name": "image_with_coordinateTransformations", - "type": "foo", - "metadata": { - "key": "value" - } - } - ] - } - } -} -``` diff --git a/ngff_spec/autodocs/examples/ome.md b/ngff_spec/autodocs/examples/ome.md deleted file mode 100644 index 89d2bfbe..00000000 --- a/ngff_spec/autodocs/examples/ome.md +++ /dev/null @@ -1,28 +0,0 @@ -# ome - - - -This document contains JSON examples for ome metadata layouts. - - -## series-2 -(examples:ome:series-2)= - -```{code-block} json -:caption: series-2 -:linenos: - -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.5", - "series": [ - "0", - "1" - ] - } - } -} -``` diff --git a/ngff_spec/autodocs/examples/plate_strict.md b/ngff_spec/autodocs/examples/plate_strict.md deleted file mode 100644 index d022eee6..00000000 --- a/ngff_spec/autodocs/examples/plate_strict.md +++ /dev/null @@ -1,199 +0,0 @@ -# plate_strict - - - -This document contains JSON examples for plate_strict metadata layouts. - - -## plate_2wells -(examples:plate_strict:plate_2wells)= - -```{code-block} json -:caption: plate_2wells -:linenos: - -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.5", - "plate": { - "acquisitions": [ - { - "id": 1, - "maximumfieldcount": 1, - "name": "single acquisition", - "starttime": 1343731272000 - } - ], - "columns": [ - { - "name": "1" - }, - { - "name": "2" - }, - { - "name": "3" - }, - { - "name": "4" - }, - { - "name": "5" - }, - { - "name": "6" - }, - { - "name": "7" - }, - { - "name": "8" - }, - { - "name": "9" - }, - { - "name": "10" - }, - { - "name": "11" - }, - { - "name": "12" - } - ], - "field_count": 1, - "name": "sparse test", - "rows": [ - { - "name": "A" - }, - { - "name": "B" - }, - { - "name": "C" - }, - { - "name": "D" - }, - { - "name": "E" - }, - { - "name": "F" - }, - { - "name": "G" - }, - { - "name": "H" - } - ], - "wells": [ - { - "path": "C/5", - "rowIndex": 2, - "columnIndex": 4 - }, - { - "path": "D/7", - "rowIndex": 3, - "columnIndex": 6 - } - ] - } - } - } -} -``` - -## plate_6wells -(examples:plate_strict:plate_6wells)= - -```{code-block} json -:caption: plate_6wells -:linenos: - -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.5", - "plate": { - "acquisitions": [ - { - "id": 1, - "maximumfieldcount": 2, - "name": "Meas_01(2012-07-31_10-41-12)", - "starttime": 1343731272000 - }, - { - "id": 2, - "maximumfieldcount": 2, - "name": "Meas_02(201207-31_11-56-41)", - "starttime": 1343735801000 - } - ], - "columns": [ - { - "name": "1" - }, - { - "name": "2" - }, - { - "name": "3" - } - ], - "field_count": 4, - "name": "test", - "rows": [ - { - "name": "A" - }, - { - "name": "B" - } - ], - "wells": [ - { - "path": "A/1", - "rowIndex": 0, - "columnIndex": 0 - }, - { - "path": "A/2", - "rowIndex": 0, - "columnIndex": 1 - }, - { - "path": "A/3", - "rowIndex": 0, - "columnIndex": 2 - }, - { - "path": "B/1", - "rowIndex": 1, - "columnIndex": 0 - }, - { - "path": "B/2", - "rowIndex": 1, - "columnIndex": 1 - }, - { - "path": "B/3", - "rowIndex": 1, - "columnIndex": 2 - } - ] - } - } - } -} -``` diff --git a/ngff_spec/autodocs/examples/subspace.md b/ngff_spec/autodocs/examples/subspace.md deleted file mode 100644 index be4c5527..00000000 --- a/ngff_spec/autodocs/examples/subspace.md +++ /dev/null @@ -1,163 +0,0 @@ -# subspace - - - -This document contains JSON examples for subspace metadata layouts. - - -## subspaceMultidim -(examples:subspace:subspaceMultidim)= - -```{code-block} json -:caption: subspaceMultidim -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "0", - "type": "array" - }, - { - "name": "1", - "type": "array" - }, - { - "name": "2", - "type": "array" - }, - { - "name": "3", - "type": "array" - }, - { - "name": "4", - "type": "array" - } - ] - }, - { - "name": "out", - "axes": [ - { - "name": "x", - "type": "space" - }, - { - "name": "y", - "type": "space" - }, - { - "name": "z", - "type": "space" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "name": "5D-to-3D-not-contiguous", - "input": "in", - "output": "out", - "transformations": [ - { - "type": "mapAxis", - "mapAxis": { - "0": "x", - "2": "z" - }, - "input": [ - "0", - "2" - ], - "output": [ - "x", - "z" - ] - }, - { - "type": "scale", - "scale": [ - 2 - ], - "input": [ - "1" - ], - "output": [ - "y" - ] - } - ] - } - ] -} -``` - -## subspacePermute -(examples:subspace:subspacePermute)= - -```{code-block} json -:caption: subspacePermute -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "i" - }, - { - "name": "j" - } - ] - }, - { - "name": "out", - "axes": [ - { - "name": "x" - }, - { - "name": "y" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { - "type": "identity", - "input": [ - "j" - ], - "output": [ - "x" - ] - }, - { - "type": "scale", - "scale": [ - 2 - ], - "input": [ - "i" - ], - "output": [ - "y" - ] - } - ] - } - ] -} -``` diff --git a/ngff_spec/autodocs/examples/transformations.md b/ngff_spec/autodocs/examples/transformations.md deleted file mode 100644 index fcafd75d..00000000 --- a/ngff_spec/autodocs/examples/transformations.md +++ /dev/null @@ -1,1197 +0,0 @@ -# transformations - - - -This document contains JSON examples for transformations metadata layouts. - - -## affine2d2d -(examples:transformations:affine2d2d)= - -```{code-block} json -:caption: affine2d2d -:linenos: - -{ - "coordinateSystems": [ - { - "name": "ji", - "axes": [ - { - "name": "j" - }, - { - "name": "i" - } - ] - }, - { - "name": "yx", - "axes": [ - { - "name": "y" - }, - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "affine", - "affine": [ - [ - 1, - 2, - 3 - ], - [ - 4, - 5, - 6 - ] - ], - "input": "ji", - "output": "yx" - } - ] -} -``` - -## affine2d3d -(examples:transformations:affine2d3d)= - -```{code-block} json -:caption: affine2d3d -:linenos: - -{ - "coordinateSystems": [ - { - "name": "ij", - "axes": [ - { - "name": "i" - }, - { - "name": "j" - } - ] - }, - { - "name": "xyz", - "axes": [ - { - "name": "x" - }, - { - "name": "y" - }, - { - "name": "z" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "affine", - "affine": [ - [ - 1, - 2, - 3 - ], - [ - 4, - 5, - 6 - ], - [ - 7, - 8, - 9 - ] - ], - "input": "ij", - "output": "xyz" - } - ] -} -``` - -## bijection -(examples:transformations:bijection)= - -```{code-block} json -:caption: bijection -:linenos: - -{ - "coordinateSystems": [ - { - "name": "src", - "axes": [ - { - "name": "j" - }, - { - "name": "i" - } - ] - }, - { - "name": "tgt", - "axes": [ - { - "name": "y" - }, - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "bijection", - "forward": { - "type": "coordinates", - "path": "forward_coordinates" - }, - "inverse": { - "type": "coordinates", - "path": "inverse_coordinates" - }, - "input": "src", - "output": "tgt" - } - ] -} -``` - -## bijection_verbose -(examples:transformations:bijection_verbose)= - -```{code-block} json -:caption: bijection_verbose -:linenos: - -{ - "type": "bijection", - "forward": { - "type": "coordinates", - "path": "forward_coordinates", - "input": "src", - "output": "tgt" - }, - "inverse": { - "type": "coordinates", - "path": "inverse_coordinates", - "input": "tgt", - "output": "src" - }, - "input": "src", - "output": "tgt" -} -``` - -## byDimension1 -(examples:transformations:byDimension1)= - -```{code-block} json -:caption: byDimension1 -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "j" - }, - { - "name": "i" - } - ] - }, - { - "name": "out", - "axes": [ - { - "name": "y" - }, - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { - "type": "translation", - "translation": [ - -1.0 - ], - "input": [ - "i" - ], - "output": [ - "x" - ] - }, - { - "type": "scale", - "scale": [ - 2.0 - ], - "input": [ - "j" - ], - "output": [ - "y" - ] - } - ] - } - ] -} -``` - -## byDimension2 -(examples:transformations:byDimension2)= - -```{code-block} json -:caption: byDimension2 -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "l", - "type": "array" - }, - { - "name": "j", - "type": "array" - }, - { - "name": "k", - "type": "array" - }, - { - "name": "i", - "type": "array" - } - ] - }, - { - "name": "out", - "axes": [ - { - "name": "z", - "type": "array" - }, - { - "name": "y", - "type": "array" - }, - { - "name": "x", - "type": "array" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { - "type": "translation", - "translation": [ - 1, - 3 - ], - "input": [ - "i", - "k" - ], - "output": [ - "y", - "x" - ] - }, - { - "type": "scale", - "scale": [ - 2 - ], - "input": [ - "j" - ], - "output": [ - "z" - ] - } - ] - } - ] -} -``` - -## byDimensionInvalid1 -(examples:transformations:byDimensionInvalid1)= - -```{code-block} json -:caption: byDimensionInvalid1 -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "j" - }, - { - "name": "i" - } - ] - }, - { - "name": "out", - "axes": [ - { - "name": "y" - }, - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { - "type": "translation", - "translation": [ - -1.0 - ], - "input": [ - "i" - ], - "output": [ - "z" - ] - }, - { - "type": "scale", - "scale": [ - 2.0 - ], - "input": [ - "0" - ], - "output": [ - "y" - ] - } - ] - } - ] -} -``` - -## byDimensionInvalid2 -(examples:transformations:byDimensionInvalid2)= - -```{code-block} json -:caption: byDimensionInvalid2 -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "j" - }, - { - "name": "i" - } - ] - }, - { - "name": "out", - "axes": [ - { - "name": "y" - }, - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { - "type": "translation", - "translation": [ - -1.0 - ], - "input": [ - "i" - ], - "output": [ - "x" - ] - }, - { - "type": "scale", - "scale": [ - 2.0 - ], - "input": [ - "i" - ], - "output": [ - "x" - ] - } - ] - } - ] -} -``` - -## byDimensionXarray -(examples:transformations:byDimensionXarray)= - -```{code-block} json -:caption: byDimensionXarray -:linenos: - -{ - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "name": "x", - "type": "space", - "unit": "micrometer" - }, - { - "name": "y", - "type": "space", - "unit": "micrometer" - } - ] - }, - { - "name": "array", - "axes": [ - { - "name": "dim_0", - "type": "array" - }, - { - "name": "dim_1", - "type": "array" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "array", - "output": "physical", - "transformations": [ - { - "type": "coordinates", - "path": "xCoordinates", - "input": [ - "dim_0" - ], - "output": [ - "x" - ] - }, - { - "type": "coordinates", - "path": "yCoordinates", - "input": [ - "dim_1" - ], - "output": [ - "y" - ] - } - ] - } - ] -} -``` - -## coordinates1d -(examples:transformations:coordinates1d)= - -```{code-block} json -:caption: coordinates1d -:linenos: - -{ - "coordinateSystems": [ - { - "name": "i", - "axes": [ - { - "name": "i" - } - ] - }, - { - "name": "x", - "axes": [ - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "name": "a coordinate field transform", - "type": "coordinates", - "path": "i2xCoordinates", - "input": "i", - "output": "x", - "interpolation": "nearest" - } - ] -} -``` - -## displacement1d -(examples:transformations:displacement1d)= - -```{code-block} json -:caption: displacement1d -:linenos: - -{ - "coordinateSystems": [ - { - "name": "i", - "axes": [ - { - "name": "i" - } - ] - }, - { - "name": "x", - "axes": [ - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "name": "a displacement field transform", - "type": "displacements", - "path": "i2xCoordinates", - "input": "i", - "output": "x", - "interpolation": "nearest" - } - ] -} -``` - -## identity -(examples:transformations:identity)= - -```{code-block} json -:caption: identity -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "j" - }, - { - "name": "i" - } - ] - }, - { - "name": "out", - "axes": [ - { - "name": "y" - }, - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "identity", - "input": "in", - "output": "out" - } - ] -} -``` - -## inverseOf -(examples:transformations:inverseOf)= - -```{code-block} json -:caption: inverseOf -:linenos: - -{ - "coordinateSystems": [ - { - "name": "moving", - "axes": [ - { - "name": "y-moving" - }, - { - "name": "x-moving" - } - ] - }, - { - "name": "fixed", - "axes": [ - { - "name": "y-fixed" - }, - { - "name": "x-fixed" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "inverseOf", - "transformation": { - "type": "displacements", - "path": "path/to/displacements" - }, - "input": "moving", - "output": "fixed" - } - ] -} -``` - -## mapAxis1 -(examples:transformations:mapAxis1)= - -```{code-block} json -:caption: mapAxis1 -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "j" - }, - { - "name": "i" - } - ] - }, - { - "name": "out1", - "axes": [ - { - "name": "y" - }, - { - "name": "x" - } - ] - }, - { - "name": "out2", - "axes": [ - { - "name": "y" - }, - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "name": "equivalent to identity", - "type": "mapAxis", - "mapAxis": { - "x": "i", - "y": "j" - }, - "input": "in", - "output": "out1" - }, - { - "name": "permutation", - "type": "mapAxis", - "mapAxis": { - "y": "i", - "x": "j" - }, - "input": "in", - "output": "out2" - } - ] -} -``` - -## mapAxis2 -(examples:transformations:mapAxis2)= - -```{code-block} json -:caption: mapAxis2 -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "a" - }, - { - "name": "b" - } - ] - }, - { - "name": "out_down", - "axes": [ - { - "name": "x" - } - ] - }, - { - "name": "out_up", - "axes": [ - { - "name": "z" - }, - { - "name": "y" - }, - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "name": "projection down", - "type": "mapAxis", - "mapAxis": { - "x": "b" - }, - "input": "in", - "output": "out_down" - }, - { - "name": "projection up", - "type": "mapAxis", - "mapAxis": { - "z": "b", - "y": "b", - "x": "a" - }, - "input": "in", - "output": "out_up" - } - ] -} -``` - -## rotation -(examples:transformations:rotation)= - -```{code-block} json -:caption: rotation -:linenos: - -{ - "coordinateSystems": [ - { - "name": "ji", - "axes": [ - { - "name": "j" - }, - { - "name": "i" - } - ] - }, - { - "name": "yx", - "axes": [ - { - "name": "y" - }, - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "rotation", - "rotation": [ - [ - 0, - -1 - ], - [ - 1, - 0 - ] - ], - "input": "ji", - "output": "yx" - } - ] -} -``` - -## scale -(examples:transformations:scale)= - -```{code-block} json -:caption: scale -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "j" - }, - { - "name": "i" - } - ] - }, - { - "name": "out", - "axes": [ - { - "name": "y" - }, - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 3.12, - 2 - ], - "input": "in", - "output": "out" - } - ] -} -``` - -## sequence -(examples:transformations:sequence)= - -```{code-block} json -:caption: sequence -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "j" - }, - { - "name": "i" - } - ] - }, - { - "name": "out", - "axes": [ - { - "name": "y" - }, - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "sequence", - "input": "in", - "output": "out", - "transformations": [ - { - "type": "translation", - "translation": [ - 0.1, - 0.9 - ] - }, - { - "type": "scale", - "scale": [ - 2, - 3 - ] - } - ] - } - ] -} -``` - -## sequenceSubspace1 -(examples:transformations:sequenceSubspace1)= - -```{code-block} json -:caption: sequenceSubspace1 -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "i" - }, - { - "name": "j" - } - ] - }, - { - "name": "out", - "axes": [ - { - "name": "x" - }, - { - "name": "y" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "sequence", - "input": "in", - "output": "out", - "transformations": [ - { - "type": "coordinates", - "path": "/coordinates", - "inputAxes": [ - "i" - ], - "outputAxes": [ - "x" - ] - }, - { - "type": "scale", - "scale": [ - 2.0 - ], - "inputAxes": [ - "j" - ], - "outputAxes": [ - "y" - ] - } - ] - } - ] -} -``` - -## translation -(examples:transformations:translation)= - -```{code-block} json -:caption: translation -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "j" - }, - { - "name": "i" - } - ] - }, - { - "name": "out", - "axes": [ - { - "name": "y" - }, - { - "name": "x" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "translation", - "input": "in", - "output": "out", - "translation": [ - 9, - -1.42 - ] - } - ] -} -``` - -## xarrayLike -(examples:transformations:xarrayLike)= - -```{code-block} json -:caption: xarrayLike -:linenos: - -{ - "coordinateSystems": [ - { - "name": "in", - "axes": [ - { - "name": "i", - "type": "array" - }, - { - "name": "j", - "type": "array" - } - ] - }, - { - "name": "out", - "axes": [ - { - "name": "x", - "type": "space" - }, - { - "name": "y", - "type": "space" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "input": "in", - "output": "out", - "transformations": [ - { - "type": "coordinates", - "path": "/xCoordinates", - "input": [ - "i" - ], - "output": [ - "x" - ] - }, - { - "type": "coordinates", - "path": "/yCoordinates", - "input": [ - "j" - ], - "output": [ - "y" - ] - } - ] - } - ] -} -``` diff --git a/ngff_spec/autodocs/examples/well_strict.md b/ngff_spec/autodocs/examples/well_strict.md deleted file mode 100644 index f98d6ca7..00000000 --- a/ngff_spec/autodocs/examples/well_strict.md +++ /dev/null @@ -1,74 +0,0 @@ -# well_strict - - - -This document contains JSON examples for well_strict metadata layouts. - - -## well_2fields -(examples:well_strict:well_2fields)= - -```{code-block} json -:caption: well_2fields -:linenos: - -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.5", - "well": { - "images": [ - { - "acquisition": 0, - "path": "0" - }, - { - "acquisition": 3, - "path": "1" - } - ] - } - } - } -} -``` - -## well_4fields -(examples:well_strict:well_4fields)= - -```{code-block} json -:caption: well_4fields -:linenos: - -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.5", - "well": { - "images": [ - { - "acquisition": 1, - "path": "0" - }, - { - "acquisition": 1, - "path": "1" - }, - { - "acquisition": 2, - "path": "2" - }, - { - "acquisition": 2, - "path": "3" - } - ] - } - } - } -} -``` diff --git a/ngff_spec/autodocs/schemas.md b/ngff_spec/autodocs/schemas.md deleted file mode 100644 index ffe93762..00000000 --- a/ngff_spec/autodocs/schemas.md +++ /dev/null @@ -1,19 +0,0 @@ -# JSON Schemas - -This section contains JSON schemas for various metadata layouts. -Find below links to autogenerated markdown pages or interactive HTML pages for each schema. - -| Schema | Markdown | HTML | -|--------|----------|------| -| axes | [axes](schemas:axes) | [axes](autodocs/schemas\html\axes.html) | -| bf2raw | | [bf2raw](autodocs/schemas\html\bf2raw.html) | -| coordinate_systems | [coordinate_systems](schemas:coordinate_systems) | [coordinate_systems](autodocs/schemas\html\coordinate_systems.html) | -| coordinate_systems_and_transforms | | | -| coordinate_transformation | | | -| image | | | -| label | | [label](autodocs/schemas\html\label.html) | -| ome | | [ome](autodocs/schemas\html\ome.html) | -| ome_zarr | | [ome_zarr](autodocs/schemas\html\ome_zarr.html) | -| plate | | [plate](autodocs/schemas\html\plate.html) | -| well | | [well](autodocs/schemas\html\well.html) | -| _version | [_version](schemas:_version) | [_version](autodocs/schemas\html\_version.html) | diff --git a/ngff_spec/autodocs/schemas/html/_version.html b/ngff_spec/autodocs/schemas/html/_version.html deleted file mode 100644 index 40f80bb6..00000000 --- a/ngff_spec/autodocs/schemas/html/_version.html +++ /dev/null @@ -1 +0,0 @@ - OME-Zarr Metadata version

OME-Zarr Metadata version

Type: enum (of string)

The version of the OME-Zarr Metadata

Must be one of:

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/axes.html b/ngff_spec/autodocs/schemas/html/axes.html deleted file mode 100644 index 3c4c7d8e..00000000 --- a/ngff_spec/autodocs/schemas/html/axes.html +++ /dev/null @@ -1 +0,0 @@ - NGFF Axes

NGFF Axes

Type: array

JSON from OME-NGFF .zattrs

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: string

Name of the axis

Type: string

Longer name or description of the axis.

Type: string

Dimension of the axis

Type: boolean

Whether the dimension is discrete

Type: string

Unit for the axis

At least one of the items must be:

Type: object

Type: string

Type: enum (of string)

Must be one of:

  • "space"

Type: string
\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/bf2raw.html b/ngff_spec/autodocs/schemas/html/bf2raw.html deleted file mode 100644 index 4e20c93a..00000000 --- a/ngff_spec/autodocs/schemas/html/bf2raw.html +++ /dev/null @@ -1 +0,0 @@ - OME-Zarr container produced by bioformats2raw

OME-Zarr container produced by bioformats2raw

Type: object

The zarr.json attributes key

Type: object

The versioned OME-Zarr Metadata namespace

Type: enum (of integer)

The top-level identifier metadata added by bioformats2raw

Must be one of:

  • 3

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/coordinate_systems.html b/ngff_spec/autodocs/schemas/html/coordinate_systems.html deleted file mode 100644 index ad19506a..00000000 --- a/ngff_spec/autodocs/schemas/html/coordinate_systems.html +++ /dev/null @@ -1 +0,0 @@ - NGFF CoordinateSystem

NGFF CoordinateSystem

Type: array

JSON from OME-NGFF .zattrs

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Coordinate Systems for OME-NGFF

Type: string

Name of coordinate system

Type: array

JSON from OME-NGFF .zattrs

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: string

Name of the axis

Type: string

Longer name or description of the axis.

Type: string

Dimension of the axis

Type: boolean

Whether the dimension is discrete

Type: string

Unit for the axis

At least one of the items must be:

Type: object

Type: string

Type: enum (of string)

Must be one of:

  • "space"

Type: string
\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/label.html b/ngff_spec/autodocs/schemas/html/label.html deleted file mode 100644 index 3b879442..00000000 --- a/ngff_spec/autodocs/schemas/html/label.html +++ /dev/null @@ -1 +0,0 @@ - OME-Zarr labelled image schema

OME-Zarr labelled image schema

Type: object

The zarr.json attributes key

Type: object

The versioned OME-Zarr Metadata namespace

Type: object

Type: array of object

The colors for this label image

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: number

The value of the label

Type: array of integer

The RGBA color stored as an array of four integers between 0 and 255

Must contain a minimum of 4 items

Must contain a maximum of 4 items

No Additional Items

Each item of this array must be:

Type: integer

Value must be greater or equal to 0 and lesser or equal to 255

Type: array of object

The properties for this label image

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: integer

The pixel value for this label

Type: object

The source of this label image

Type: string

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/ome.html b/ngff_spec/autodocs/schemas/html/ome.html deleted file mode 100644 index e75bc793..00000000 --- a/ngff_spec/autodocs/schemas/html/ome.html +++ /dev/null @@ -1 +0,0 @@ - OME-Zarr group produced by bioformats2raw to contain OME metadata

OME-Zarr group produced by bioformats2raw to contain OME metadata

Type: object

The zarr.json attributes key

Type: object

The versioned OME-Zarr Metadata namespace

Type: array of string

An array of the same length and the same order as the images defined in the OME-XML

No Additional Items

Each item of this array must be:

Type: string

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/ome_zarr.html b/ngff_spec/autodocs/schemas/html/ome_zarr.html deleted file mode 100644 index e3503f45..00000000 --- a/ngff_spec/autodocs/schemas/html/ome_zarr.html +++ /dev/null @@ -1 +0,0 @@ - Schema Docs

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/plate.html b/ngff_spec/autodocs/schemas/html/plate.html deleted file mode 100644 index e342e058..00000000 --- a/ngff_spec/autodocs/schemas/html/plate.html +++ /dev/null @@ -1 +0,0 @@ - OME-Zarr plate schema

OME-Zarr plate schema

Type: object

The zarr.json attributes key

Type: object

The versioned OME-Zarr Metadata namespace

Type: object

Type: array of object

The acquisitions for this plate

No Additional Items

Each item of this array must be:

Type: object

Type: integer

A unique identifier within the context of the plate

Value must be greater or equal to 0

Type: integer

The maximum number of fields of view for the acquisition

Value must be strictly greater than 0

Type: string

The name of the acquisition

Type: string

The description of the acquisition

Type: integer

The start timestamp of the acquisition, expressed as epoch time i.e. the number seconds since the Epoch

Value must be greater or equal to 0

Type: integer

The end timestamp of the acquisition, expressed as epoch time i.e. the number seconds since the Epoch

Value must be greater or equal to 0

Type: integer

The maximum number of fields per view across all wells

Value must be strictly greater than 0

Type: string

The name of the plate

Type: array of object

The columns of the plate

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: string

The column name

Must match regular expression: ^[A-Za-z0-9]+$

Type: array of object

The rows of the plate

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: string

The row name

Must match regular expression: ^[A-Za-z0-9]+$

Type: array of object

The wells of the plate

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: string

The path to the well subgroup

Must match regular expression: ^[A-Za-z0-9]+/[A-Za-z0-9]+$

Type: integer

The index of the well in the rows list

Value must be greater or equal to 0

Type: integer

The index of the well in the columns list

Value must be greater or equal to 0

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/schema_doc.css b/ngff_spec/autodocs/schemas/html/schema_doc.css deleted file mode 100644 index e1f3a511..00000000 --- a/ngff_spec/autodocs/schemas/html/schema_doc.css +++ /dev/null @@ -1,181 +0,0 @@ -body { - font: 16px/1.5em "Overpass", "Open Sans", Helvetica, sans-serif; - color: #333; - font-weight: 300; - padding: 40px; -} - -.btn.btn-link { - font-size: 18px; - user-select: text; -} - -.jsfh-animated-property { - animation: eclair; - animation-iteration-count: 1; - animation-fill-mode: forwards; - animation-duration: .75s; - -} - -@keyframes eclair { - 0%,100% { - transform: scale(1); - } - 50% { - transform: scale(1.03); - } -} - -.btn.btn-primary { - margin: 10px; -} - -.btn.example-show.collapsed:before { - content: "show" -} - -.btn.example-show:before { - content: "hide" -} - -.description.collapse:not(.show) { - max-height: 100px !important; - overflow: hidden; - - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; -} - -.description.collapsing { - min-height: 100px !important; -} - -.collapse-description-link.collapsed:after { - content: '+ Read More'; -} - -.collapse-description-link:not(.collapsed):after { - content: '- Read Less'; -} - -.badge { - font-size: 100%; - margin-bottom: 0.5rem; - margin-top: 0.5rem; -} - -.badge.value-type { - font-size: 120%; - margin-right: 5px; - margin-bottom: 10px; -} - - -.badge.default-value { - font-size: 120%; - margin-left: 5px; - margin-bottom: 10px; -} - -.badge.restriction { - display: inline-block; -} - -.badge.required-property,.badge.deprecated-property,.badge.pattern-property,.badge.no-additional { - font-size: 100%; - margin-left: 10px; -} - -.accordion div.card:only-child { - border-bottom: 1px solid rgba(0, 0, 0, 0.125); -} - -.examples { - padding: 1rem !important; -} - -.examples pre { - margin-bottom: 0; -} - -.highlight.jumbotron { - padding: 1rem !important; -} - -.generated-by-footer { - margin-top: 1em; - text-align: right; -} - -/* From https://github.com/richleland/pygments-css/blob/master/friendly.css, see https://github.com/trentm/python-markdown2/wiki/fenced-code-blocks */ -.highlight { background: #e9ecef; } /* Changed from #f0f0f0 in the original style to be the same as bootstrap's jumbotron */ -.highlight .hll { background-color: #ffffcc } -.highlight .c { color: #60a0b0; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #007020; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .ch { color: #60a0b0; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #007020 } /* Comment.Preproc */ -.highlight .cpf { color: #60a0b0; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #888888 } /* Generic.Output */ -.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0044DD } /* Generic.Traceback */ -.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #007020 } /* Keyword.Pseudo */ -.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #902000 } /* Keyword.Type */ -.highlight .m { color: #40a070 } /* Literal.Number */ -.highlight .s { color: #4070a0 } /* Literal.String */ -.highlight .na { color: #4070a0 } /* Name.Attribute */ -.highlight .nb { color: #007020 } /* Name.Builtin */ -.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ -.highlight .no { color: #60add5 } /* Name.Constant */ -.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ -.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #007020 } /* Name.Exception */ -.highlight .nf { color: #06287e } /* Name.Function */ -.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ -.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #bb60d5 } /* Name.Variable */ -.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mb { color: #40a070 } /* Literal.Number.Bin */ -.highlight .mf { color: #40a070 } /* Literal.Number.Float */ -.highlight .mh { color: #40a070 } /* Literal.Number.Hex */ -.highlight .mi { color: #40a070 } /* Literal.Number.Integer */ -.highlight .mo { color: #40a070 } /* Literal.Number.Oct */ -.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ -.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ -.highlight .sc { color: #4070a0 } /* Literal.String.Char */ -.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ -.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ -.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ -.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ -.highlight .sx { color: #c65d09 } /* Literal.String.Other */ -.highlight .sr { color: #235388 } /* Literal.String.Regex */ -.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ -.highlight .ss { color: #517918 } /* Literal.String.Symbol */ -.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #06287e } /* Name.Function.Magic */ -.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ -.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ -.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ -.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ -.highlight .il { color: #40a070 } /* Literal.Number.Integer.Long */ diff --git a/ngff_spec/autodocs/schemas/html/schema_doc.min.js b/ngff_spec/autodocs/schemas/html/schema_doc.min.js deleted file mode 100644 index 17eceaf5..00000000 --- a/ngff_spec/autodocs/schemas/html/schema_doc.min.js +++ /dev/null @@ -1 +0,0 @@ -$(document).on("click",'a[href^="#"]',function(event){event.preventDefault();history.pushState({},"",this.href)});function flashElement(elementId){myElement=document.getElementById(elementId);myElement.classList.add("jsfh-animated-property");setTimeout(function(){myElement.classList.remove("jsfh-animated-property")},1e3)}function setAnchor(anchorLinkDestination){history.pushState({},"",anchorLinkDestination)}function anchorOnLoad(){let linkTarget=decodeURIComponent(window.location.hash.split("?")[0].split("&")[0]);if(linkTarget[0]==="#"){linkTarget=linkTarget.substr(1)}if(linkTarget.length>0){anchorLink(linkTarget)}}function anchorLink(linkTarget){const target=$("#"+linkTarget);target.parents().addBack().filter(".collapse:not(.show), .tab-pane, [role='tab']").each(function(index){if($(this).hasClass("collapse")){$(this).collapse("show")}else if($(this).hasClass("tab-pane")){const tabToShow=$("a[href='#"+$(this).attr("id")+"']");if(tabToShow){tabToShow.tab("show")}}else if($(this).attr("role")==="tab"){$(this).tab("show")}});setTimeout(function(){let targetElement=document.getElementById(linkTarget);if(targetElement){targetElement.scrollIntoView({block:"center",behavior:"smooth"});setTimeout(function(){flashElement(linkTarget)},500)}},1e3)} \ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/html/well.html b/ngff_spec/autodocs/schemas/html/well.html deleted file mode 100644 index a3c3760d..00000000 --- a/ngff_spec/autodocs/schemas/html/well.html +++ /dev/null @@ -1 +0,0 @@ - OME-Zarr well schema

OME-Zarr well schema

Type: object

JSON from OME-Zarr zarr.json

Type: object

The versioned OME-Zarr Metadata namespace

Type: object

Type: array of object

The fields of view for this well

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

Type: integer

A unique identifier within the context of the plate

Type: string

The path for this field of view subgroup

Must match regular expression: ^[A-Za-z0-9]+$

Type: object

😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️

\ No newline at end of file diff --git a/ngff_spec/autodocs/schemas/markdown/_version.md b/ngff_spec/autodocs/schemas/markdown/_version.md deleted file mode 100644 index 0b23cbdf..00000000 --- a/ngff_spec/autodocs/schemas/markdown/_version.md +++ /dev/null @@ -1,18 +0,0 @@ -(schemas:_version) - -# OME-Zarr Metadata version - -**Title:** OME-Zarr Metadata version - -| | | -| ------------ | ------------------ | -| **Type** | `enum (of string)` | -| **Required** | No | - -**Description:** The version of the OME-Zarr Metadata - -Must be one of: -* "0.6.dev1" - ----------------------------------------------------------------------------------------------------------------------------- -Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:35:17 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/axes.md b/ngff_spec/autodocs/schemas/markdown/axes.md deleted file mode 100644 index 48d6cea9..00000000 --- a/ngff_spec/autodocs/schemas/markdown/axes.md +++ /dev/null @@ -1,127 +0,0 @@ -(schemas:axes) - -# NGFF Axes - -**Title:** NGFF Axes - -| | | -| ------------ | ------- | -| **Type** | `array` | -| **Required** | No | - -**Description:** JSON from OME-NGFF .zattrs - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | 1 | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ------------------------------- | ----------- | -| [axis](#items) | - | - -## 1. NGFF Axes > axis - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | #/$defs/axis | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ------------------------------ | ------- | ------- | ---------- | ---------- | --------------------------------------- | -| + [name](#items_name ) | No | string | No | - | Name of the axis | -| - [longName](#items_longName ) | No | string | No | - | Longer name or description of the axis. | -| - [type](#items_type ) | No | string | No | - | Dimension of the axis | -| - [discrete](#items_discrete ) | No | boolean | No | - | Whether the dimension is discrete | -| - [unit](#items_unit ) | No | string | No | - | Unit for the axis | - -### 1.1. Property `NGFF Axes > root items > name` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -**Description:** Name of the axis - -### 1.2. Property `NGFF Axes > root items > longName` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -**Description:** Longer name or description of the axis. - -### 1.3. Property `NGFF Axes > root items > type` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -**Description:** Dimension of the axis - -### 1.4. Property `NGFF Axes > root items > discrete` - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | No | - -**Description:** Whether the dimension is discrete - -### 1.5. Property `NGFF Axes > root items > unit` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -**Description:** Unit for the axis - -## 2. At least one of the items must be - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ------------------------- | ------- | ---------------- | ---------- | ---------- | ----------------- | -| - [name](#contains_name ) | No | string | No | - | - | -| - [type](#contains_type ) | No | enum (of string) | No | - | - | -| - [unit](#contains_unit ) | No | string | No | - | - | - -### 2.1. Property `NGFF Axes > contains > name` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -### 2.2. Property `NGFF Axes > contains > type` - -| | | -| ------------ | ------------------ | -| **Type** | `enum (of string)` | -| **Required** | No | - -Must be one of: -* "space" - -### 2.3. Property `NGFF Axes > contains > unit` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - ----------------------------------------------------------------------------------------------------------------------------- -Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:34:13 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/bf2raw.md b/ngff_spec/autodocs/schemas/markdown/bf2raw.md deleted file mode 100644 index d0107ec5..00000000 --- a/ngff_spec/autodocs/schemas/markdown/bf2raw.md +++ /dev/null @@ -1,56 +0,0 @@ -# OME-Zarr container produced by bioformats2raw - -**Title:** OME-Zarr container produced by bioformats2raw - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -**Description:** The zarr.json attributes key - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| -------------- | ------- | ------ | ---------- | ---------- | ----------------------------------------- | -| + [ome](#ome ) | No | object | No | - | The versioned OME-Zarr Metadata namespace | - -## 1. Property `OME-Zarr container produced by bioformats2raw > ome` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -**Description:** The versioned OME-Zarr Metadata namespace - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ----------------------------------------------------- | ------- | ----------------- | ---------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | -| + [bioformats2raw.layout](#ome_bioformats2rawlayout ) | No | enum (of integer) | No | - | The top-level identifier metadata added by bioformats2raw | -| + [version](#ome_version ) | No | object | No | In https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ | - -### 1.1. Property `OME-Zarr container produced by bioformats2raw > ome > bioformats2raw.layout` - -| | | -| ------------ | ------------------- | -| **Type** | `enum (of integer)` | -| **Required** | Yes | - -**Description:** The top-level identifier metadata added by bioformats2raw - -Must be one of: -* 3 - -### 1.2. Property `OME-Zarr container produced by bioformats2raw > ome > version` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | - -**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ - ----------------------------------------------------------------------------------------------------------------------------- -Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:34:14 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/coordinate_systems.md b/ngff_spec/autodocs/schemas/markdown/coordinate_systems.md deleted file mode 100644 index 3f50d555..00000000 --- a/ngff_spec/autodocs/schemas/markdown/coordinate_systems.md +++ /dev/null @@ -1,174 +0,0 @@ -(schemas:coordinate_systems) - -# NGFF CoordinateSystem - -**Title:** NGFF CoordinateSystem - -| | | -| ------------ | ------- | -| **Type** | `array` | -| **Required** | No | - -**Description:** JSON from OME-NGFF .zattrs - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ------------------------------- | ------------------------------- | -| [coordinateSystem](#items) | Coordinate Systems for OME-NGFF | - -## 1. NGFF CoordinateSystem > coordinateSystem - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | #/$defs/coordinateSystem | - -**Description:** Coordinate Systems for OME-NGFF - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ---------------------- | ------- | ------ | ---------- | -------------- | -------------------------- | -| + [name](#items_name ) | No | string | No | - | Name of coordinate system | -| + [axes](#items_axes ) | No | array | No | In axes.schema | JSON from OME-NGFF .zattrs | - -### 1.1. Property `NGFF CoordinateSystem > root items > name` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -**Description:** Name of coordinate system - -### 1.2. Property `NGFF CoordinateSystem > root items > axes` - -| | | -| -------------- | ----------- | -| **Type** | `array` | -| **Required** | Yes | -| **Defined in** | axes.schema | - -**Description:** JSON from OME-NGFF .zattrs - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | 1 | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ------------------------------- | ----------- | -| [axis](#items_axes_items) | - | - -#### 1.2.1. NGFF CoordinateSystem > root items > axes > axis - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | #/$defs/axis | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ----------------------------------------- | ------- | ------- | ---------- | ---------- | --------------------------------------- | -| + [name](#items_axes_items_name ) | No | string | No | - | Name of the axis | -| - [longName](#items_axes_items_longName ) | No | string | No | - | Longer name or description of the axis. | -| - [type](#items_axes_items_type ) | No | string | No | - | Dimension of the axis | -| - [discrete](#items_axes_items_discrete ) | No | boolean | No | - | Whether the dimension is discrete | -| - [unit](#items_axes_items_unit ) | No | string | No | - | Unit for the axis | - -##### 1.2.1.1. Property `NGFF CoordinateSystem > root items > axes > axes items > name` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -**Description:** Name of the axis - -##### 1.2.1.2. Property `NGFF CoordinateSystem > root items > axes > axes items > longName` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -**Description:** Longer name or description of the axis. - -##### 1.2.1.3. Property `NGFF CoordinateSystem > root items > axes > axes items > type` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -**Description:** Dimension of the axis - -##### 1.2.1.4. Property `NGFF CoordinateSystem > root items > axes > axes items > discrete` - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | No | - -**Description:** Whether the dimension is discrete - -##### 1.2.1.5. Property `NGFF CoordinateSystem > root items > axes > axes items > unit` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -**Description:** Unit for the axis - -#### 1.2.2. At least one of the items must be - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ------------------------------------ | ------- | ---------------- | ---------- | ---------- | ----------------- | -| - [name](#items_axes_contains_name ) | No | string | No | - | - | -| - [type](#items_axes_contains_type ) | No | enum (of string) | No | - | - | -| - [unit](#items_axes_contains_unit ) | No | string | No | - | - | - -##### 1.2.2.1. Property `NGFF CoordinateSystem > root items > axes > contains > name` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -##### 1.2.2.2. Property `NGFF CoordinateSystem > root items > axes > contains > type` - -| | | -| ------------ | ------------------ | -| **Type** | `enum (of string)` | -| **Required** | No | - -Must be one of: -* "space" - -##### 1.2.2.3. Property `NGFF CoordinateSystem > root items > axes > contains > unit` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - ----------------------------------------------------------------------------------------------------------------------------- -Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:34:14 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/label.md b/ngff_spec/autodocs/schemas/markdown/label.md deleted file mode 100644 index 2f0e1018..00000000 --- a/ngff_spec/autodocs/schemas/markdown/label.md +++ /dev/null @@ -1,198 +0,0 @@ -# OME-Zarr labelled image schema - -**Title:** OME-Zarr labelled image schema - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -**Description:** The zarr.json attributes key - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| -------------- | ------- | ------ | ---------- | ---------- | ----------------------------------------- | -| + [ome](#ome ) | No | object | No | - | The versioned OME-Zarr Metadata namespace | - -## 1. Property `OME-Zarr labelled image schema > ome` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -**Description:** The versioned OME-Zarr Metadata namespace - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ---------------------------------- | ------- | ------ | ---------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | -| + [image-label](#ome_image-label ) | No | object | No | In #/$defs/image-label | - | -| + [version](#ome_version ) | No | object | No | In https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ | - -### 1.1. Property `OME-Zarr labelled image schema > ome > image-label` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | #/$defs/image-label | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| -------------------------------------------- | ------- | --------------- | ---------- | ---------- | ----------------------------------- | -| - [colors](#ome_image-label_colors ) | No | array of object | No | - | The colors for this label image | -| - [properties](#ome_image-label_properties ) | No | array of object | No | - | The properties for this label image | -| - [source](#ome_image-label_source ) | No | object | No | - | The source of this label image | - -#### 1.1.1. Property `OME-Zarr labelled image schema > ome > image-label > colors` - -| | | -| ------------ | ----------------- | -| **Type** | `array of object` | -| **Required** | No | - -**Description:** The colors for this label image - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | 1 | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| --------------------------------------------- | ----------- | -| [colors items](#ome_image-label_colors_items) | - | - -##### 1.1.1.1. OME-Zarr labelled image schema > ome > image-label > colors > colors items - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ----------------------------------------------------------- | ------- | ---------------- | ---------- | ---------- | -------------------------------------------------------------------- | -| + [label-value](#ome_image-label_colors_items_label-value ) | No | number | No | - | The value of the label | -| - [rgba](#ome_image-label_colors_items_rgba ) | No | array of integer | No | - | The RGBA color stored as an array of four integers between 0 and 255 | - -###### 1.1.1.1.1. Property `OME-Zarr labelled image schema > ome > image-label > colors > colors items > label-value` - -| | | -| ------------ | -------- | -| **Type** | `number` | -| **Required** | Yes | - -**Description:** The value of the label - -###### 1.1.1.1.2. Property `OME-Zarr labelled image schema > ome > image-label > colors > colors items > rgba` - -| | | -| ------------ | ------------------ | -| **Type** | `array of integer` | -| **Required** | No | - -**Description:** The RGBA color stored as an array of four integers between 0 and 255 - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | 4 | -| **Max items** | 4 | -| **Items unicity** | False | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ------------------------------------------------------ | ----------- | -| [rgba items](#ome_image-label_colors_items_rgba_items) | - | - -###### 1.1.1.1.2.1. OME-Zarr labelled image schema > ome > image-label > colors > colors items > rgba > rgba items - -| | | -| ------------ | --------- | -| **Type** | `integer` | -| **Required** | No | - -| Restrictions | | -| ------------ | -------- | -| **Minimum** | ≥ 0 | -| **Maximum** | ≤ 255 | - -#### 1.1.2. Property `OME-Zarr labelled image schema > ome > image-label > properties` - -| | | -| ------------ | ----------------- | -| **Type** | `array of object` | -| **Required** | No | - -**Description:** The properties for this label image - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | 1 | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ----------------------------------------------------- | ----------- | -| [properties items](#ome_image-label_properties_items) | - | - -##### 1.1.2.1. OME-Zarr labelled image schema > ome > image-label > properties > properties items - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| --------------------------------------------------------------- | ------- | ------- | ---------- | ---------- | ------------------------------ | -| + [label-value](#ome_image-label_properties_items_label-value ) | No | integer | No | - | The pixel value for this label | - -###### 1.1.2.1.1. Property `OME-Zarr labelled image schema > ome > image-label > properties > properties items > label-value` - -| | | -| ------------ | --------- | -| **Type** | `integer` | -| **Required** | Yes | - -**Description:** The pixel value for this label - -#### 1.1.3. Property `OME-Zarr labelled image schema > ome > image-label > source` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -**Description:** The source of this label image - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ----------------------------------------- | ------- | ------ | ---------- | ---------- | ----------------- | -| - [image](#ome_image-label_source_image ) | No | string | No | - | - | - -##### 1.1.3.1. Property `OME-Zarr labelled image schema > ome > image-label > source > image` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -### 1.2. Property `OME-Zarr labelled image schema > ome > version` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | - -**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ - ----------------------------------------------------------------------------------------------------------------------------- -Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:35:12 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/ome.md b/ngff_spec/autodocs/schemas/markdown/ome.md deleted file mode 100644 index 0ba063ce..00000000 --- a/ngff_spec/autodocs/schemas/markdown/ome.md +++ /dev/null @@ -1,72 +0,0 @@ -# OME-Zarr group produced by bioformats2raw to contain OME metadata - -**Title:** OME-Zarr group produced by bioformats2raw to contain OME metadata - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -**Description:** The zarr.json attributes key - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| -------------- | ------- | ------ | ---------- | ---------- | ----------------------------------------- | -| + [ome](#ome ) | No | object | No | - | The versioned OME-Zarr Metadata namespace | - -## 1. Property `OME-Zarr group produced by bioformats2raw to contain OME metadata > ome` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -**Description:** The versioned OME-Zarr Metadata namespace - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| -------------------------- | ------- | --------------- | ---------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | -| + [series](#ome_series ) | No | array of string | No | - | An array of the same length and the same order as the images defined in the OME-XML | -| + [version](#ome_version ) | No | object | No | In https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ | - -### 1.1. Property `OME-Zarr group produced by bioformats2raw to contain OME metadata > ome > series` - -| | | -| ------------ | ----------------- | -| **Type** | `array of string` | -| **Required** | Yes | - -**Description:** An array of the same length and the same order as the images defined in the OME-XML - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | False | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| --------------------------------- | ----------- | -| [series items](#ome_series_items) | - | - -#### 1.1.1. OME-Zarr group produced by bioformats2raw to contain OME metadata > ome > series > series items - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -### 1.2. Property `OME-Zarr group produced by bioformats2raw to contain OME metadata > ome > version` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | - -**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ - ----------------------------------------------------------------------------------------------------------------------------- -Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:35:13 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/ome_zarr.md b/ngff_spec/autodocs/schemas/markdown/ome_zarr.md deleted file mode 100644 index 60c7db24..00000000 --- a/ngff_spec/autodocs/schemas/markdown/ome_zarr.md +++ /dev/null @@ -1,85 +0,0 @@ -# Schema Docs - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `combining` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -| Any of(Option) | -| -------------------------- | -| [bf2raw.schema](#anyOf_i0) | -| [image.schema](#anyOf_i1) | -| [label.schema](#anyOf_i2) | -| [ome.schema](#anyOf_i3) | -| [plate.schema](#anyOf_i4) | -| [well.schema](#anyOf_i5) | - -## 1. Property `root > anyOf > bf2raw.schema` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/bf2raw.schema | - -**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ - -## 2. Property `root > anyOf > image.schema` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/image.schema | - -**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ - -## 3. Property `root > anyOf > label.schema` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/label.schema | - -**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ - -## 4. Property `root > anyOf > ome.schema` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/ome.schema | - -**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ - -## 5. Property `root > anyOf > plate.schema` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/plate.schema | - -**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ - -## 6. Property `root > anyOf > well.schema` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/well.schema | - -**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ - ----------------------------------------------------------------------------------------------------------------------------- -Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:35:15 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/plate.md b/ngff_spec/autodocs/schemas/markdown/plate.md deleted file mode 100644 index 1a68d311..00000000 --- a/ngff_spec/autodocs/schemas/markdown/plate.md +++ /dev/null @@ -1,357 +0,0 @@ -# OME-Zarr plate schema - -**Title:** OME-Zarr plate schema - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -**Description:** The zarr.json attributes key - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| -------------- | ------- | ------ | ---------- | ---------- | ----------------------------------------- | -| + [ome](#ome ) | No | object | No | - | The versioned OME-Zarr Metadata namespace | - -## 1. Property `OME-Zarr plate schema > ome` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -**Description:** The versioned OME-Zarr Metadata namespace - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| -------------------------- | ------- | ------ | ---------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | -| + [plate](#ome_plate ) | No | object | No | - | - | -| + [version](#ome_version ) | No | object | No | In https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ | - -### 1.1. Property `OME-Zarr plate schema > ome > plate` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ------------------------------------------ | ------- | --------------- | ---------- | ---------- | ------------------------------------------------------ | -| - [acquisitions](#ome_plate_acquisitions ) | No | array of object | No | - | The acquisitions for this plate | -| - [field_count](#ome_plate_field_count ) | No | integer | No | - | The maximum number of fields per view across all wells | -| - [name](#ome_plate_name ) | No | string | No | - | The name of the plate | -| + [columns](#ome_plate_columns ) | No | array of object | No | - | The columns of the plate | -| + [rows](#ome_plate_rows ) | No | array of object | No | - | The rows of the plate | -| + [wells](#ome_plate_wells ) | No | array of object | No | - | The wells of the plate | - -#### 1.1.1. Property `OME-Zarr plate schema > ome > plate > acquisitions` - -| | | -| ------------ | ----------------- | -| **Type** | `array of object` | -| **Required** | No | - -**Description:** The acquisitions for this plate - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | False | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| --------------------------------------------------- | ----------- | -| [acquisitions items](#ome_plate_acquisitions_items) | - | - -##### 1.1.1.1. OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ----------------------------------------------------------------------- | ------- | ------- | ---------- | ---------- | ------------------------------------------------------------------------------------------------------- | -| + [id](#ome_plate_acquisitions_items_id ) | No | integer | No | - | A unique identifier within the context of the plate | -| - [maximumfieldcount](#ome_plate_acquisitions_items_maximumfieldcount ) | No | integer | No | - | The maximum number of fields of view for the acquisition | -| - [name](#ome_plate_acquisitions_items_name ) | No | string | No | - | The name of the acquisition | -| - [description](#ome_plate_acquisitions_items_description ) | No | string | No | - | The description of the acquisition | -| - [starttime](#ome_plate_acquisitions_items_starttime ) | No | integer | No | - | The start timestamp of the acquisition, expressed as epoch time i.e. the number seconds since the Epoch | -| - [endtime](#ome_plate_acquisitions_items_endtime ) | No | integer | No | - | The end timestamp of the acquisition, expressed as epoch time i.e. the number seconds since the Epoch | - -###### 1.1.1.1.1. Property `OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items > id` - -| | | -| ------------ | --------- | -| **Type** | `integer` | -| **Required** | Yes | - -**Description:** A unique identifier within the context of the plate - -| Restrictions | | -| ------------ | ------ | -| **Minimum** | ≥ 0 | - -###### 1.1.1.1.2. Property `OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items > maximumfieldcount` - -| | | -| ------------ | --------- | -| **Type** | `integer` | -| **Required** | No | - -**Description:** The maximum number of fields of view for the acquisition - -| Restrictions | | -| ------------ | ------ | -| **Minimum** | > 0 | - -###### 1.1.1.1.3. Property `OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items > name` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -**Description:** The name of the acquisition - -###### 1.1.1.1.4. Property `OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items > description` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -**Description:** The description of the acquisition - -###### 1.1.1.1.5. Property `OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items > starttime` - -| | | -| ------------ | --------- | -| **Type** | `integer` | -| **Required** | No | - -**Description:** The start timestamp of the acquisition, expressed as epoch time i.e. the number seconds since the Epoch - -| Restrictions | | -| ------------ | ------ | -| **Minimum** | ≥ 0 | - -###### 1.1.1.1.6. Property `OME-Zarr plate schema > ome > plate > acquisitions > acquisitions items > endtime` - -| | | -| ------------ | --------- | -| **Type** | `integer` | -| **Required** | No | - -**Description:** The end timestamp of the acquisition, expressed as epoch time i.e. the number seconds since the Epoch - -| Restrictions | | -| ------------ | ------ | -| **Minimum** | ≥ 0 | - -#### 1.1.2. Property `OME-Zarr plate schema > ome > plate > field_count` - -| | | -| ------------ | --------- | -| **Type** | `integer` | -| **Required** | No | - -**Description:** The maximum number of fields per view across all wells - -| Restrictions | | -| ------------ | ------ | -| **Minimum** | > 0 | - -#### 1.1.3. Property `OME-Zarr plate schema > ome > plate > name` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -**Description:** The name of the plate - -#### 1.1.4. Property `OME-Zarr plate schema > ome > plate > columns` - -| | | -| ------------ | ----------------- | -| **Type** | `array of object` | -| **Required** | Yes | - -**Description:** The columns of the plate - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | 1 | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ----------------------------------------- | ----------- | -| [columns items](#ome_plate_columns_items) | - | - -##### 1.1.4.1. OME-Zarr plate schema > ome > plate > columns > columns items - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ---------------------------------------- | ------- | ------ | ---------- | ---------- | ----------------- | -| + [name](#ome_plate_columns_items_name ) | No | string | No | - | The column name | - -###### 1.1.4.1.1. Property `OME-Zarr plate schema > ome > plate > columns > columns items > name` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -**Description:** The column name - -| Restrictions | | -| --------------------------------- | --------------------------------------------------------------------------------- | -| **Must match regular expression** | ```^[A-Za-z0-9]+$``` [Test](https://regex101.com/?regex=%5E%5BA-Za-z0-9%5D%2B%24) | - -#### 1.1.5. Property `OME-Zarr plate schema > ome > plate > rows` - -| | | -| ------------ | ----------------- | -| **Type** | `array of object` | -| **Required** | Yes | - -**Description:** The rows of the plate - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | 1 | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ----------------------------------- | ----------- | -| [rows items](#ome_plate_rows_items) | - | - -##### 1.1.5.1. OME-Zarr plate schema > ome > plate > rows > rows items - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ------------------------------------- | ------- | ------ | ---------- | ---------- | ----------------- | -| + [name](#ome_plate_rows_items_name ) | No | string | No | - | The row name | - -###### 1.1.5.1.1. Property `OME-Zarr plate schema > ome > plate > rows > rows items > name` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -**Description:** The row name - -| Restrictions | | -| --------------------------------- | --------------------------------------------------------------------------------- | -| **Must match regular expression** | ```^[A-Za-z0-9]+$``` [Test](https://regex101.com/?regex=%5E%5BA-Za-z0-9%5D%2B%24) | - -#### 1.1.6. Property `OME-Zarr plate schema > ome > plate > wells` - -| | | -| ------------ | ----------------- | -| **Type** | `array of object` | -| **Required** | Yes | - -**Description:** The wells of the plate - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | 1 | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ------------------------------------- | ----------- | -| [wells items](#ome_plate_wells_items) | - | - -##### 1.1.6.1. OME-Zarr plate schema > ome > plate > wells > wells items - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ---------------------------------------------------- | ------- | ------- | ---------- | ---------- | ----------------------------------------- | -| + [path](#ome_plate_wells_items_path ) | No | string | No | - | The path to the well subgroup | -| + [rowIndex](#ome_plate_wells_items_rowIndex ) | No | integer | No | - | The index of the well in the rows list | -| + [columnIndex](#ome_plate_wells_items_columnIndex ) | No | integer | No | - | The index of the well in the columns list | - -###### 1.1.6.1.1. Property `OME-Zarr plate schema > ome > plate > wells > wells items > path` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -**Description:** The path to the well subgroup - -| Restrictions | | -| --------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -| **Must match regular expression** | ```^[A-Za-z0-9]+/[A-Za-z0-9]+$``` [Test](https://regex101.com/?regex=%5E%5BA-Za-z0-9%5D%2B%2F%5BA-Za-z0-9%5D%2B%24) | - -###### 1.1.6.1.2. Property `OME-Zarr plate schema > ome > plate > wells > wells items > rowIndex` - -| | | -| ------------ | --------- | -| **Type** | `integer` | -| **Required** | Yes | - -**Description:** The index of the well in the rows list - -| Restrictions | | -| ------------ | ------ | -| **Minimum** | ≥ 0 | - -###### 1.1.6.1.3. Property `OME-Zarr plate schema > ome > plate > wells > wells items > columnIndex` - -| | | -| ------------ | --------- | -| **Type** | `integer` | -| **Required** | Yes | - -**Description:** The index of the well in the columns list - -| Restrictions | | -| ------------ | ------ | -| **Minimum** | ≥ 0 | - -### 1.2. Property `OME-Zarr plate schema > ome > version` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | - -**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ - ----------------------------------------------------------------------------------------------------------------------------- -Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:35:16 +0200 diff --git a/ngff_spec/autodocs/schemas/markdown/well.md b/ngff_spec/autodocs/schemas/markdown/well.md deleted file mode 100644 index e8a29291..00000000 --- a/ngff_spec/autodocs/schemas/markdown/well.md +++ /dev/null @@ -1,112 +0,0 @@ -# OME-Zarr well schema - -**Title:** OME-Zarr well schema - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -**Description:** JSON from OME-Zarr zarr.json - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| -------------- | ------- | ------ | ---------- | ---------- | ----------------------------------------- | -| + [ome](#ome ) | No | object | No | - | The versioned OME-Zarr Metadata namespace | - -## 1. Property `OME-Zarr well schema > ome` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -**Description:** The versioned OME-Zarr Metadata namespace - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| -------------------------- | ------- | ------ | ---------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | -| + [well](#ome_well ) | No | object | No | - | - | -| + [version](#ome_version ) | No | object | No | In https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ | - -### 1.1. Property `OME-Zarr well schema > ome > well` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ----------------------------- | ------- | --------------- | ---------- | ---------- | -------------------------------- | -| + [images](#ome_well_images ) | No | array of object | No | - | The fields of view for this well | - -#### 1.1.1. Property `OME-Zarr well schema > ome > well > images` - -| | | -| ------------ | ----------------- | -| **Type** | `array of object` | -| **Required** | Yes | - -**Description:** The fields of view for this well - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | 1 | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| -------------------------------------- | ----------- | -| [images items](#ome_well_images_items) | - | - -##### 1.1.1.1. OME-Zarr well schema > ome > well > images > images items - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | - -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ---------------------------------------------------- | ------- | ------- | ---------- | ---------- | --------------------------------------------------- | -| - [acquisition](#ome_well_images_items_acquisition ) | No | integer | No | - | A unique identifier within the context of the plate | -| + [path](#ome_well_images_items_path ) | No | string | No | - | The path for this field of view subgroup | - -###### 1.1.1.1.1. Property `OME-Zarr well schema > ome > well > images > images items > acquisition` - -| | | -| ------------ | --------- | -| **Type** | `integer` | -| **Required** | No | - -**Description:** A unique identifier within the context of the plate - -###### 1.1.1.1.2. Property `OME-Zarr well schema > ome > well > images > images items > path` - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -**Description:** The path for this field of view subgroup - -| Restrictions | | -| --------------------------------- | --------------------------------------------------------------------------------- | -| **Must match regular expression** | ```^[A-Za-z0-9]+$``` [Test](https://regex101.com/?regex=%5E%5BA-Za-z0-9%5D%2B%24) | - -### 1.2. Property `OME-Zarr well schema > ome > version` - -| | | -| ------------------------- | ------------------------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Any type: allowed]](# "Additional Properties of any type are allowed.") | -| **Defined in** | https://ngff.openmicroscopy.org/0.6.dev1/schemas/_version.schema | - -**Description:** 😅 ERROR in schema generation, a referenced schema could not be loaded, no documentation here unfortunately 🏜️ - ----------------------------------------------------------------------------------------------------------------------------- -Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-10-08 at 23:35:17 +0200 diff --git a/ngff_spec/references.bib b/references.bib similarity index 100% rename from ngff_spec/references.bib rename to references.bib diff --git a/ngff_spec/schemas/_version.schema b/schemas/_version.schema similarity index 100% rename from ngff_spec/schemas/_version.schema rename to schemas/_version.schema diff --git a/ngff_spec/schemas/axes.schema b/schemas/axes.schema similarity index 100% rename from ngff_spec/schemas/axes.schema rename to schemas/axes.schema diff --git a/ngff_spec/schemas/bf2raw.schema b/schemas/bf2raw.schema similarity index 100% rename from ngff_spec/schemas/bf2raw.schema rename to schemas/bf2raw.schema diff --git a/ngff_spec/schemas/coordinate_systems.schema b/schemas/coordinate_systems.schema similarity index 100% rename from ngff_spec/schemas/coordinate_systems.schema rename to schemas/coordinate_systems.schema diff --git a/ngff_spec/schemas/coordinate_systems_and_transforms.schema b/schemas/coordinate_systems_and_transforms.schema similarity index 100% rename from ngff_spec/schemas/coordinate_systems_and_transforms.schema rename to schemas/coordinate_systems_and_transforms.schema diff --git a/ngff_spec/schemas/coordinate_transformation.schema b/schemas/coordinate_transformation.schema similarity index 100% rename from ngff_spec/schemas/coordinate_transformation.schema rename to schemas/coordinate_transformation.schema diff --git a/ngff_spec/schemas/image.schema b/schemas/image.schema similarity index 100% rename from ngff_spec/schemas/image.schema rename to schemas/image.schema diff --git a/ngff_spec/schemas/label.schema b/schemas/label.schema similarity index 100% rename from ngff_spec/schemas/label.schema rename to schemas/label.schema diff --git a/ngff_spec/schemas/ome.schema b/schemas/ome.schema similarity index 100% rename from ngff_spec/schemas/ome.schema rename to schemas/ome.schema diff --git a/ngff_spec/schemas/ome_zarr.schema b/schemas/ome_zarr.schema similarity index 100% rename from ngff_spec/schemas/ome_zarr.schema rename to schemas/ome_zarr.schema diff --git a/ngff_spec/schemas/plate.schema b/schemas/plate.schema similarity index 100% rename from ngff_spec/schemas/plate.schema rename to schemas/plate.schema diff --git a/ngff_spec/schemas/strict_axes.schema b/schemas/strict_axes.schema similarity index 100% rename from ngff_spec/schemas/strict_axes.schema rename to schemas/strict_axes.schema diff --git a/ngff_spec/schemas/strict_coordinate_systems.schema b/schemas/strict_coordinate_systems.schema similarity index 100% rename from ngff_spec/schemas/strict_coordinate_systems.schema rename to schemas/strict_coordinate_systems.schema diff --git a/ngff_spec/schemas/strict_image.schema b/schemas/strict_image.schema similarity index 100% rename from ngff_spec/schemas/strict_image.schema rename to schemas/strict_image.schema diff --git a/ngff_spec/schemas/strict_label.schema b/schemas/strict_label.schema similarity index 100% rename from ngff_spec/schemas/strict_label.schema rename to schemas/strict_label.schema diff --git a/ngff_spec/schemas/strict_plate.schema b/schemas/strict_plate.schema similarity index 100% rename from ngff_spec/schemas/strict_plate.schema rename to schemas/strict_plate.schema diff --git a/ngff_spec/schemas/strict_well.schema b/schemas/strict_well.schema similarity index 100% rename from ngff_spec/schemas/strict_well.schema rename to schemas/strict_well.schema diff --git a/ngff_spec/schemas/well.schema b/schemas/well.schema similarity index 100% rename from ngff_spec/schemas/well.schema rename to schemas/well.schema diff --git a/ngff_spec/specification.md b/specification.md similarity index 100% rename from ngff_spec/specification.md rename to specification.md diff --git a/ngff_spec/tests/image_suite.json b/tests/image_suite.json similarity index 100% rename from ngff_spec/tests/image_suite.json rename to tests/image_suite.json diff --git a/ngff_spec/tests/label_suite.json b/tests/label_suite.json similarity index 100% rename from ngff_spec/tests/label_suite.json rename to tests/label_suite.json diff --git a/ngff_spec/tests/plate_suite.json b/tests/plate_suite.json similarity index 100% rename from ngff_spec/tests/plate_suite.json rename to tests/plate_suite.json diff --git a/ngff_spec/tests/strict_image_suite.json b/tests/strict_image_suite.json similarity index 100% rename from ngff_spec/tests/strict_image_suite.json rename to tests/strict_image_suite.json diff --git a/ngff_spec/tests/strict_label_suite.json b/tests/strict_label_suite.json similarity index 100% rename from ngff_spec/tests/strict_label_suite.json rename to tests/strict_label_suite.json diff --git a/ngff_spec/tests/strict_plate_suite.json b/tests/strict_plate_suite.json similarity index 100% rename from ngff_spec/tests/strict_plate_suite.json rename to tests/strict_plate_suite.json diff --git a/ngff_spec/tests/strict_well_suite.json b/tests/strict_well_suite.json similarity index 100% rename from ngff_spec/tests/strict_well_suite.json rename to tests/strict_well_suite.json diff --git a/ngff_spec/tests/test_validation.py b/tests/test_validation.py similarity index 100% rename from ngff_spec/tests/test_validation.py rename to tests/test_validation.py diff --git a/ngff_spec/tests/well_suite.json b/tests/well_suite.json similarity index 100% rename from ngff_spec/tests/well_suite.json rename to tests/well_suite.json diff --git a/ngff_spec/version_history.md b/version_history.md similarity index 100% rename from ngff_spec/version_history.md rename to version_history.md