---
# System prepended metadata

title: 'GEFF Community Meeting August 14, 2025'

---

# 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