@fideus-labs/ngff-zarr 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,6 +12,8 @@ export * from "./schemas/multiscales.js";
12
12
  export { isValidDimension, isValidUnit, validateMetadata, } from "./utils/validation.js";
13
13
  export { createAxis, createDataset, createMetadata, createMultiscales, createNgffImage, } from "./utils/factory.js";
14
14
  export { getMethodMetadata } from "./utils/method_metadata.js";
15
+ export { computeOmeroFromMultiscales, computeOmeroFromNgffImage, getDefaultColors, GLASBEY_COLORS, } from "./utils/compute_omero.js";
16
+ export type { ComputeOmeroFromMultiscalesOptions, ComputeOmeroOptions, } from "./utils/compute_omero.js";
15
17
  export { fromNgffZarr, type FromNgffZarrOptions, type MemoryStore, } from "./io/from_ngff_zarr-browser.js";
16
18
  export { isOzxPath, toNgffZarr, type ToNgffZarrOptions, toNgffZarrOzx, type ToNgffZarrOzxOptions, } from "./io/to_ngff_zarr-browser.js";
17
19
  export { getZipFileCompressionMethod, getZipFileList, memoryStoreToZip, orderFilesForRfc9, readOzxVersion, } from "./io/rfc9_zip.js";
@@ -1 +1 @@
1
- {"version":3,"file":"browser-mod.d.ts","sourceRoot":"","sources":["../src/browser-mod.ts"],"names":[],"mappings":"AAOA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAK/D,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,WAAW,GACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,SAAS,EACT,UAAU,EACV,KAAK,iBAAiB,EACtB,aAAa,EACb,KAAK,oBAAoB,GAC1B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAGhE,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"browser-mod.d.ts","sourceRoot":"","sources":["../src/browser-mod.ts"],"names":[],"mappings":"AAOA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,gBAAgB,EAChB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,kCAAkC,EAClC,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAKlC,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,WAAW,GACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,SAAS,EACT,UAAU,EACV,KAAK,iBAAiB,EACtB,aAAa,EACb,KAAK,oBAAoB,GAC1B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAGhE,cAAc,qCAAqC,CAAC"}
@@ -19,6 +19,7 @@ export * from "./schemas/multiscales.js";
19
19
  export { isValidDimension, isValidUnit, validateMetadata, } from "./utils/validation.js";
20
20
  export { createAxis, createDataset, createMetadata, createMultiscales, createNgffImage, } from "./utils/factory.js";
21
21
  export { getMethodMetadata } from "./utils/method_metadata.js";
22
+ export { computeOmeroFromMultiscales, computeOmeroFromNgffImage, getDefaultColors, GLASBEY_COLORS, } from "./utils/compute_omero.js";
22
23
  // Browser-compatible I/O modules
23
24
  // Note: Uses browser-specific versions that don't import @zarrita/storage
24
25
  // (which contains Node.js-specific modules like node:fs, node:buffer, node:path)
@@ -1 +1 @@
1
- {"version":3,"file":"browser-mod.js","sourceRoot":"","sources":["../src/browser-mod.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,+BAA+B;AAC/B,oCAAoC;AACpC,wEAAwE;AACxE,EAAE;AACF,kFAAkF;AAClF,yEAAyE;AACzE,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,iCAAiC;AACjC,0EAA0E;AAC1E,iFAAiF;AACjF,OAAO,EACL,YAAY,GAGb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,SAAS,EACT,UAAU,EAEV,aAAa,GAEd,MAAM,8BAA8B,CAAC;AAEtC,gBAAgB;AAChB,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,wCAAwC;AACxC,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"browser-mod.js","sourceRoot":"","sources":["../src/browser-mod.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,+BAA+B;AAC/B,oCAAoC;AACpC,wEAAwE;AACxE,EAAE;AACF,kFAAkF;AAClF,yEAAyE;AACzE,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,gBAAgB,EAChB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAMlC,iCAAiC;AACjC,0EAA0E;AAC1E,iFAAiF;AACjF,OAAO,EACL,YAAY,GAGb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,SAAS,EACT,UAAU,EAEV,aAAa,GAEd,MAAM,8BAA8B,CAAC;AAEtC,gBAAgB;AAChB,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,wCAAwC;AACxC,cAAc,qCAAqC,CAAC"}
package/esm/mod.d.ts CHANGED
@@ -16,6 +16,8 @@ export { isValidDimension, isValidUnit, validateMetadata, } from "./utils/valida
16
16
  export { createAxis, createDataset, createMetadata, createMultiscales, createNgffImage, } from "./utils/factory.js";
17
17
  export { getMethodMetadata } from "./utils/method_metadata.js";
18
18
  export { detectVersion, extractMethodMetadata, parseOmero, } from "./utils/parse_metadata.js";
19
+ export { computeOmeroFromMultiscales, computeOmeroFromNgffImage, getDefaultColors, GLASBEY_COLORS, } from "./utils/compute_omero.js";
20
+ export type { ComputeOmeroFromMultiscalesOptions, ComputeOmeroOptions, } from "./utils/compute_omero.js";
19
21
  export { fromZarrAttrsV04, fromZarrAttrsV05 } from "./utils/from_zarr_attrs.js";
20
22
  export * from "./io/from_ngff_zarr.js";
21
23
  export * from "./io/to_ngff_zarr.js";
package/esm/mod.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAEA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAE9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,UAAU,GACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEhF,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,aAAa,CAAC;AAG5B,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAEA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAE9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,UAAU,GACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,gBAAgB,EAChB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,kCAAkC,EAClC,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEhF,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,aAAa,CAAC;AAG5B,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC"}
package/esm/mod.js CHANGED
@@ -18,6 +18,7 @@ export { isValidDimension, isValidUnit, validateMetadata, } from "./utils/valida
18
18
  export { createAxis, createDataset, createMetadata, createMultiscales, createNgffImage, } from "./utils/factory.js";
19
19
  export { getMethodMetadata } from "./utils/method_metadata.js";
20
20
  export { detectVersion, extractMethodMetadata, parseOmero, } from "./utils/parse_metadata.js";
21
+ export { computeOmeroFromMultiscales, computeOmeroFromNgffImage, getDefaultColors, GLASBEY_COLORS, } from "./utils/compute_omero.js";
21
22
  export { fromZarrAttrsV04, fromZarrAttrsV05 } from "./utils/from_zarr_attrs.js";
22
23
  export * from "./io/from_ngff_zarr.js";
23
24
  export * from "./io/to_ngff_zarr.js";
package/esm/mod.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,+BAA+B;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAE9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,UAAU,GACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEhF,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AAEjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,aAAa,CAAC;AAE5B,gBAAgB;AAChB,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,+BAA+B;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAE9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,UAAU,GACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,gBAAgB,EAChB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAKlC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEhF,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AAEjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,aAAa,CAAC;AAE5B,gBAAgB;AAChB,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,89 @@
1
+ import type { NgffImage } from "../types/ngff_image.js";
2
+ import type { Multiscales } from "../types/multiscales.js";
3
+ import type { Omero } from "../types/zarr_metadata.js";
4
+ /**
5
+ * Glasbey color palette from colorcet's glasbey_hv.
6
+ * Extended from HoloViews default colors using the Glasbey algorithm
7
+ * for maximum distinguishability across 256 categorical colors.
8
+ * See: https://colorcet.holoviz.org/user_guide/Categorical.html
9
+ */
10
+ export declare const GLASBEY_COLORS: readonly string[];
11
+ /**
12
+ * Get default colors for channels.
13
+ *
14
+ * For a single channel, returns white (FFFFFF).
15
+ * For multiple channels, uses the Glasbey color progression.
16
+ */
17
+ export declare function getDefaultColors(nChannels: number): string[];
18
+ /**
19
+ * Options for computing OMERO metadata.
20
+ */
21
+ export interface ComputeOmeroOptions {
22
+ /** Tuple of (low, high) quantile values for the display window. Default is [0.02, 0.98]. */
23
+ quantiles?: [number, number];
24
+ /** Optional list of hex color strings (without #) for each channel. */
25
+ colors?: string[];
26
+ /** Optional list of label strings for each channel. */
27
+ labels?: string[];
28
+ }
29
+ /**
30
+ * Compute OMERO metadata from an NgffImage.
31
+ *
32
+ * This function computes visualization parameters (OMERO metadata) from image data:
33
+ * - min/max: The actual data range
34
+ * - start/end: Display window based on quantiles (default 2% and 98%)
35
+ *
36
+ * For multi-channel images (with 'c' dimension), statistics are computed
37
+ * separately for each channel, resulting in per-channel OMERO windows.
38
+ *
39
+ * Memory requirements: This function loads the entire image data into memory
40
+ * for statistics computation. For large images, use the lowest resolution
41
+ * image from a multiscales pyramid.
42
+ *
43
+ * Edge cases:
44
+ * - If all values in a channel are NaN, the statistics will be NaN.
45
+ * - If a channel has constant values, min/max/start/end will all be the same.
46
+ *
47
+ * @param image - The NgffImage to compute metadata for
48
+ * @param options - Optional configuration for quantiles, colors, and labels
49
+ * - quantiles: Tuple of (low, high) quantile values. Must be between 0 and 1,
50
+ * with low < high. Default is [0.02, 0.98] for 2% and 98% quantiles.
51
+ * - colors: List of hex color strings (without #) for each channel.
52
+ * Must be 6-digit hexadecimal strings (e.g., "FF0000" for red).
53
+ * If not provided, uses white for single channel or Glasbey
54
+ * progression for multi-channel.
55
+ * - labels: List of label strings for each channel.
56
+ * If not provided, uses empty strings.
57
+ * @returns Promise resolving to Omero metadata with computed window parameters
58
+ * @throws {Error} If quantiles are invalid, colors are invalid format,
59
+ * or not enough colors/labels provided.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * const omero = await computeOmeroFromNgffImage(image);
64
+ * multiscales.metadata.omero = omero;
65
+ * ```
66
+ */
67
+ export declare function computeOmeroFromNgffImage(image: NgffImage, options?: ComputeOmeroOptions): Promise<Omero>;
68
+ /**
69
+ * Options for computing OMERO metadata from multiscales.
70
+ */
71
+ export interface ComputeOmeroFromMultiscalesOptions extends ComputeOmeroOptions {
72
+ /**
73
+ * If true (default), use the lowest resolution (smallest) image for faster computation.
74
+ * If false, use the highest resolution (largest) image for more accurate statistics.
75
+ */
76
+ useLowestResolution?: boolean;
77
+ }
78
+ /**
79
+ * Compute OMERO metadata from a Multiscales object.
80
+ *
81
+ * This is a convenience function that computes OMERO metadata from the
82
+ * highest or lowest resolution image in a multiscales pyramid.
83
+ *
84
+ * @param multiscales - The Multiscales object to compute metadata for
85
+ * @param options - Optional configuration for quantiles, colors, labels, and resolution
86
+ * @returns Promise resolving to Omero metadata with computed window parameters
87
+ */
88
+ export declare function computeOmeroFromMultiscales(multiscales: Multiscales, options?: ComputeOmeroFromMultiscalesOptions): Promise<Omero>;
89
+ //# sourceMappingURL=compute_omero.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute_omero.d.ts","sourceRoot":"","sources":["../../src/utils/compute_omero.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EACV,KAAK,EAGN,MAAM,2BAA2B,CAAC;AAEnC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAiQlC,CAAC;AAEX;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAS5D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4FAA4F;IAC5F,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAwJD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,KAAK,CAAC,CAqFhB;AAED;;GAEG;AACH,MAAM,WAAW,kCACf,SAAQ,mBAAmB;IAC3B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,KAAK,CAAC,CAwBhB"}
@@ -0,0 +1,541 @@
1
+ // SPDX-FileCopyrightText: Copyright (c) Fideus Labs LLC
2
+ // SPDX-License-Identifier: MIT
3
+ /**
4
+ * Compute OMERO metadata from NgffImage data.
5
+ */
6
+ import * as zarr from "zarrita";
7
+ /**
8
+ * Glasbey color palette from colorcet's glasbey_hv.
9
+ * Extended from HoloViews default colors using the Glasbey algorithm
10
+ * for maximum distinguishability across 256 categorical colors.
11
+ * See: https://colorcet.holoviz.org/user_guide/Categorical.html
12
+ */
13
+ export const GLASBEY_COLORS = [
14
+ "30A2DA",
15
+ "FC4F30",
16
+ "E5AE38",
17
+ "6D904F",
18
+ "8B8B8B",
19
+ "17BECF",
20
+ "9467BD",
21
+ "D62728",
22
+ "1F77B4",
23
+ "E377C2",
24
+ "8C564B",
25
+ "BCBD22",
26
+ "3A0183",
27
+ "004300",
28
+ "0FFFA9",
29
+ "5E0040",
30
+ "C6BDFF",
31
+ "425052",
32
+ "B80080",
33
+ "FFB7B3",
34
+ "7D0200",
35
+ "6126FF",
36
+ "FFFF9A",
37
+ "AEC9AB",
38
+ "00867C",
39
+ "553A00",
40
+ "94FCFF",
41
+ "00BF00",
42
+ "7D00A0",
43
+ "AB7200",
44
+ "91FF00",
45
+ "01BE8A",
46
+ "00457B",
47
+ "C8826F",
48
+ "FF1F83",
49
+ "DD00FF",
50
+ "057400",
51
+ "644461",
52
+ "888FFF",
53
+ "FFB6F4",
54
+ "536237",
55
+ "CE85FF",
56
+ "686A84",
57
+ "BEB4BE",
58
+ "A56089",
59
+ "95D3FF",
60
+ "0100F8",
61
+ "FF8002",
62
+ "8B2945",
63
+ "ADA06D",
64
+ "53458B",
65
+ "C8FFD9",
66
+ "AA4600",
67
+ "FF798F",
68
+ "83D371",
69
+ "909EBF",
70
+ "9400F5",
71
+ "EBD09B",
72
+ "AD8BB1",
73
+ "00634A",
74
+ "FFDC00",
75
+ "887751",
76
+ "7EABA3",
77
+ "000097",
78
+ "F500C6",
79
+ "653329",
80
+ "006678",
81
+ "04E3C8",
82
+ "A737AE",
83
+ "C5DBE1",
84
+ "4D6EFF",
85
+ "9B9301",
86
+ "CD586B",
87
+ "EFDEFE",
88
+ "795A00",
89
+ "5F889A",
90
+ "B4FF92",
91
+ "5E726B",
92
+ "520066",
93
+ "058751",
94
+ "84206F",
95
+ "3C9605",
96
+ "657300",
97
+ "F1A06C",
98
+ "5F5045",
99
+ "BD004A",
100
+ "D06827",
101
+ "D796AB",
102
+ "895DFF",
103
+ "826C76",
104
+ "2B55B9",
105
+ "6E7CBB",
106
+ "E7D5D3",
107
+ "5D0018",
108
+ "7C3B01",
109
+ "80B17D",
110
+ "C8D97D",
111
+ "00E83B",
112
+ "7CB2FF",
113
+ "FF55FF",
114
+ "A42721",
115
+ "1DE4FF",
116
+ "7DAF3B",
117
+ "7B4B91",
118
+ "E0FF48",
119
+ "6B00C4",
120
+ "CDA897",
121
+ "BE63C4",
122
+ "89CDCE",
123
+ "4603C8",
124
+ "5E9279",
125
+ "414A01",
126
+ "05A79D",
127
+ "CF8C37",
128
+ "FFF8D0",
129
+ "435471",
130
+ "B544FF",
131
+ "CF4993",
132
+ "CFA4DF",
133
+ "94D400",
134
+ "A794DA",
135
+ "2DA558",
136
+ "8DE3B6",
137
+ "A4A99D",
138
+ "6C5CB7",
139
+ "FF7E5E",
140
+ "A7838A",
141
+ "AFBED8",
142
+ "2AC4FF",
143
+ "A6683D",
144
+ "F691FE",
145
+ "874B64",
146
+ "FF0C4B",
147
+ "215E23",
148
+ "4292FF",
149
+ "87839D",
150
+ "672D45",
151
+ "B14F41",
152
+ "004E53",
153
+ "5F1B00",
154
+ "AD4167",
155
+ "503267",
156
+ "D6FFFD",
157
+ "7FB5D1",
158
+ "A9B969",
159
+ "FF96CB",
160
+ "C87495",
161
+ "365039",
162
+ "FFD063",
163
+ "5E5862",
164
+ "879476",
165
+ "A978FF",
166
+ "03C863",
167
+ "E7BED4",
168
+ "D4E3D0",
169
+ "876790",
170
+ "897C27",
171
+ "CDDCFF",
172
+ "AA676B",
173
+ "323474",
174
+ "FF5EA9",
175
+ "009BB0",
176
+ "71FFDD",
177
+ "785C38",
178
+ "50659B",
179
+ "CC00B3",
180
+ "577B55",
181
+ "516E7B",
182
+ "015F92",
183
+ "AABDBE",
184
+ "017F99",
185
+ "04DD97",
186
+ "873A2C",
187
+ "F0968E",
188
+ "75C6AA",
189
+ "70695D",
190
+ "CCDC09",
191
+ "AF8557",
192
+ "D80075",
193
+ "9D3F81",
194
+ "D94500",
195
+ "DD6754",
196
+ "5FFF79",
197
+ "D5B173",
198
+ "62265E",
199
+ "BAA23D",
200
+ "D9F2B3",
201
+ "57028F",
202
+ "A19BAA",
203
+ "4D4A27",
204
+ "A4A9FF",
205
+ "ACE8DB",
206
+ "995901",
207
+ "AC00E2",
208
+ "47822F",
209
+ "CBC3AD",
210
+ "00C5B6",
211
+ "615378",
212
+ "336D68",
213
+ "A59280",
214
+ "8499A2",
215
+ "FD5764",
216
+ "7096D2",
217
+ "728D07",
218
+ "7F004C",
219
+ "1530A0",
220
+ "D1C1E2",
221
+ "C985D0",
222
+ "6C454B",
223
+ "7F0024",
224
+ "00A279",
225
+ "B2A9CF",
226
+ "F90000",
227
+ "B0E9FF",
228
+ "939E50",
229
+ "727A82",
230
+ "D92E55",
231
+ "476101",
232
+ "0059FF",
233
+ "7740B5",
234
+ "ACE460",
235
+ "674525",
236
+ "525D51",
237
+ "957368",
238
+ "A9E49A",
239
+ "A30058",
240
+ "D962F6",
241
+ "8E7DCF",
242
+ "FFBD93",
243
+ "A30092",
244
+ "9AFFB9",
245
+ "A7C2FF",
246
+ "F46200",
247
+ "E5F0FF",
248
+ "B89CA4",
249
+ "609694",
250
+ "FF9F35",
251
+ "8C2900",
252
+ "726B32",
253
+ "DF824E",
254
+ "AF7BD5",
255
+ "BC2D00",
256
+ "7B6FA3",
257
+ "484362",
258
+ "C7A3FF",
259
+ "004D28",
260
+ "C4C68E",
261
+ "E048D7",
262
+ "E7E965",
263
+ "E5C10B",
264
+ "00F4F1",
265
+ "9F5BA2",
266
+ "4C41B7",
267
+ "65338E",
268
+ "767E6C",
269
+ "A98A36",
270
+ ];
271
+ /**
272
+ * Get default colors for channels.
273
+ *
274
+ * For a single channel, returns white (FFFFFF).
275
+ * For multiple channels, uses the Glasbey color progression.
276
+ */
277
+ export function getDefaultColors(nChannels) {
278
+ if (nChannels === 1) {
279
+ return ["FFFFFF"];
280
+ }
281
+ // Cycle through Glasbey colors if we have more channels than colors
282
+ return Array.from({ length: nChannels }, (_, i) => GLASBEY_COLORS[i % GLASBEY_COLORS.length]);
283
+ }
284
+ /**
285
+ * Validate that quantiles are in valid range and properly ordered.
286
+ */
287
+ function validateQuantiles(quantiles) {
288
+ const [low, high] = quantiles;
289
+ if (!(low >= 0.0 && low <= 1.0)) {
290
+ throw new Error(`Low quantile must be between 0 and 1, got ${low}`);
291
+ }
292
+ if (!(high >= 0.0 && high <= 1.0)) {
293
+ throw new Error(`High quantile must be between 0 and 1, got ${high}`);
294
+ }
295
+ if (low >= high) {
296
+ throw new Error(`Low quantile must be less than high quantile, got (${low}, ${high})`);
297
+ }
298
+ }
299
+ /**
300
+ * Validate that a color is a valid 6-digit hexadecimal string.
301
+ */
302
+ function validateColor(color) {
303
+ const hexPattern = /^[0-9A-Fa-f]{6}$/;
304
+ if (!hexPattern.test(color)) {
305
+ throw new Error(`Color must be a 6-digit hexadecimal string without # prefix, got '${color}'`);
306
+ }
307
+ }
308
+ /**
309
+ * Maximum sample size for approximate quantile computation.
310
+ * For datasets larger than this, we use reservoir sampling for memory efficiency.
311
+ */
312
+ const QUANTILE_SAMPLE_SIZE = 10_000;
313
+ /**
314
+ * Helper function to compute quantile from a sorted array.
315
+ */
316
+ function computeQuantile(sortedValues, q) {
317
+ if (sortedValues.length === 0) {
318
+ return NaN;
319
+ }
320
+ if (sortedValues.length === 1) {
321
+ return sortedValues[0];
322
+ }
323
+ const index = q * (sortedValues.length - 1);
324
+ const lower = Math.floor(index);
325
+ const upper = Math.ceil(index);
326
+ const weight = index - lower;
327
+ if (lower === upper) {
328
+ return sortedValues[lower];
329
+ }
330
+ return sortedValues[lower] * (1 - weight) + sortedValues[upper] * weight;
331
+ }
332
+ /**
333
+ * Compute channel statistics (min, max, and quantiles) from array data.
334
+ *
335
+ * For large datasets (>10,000 non-NaN values), uses reservoir sampling
336
+ * to compute approximate quantiles with reduced memory footprint.
337
+ * Min and max are always exact.
338
+ */
339
+ function computeChannelStatistics(data, quantiles) {
340
+ let min = Number.POSITIVE_INFINITY;
341
+ let max = Number.NEGATIVE_INFINITY;
342
+ // Reservoir sample for approximate quantile computation
343
+ const sample = [];
344
+ let count = 0;
345
+ for (let i = 0; i < data.length; i++) {
346
+ const v = data[i];
347
+ if (Number.isNaN(v)) {
348
+ continue;
349
+ }
350
+ // Update min and max (always exact)
351
+ if (v < min)
352
+ min = v;
353
+ if (v > max)
354
+ max = v;
355
+ // Update reservoir sample for quantiles
356
+ if (sample.length < QUANTILE_SAMPLE_SIZE) {
357
+ sample.push(v);
358
+ }
359
+ else {
360
+ // Reservoir sampling: replace random element with probability QUANTILE_SAMPLE_SIZE/(count+1)
361
+ const j = Math.floor(Math.random() * (count + 1));
362
+ if (j < QUANTILE_SAMPLE_SIZE) {
363
+ sample[j] = v;
364
+ }
365
+ }
366
+ count++;
367
+ }
368
+ if (count === 0) {
369
+ return { min: NaN, max: NaN, qLow: NaN, qHigh: NaN };
370
+ }
371
+ // Sort sample for quantile computation
372
+ sample.sort((a, b) => a - b);
373
+ const qLow = computeQuantile(sample, quantiles[0]);
374
+ const qHigh = computeQuantile(sample, quantiles[1]);
375
+ return { min, max, qLow, qHigh };
376
+ }
377
+ /**
378
+ * Extract a single channel from multi-dimensional typed array data.
379
+ */
380
+ function extractChannel(data, shape, channelIndex, channelDimIndex) {
381
+ const nChannels = shape[channelDimIndex];
382
+ const result = [];
383
+ // Calculate the stride for the channel dimension
384
+ let channelStride = 1;
385
+ for (let i = channelDimIndex + 1; i < shape.length; i++) {
386
+ channelStride *= shape[i];
387
+ }
388
+ // Calculate the total size of dimensions before the channel dimension
389
+ let outerSize = 1;
390
+ for (let i = 0; i < channelDimIndex; i++) {
391
+ outerSize *= shape[i];
392
+ }
393
+ // Extract all values for this channel
394
+ for (let outer = 0; outer < outerSize; outer++) {
395
+ const outerOffset = outer * nChannels * channelStride;
396
+ const channelOffset = outerOffset + channelIndex * channelStride;
397
+ for (let inner = 0; inner < channelStride; inner++) {
398
+ result.push(data[channelOffset + inner]);
399
+ }
400
+ }
401
+ return result;
402
+ }
403
+ /**
404
+ * Compute OMERO metadata from an NgffImage.
405
+ *
406
+ * This function computes visualization parameters (OMERO metadata) from image data:
407
+ * - min/max: The actual data range
408
+ * - start/end: Display window based on quantiles (default 2% and 98%)
409
+ *
410
+ * For multi-channel images (with 'c' dimension), statistics are computed
411
+ * separately for each channel, resulting in per-channel OMERO windows.
412
+ *
413
+ * Memory requirements: This function loads the entire image data into memory
414
+ * for statistics computation. For large images, use the lowest resolution
415
+ * image from a multiscales pyramid.
416
+ *
417
+ * Edge cases:
418
+ * - If all values in a channel are NaN, the statistics will be NaN.
419
+ * - If a channel has constant values, min/max/start/end will all be the same.
420
+ *
421
+ * @param image - The NgffImage to compute metadata for
422
+ * @param options - Optional configuration for quantiles, colors, and labels
423
+ * - quantiles: Tuple of (low, high) quantile values. Must be between 0 and 1,
424
+ * with low < high. Default is [0.02, 0.98] for 2% and 98% quantiles.
425
+ * - colors: List of hex color strings (without #) for each channel.
426
+ * Must be 6-digit hexadecimal strings (e.g., "FF0000" for red).
427
+ * If not provided, uses white for single channel or Glasbey
428
+ * progression for multi-channel.
429
+ * - labels: List of label strings for each channel.
430
+ * If not provided, uses empty strings.
431
+ * @returns Promise resolving to Omero metadata with computed window parameters
432
+ * @throws {Error} If quantiles are invalid, colors are invalid format,
433
+ * or not enough colors/labels provided.
434
+ *
435
+ * @example
436
+ * ```ts
437
+ * const omero = await computeOmeroFromNgffImage(image);
438
+ * multiscales.metadata.omero = omero;
439
+ * ```
440
+ */
441
+ export async function computeOmeroFromNgffImage(image, options = {}) {
442
+ const quantiles = options.quantiles ?? [0.02, 0.98];
443
+ // Validate quantiles
444
+ validateQuantiles(quantiles);
445
+ const dims = image.dims;
446
+ const shape = image.data.shape;
447
+ // Check if there's a channel dimension
448
+ const hasChannelDim = dims.includes("c");
449
+ const cIndex = hasChannelDim ? dims.indexOf("c") : -1;
450
+ const nChannels = hasChannelDim ? shape[cIndex] : 1;
451
+ // Get colors
452
+ let channelColors;
453
+ if (options.colors !== undefined) {
454
+ if (options.colors.length < nChannels) {
455
+ throw new Error(`Not enough colors provided. Got ${options.colors.length}, need ${nChannels}.`);
456
+ }
457
+ // Validate each color
458
+ for (const color of options.colors.slice(0, nChannels)) {
459
+ validateColor(color);
460
+ }
461
+ channelColors = options.colors.slice(0, nChannels);
462
+ }
463
+ else {
464
+ channelColors = getDefaultColors(nChannels);
465
+ }
466
+ // Get labels
467
+ let channelLabels;
468
+ if (options.labels !== undefined) {
469
+ if (options.labels.length < nChannels) {
470
+ throw new Error(`Not enough labels provided. Got ${options.labels.length}, need ${nChannels}.`);
471
+ }
472
+ channelLabels = options.labels.slice(0, nChannels);
473
+ }
474
+ else {
475
+ channelLabels = Array(nChannels).fill("");
476
+ }
477
+ // Read all data from the zarr array
478
+ const result = await zarr.get(image.data);
479
+ const fullData = result.data;
480
+ // Compute statistics for each channel
481
+ const channels = [];
482
+ for (let chIdx = 0; chIdx < nChannels; chIdx++) {
483
+ let channelData;
484
+ if (hasChannelDim) {
485
+ // Extract this channel's data
486
+ channelData = extractChannel(fullData, shape, chIdx, cIndex);
487
+ }
488
+ else {
489
+ channelData = fullData;
490
+ }
491
+ // Compute statistics
492
+ const stats = computeChannelStatistics(channelData, quantiles);
493
+ // Create OMERO window
494
+ const window = {
495
+ min: stats.min,
496
+ max: stats.max,
497
+ start: stats.qLow,
498
+ end: stats.qHigh,
499
+ };
500
+ // Create channel metadata
501
+ const channel = {
502
+ color: channelColors[chIdx],
503
+ window,
504
+ label: channelLabels[chIdx],
505
+ };
506
+ channels.push(channel);
507
+ }
508
+ return { channels };
509
+ }
510
+ /**
511
+ * Compute OMERO metadata from a Multiscales object.
512
+ *
513
+ * This is a convenience function that computes OMERO metadata from the
514
+ * highest or lowest resolution image in a multiscales pyramid.
515
+ *
516
+ * @param multiscales - The Multiscales object to compute metadata for
517
+ * @param options - Optional configuration for quantiles, colors, labels, and resolution
518
+ * @returns Promise resolving to Omero metadata with computed window parameters
519
+ */
520
+ export async function computeOmeroFromMultiscales(multiscales, options = {}) {
521
+ if (!multiscales.images || multiscales.images.length === 0) {
522
+ throw new Error("Multiscales has no images");
523
+ }
524
+ const useLowestResolution = options.useLowestResolution ?? true;
525
+ // Select which image to use based on resolution preference
526
+ const image = useLowestResolution
527
+ ? multiscales.images[multiscales.images.length - 1] // Last image (lowest resolution)
528
+ : multiscales.images[0]; // First image (highest resolution)
529
+ const computeOptions = {};
530
+ if (options.quantiles !== undefined) {
531
+ computeOptions.quantiles = options.quantiles;
532
+ }
533
+ if (options.colors !== undefined) {
534
+ computeOptions.colors = options.colors;
535
+ }
536
+ if (options.labels !== undefined) {
537
+ computeOptions.labels = options.labels;
538
+ }
539
+ return await computeOmeroFromNgffImage(image, computeOptions);
540
+ }
541
+ //# sourceMappingURL=compute_omero.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute_omero.js","sourceRoot":"","sources":["../../src/utils/compute_omero.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,+BAA+B;AAE/B;;GAEG;AAEH,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAShC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;I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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fideus-labs/ngff-zarr",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "TypeScript implementation of ngff-zarr for reading and writing OME-Zarr files",
5
5
  "license": "MIT",
6
6
  "type": "module",