# Geff Community Meeting August 2025 August 14, 2025, 8am ET Attendees: Morgan, Caroline, Ko, Draga, Laura, Mark, Talley ## Java code base updates - Tobi working on integrating n5-zarr library into java geff [PR](https://github.com/live-image-tracking-tools/geff-java/pull/3) - May be waiting on the v1 release of the spec ## Python code base updates ### Breaking changes incoming! {%preview https://github.com/live-image-tracking-tools/geff/pull/292 %} Versioning updates coming too (see spec discussion later) - If help is needed updating any downstream code, ping Caroline or Morgan ### Var length props - Updated PropMetadata https://github.com/live-image-tracking-tools/geff/pull/302 - Making PropMetadata mandatory (including making the writers write it) https://github.com/live-image-tracking-tools/geff/pull/305 - Next - actually implement the var length props and string reading/writing ### Other larger efforts - testing and validation - reorganize and complete the data validation functions - reorganize the tests of the reference implementations to be consistent and use the validators - unified `write` function (instead of `write_rx`, `write_sg`) - sets of nodes and edges and their properties (e.g. precursor to geffception) ### Help! Here are some issue we could use help with: {%preview https://github.com/live-image-tracking-tools/geff/issues/272 %} {%preview https://github.com/live-image-tracking-tools/geff/issues/241 %} {%preview https://github.com/live-image-tracking-tools/geff/issues/217 %} {%preview https://github.com/live-image-tracking-tools/geff/issues/96 %} {%preview https://github.com/live-image-tracking-tools/geff/issues/211 %} {%preview https://github.com/live-image-tracking-tools/geff/issues/227 %} {%preview https://github.com/live-image-tracking-tools/geff/issues/173 %} Plus whatever we decide about the affine ## Specification ### Versioning We will have one repo with two python libraries that are versioned independently. #### geff-spec This library will define the specification. It will have the pydantic models for the schema and the markdown of the written specification. It will be versioned: vSX.SY.Z change SX = breaking spec change (e.g. field/type renaming/removal, change to on-disk requirements) change SY = non-breaking spec change (e.g. field addition) change Z = just a bump in the pydantic model or written specification (e.g. typos) Geff spec is *just* SX.SY. pydantic python geff-spec version is the full trio #### geff (reference implementation) This library will contain all the rest of the python code - validators, reference implementations, converters, cli tools. It will depend on `geff-spec`. vX.Y.Z.SX.SY Change X = major feature *breaking* change Change Y = non-breaking feature release Change Z = bug fix release change SX = (same as above) change SY = (same as above) bumping SX necessitates a bump to minimally Y... would only bump X if is concomitant with a breaking geff-lib change bumping SY probably requires bump to Y to support the new schema #### Repo structure ``` repo/ packages/ geff-spec/ src/ geff-spec/ tests/ pyproject.toml geff/ src/ geff/ tests/ pyproject.toml pyproject.toml # do we need the top level pyproject? ``` #### Discussion - What would happen if a user pinned geff-spec to a lower version, but did not pin geff? - If the goal of geff is to always maintain backwards compatibility, it may not be necessary - `write` should have an argument for specifying the major version of the spec so that we are backwards compatible on both read and write - Versioning/releasing the schema/spec separately will make it easier to move python and java implementations forward in parallel - Chose "geff-spec" as the name over "geff-schema" because there are a lot of things that define a geff that cannot be encoded in the schema and must instead live in the spec with language like "must" and "should" - Ideally keep all docs for both implementation and spec in the same place, but the biggest priorty is discoverability and ease of going back and forth - ### Units [PR where Talley and Mark had a good discussion](https://github.com/live-image-tracking-tools/geff/pull/285) Summary: - Our current behavior is to accept anything for units but warn if not in OME-zarr units. - Spec: Units, if provided, `SHOULD` be in the OME-zarr list of units. - Mark's PR adds raising an error if the provided unit is not in pint's default registry. - Spec: Units, if provided, `SHOULD` be in OME-zarr list and `MUST` be in pint's default registry. - Question 1: `SHOULD` or `MUST`? - Draga: would hate to error if you give a wrong unit, but a warning could be helpful (e.g. for typo checking). If it's not recognized, it's just an unkown unit that is maybe only for you. - Talley: A "SHOULD" is not that useful. Better than nothing: "Look here and find something unit-y". But downstream things cannot rely on the thing in "unit" to be something we recognize, and need to implement their own validation - If you don't have a known unit, you can't write the geff? Yes, if it's a must. But units are not required. - Concept of a normative geff - it's a should with checking (user can know if it follow the should) - Question 2: OME-zarr units or pint units? (I do not like mixing, we should pick one). - conclusions: we need a defined list of things that can be stored on disk. - pint can be a python API convenience to cast to the OME-zarr units - EG of unit casting - seconds -> second - sec -> second - Maybe OME-zarr/ngff units aren't ready to be relied upon - Plan: make a proposal based on this conversation for the next meeting for final decision ### Affine model {%preview https://github.com/live-image-tracking-tools/geff/issues/274 %} - Draga: initial motivation was storing scale information, but then it got expanded into a broader affine - NGFF is still in the process of figuring out how to incorporate it into their spec (basic functionality may be there but greater sophistication is coming) - This may be a slow process - Let's revisit at next meeting with a more thorough review and suggestion ## Geffception? - Yoh and Laura are working on a test geffception file that doesn't change anything to the current library/spec - We will review the example and hopefully have identified issues that would require changes to the library at the next meeting ## Things to add to next meeting agenda - Affine proposal - Units proposal - Geffception update