directive @auth(required_scopes: [String!] = null, required_roles: [String!] = null) on FIELD_DEFINITION

type ADataset {
  id: ID!
  name: String!
  description: String
  dims: [String!]!

  """Provenance entries for this camera"""
  dataArrays(filters: DataArrayFilter, pagination: OffsetPaginationInput): [DataArray!]!
  dimDescriptors: [DimDescriptor!]!
}

input ADatasetFilter {
  scope: ScopeFilter = null
  name: StrFilterLookup
  ids: [ID!]
  store: ZarrStoreFilter
  dataset: DatasetFilter
  transformationViews: AffineTransformationViewFilter
  timepointViews: TimepointViewFilter
  notDerived: Boolean = null
  search: String = null
  owner: ID = null
  createdBefore: DateTime
  createdAfter: DateTime
  AND: ADatasetFilter
  OR: ADatasetFilter
  NOT: ADatasetFilter
  DISTINCT: Boolean
}

interface Accessor {
  id: ID!
  table: Table!
  keys: [String!]!
  minIndex: Int
  maxIndex: Int
}

input AccessorFilter {
  keys: JSON
  AND: AccessorFilter
  OR: AccessorFilter
  NOT: AccessorFilter
  DISTINCT: Boolean
}

enum AccessorKind {
  LABEL
  IMAGE
}

type AcquisitionView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  description: String
  acquiredAt: DateTime
  operator: User
}

type AffineTransformationView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  stage: Stage!
  affineMatrix: FourByFourMatrix!
  pixelSize: ThreeDVector!
  pixelSizeX: Micrometers!
  isotropic: Boolean!
  pixelSizeZ: Micrometers!
  pixelSizeY: Micrometers!
  position: ThreeDVector!
}

type AffineTransformationViewEvent {
  create: AffineTransformationView
  delete: ID
  update: AffineTransformationView
}

input AffineTransformationViewFilter {
  isGlobal: Boolean
  AND: AffineTransformationViewFilter
  OR: AffineTransformationViewFilter
  NOT: AffineTransformationViewFilter
  DISTINCT: Boolean
  stage: StageFilter
  pixelSize: FloatFilterLookup
}

input AffineTransformationViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  stage: ID = null
  affineMatrix: FourByFourMatrix!
  image: ID!
}

"""The `Any` scalar any type"""
scalar Any

"""
The `ArrayLike` scalar type represents a reference to a store previously created by the user n a datalayer
"""
scalar ArrayLike

input AssignUserPermissionInput {
  identifier: String!
  object: ID!
  user: ID!
  permissions: [String!]!
}

input AssociateInput {
  selfs: [ID!]!
  other: ID!
}

"""Beam splitter"""
type BeamSplitterElement implements OpticalElement {
  id: ID!

  """Element label"""
  label: String!

  """Element kind"""
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String
  rFraction: Float!
  tFraction: Float!
  band: Spectrum
}

"""Beam properties carried on a light edge"""
type BeamState {
  wavelengthNm: Float
  powerMw: Float
  polarization: String
  modeHint: String
}

"""State of the optical beam on a particular path segment."""
input BeamStateInput {
  wavelengthNm: Float = null
  powerMw: Float = null
  polarization: String = null
  modeHint: String = null
}

"""Temporary S3 credentials for reading a big file."""
type BigFileAccessGrant {
  status: String!
  accessKey: String!
  secretKey: String!
  sessionToken: String!
  region: String!
  bucket: String!
  key: String!
  path: String!
  expiresIn: Int!
  store: String
}

"""
A BigFileStore represents a large object stored behind the S3 datalayer.
"""
type BigFileStore {
  id: ID!
  path: String!
  bucket: String!
  key: String!
  originalFileName: String
  contentType: String

  """Get temporary S3 read credentials for the object."""
  accessGrant(host: String = null): BigFileAccessGrant!
  presignedUrl: String!
}

"""Temporary S3 credentials for uploading a big file."""
type BigFileUploadGrant {
  status: String!
  accessKey: String!
  secretKey: String!
  sessionToken: String!
  region: String!
  bucket: String!
  key: String!
  path: String!
  expiresIn: Int!
  store: String!
  maxBytes: Int!
  originalFileName: String
  uploadFileName: String!
  uploadContentType: String
  uploadFormField: String!
}

enum Blending {
  ADDITIVE
  MULTIPLICATIVE
}

"""Detector"""
type CCDElement implements OpticalElement {
  id: ID!

  """Element label"""
  label: String!

  """Element kind"""
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String
  pixelSizeUm: Float
  resolution: [Int!]
}

type Camera {
  id: ID!
  name: String!
  serialNumber: String!
  views(filters: OpticsViewFilter, pagination: OffsetPaginationInput): [OpticsView!]!
  model: String
  bitDepth: Int
  pixelSizeX: Micrometers
  pixelSizeY: Micrometers
  sensorSizeX: Int
  sensorSizeY: Int
  manufacturer: String

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
  organization: DjangoModelType!
}

input CameraFilter {
  id: ID
  name: String
  AND: CameraFilter
  OR: CameraFilter
  NOT: CameraFilter
  DISTINCT: Boolean
}

input CameraInput {
  serialNumber: String!
  name: String = null
  model: String = null
  bitDepth: Int = null
  sensorSizeX: Int = null
  sensorSizeY: Int = null
  pixelSizeX: Micrometers = null
  pixelSizeY: Micrometers = null
  manufacturer: String = null
}

input ChangeDatasetInput {
  name: String!
  parent: ID = null
  id: ID!
}

"""A channel descriptor"""
type ChannelInfo {
  label(withColorName: Boolean! = false): String!
  index: Int!
}

input ChannelInfoFilter {
  search: String = null
  ids: [ID!] = null
}

enum ChannelKind {
  FREE_SPACE
  FIBER_SM
  FIBER_MM
  WAVEGUIDE
}

type ChannelView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!

  """The name of the channel """
  name: String

  """The emission wavelength of the channel in nanometers"""
  emissionWavelength: Float

  """The excitation wavelength of the channel in nanometers"""
  excitationWavelength: Float

  """The acquisition mode of the channel"""
  acquisitionMode: String
}

input ChannelViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null

  """The emission wavelength of the channel in nanometers"""
  emissionWavelength: Float = null

  """The excitation wavelength of the channel in nanometers"""
  excitationWavelength: Float = null

  """The acquisition mode of the channel"""
  acquisitionMode: String = null

  """The name of the channel"""
  name: String = null

  """The ID of the image this view is for"""
  image: ID!
}

input ChildrenOrder {
  field: ChildrenOrderField!
  direction: ChildrenOrderDirection!
}

enum ChildrenOrderDirection {
  ASC
  DESC
}

enum ChildrenOrderField {
  CREATED_AT
  NAME
  UPDATED_AT
}

input ChildrenPaginationInput {
  limit: Int = 200
  offset: Int = 0
}

type Client {
  id: ID!
  clientId: String!
  name: String!
}

enum ColorFormat {
  RGB
  HSL
}

enum ColorMap {
  VIRIDIS
  PLASMA
  INFERNO
  MAGMA
  RED
  GREEN
  BLUE
  INTENSITY
  CYAN
  MAGENTA
  YELLOW
  BLACK
  WHITE
  ORANGE
  PURPLE
  PINK
  BROWN
  GREY
  RAINBOW
  SPECTRAL
  COOL
  WARM
}

type Constraint {
  dim: String!
  min: Int
  max: Int
  step: Int
}

enum ContinousScanDirection {
  ROW_COLUMN_SLICE
  COLUMN_ROW_SLICE
  SLICE_ROW_COLUMN
  ROW_COLUMN_SLICE_SNAKE
  COLUMN_ROW_SLICE_SNAKE
  SLICE_ROW_COLUMN_SNAKE
}

type ContinousScanView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  direction: ScanDirection!
}

input ContinousScanViewFilter {
  isGlobal: Boolean
  AND: ContinousScanViewFilter
  OR: ContinousScanViewFilter
  NOT: ContinousScanViewFilter
  DISTINCT: Boolean
  direction: ContinousScanDirection
}

input ContinousScanViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  direction: ScanDirection!
  image: ID!
}

type CoordinateAnchor {
  id: ID!
  store: ZarrStore!
  shape: [Int!]!
  chunkShape: [Int!]!
  dims: [String!]!
  optikitState: OptikitState
  valueHistogram: ValueHistogram
}

"""
Input type for a coordinate anchor, which specifies a list of dimension anchors to anchor to
"""
input CoordinateAnchorInput {
  dimAnchors: [DimAnchorInput!]!
  omeMetadata: OmeMetadataInput = null
  valueHistogram: ValueHistogramInput = null
}

"""Input type for creating an image from an array-like object"""
input CreateADatasetInput {
  scales: [ArrayLike!]!
  name: String!
  dimDescriptors: [DimensionDescriptorInput!]!
  anchors: [CoordinateAnchorInput!] = null
}

"""Input type for creating an image from an array-like object"""
input CreateDataRoiInput {
  dataset: ID!
  kind: RoiKind!
  xDim: String!
  yDim: String!
  zDim: String = null
  vectors: [ThreeDVector!]!
  slices: [SliceInput!]!
  drawnOnLens: ID = null
}

input CreateDatasetInput {
  name: String!
  parent: ID = null
}

"""Input type for creating an image from an array-like object"""
input CreateLayerInput {
  lens: ID!
  scene: ID!
  affineMatrix: [[Float!]!] = null
  colormap: ColorMap = null
  color: [Int!] = null
  climMin: Float = null
  climMax: Float = null
  xDim: String = null
  yDim: String = null
  zDim: String = null
  tDim: String = null
  intensityDim: String = null
}

"""Input type for creating an image from an array-like object"""
input CreateLensInput {
  dataset: ID!
  slices: [SliceInput!]!
}

input CreateRGBContextInput {
  name: String = null
  thumbnail: ID = null
  image: ID!
  views: [PartialRGBViewInput!] = null
  z: Int = null
  t: Int = null
  c: Int = null
}

"""Input type for creating a scene from an array-like object"""
input CreateSceneInput {
  name: String!
  blending: Blending = null
  spatialUnit: SpatialUnit = null
  temporalUnit: TemporalUnit = null
}

type DataArray {
  id: ID!
  store: ZarrStore!
  shape: [Int!]!
  chunkShape: [Int!]!
  scaleFactors: [Float!]
  level: Int!
}

input DataArrayFilter {
  id: ID
  level: IntFilterLookup
  AND: DataArrayFilter
  OR: DataArrayFilter
  NOT: DataArrayFilter
  DISTINCT: Boolean
}

type DataRoi {
  id: UUID!
  dataset: ADataset!
  name: String!
  description: String
  kind: RoiKind!
  xDim: String!
  yDim: String!
  zDim: String
  vectors: [[Float!]!]!
  vectorDims: [String!]!
  constraints: [Constraint!]!

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
}

input DataRoiFilter {
  id: ID
  name: StrFilterLookup
  dataset: IDFilterLookup
  AND: DataRoiFilter
  OR: DataRoiFilter
  NOT: DataRoiFilter
  DISTINCT: Boolean
  activeFor: [SliceInput!]
}

type Dataset {
  id: ID!
  images(filters: ImageFilter, order: ImageOrder, pagination: OffsetPaginationInput): [Image!]!
  files(filters: FileFilter, order: FileOrder, pagination: OffsetPaginationInput): [File!]!
  parent: Dataset
  children(filters: DatasetFilter, pagination: OffsetPaginationInput): [Dataset!]!
  description: String
  name: String!

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
  isDefault: Boolean!
  createdAt: DateTime!
  creator: User
  pinned: Boolean!
  tags: [String!]!
}

input DatasetChildrenFilter {
  showChildren: Boolean = null
  search: String = null
}

input DatasetFilter {
  ids: [ID!]
  search: String
  scope: ScopeFilter = null
  id: ID
  name: StrFilterLookup
  parentless: Boolean = null
  owner: ID = null
  createdBefore: DateTime
  createdAfter: DateTime
  AND: DatasetFilter
  OR: DatasetFilter
  NOT: DatasetFilter
  DISTINCT: Boolean
}

union DatasetImageFile = Dataset | Image | File

"""Date with time (isoformat)"""
scalar DateTime

input DeleteCameraInput {
  id: ID!
}

input DeleteDatasetInput {
  id: ID!
}

input DeleteEraInput {
  id: ID!
}

input DeleteFileInput {
  id: ID!
}

input DeleteImageInput {
  id: ID!
}

input DeleteInstrumentInput {
  id: ID!
}

input DeleteMeshInput {
  id: ID!
}

input DeleteMultiWellInput {
  id: ID!
}

input DeleteObjectiveInput {
  id: ID!
}

input DeleteRGBContextInput {
  id: ID!
}

input DeleteRoiInput {
  id: ID!
}

input DeleteSnaphotInput {
  id: ID!
}

input DeleteStageInput {
  id: ID!
}

input DeleteViewCollectionInput {
  id: ID!
}

input DeleteViewInput {
  id: ID!
}

type DerivedView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  originImage: Image!
  operation: String
}

type Descriptor {
  key: String!
  value: Any!
  description: String
}

input DesociateInput {
  selfs: [ID!]!
  other: ID!
}

"""Detector"""
type DetectorElement implements OpticalElement {
  id: ID!

  """Element label"""
  label: String!

  """Element kind"""
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String

  """Amplifier gain (dB)"""
  amplifierGainDb: Float

  """Overall gain (unitless)"""
  gain: Float
  nepdWPerSqrtHz: Float
}

"""
Input type for a dimension anchor, which specifies a dimension and a value to anchor to
"""
input DimAnchorInput {
  dim: String!
  value: Int!
}

type DimDescriptor {
  size: Int!

  """The key of the dimension, e.g. 'x', 'y', 'z', 'c', or 't'"""
  key: String!

  """The kind of the dimension, e.g. 'space', 'channel', or 'time'"""
  kind: DimensionKind!
}

input DimSelector {
  kind: DimSelectorKind!
  start: Int = null
  end: Int = null
  step: Int = null
  indices: [Int!] = null
  index: Int = null
}

enum DimSelectorKind {
  SLICE
  INDICES
  ALL
  INDEX
}

"""
Input type for a dimension descriptor, which specifies a key and a kind for a dimension
"""
input DimensionDescriptorInput {
  key: String!
  kind: String!
}

enum DimensionKind {
  SPACE
  CHANNEL
  TIME
  FREQUENCY
}

type DjangoModelType {
  pk: ID!
}

enum DuckDBDataType {
  """Represents a True/False value"""
  BOOLEAN

  """Very small integer (-128 to 127)"""
  TINYINT

  """Small integer (-32,768 to 32,767)"""
  SMALLINT

  """Standard integer (-2,147,483,648 to 2,147,483,647)"""
  INTEGER

  """Large integer for large numeric values"""
  BIGINT

  """Extremely large integer for very large numeric ranges"""
  HUGEINT

  """Single-precision floating point number"""
  FLOAT

  """Double-precision floating point number"""
  DOUBLE

  """Variable-length string (text)"""
  VARCHAR

  """Binary large object for storing binary data"""
  BLOB

  """Date and time with precision"""
  TIMESTAMP

  """Specific date (year, month, day)"""
  DATE

  """Specific time of the day (hours, minutes, seconds)"""
  TIME

  """Span of time between two dates or times"""
  INTERVAL

  """Exact decimal number with defined precision and scale"""
  DECIMAL

  """Universally Unique Identifier used to uniquely identify objects"""
  UUID

  """Array of variable-length strings"""
  VARCHAR_ARRAY

  """Array of double-precision floating point numbers"""
  DOUBLE_ARRAY

  """Array of large integers"""
  BIGINT_ARRAY

  """2D Array of large integers"""
  BIGINT_ARRAY_ARRAY

  """Array of boolean values"""
  BOOLEAN_ARRAY

  """Array of dates"""
  DATE_ARRAY

  """Array of times"""
  TIME_ARRAY

  """A list of values of the same data type"""
  LIST

  """A collection of key-value pairs where each key is unique"""
  MAP

  """Enumeration of predefined values"""
  ENUM

  """Composite type grouping several fields with different data types"""
  STRUCT

  """JSON object, a structured text format used for representing data"""
  JSON
}

enum ElementKind {
  LASER
  PINHOLE
  LAMP
  OTHER_SOURCE
  DETECTOR
  CCD
  MIRROR
  BEAM_SPLITTER
  LENS
  OBJECTIVE
  FILTER
  POLARIZER
  WAVEPLATE
  APERTURE
  SHUTTER
  SAMPLE
  OTHER
}

type Era {
  id: ID!
  begin: DateTime
  views(filters: TimepointViewFilter, pagination: OffsetPaginationInput): [TimepointView!]!
  name: String!

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
}

input EraFilter {
  id: ID
  begin: DateTime
  AND: EraFilter
  OR: EraFilter
  NOT: EraFilter
  DISTINCT: Boolean
}

input EraInput {
  name: String!
  begin: DateTime = null
}

"""Euler angles for 3D orientation"""
type Euler {
  rx: Float
  ry: Float
  rz: Float
}

"""Euler angles representing rotation in 3D space."""
input EulerInput {
  rx: Float = null
  ry: Float = null
  rz: Float = null
}

type Experiment {
  id: ID!
  name: String!
  description: String

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
  createdAt: DateTime!
  creator: User
}

input ExperimentFilter {
  ids: [ID!]
  search: String
  id: ID
  AND: ExperimentFilter
  OR: ExperimentFilter
  NOT: ExperimentFilter
  DISTINCT: Boolean
}

type File {
  id: ID!
  name: String!
  origins(filters: ImageFilter, order: ImageOrder, pagination: OffsetPaginationInput): [Image!]!
  store: BigFileStore!
  views: [FileView!]!

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!

  """The user who created this file"""
  creator: User!

  """The organization this file belongs to"""
  organization: Organization!
}

type FileEvent {
  create: File
  delete: ID
  update: File
  moved: File
}

input FileFilter {
  id: ID
  name: StrFilterLookup
  createdBefore: DateTime
  createdAfter: DateTime
  AND: FileFilter
  OR: FileFilter
  NOT: FileFilter
  DISTINCT: Boolean
  scope: ScopeKind
  search: String
  owner: ID
  ids: [ID!]
}

"""
The `FileLike` scalar type represents a reference to a big file storage previously created by the user n a datalayer
"""
scalar FileLike

input FileOrder {
  createdAt: Ordering
}

type FileView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  seriesIdentifier: String
  file: File!
}

input FileViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  file: ID!
  seriesIdentifier: String = null
  image: ID!
}

"""A filter"""
type FilterElement implements OpticalElement {
  id: ID!

  """Element label"""
  label: String!

  """Element kind"""
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String
}

input FinishBigFileUploadInput {
  storeId: String!
  valid: Boolean! = true
}

input FinishMediaUploadInput {
  storeId: String!
  valid: Boolean! = true
}

input FinishParquetUploadInput {
  storeId: String!
  valid: Boolean! = true
}

input FinishZarrUploadInput {
  storeId: String!
  valid: Boolean! = true
}

"""The `Vector` scalar type represents a matrix values as specified by"""
scalar FiveDVector

input FloatFilterLookup {
  exact: Float
  iExact: Float
  contains: Float
  iContains: Float
  inList: [Float!]
  gt: Float
  gte: Float
  lt: Float
  lte: Float
  startsWith: Float
  iStartsWith: Float
  endsWith: Float
  iEndsWith: Float
  range: [Float!]
  isNull: Boolean
  regex: String
  iRegex: String
}

"""
The `FourByFourMatrix` scalar type represents a matrix values as specified by
"""
scalar FourByFourMatrix

"""A channel descriptor"""
type FrameInfo {
  label: String!
}

"""Input type for creating an image from an array-like object"""
input FromArrayLikeInput {
  """The array-like object to create the image from"""
  array: ImageLike!

  """The name of the image"""
  name: String!

  """Optional dataset ID to associate the image with"""
  dataset: ID = null

  """Optional list of channel views"""
  channelViews: [PartialChannelViewInput!] = null

  """Optional list of affine transformation views"""
  transformationViews: [PartialAffineTransformationViewInput!] = null

  """Optional list of acquisition views"""
  acquisitionViews: [PartialAcquisitionViewInput!] = null

  """Optional list of mask views"""
  maskViews: [PartialMaskViewInput!] = null

  """Optional list of reference views"""
  referenceViews: [PartialReferenceViewInput!] = null

  """Optional list of instance mask views"""
  instanceMaskViews: [PartialInstanceMaskViewInput!] = null

  """Optional list of RGB views"""
  rgbViews: [PartialRGBViewInput!] = null

  """Optional list of timepoint views"""
  timepointViews: [PartialTimepointViewInput!] = null

  """Optional list of optics views"""
  opticsViews: [PartialOpticsViewInput!] = null

  """Optional list of scale views"""
  scaleViews: [PartialScaleViewInput!] = null

  """Optional list of tags to associate with the image"""
  tags: [String!] = null

  """Optional list of ROI views"""
  roiViews: [PartialROIViewInput!] = null

  """Optional list of file views"""
  fileViews: [PartialFileViewInput!] = null

  """Optional list of derived views"""
  derivedViews: [PartialDerivedViewInput!] = null

  """Optional list of lightpath views"""
  lightpathViews: [PartialLightpathViewInput!] = null
}

input FromFileLike {
  file: FileLike!
  fileName: String!
  dataset: ID = null
  origins: [ID!] = null
}

input FromParquetLike {
  """The parquet dataframe to create the table from"""
  dataframe: ParquetLike!

  """The name of the table"""
  name: String!

  """The IDs of tables this table was derived from"""
  origins: [ID!] = null

  """The dataset ID this table belongs to"""
  dataset: ID = null

  """Label accessors to create for this table"""
  labelAccessors: [PartialLabelAccessorInput!] = null

  """Image accessors to create for this table"""
  imageAccessors: [PartialImageAccessorInput!] = null
}

enum Granularity {
  HOUR
  DAY
  WEEK
  MONTH
  QUARTER
  YEAR
}

type HistogramView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  bins: [Float!]!
  min: Float!
  max: Float!
  histogram: [Float!]!
}

input HistogramViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  histogram: [Float!]!
  bins: [Float!]!
  min: Float!
  max: Float!
  image: ID!
}

"""The type of change that was made."""
enum HistoryKind {
  CREATE
  UPDATE
  DELETE
}

input IDFilterLookup {
  exact: ID
  iExact: ID
  contains: ID
  iContains: ID
  inList: [ID!]
  gt: ID
  gte: ID
  lt: ID
  lte: ID
  startsWith: ID
  iStartsWith: ID
  endsWith: ID
  iEndsWith: ID
  range: [ID!]
  isNull: Boolean
  regex: String
  iRegex: String
}

type Image {
  id: ID!

  """The name of the image"""
  name: String!

  """The store where the image data is stored."""
  store: ZarrStore!

  """All views of this image"""
  views(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!

  """Associated snapshots"""
  snapshots(filters: SnapshotFilter, pagination: OffsetPaginationInput): [Snapshot!]!

  """Associated videos"""
  videos(pagination: OffsetPaginationInput): [Video!]!

  """The dataset this image belongs to"""
  dataset: Dataset

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!

  """The affine transformation views describing position and scale"""
  affineTransformationViews(filters: AffineTransformationViewFilter, pagination: OffsetPaginationInput): [AffineTransformationView!]!

  """Label views mapping channels to labels"""
  labelViews: [LabelView!]!

  """Channel views relating to acquisition channels"""
  channelViews: [ChannelView!]!

  """Timepoint views describing temporal relationships"""
  timepointViews(filters: TimepointViewFilter, pagination: OffsetPaginationInput): [TimepointView!]!

  """Optics views describing acquisition settings"""
  opticsViews(filters: OpticsViewFilter, pagination: OffsetPaginationInput): [OpticsView!]!

  """
  Structure views relating other Arkitekt types to a subsection of the image
  """
  maskViews(filters: MaskViewFilter, pagination: OffsetPaginationInput): [MaskView!]!

  """
  Instance mask views relating other Arkitekt types to a subsection of the image
  """
  instanceMaskViews(filters: InstanceMaskViewFilter, pagination: OffsetPaginationInput): [InstanceMaskView!]!

  """Scale views describing physical dimensions"""
  scaleViews: [ScaleView!]!

  """Histogram views describing pixel value distribution"""
  histogramViews: [HistogramView!]!

  """Reference views describing relationships to other views"""
  referenceViews(filters: ReferenceViewFilter, pagination: OffsetPaginationInput): [ReferenceView!]!

  """When this image was created"""
  createdAt: DateTime!

  """Who created this image"""
  creator: User

  """RGB rendering contexts"""
  rgbContexts(filters: RGBContextFilter, pagination: OffsetPaginationInput): [RGBContext!]!

  """Scale views derived from this image"""
  derivedScaleViews: [ScaleView!]!

  """Views derived from this image"""
  derivedViews: [DerivedView!]!

  """Instance mask views"""
  derivedInstanceMaskViews(filters: InstanceMaskViewFilter, pagination: OffsetPaginationInput): [InstanceMaskView!]!

  """Region of interest views"""
  roiViews: [ROIView!]!

  """File views relating to source files"""
  fileViews: [FileView!]!

  """Views this image was derived from"""
  derivedFromViews: [DerivedView!]!

  """Lightpath views describing the lightpath used to acquire this image"""
  lightpathViews(filters: OpticsViewFilter, pagination: OffsetPaginationInput): [LightpathView!]!

  """The channels of this image"""
  channels: [ChannelInfo!]!

  """The channels of this image"""
  frames: [FrameInfo!]!

  """The channels of this image"""
  planes: [PlaneInfo!]!

  """The latest snapshot of this image"""
  latestSnapshot: Snapshot

  """Is this image pinned by the current user"""
  pinned: Boolean!

  """The tags of this image"""
  tags: [String!]!
  renders(filters: ViewFilter, types: [RenderKind!]): [Render!]!
  rois(filters: ROIFilter): [ROI!]!
}

type ImageAccessor implements Accessor {
  id: ID!
  table: Table!
  keys: [String!]!
  minIndex: Int
  maxIndex: Int
}

type ImageEvent {
  create: Image
  delete: ID
  update: Image
}

"""Numeric/aggregatable fields of Image"""
enum ImageField {
  PK
}

"""
The `ImageFileLike` scalar type represents a reference to a snapshot image previously created by the user n a datalayer
"""
scalar ImageFileLike

input ImageFilter {
  scope: ScopeFilter = null
  name: StrFilterLookup
  ids: [ID!]
  store: ZarrStoreFilter
  dataset: DatasetFilter
  transformationViews: AffineTransformationViewFilter
  timepointViews: TimepointViewFilter
  notDerived: Boolean = null
  search: String = null
  owner: ID = null
  createdBefore: DateTime
  createdAfter: DateTime
  AND: ImageFilter
  OR: ImageFilter
  NOT: ImageFilter
  DISTINCT: Boolean
}

"""
The `ImageLike` scalar type represents a reference to an image previously created by the user in a datalayer
"""
scalar ImageLike

input ImageOrder {
  createdAt: Ordering
}

type ImageStats {
  """Total number of items in the selection"""
  count: Int!

  """Number of distinct values for the field"""
  distinctCount(field: ImageField!): Int!

  """Maximum"""
  max(field: ImageField!): Float

  """Minimum"""
  min(field: ImageField!): Float

  """Average"""
  avg(field: ImageField!): Float

  """Sum"""
  sum(field: ImageField!): Float

  """Time-bucketed stats over a datetime field."""
  series(field: ImageField!, timestampField: ImageTimestampField!, by: Granularity!): [TimeBucket!]!
}

"""Datetime fields of Image for bucketing"""
enum ImageTimestampField {
  CREATED_AT
}

type InstanceMaskView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  referenceView: ReferenceView!
  labels: ParquetStore
  operation: String
}

input InstanceMaskViewFilter {
  ids: [ID!]
  search: String = null
  id: ID
  image: ID = null
  AND: InstanceMaskViewFilter
  OR: InstanceMaskViewFilter
  NOT: InstanceMaskViewFilter
  DISTINCT: Boolean
}

input InstanceMaskViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  referenceView: ID = null
  labels: LabelsLike = null
  image: ID!
}

type InstanceMaskViewLabel {
  mask: InstanceMaskView!
  values: Any!
  id: String!
}

type Instrument {
  id: ID!
  name: String!
  model: String
  serialNumber: String!
  views(filters: OpticsViewFilter, pagination: OffsetPaginationInput): [OpticsView!]!
  manufacturer: String
  organization: DjangoModelType!
}

input InstrumentFilter {
  id: ID
  name: String
  AND: InstrumentFilter
  OR: InstrumentFilter
  NOT: InstrumentFilter
  DISTINCT: Boolean
}

input InstrumentInput {
  serialNumber: String!
  manufacturer: String = null
  name: String = null
  model: String = null
}

input IntFilterLookup {
  exact: Int
  iExact: Int
  contains: Int
  iContains: Int
  inList: [Int!]
  gt: Int
  gte: Int
  lt: Int
  lte: Int
  startsWith: Int
  iStartsWith: Int
  endsWith: Int
  iEndsWith: Int
  range: [Int!]
  isNull: Boolean
  regex: String
  iRegex: String
}

"""
The `JSON` scalar type represents JSON values as specified by [ECMA-404](https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf).
"""
scalar JSON @specifiedBy(url: "https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf")

type LabelAccessor implements Accessor {
  id: ID!
  table: Table!
  keys: [String!]!
  minIndex: Int
  maxIndex: Int
  maskView: MaskView!
}

type LabelView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  label: String!
}

input LabelViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  label: String!
  image: ID!
}

"""
The `LabelsLike` scalar type represents a reference to a labels object previously created by the user n a datalayer
"""
scalar LabelsLike

"""Light source"""
type LampElement implements OpticalElement {
  id: ID!

  """Element label"""
  label: String!

  """Element kind"""
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String
  channel: ChannelKind
  lampType: String
}

"""Light source"""
type LaserElement implements OpticalElement {
  id: ID!

  """Element label"""
  label: String!

  """Element kind"""
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String
  nominalWavelengthNm: Float
  powerMw: Float
  channel: ChannelKind
  laserMedium: String
  pulseKind: PulseKind
  repetitionRateHz: Float
  hasPockelsCell: Boolean
  hasQSwitch: Boolean
}

type Layer {
  id: ID!
  lens: Lens!
  scene: Scene!
  status: PlacementStatus!
  affineMatrix: FourByFourMatrix
  climMin: Float
  climMax: Float
  color: [Int!]
  colormap: ColorMap
  xDim: String!
  yDim: String!
  intensityDim: String!
  zDim: String
  tDim: String
}

input LayerFilter {
  id: ID
  name: StrFilterLookup
  description: StrFilterLookup
  AND: LayerFilter
  OR: LayerFilter
  NOT: LayerFilter
  DISTINCT: Boolean
}

type Lens {
  id: ID!
  dataset: ADataset!
  dims: [String!]!
  dimCount: Int!
  shape: [Int!]!
  size: Int!
  dimDescriptors: [DimDescriptor!]!
  slices: [Slice!]!
  activeAnchors: [CoordinateAnchor!]!
}

"""Thin lens"""
type LensElement implements OpticalElement {
  id: ID!

  """Element label"""
  label: String!

  """Element kind"""
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String
  focalLengthMm: Float!
}

input LensFilter {
  id: ID
  name: StrFilterLookup
  AND: LensFilter
  OR: LensFilter
  NOT: LensFilter
  DISTINCT: Boolean
}

"""Directed edge connecting two ports"""
type LightEdge {
  id: ID!
  sourceElementId: ID!
  sourcePortId: ID!
  targetElementId: ID!
  targetPortId: ID!
  pathLengthMm: Float
  medium: String
  lossDb: Float
  beam: BeamState
}

"""Input for connecting two optical ports."""
input LightEdgeInput {
  id: String!
  sourceElementId: ID!
  sourcePortId: ID!
  targetElementId: ID!
  targetPortId: ID!
  pathLengthMm: Float = null
  medium: String = "AIR"
  lossDb: Float = 0
  beam: BeamStateInput = null
}

"""Optical port on an element"""
type LightPort {
  id: ID!
  name: String!
  role: PortRole!
  channel: ChannelKind!
  spectrum: Spectrum
  maxIncomingEdges: Int
}

"""Input definition for an optical port on an element."""
input LightPortInput {
  id: ID!
  name: String!
  role: PortRole!
  channel: ChannelKind! = FREE_SPACE
  spectrum: SpectrumInput = null
}

"""Graph of optical elements and edges"""
type LightpathGraph {
  elements: [OpticalElement!]!
  edges: [LightEdge!]!
}

"""Bulk input for a full lightpath graph, including elements and edges."""
input LightpathGraphInput {
  elements: [OpticalElementInput!]!
  edges: [LightEdgeInput!]!
}

type LightpathView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!

  """
  The lightpath graph describing the lightpath used to acquire this image
  """
  graph: LightpathGraph!
}

type MaskView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  referenceView: ReferenceView!
  labels: ParquetStore
}

input MaskViewFilter {
  ids: [ID!]
  search: String = null
  id: ID
  image: ID = null
  AND: MaskViewFilter
  OR: MaskViewFilter
  NOT: MaskViewFilter
  DISTINCT: Boolean
}

input MaskViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  referenceView: ID = null
  labels: LabelsLike = null
  image: ID!
}

type MaskedPixelInfo {
  label: String!
  color: String!
}

"""Temporary S3 credentials for reading a media object."""
type MediaAccessGrant {
  status: String!
  accessKey: String!
  secretKey: String!
  sessionToken: String!
  region: String!
  bucket: String!
  key: String!
  path: String!
  expiresIn: Int!
  store: String
}

type MediaStore {
  id: ID!
  path: String!
  bucket: String!
  key: String!
  originalFileName: String
  contentType: String

  """Get temporary S3 read credentials for the media object."""
  accessGrant(host: String = null): MediaAccessGrant!

  """Compatibility field returning the canonical S3 object path."""
  presignedUrl(host: String = null): String!
}

"""A presigned PUT grant for uploading a media object."""
type MediaUploadGrant {
  status: String!
  accessKey: String!
  secretKey: String!
  sessionToken: String!
  region: String!
  bucket: String!
  key: String!
  path: String!
  expiresIn: Int!
  store: String!
  maxBytes: Int!
  originalFileName: String
  uploadFileName: String!
  uploadContentType: String
  uploadFormField: String!
}

type Membership {
  id: ID!
  user: User!
  organization: Organization!
  roles: [String!]!
  isActive: Boolean!
  datasets(filters: DatasetFilter, pagination: OffsetPaginationInput): [Dataset!]!
}

type Mesh {
  id: ID!
  name: String!
  store: BigFileStore!
}

input MeshFilter {
  ids: [ID!]
  search: String
  id: ID
  AND: MeshFilter
  OR: MeshFilter
  NOT: MeshFilter
  DISTINCT: Boolean
}

input MeshInput {
  mesh: MeshLike!
  name: String!
}

"""
The `MeshLike` scalar type represents a reference to a mesh previously created by the user n a datalayer
"""
scalar MeshLike

"""Schema for unstructured metadata attached to a file."""
type MetaSchema {
  id: ID!
  name: String!
  schema: Any!
}

"""The `MetricMap` scalar type represents a matrix values as specified by"""
scalar MetricMap

"""
The `Micrometers` scalar type represents a matrix valuesas specified by
"""
scalar Micrometers

"""The `Matrix` scalar type represents a matrix values as specified by"""
scalar Milliseconds

"""Mirror"""
type MirrorElement implements OpticalElement {
  id: ID!

  """Element label"""
  label: String!

  """Element kind"""
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String
  angleDeg: Float
  band: Spectrum
}

"""A change made to a model."""
type ModelChange {
  """The field that was changed."""
  field: String!

  """The old value of the field."""
  oldValue: String

  """The new value of the field."""
  newValue: String
}

type MultiWellPlate {
  id: ID!
  views(filters: WellPositionViewFilter, pagination: OffsetPaginationInput): [WellPositionView!]!
  name: String
  description: String
  rows: Int
  columns: Int
}

input MultiWellPlateFilter {
  ids: [ID!]
  search: String
  id: ID
  AND: MultiWellPlateFilter
  OR: MultiWellPlateFilter
  NOT: MultiWellPlateFilter
  DISTINCT: Boolean
}

input MultiWellPlateInput {
  name: String!
  columns: Int = null
  rows: Int = null
}

type Mutation {
  """Relate an image to a dataset"""
  relateToDataset(id: ID!, other: ID!): Image!

  """Create a new view for affine transformation data"""
  createAffineTransformationView(input: AffineTransformationViewInput!): AffineTransformationView!

  """Create a new view for histogram data"""
  createHistogramView(input: HistogramViewInput!): HistogramView!

  """Upload media and return a URL for access"""
  requestMediaUpload(input: RequestMediaUploadInput!): MediaUploadGrant!

  """Finalize a media upload after the client has written the object"""
  finishMediaUpload(input: FinishMediaUploadInput!): MediaStore!

  """Request temporary S3 read credentials for a media file"""
  requestMediaAccess(input: RequestMediaAccessInput!): MediaAccessGrant!

  """Request an upload grant for a big file store"""
  requestBigfileUpload(input: RequestBigFileUploadInput!): BigFileUploadGrant!

  """Finalize a big file upload after the client has written the object"""
  finishBigfileUpload(input: FinishBigFileUploadInput!): BigFileStore!

  """Request temporary S3 read credentials for a big file"""
  requestBigfileAccess(input: RequestBigFileAccessInput!): BigFileAccessGrant!

  """Request an upload grant for a Zarr store"""
  requestZarrUpload(input: RequestZarrUploadInput!): ZarrUploadGrant!

  """Finalize a Zarr upload after the client has written the object"""
  finishZarrUpload(input: FinishZarrUploadInput!): ZarrStore!

  """Request temporary S3 read credentials for a Zarr store"""
  requestZarrAccess(input: RequestZarrAccessInput!): ZarrAccessGrant!

  """Request an upload grant for a Parquet store"""
  requestParquetUpload(input: RequestParquetUploadInput!): ParquetUploadGrant!

  """Finalize a Parquet upload after the client has written the object"""
  finishParquetUpload(input: FinishParquetUploadInput!): ParquetStore!

  """Request temporary S3 read credentials for a Parquet file"""
  requestParquetAccess(input: RequestParquetAccessInput!): ParquetAccessGrant!

  """Create an image from array-like data"""
  fromArrayLike(input: FromArrayLikeInput!): Image!

  """Pin an image for quick access"""
  pinImage(input: PinImageInput!): Image!

  """Update an existing image's metadata"""
  updateImage(input: UpdateImageInput!): Image!

  """Delete an existing image"""
  deleteImage(input: DeleteImageInput!): ID!

  """
  Create a new dataset from array-like data with optional choordinate anchors and OME  metadata
  """
  createAdataset(input: CreateADatasetInput!): ADataset!

  """
  Create a new data ROI from vector or slice definitions with optional choordinate anchors and OME metadata
  """
  createDataRoi(input: CreateDataRoiInput!): DataRoi!

  """Create a new lens from an existing dataset and slicing constraints"""
  createLens(input: CreateLensInput!): Lens!

  """Create a new scene from an existing lens with optional blending mode"""
  createScene(input: CreateSceneInput!): Scene!

  """
  Create a new layer from an existing lens with optional affine transformation and colormap settings
  """
  createLayer(input: CreateLayerInput!): Layer!

  """
  Update an existing layer's lens, scene, affine transformation, and colormap settings
  """
  updateLayer(input: UpdateLayerInput!): Layer!

  """Attach unstructured metadata to a file"""
  attachUnstructuredMeta(input: UnstructuredMetaInput!): UnstructuredMeta!

  """Create a new render tree for image visualization"""
  createRenderTree(input: RenderTreeInput!): RenderTree!

  """Create a table from parquet-like data"""
  fromParquetLike(input: FromParquetLike!): Table!

  """Create a new mesh"""
  createMesh(input: MeshInput!): Mesh!

  """Delete an existing mesh"""
  deleteMesh(input: DeleteMeshInput!): ID!

  """Pin a mesh for quick access"""
  pinMesh(input: DeleteMeshInput!): Snapshot!

  """Create a file from file-like data"""
  fromFileLike(input: FromFileLike!): File!

  """Delete an existing file"""
  deleteFile(input: DeleteFileInput!): ID!

  """Create a new stage for organizing data"""
  createStage(input: StageInput!): Stage!

  """Pin a stage for quick access"""
  pinStage(input: PinStageInput!): Stage!

  """Delete an existing stage"""
  deleteStage(input: DeleteStageInput!): ID!

  """Create a new RGB context for image visualization"""
  createRgbContext(input: CreateRGBContextInput!): RGBContext!

  """Delete an existing RGB context"""
  deleteRgbContext(input: DeleteRGBContextInput!): ID!

  """Update settings of an existing RGB context"""
  updateRgbContext(input: UpdateRGBContextInput!): RGBContext!

  """Create a new dataset to organize data"""
  createDataset(input: CreateDatasetInput!): Dataset!

  """Create a new dataset to organize data"""
  ensureDataset(input: CreateDatasetInput!): Dataset!

  """Update dataset metadata"""
  updateDataset(input: ChangeDatasetInput!): Dataset!

  """Revert dataset to a previous version"""
  revertDataset(input: RevertInput!): Dataset!

  """Pin a dataset for quick access"""
  pinDataset(input: PinDatasetInput!): Dataset!

  """Delete an existing dataset"""
  deleteDataset(input: DeleteDatasetInput!): ID!

  """Add datasets as children of another dataset"""
  putDatasetsInDataset(input: AssociateInput!): Dataset!

  """Remove datasets from being children of another dataset"""
  releaseDatasetsFromDataset(input: DesociateInput!): Dataset!

  """Add images to a dataset"""
  putImagesInDataset(input: AssociateInput!): Dataset!

  """Remove images from a dataset"""
  releaseImagesFromDataset(input: DesociateInput!): Dataset!

  """Add files to a dataset"""
  putFilesInDataset(input: AssociateInput!): Dataset!

  """Remove files from a dataset"""
  releaseFilesFromDataset(input: DesociateInput!): Dataset!

  """Create a new multi-well plate configuration"""
  createMultiWellPlate(input: MultiWellPlateInput!): MultiWellPlate!

  """Ensure a multi-well plate exists, creating if needed"""
  ensureMultiWellPlate(input: MultiWellPlateInput!): MultiWellPlate!

  """Pin a multi-well plate for quick access"""
  pinMultiWellPlate(input: PintMultiWellPlateInput!): MultiWellPlate!

  """Delete an existing multi-well plate configuration"""
  deleteMultiWellPlate(input: DeleteMultiWellInput!): ID!

  """Create a new collection of views to organize related views"""
  createViewCollection(input: ViewCollectionInput!): ViewCollection!

  """Pin a view collection for quick access"""
  pinViewCollection(input: PinViewCollectionInput!): ViewCollection!

  """Delete an existing view collection"""
  deleteViewCollection(input: DeleteViewCollectionInput!): ID!

  """Create a new era for temporal organization"""
  createEra(input: EraInput!): Era!

  """Pin an era for quick access"""
  pinEra(input: PinEraInput!): Era!

  """Delete an existing era"""
  deleteEra(input: DeleteEraInput!): ID!

  """Create a new view for label data"""
  createLabelView(input: LabelViewInput!): LabelView!

  """Create a new view for temporal data"""
  createTimepointView(input: TimepointViewInput!): TimepointView!

  """Create a new view for file data"""
  createFileView(input: FileViewInput!): FileView!

  """Create a new view for region of interest data"""
  createRoiView(input: ROIViewInput!): ROIView!

  """Create a new view for optical settings"""
  createOpticsView(input: OpticsViewInput!): OpticsView!

  """Create a new view for RGB image data"""
  createRgbView(input: RGBViewInput!): RGBView!

  """Update an existing RGB view"""
  updateRgbView(input: UpdateRGBViewInput!): RGBView!

  """Delete an existing RGB view"""
  deleteRgbView(input: DeleteViewInput!): ID!

  """Create a new view for channel data"""
  createChannelView(input: ChannelViewInput!): ChannelView!

  """Create a new view for masked data"""
  createMaskView(input: MaskViewInput!): MaskView!

  """Create a new view for instance mask data"""
  createInstanceMaskView(input: InstanceMaskViewInput!): InstanceMaskView!

  """Create a new reference view for image data"""
  createReferenceView(input: ReferenceViewInput!): ReferenceView!

  """Create a new view for well position data"""
  createWellPositionView(input: WellPositionViewInput!): WellPositionView!

  """Create a new view for continuous scan data"""
  createContinousScanView(input: ContinousScanViewInput!): ContinousScanView!

  """Delete an existing histogram view"""
  deleteHistogramView(input: DeleteViewInput!): ID!

  """Delete an existing affine transformation view"""
  deleteAffineTransformationView(input: DeleteViewInput!): ID!

  """Delete an existing channel view"""
  deleteChannelView(input: DeleteViewInput!): ID!

  """Delete an existing timepoint view"""
  deleteTimepointView(input: DeleteViewInput!): ID!

  """Delete an existing optics view"""
  deleteOpticsView(input: DeleteViewInput!): ID!

  """Delete any type of view"""
  deleteView(input: DeleteViewInput!): ID!

  """Pin a view for quick access"""
  pinView(input: PinViewInput!): View!

  """Create a new instrument configuration"""
  createInstrument(input: InstrumentInput!): Instrument!

  """Delete an existing instrument"""
  deleteInstrument(input: DeleteInstrumentInput!): ID!

  """Pin an instrument for quick access"""
  pinInstrument(input: PinInstrumentInput!): Instrument!

  """Ensure an instrument exists, creating if needed"""
  ensureInstrument(input: InstrumentInput!): Instrument!

  """Create a new microscope objective configuration"""
  createObjective(input: ObjectiveInput!): Objective!

  """Delete an existing objective"""
  deleteObjective(input: DeleteObjectiveInput!): ID!

  """Pin an objective for quick access"""
  pinObjective(input: PinObjectiveInput!): Objective!

  """Ensure an objective exists, creating if needed"""
  ensureObjective(input: ObjectiveInput!): Objective!

  """Create a new camera configuration"""
  createCamera(input: CameraInput!): Camera!

  """Delete an existing camera"""
  deleteCamera(input: DeleteCameraInput!): ID!

  """Pin a camera for quick access"""
  pinCamera(input: PinCameraInput!): Camera!

  """Ensure a camera exists, creating if needed"""
  ensureCamera(input: CameraInput!): Camera!

  """Create a new state snapshot"""
  createSnapshot(input: SnapshotInput!): Snapshot!

  """Delete an existing snapshot"""
  deleteSnapshot(input: DeleteSnaphotInput!): ID!

  """Pin a snapshot for quick access"""
  pinSnapshot(input: PinSnapshotInput!): Snapshot!

  """Create a new region of interest"""
  createRoi(input: RoiInput!): ROI!

  """Update an existing region of interest"""
  updateRoi(input: UpdateRoiInput!): ROI!

  """Pin a region of interest for quick access"""
  pinRoi(input: PinROIInput!): ROI!

  """Delete an existing region of interest"""
  deleteRoi(input: DeleteRoiInput!): ID!

  """Assign a user permission to an object"""
  assignUserPermission(input: AssignUserPermissionInput!): [UserObjectPermission!]!
}

type Objective {
  id: ID!
  name: String!
  serialNumber: String!
  na: Float
  magnification: Float
  immersion: String
  views(filters: OpticsViewFilter, pagination: OffsetPaginationInput): [OpticsView!]!
  organization: DjangoModelType!
}

enum ObjectiveCorrectionKind {
  UV
  PLAN_APO
  PLAN_FLUOR
  SUPER_FLUOR
  VIOLET_CORRECTED
  ACHRO
  ACHROMAT
  FLUOR
  FL
  FLUAR
  NEOFLUAR
  FLUOTAR
  APO
  PLAN_NEOFLUAR
  OTHER
}

"""Microscope objective"""
type ObjectiveElement implements OpticalElement {
  id: ID!

  """Element label"""
  label: String!

  """Element kind"""
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String

  """Has iris (aperture stop)"""
  iris: Boolean!
  magnification: Float
  numericalAperture: Float
  workingDistanceMm: Float
  immersionMedium: ObjectiveImmersion
  correctionKind: ObjectiveCorrectionKind
}

input ObjectiveFilter {
  id: ID
  name: String
  AND: ObjectiveFilter
  OR: ObjectiveFilter
  NOT: ObjectiveFilter
  DISTINCT: Boolean
}

enum ObjectiveImmersion {
  OIL
  WATER
  WATER_DIPPING
  AIR
  MULTI
  GLYCEROL
  OTHER
}

input ObjectiveInput {
  serialNumber: String!
  name: String = null
  na: Float = null
  magnification: Float = null
  immersion: String = null
}

input OffsetPaginationInput {
  offset: Int! = 0
  limit: Int
}

"""Input type for OME metadata"""
input OmeMetadataInput {
  """The OME metadata as a JSON string"""
  json: String!
}

"""Common interface for all optical elements"""
interface OpticalElement {
  """Element UUID"""
  id: ID!

  """Element label"""
  label: String!

  """Element kind"""
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String
}

"""
Input for creating or updating any optical element. Fill only fields relevant to the chosen `kind`.
"""
input OpticalElementInput {
  id: ID!
  label: String!
  kind: ElementKind!
  pose: Pose3DInput = null
  ports: [LightPortInput!]!
  manufacturer: String = null
  model: String = null
  serialNumber: String = null
  nominalWavelengthNm: Float = null
  channel: ChannelKind = null
  diameterUm: Float = null
  nepdWPerSqrtHz: Float = null
  angleDeg: Float = null
  bandMinNm: Float = null
  bandMaxNm: Float = null
  rFraction: Float = null
  tFraction: Float = null
  focalLengthMm: Float = null
  magnification: Float = null
  numericalAperture: Float = null
  brand: String = null
  workingDistanceMm: Float = null
  immersionMedium: ObjectiveImmersion = null
  iris: Boolean = null
  amplifierGainDb: Float = null
  gain: Float = null
  pixelSizeUm: Float = null
  resolution: [Int!] = null
  powerMw: Float = null
  laserMedium: String = null
  pulseKind: PulseKind = null
  repetitionRateHz: Float = null
  hasPockelsCell: Boolean = null
  hasQSwitch: Boolean = null
}

type OpticsView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  instrument: Instrument
  camera: Camera
  objective: Objective
}

input OpticsViewFilter {
  isGlobal: Boolean
  AND: OpticsViewFilter
  OR: OpticsViewFilter
  NOT: OpticsViewFilter
  DISTINCT: Boolean
  instrument: InstrumentFilter
  objective: ObjectiveFilter
  camera: CameraFilter
}

input OpticsViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  instrument: ID = null
  objective: ID = null
  camera: ID = null
  image: ID!
}

type OptikitState {
  id: ID!
  store: ZarrStore!
  shape: [Int!]!
  chunkShape: [Int!]!
  dims: [String!]!
}

enum Ordering {
  ASC
  ASC_NULLS_FIRST
  ASC_NULLS_LAST
  DESC
  DESC_NULLS_FIRST
  DESC_NULLS_LAST
}

type Organization {
  id: ID!
  slug: String!
}

"""The sample"""
type OtherElement implements OpticalElement {
  id: ID!
  label: String!
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String
}

"""Light source"""
type OtherSourceElement implements OpticalElement {
  id: ID!

  """Element label"""
  label: String!

  """Element kind"""
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String
  channel: ChannelKind
  lampType: String
}

"""Temporary S3 credentials for reading a parquet object."""
type ParquetAccessGrant {
  status: String!
  accessKey: String!
  secretKey: String!
  sessionToken: String!
  region: String!
  bucket: String!
  key: String!
  path: String!
  expiresIn: Int!
  store: String
}

"""
The `ParquetLike` scalar type represents a reference to a parquet objected stored previously created by the user on a datalayer
"""
scalar ParquetLike

type ParquetStore {
  id: ID!
  path: String!
  bucket: String!
  key: String!
  originalFileName: String
  contentType: String

  """Get temporary S3 read credentials for the parquet object."""
  accessGrant(host: String = null): ParquetAccessGrant!

  """Compatibility field returning the canonical S3 object path."""
  presignedUrl(host: String = null): String!
}

"""Temporary S3 credentials for uploading a parquet store."""
type ParquetUploadGrant {
  action: String!
  status: String!
  accessKey: String!
  secretKey: String!
  sessionToken: String!
  bucket: String!
  key: String!
  path: String!
  expiresIn: Int!
  store: String!
  maxBytes: Int!
  originalFileName: String
  uploadFileName: String!
  uploadContentType: String
  uploadFormField: String!
}

input PartialAcquisitionViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  description: String = null
  acquiredAt: DateTime = null
  operator: ID = null
}

input PartialAffineTransformationViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  stage: ID = null
  affineMatrix: FourByFourMatrix!
}

input PartialChannelViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null

  """The emission wavelength of the channel in nanometers"""
  emissionWavelength: Float = null

  """The excitation wavelength of the channel in nanometers"""
  excitationWavelength: Float = null

  """The acquisition mode of the channel"""
  acquisitionMode: String = null

  """The name of the channel"""
  name: String = null
}

input PartialDerivedViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  originImage: ID!
}

input PartialFileViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  file: ID!
  seriesIdentifier: String = null
}

input PartialImageAccessorInput {
  keys: [String!]!
  minIndex: Int = null
  maxIndex: Int = null
  image: ID!
}

input PartialInstanceMaskViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  referenceView: ID = null
  labels: LabelsLike = null
}

input PartialLabelAccessorInput {
  keys: [String!]!
  minIndex: Int = null
  maxIndex: Int = null
  pixelView: ID!
}

input PartialLightpathViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  graph: LightpathGraphInput!
}

input PartialMaskViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  referenceView: ID = null
  labels: LabelsLike = null
}

input PartialOpticsViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  instrument: ID = null
  objective: ID = null
  camera: ID = null
}

input PartialRGBViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  context: ID = null
  gamma: Float = null
  contrastLimitMin: Float = null
  contrastLimitMax: Float = null
  rescale: Boolean = null
  scale: Float = null
  active: Boolean = null
  colorMap: ColorMap = null
  baseColor: [Float!] = null
}

input PartialROIViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  roi: ID!
}

input PartialReferenceViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
}

input PartialScaleViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  parent: ID = null
  scaleX: Float = null
  scaleY: Float = null
  scaleZ: Float = null
  scaleT: Float = null
  scaleC: Float = null
}

input PartialTimepointViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  era: ID = null
  msSinceStart: Milliseconds = null
  indexSinceStart: Int = null
}

type PermissionOption {
  value: ID!
  label: String!
}

input PinCameraInput {
  id: ID!
  pin: Boolean!
}

input PinDatasetInput {
  id: ID!
  pin: Boolean!
}

input PinEraInput {
  id: ID!
  pin: Boolean!
}

input PinImageInput {
  id: ID!
  pin: Boolean!
}

input PinInstrumentInput {
  id: ID!
  pin: Boolean!
}

input PinObjectiveInput {
  id: ID!
  pin: Boolean!
}

input PinROIInput {
  id: ID!
  pin: Boolean!
}

input PinSnapshotInput {
  id: ID!
  pin: Boolean!
}

input PinStageInput {
  id: ID!
  pin: Boolean!
}

input PinViewCollectionInput {
  id: ID!
  pin: Boolean!
}

input PinViewInput {
  id: ID!
  pin: Boolean!
}

"""Pinhole"""
type PinholeElement implements OpticalElement {
  id: ID!

  """Element label"""
  label: String!

  """Element kind"""
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String
  diameterUm: Float
}

input PintMultiWellPlateInput {
  id: ID!
  pin: Boolean!
}

enum PlacementStatus {
  ACTIVE
  INACTIVE
  DELETED
  ARCHIVED
}

"""A channel descriptor"""
type PlaneInfo {
  label: String!
}

enum PortRole {
  INPUT
  OUTPUT
}

"""Optional 3D pose; position and/or orientation can be omitted"""
type Pose3D {
  position: Vec3
  orientation: Euler
}

"""A 3D pose consisting of position and orientation."""
input Pose3DInput {
  position: Vec3Input = null
  orientation: EulerInput = null
}

"""A provenance event for a model."""
type ProvenanceEntry {
  client: Client

  """User who made the change."""
  user: User

  """The type of change that was made."""
  kind: HistoryKind!

  """The date of the change."""
  date: DateTime!

  """
  The assignation ID during which the change occurred. If it was happening outside of an assignation, it will be None.
  """
  during: String

  """The ID of the history entry."""
  id: ID!

  """The effective changes made to the model."""
  effectiveChanges: [ModelChange!]!
}

enum PulseKind {
  CW
  SINGLE
  QSWITCHED
  REPETITIVE
  MODE_LOCKED
  OTHER
}

type Query {
  _entities(representations: [_Any!]!): [_Entity]!
  _service: _Service!
  images(filters: ImageFilter, order: ImageOrder, pagination: OffsetPaginationInput): [Image!]!
  rois(filters: ROIFilter, order: ROIOrder, pagination: OffsetPaginationInput): [ROI!]!
  myimages(filters: ImageFilter, order: ImageOrder, pagination: OffsetPaginationInput): [Image!]!
  datasets(filters: DatasetFilter, pagination: OffsetPaginationInput): [Dataset!]!
  mydatasets(filters: DatasetFilter, pagination: OffsetPaginationInput): [Dataset!]!
  timepointViews(filters: TimepointViewFilter, pagination: OffsetPaginationInput): [TimepointView!]!
  labelViews: [LabelView!]!
  channelViews: [ChannelView!]!
  continousScanViews(filters: ContinousScanViewFilter, pagination: OffsetPaginationInput): [ContinousScanView!]!
  wellPositionViews(filters: WellPositionViewFilter, pagination: OffsetPaginationInput): [WellPositionView!]!
  acquisitionViews: [AcquisitionView!]!
  rgbViews(filters: RGBViewFilter, pagination: OffsetPaginationInput): [RGBView!]!
  affineTransformationViews(filters: AffineTransformationViewFilter, pagination: OffsetPaginationInput): [AffineTransformationView!]!
  scaleViews: [ScaleView!]!
  eras(filters: EraFilter, pagination: OffsetPaginationInput): [Era!]!
  myeras(filters: EraFilter, pagination: OffsetPaginationInput): [Era!]!
  scenes(filters: SceneFilter, ordering: [SceneOrder!]! = [], pagination: OffsetPaginationInput): [Scene!]!
  scene(id: ID!): Scene!
  layers(filters: LayerFilter, pagination: OffsetPaginationInput): [Layer!]!
  layer(id: ID!): Layer!
  lenses(filters: LensFilter, pagination: OffsetPaginationInput): [Lens!]!
  lens(id: ID!): Lens!
  adatasets(filters: ADatasetFilter, pagination: OffsetPaginationInput): [ADataset!]!
  adataset(id: ID!): ADataset!
  dataArrays(filters: DataArrayFilter, pagination: OffsetPaginationInput): [DataArray!]!
  dataArray(id: ID!): DataArray!
  dataRois(filters: DataRoiFilter, pagination: OffsetPaginationInput): [DataRoi!]!
  dataRoi(id: ID!): DataRoi!
  stages(filters: StageFilter, pagination: OffsetPaginationInput): [Stage!]!
  renderTrees(filters: RenderTreeFilter, order: RenderTreeOrder, pagination: OffsetPaginationInput): [RenderTree!]!
  experiments(filters: ExperimentFilter, pagination: OffsetPaginationInput): [Experiment!]!
  rgbcontexts(filters: RGBContextFilter, pagination: OffsetPaginationInput): [RGBContext!]!
  instruments: [Instrument!]!
  multiWellPlates(filters: MultiWellPlateFilter, pagination: OffsetPaginationInput): [MultiWellPlate!]!
  objectives: [Objective!]!
  myobjectives: [Objective!]!
  tables(filters: TableFilter, pagination: OffsetPaginationInput): [Table!]!
  mytables(filters: TableFilter, pagination: OffsetPaginationInput): [Table!]!
  snapshots(filters: SnapshotFilter, pagination: OffsetPaginationInput): [Snapshot!]!
  mysnapshots(filters: SnapshotFilter, pagination: OffsetPaginationInput): [Snapshot!]!
  files(filters: FileFilter, order: FileOrder, pagination: OffsetPaginationInput): [File!]!
  myfiles(filters: FileFilter, order: FileOrder, pagination: OffsetPaginationInput): [File!]!
  randomImage: Image!

  """Get all active views for a specific image"""
  activeViews(image: ID!, selector: Selector = null, include: [ViewKind!], exclude: [ViewKind!]): [View!]!
  labelAccessors: [LabelAccessor!]!
  imageAccessors: [ImageAccessor!]!
  meshes(filters: MeshFilter, pagination: OffsetPaginationInput): [Mesh!]!

  """Get statistics about images"""
  imagesStats(filters: ImageFilter = null): ImageStats!
  children(parent: ID!, filters: DatasetChildrenFilter = null, pagination: ChildrenPaginationInput = null, order: ChildrenOrder = null): [DatasetImageFile!]!
  rows(table: ID!, filters: RowFilter = null, pagination: TablePaginationInput = null): [MetricMap!]!

  """Get permissions for a specific object"""
  permissions(identifier: String!, object: ID!): [UserObjectPermission!]!

  """Get available permissions for a specific identifier"""
  availablePermissions(identifier: String!, search: String = null, values: [ID!] = null): [PermissionOption!]!
  members: [Membership!]!
  instanceMaskViewLabel(
    """The unique identifier of an object"""
    id: ID!
  ): InstanceMaskViewLabel!
  rgbView(
    """The unique identifier of an object"""
    id: ID!
  ): RGBView!
  tableRows(filters: TableRowFilter!, pagination: OffsetPaginationInput!): [TableRow!]!
  tableCells(filters: TableCellFilter!, pagination: OffsetPaginationInput!): [TableCell!]!
  mesh(
    """The unique identifier of an object"""
    id: ID!
  ): Mesh!
  maskedPixelInfo(
    """The unique identifier of an object"""
    id: ID!
  ): MaskedPixelInfo!

  """Returns a single image by ID"""
  image(
    """The unique identifier of an object"""
    id: ID!
  ): Image!

  """Returns a single image by ID"""
  lightpathView(
    """The unique identifier of an object"""
    id: ID!
  ): LightpathView!
  tableCell(
    """The unique identifier of an object"""
    id: ID!
  ): TableCell!
  tableRow(
    """The unique identifier of an object"""
    id: ID!
  ): TableRow!
  roi(
    """The unique identifier of an object"""
    id: ID!
  ): ROI!
  renderTree(
    """The unique identifier of an object"""
    id: ID!
  ): RenderTree!
  rgbcontext(
    """The unique identifier of an object"""
    id: ID!
  ): RGBContext!
  objective(
    """The unique identifier of an object"""
    id: ID!
  ): Objective!
  camera(
    """The unique identifier of an object"""
    id: ID!
  ): Camera!
  snapshot(
    """The unique identifier of an object"""
    id: ID!
  ): Snapshot!
  describe(identifier: String!, id: ID!): [Descriptor!]!
  file(
    """The unique identifier of an object"""
    id: ID!
  ): File!
  table(
    """The unique identifier of an object"""
    id: ID!
  ): Table!
  instrument(
    """The unique identifier of an object"""
    id: ID!
  ): Instrument!
  dataset(
    """The unique identifier of an object"""
    id: ID!
  ): Dataset!
  multiWellPlate(
    """The unique identifier of an object"""
    id: ID!
  ): MultiWellPlate!
  stage(
    """The unique identifier of an object"""
    id: ID!
  ): Stage!
  experiment(
    """The unique identifier of an object"""
    id: ID!
  ): Experiment!
  channelsFor(
    """The unique identifier of an object"""
    image: ID!
    filters: ChannelInfoFilter = null
  ): [ChannelInfo!]!
}

type RGBContext {
  id: ID!
  name: String!
  image: Image!
  snapshots(filters: SnapshotFilter, pagination: OffsetPaginationInput): [Snapshot!]!
  blending: Blending!
  z: Int!
  t: Int!
  c: Int!
  pinned: Boolean!
  views: [RGBView!]!
}

input RGBContextFilter {
  ids: [ID!]
  search: String
  id: ID
  AND: RGBContextFilter
  OR: RGBContextFilter
  NOT: RGBContextFilter
  DISTINCT: Boolean
}

type RGBView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  contexts(filters: RGBContextFilter, pagination: OffsetPaginationInput): [RGBContext!]!
  colorMap: ColorMap!
  gamma: Float
  contrastLimitMin: Float
  contrastLimitMax: Float
  active: Boolean!
  baseColor: [Int!]
  fullColour(format: ColorFormat = RGB): String!
  name(long: Boolean! = false): String!
}

input RGBViewFilter {
  ids: [ID!]
  search: String
  id: ID
  AND: RGBViewFilter
  OR: RGBViewFilter
  NOT: RGBViewFilter
  DISTINCT: Boolean
}

input RGBViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  context: ID!
  gamma: Float = null
  contrastLimitMin: Float = null
  contrastLimitMax: Float = null
  rescale: Boolean = null
  scale: Float = null
  active: Boolean = null
  colorMap: ColorMap = null
  baseColor: [Float!] = null
  image: ID!
}

type ROI {
  id: ID!
  image: Image!
  kind: RoiKind!
  vectors: [FiveDVector!]!
  createdAt: DateTime!
  creator: User

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
  pinned: Boolean!
  name: String!
}

input ROIFilter {
  ids: [ID!]
  id: ID
  kind: RoiKindChoices
  image: ID = null
  search: String
  owner: ID = null
  AND: ROIFilter
  OR: ROIFilter
  NOT: ROIFilter
  DISTINCT: Boolean
}

input ROIOrder {
  createdAt: Ordering
}

type ROIView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  roi: ROI!
}

input ROIViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  roi: ID!
  image: ID!
}

type ReferenceView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
}

input ReferenceViewFilter {
  ids: [ID!]
  search: String = null
  id: ID
  image: ID = null
  AND: ReferenceViewFilter
  OR: ReferenceViewFilter
  NOT: ReferenceViewFilter
  DISTINCT: Boolean
}

input ReferenceViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  image: ID!
}

interface Render {
  createdAt: DateTime!
  creator: User
}

enum RenderKind {
  VIDEO
  SNAPSHOT
}

enum RenderNodeKind {
  CONTEXT
  OVERLAY
  GRID
  SPIT
}

type RenderTree {
  id: ID!
  name: String!
  linkedContexts(filters: RGBContextFilter, pagination: OffsetPaginationInput): [RGBContext!]!
}

input RenderTreeFilter {
  id: ID
  AND: RenderTreeFilter
  OR: RenderTreeFilter
  NOT: RenderTreeFilter
  DISTINCT: Boolean
}

input RenderTreeInput {
  tree: TreeInput!
  name: String!
}

input RenderTreeOrder {
  createdAt: Ordering
}

input RequestBigFileAccessInput {
  storeId: String!
}

input RequestBigFileUploadInput {
  originalFileName: String!
  fileSize: Int = null
  contentType: String = null
}

input RequestMediaAccessInput {
  storeId: String!
}

input RequestMediaUploadInput {
  originalFileName: String!
  fileSize: Int = null
  contentType: String = null
}

input RequestParquetAccessInput {
  storeId: String!
}

input RequestParquetUploadInput {
  columns: [String!] = null
}

input RequestZarrAccessInput {
  storeId: String!
}

input RequestZarrUploadInput {
  shape: [Int!] = null
  chunks: [Int!] = null
  version: String = null
}

input RevertInput {
  id: ID!
  historyId: ID!
}

type RoiEvent {
  create: ROI
  delete: ID
  update: ROI
}

input RoiInput {
  """The image this ROI belongs to"""
  image: ID!

  """The vector coordinates defining the ROI"""
  vectors: [FiveDVector!]!

  """The type/kind of ROI"""
  kind: RoiKind!
}

enum RoiKind {
  ELLIPSIS
  POLYGON
  LINE
  RECTANGLE
  SPECTRAL_RECTANGLE
  TEMPORAL_RECTANGLE
  CUBE
  SPECTRAL_CUBE
  TEMPORAL_CUBE
  HYPERCUBE
  SPECTRAL_HYPERCUBE
  PATH
  FRAME
  SLICE
  POINT
}

enum RoiKindChoices {
  ELLIPSIS
  POLYGON
  LINE
  RECTANGLE
  SPECTRAL_RECTANGLE
  TEMPORAL_RECTANGLE
  CUBE
  SPECTRAL_CUBE
  TEMPORAL_CUBE
  HYPERCUBE
  SPECTRAL_HYPERCUBE
  PATH
  UNKNOWN
  FRAME
  SLICE
  POINT
}

input RowFilter {
  clause: String = null
}

"""The sample"""
type SampleElement implements OpticalElement {
  id: ID!
  label: String!
  kind: ElementKind!

  """3D pose of the element"""
  pose: Pose3D
  manufacturer: String
  model: String

  """List of ports on the element"""
  ports: [LightPort!]!
  serialNumber: String
}

type ScaleView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  parent: Image!
  scaleX: Float!
  scaleY: Float!
  scaleZ: Float!
  scaleT: Float!
  scaleC: Float!
}

enum ScanDirection {
  ROW_COLUMN_SLICE
  COLUMN_ROW_SLICE
  SLICE_ROW_COLUMN
  ROW_COLUMN_SLICE_SNAKE
  COLUMN_ROW_SLICE_SNAKE
  SLICE_ROW_COLUMN_SNAKE
}

type Scene {
  id: ID!
  name: String!

  """Provenance entries for this camera"""
  layers(filters: LayerFilter, pagination: OffsetPaginationInput): [Layer!]!
  spatialUnit: SpatialUnit!
  temporalUnit: TemporalUnit!
}

input SceneFilter {
  id: ID
  name: StrFilterLookup
  description: StrFilterLookup
  AND: SceneFilter
  OR: SceneFilter
  NOT: SceneFilter
  DISTINCT: Boolean
}

input SceneOrder @oneOf {
  name: Ordering
  id: Ordering
}

input ScopeFilter {
  public: Boolean = null
  org: Boolean = null
  shared: Boolean = null
  me: Boolean = null
}

enum ScopeKind {
  PUBLIC
  ORG
  SHARED
  ME
}

input Selector {
  x: DimSelector = null
  y: DimSelector = null
  z: DimSelector = null
  c: DimSelector = null
  t: DimSelector = null
}

type Slice {
  """The key of the dimension, e.g. 'x', 'y', 'z', 'c', or 't'"""
  dim: String!

  """The starting index of the slice, or None to start from the beginning"""
  start: Int

  """The stopping index of the slice, or None to go to the end"""
  stop: Int

  """The step size of the slice, or None to use the default step"""
  step: Int
}

"""
Input type for a dimension descriptor, which specifies a key and a kind for a dimension
"""
input SliceInput {
  dim: String!
  start: Int = null
  stop: Int = null
  step: Int = null
}

type Snapshot implements Render {
  createdAt: DateTime!
  creator: User
  id: ID!
  store: MediaStore!
  name: String!
  majorColor: [Float!]
}

input SnapshotFilter {
  name: StrFilterLookup
  ids: [ID!]
  AND: SnapshotFilter
  OR: SnapshotFilter
  NOT: SnapshotFilter
  DISTINCT: Boolean
}

input SnapshotInput {
  file: ImageFileLike!
  image: ID!
  name: String = null
}

enum SpatialUnit {
  MICROMETERS
  NANOMETERS
  ANGSTROMS
  PIXELS
  UNKNOWN
}

"""Spectral window in nanometers"""
type Spectrum {
  minNm: Float!
  maxNm: Float!
}

"""Spectral window in nanometers for wavelength-dependent components."""
input SpectrumInput {
  minNm: Float!
  maxNm: Float!
}

type Stage {
  id: ID!
  affineViews(filters: AffineTransformationViewFilter, pagination: OffsetPaginationInput): [AffineTransformationView!]!
  description: String
  name: String!

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
  pinned: Boolean!
}

input StageFilter {
  ids: [ID!]
  search: String
  id: ID
  kind: String
  name: StrFilterLookup
  AND: StageFilter
  OR: StageFilter
  NOT: StageFilter
  DISTINCT: Boolean
}

input StageInput {
  name: String!
  instrument: ID = null
}

input StrFilterLookup {
  exact: String
  iExact: String
  contains: String
  iContains: String
  inList: [String!]
  gt: String
  gte: String
  lt: String
  lte: String
  startsWith: String
  iStartsWith: String
  endsWith: String
  iEndsWith: String
  range: [String!]
  isNull: Boolean
  regex: String
  iRegex: String
}

type Subscription {
  """Subscribe to real-time ROI updates"""
  rois(image: ID!): RoiEvent!

  """Subscribe to real-time image updates"""
  images(dataset: ID = null): ImageEvent!

  """Subscribe to real-time file updates"""
  files(dataset: ID = null): FileEvent!

  """Subscribe to real-time affine transformation view updatess"""
  affineTransformationViews(stage: ID!): AffineTransformationViewEvent!
}

type Table {
  id: ID!
  name: String!
  origins(filters: ImageFilter, order: ImageOrder, pagination: OffsetPaginationInput): [Image!]!
  store: ParquetStore!
  columns: [TableColumn!]!
  rows: [MetricMap!]!
  accessors(filters: AccessorFilter, types: [AccessorKind!]): [Accessor!]!
}

"""A cell of a table"""
type TableCell {
  id: ID!
  table: Table!
  rowId: Int!
  columnId: Int!
  value: Any!
  column: TableColumn!
  name: String!
}

input TableCellFilter {
  search: String = null
  ids: [ID!] = null
}

"""A column descriptor"""
type TableColumn {
  name: String!
  type: DuckDBDataType!
  nullable: Boolean!
  key: String
  default: String
  accessors(filters: AccessorFilter, types: [AccessorKind!]): [Accessor!]!
}

input TableFilter {
  ids: [ID!]
  search: String
  id: ID
  AND: TableFilter
  OR: TableFilter
  NOT: TableFilter
  DISTINCT: Boolean
}

input TablePaginationInput {
  limit: Int = 200
  offset: Int = 0
}

"""A cell of a table"""
type TableRow {
  id: ID!
  table: Table!
  rowId: Int!
  columns: [TableColumn!]!
  values: [Any!]!
  name: String!
}

input TableRowFilter {
  search: String = null
  ids: [ID!] = null
}

enum TemporalUnit {
  NANOSECONDS
  MILLISECONDS
  SECONDS
  MINUTES
  HOURS
  DAYS
  UNKNOWN
}

"""The `Vector` scalar type represents a matrix values as specified by"""
scalar ThreeDVector

type TimeBucket {
  ts: DateTime!
  count: Int!
  distinctCount: Int!
  max: Float
  min: Float
  avg: Float
  sum: Float
}

type TimepointView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  era: Era!
  msSinceStart: Milliseconds
  indexSinceStart: Int
}

input TimepointViewFilter {
  isGlobal: Boolean
  AND: TimepointViewFilter
  OR: TimepointViewFilter
  NOT: TimepointViewFilter
  DISTINCT: Boolean
  era: EraFilter
  msSinceStart: Float
  indexSinceStart: Int
}

input TimepointViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  era: ID = null
  msSinceStart: Milliseconds = null
  indexSinceStart: Int = null
  image: ID!
}

input TreeInput {
  id: String = "root"
  children: [TreeNodeInput!]!
}

input TreeNodeInput {
  kind: RenderNodeKind!
  label: String = null
  context: String = null
  gap: Int = null
  children: [TreeNodeInput!]
}

scalar UUID

"""Unstructured metadata attached to a file."""
type UnstructuredMeta {
  id: ID!
  name: String!
  meta: Any!
  schema: MetaSchema
}

input UnstructuredMetaInput {
  name: String!
  meta: Any!
  file: ID!
  schema: ID = null
}

input UpdateImageInput {
  id: ID!
  tags: [String!] = null
  name: String = null
}

"""Input type for creating an image from an array-like object"""
input UpdateLayerInput {
  id: ID!
  lens: ID = null
  scene: ID = null
  affineMatrix: [[Float!]!] = null
  colormap: ColorMap = null
  color: [Int!] = null
  climMin: Float = null
  climMax: Float = null
  xDim: String = null
  yDim: String = null
  zDim: String = null
  tDim: String = null
  intensityDim: String = null
}

input UpdateRGBContextInput {
  id: ID!
  name: String = null
  thumbnail: ID = null
  views: [PartialRGBViewInput!] = null
  z: Int = null
  t: Int = null
  c: Int = null
}

input UpdateRGBViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  context: ID = null
  gamma: Float = null
  contrastLimitMin: Float = null
  contrastLimitMax: Float = null
  rescale: Boolean = null
  scale: Float = null
  active: Boolean = null
  colorMap: ColorMap = null
  baseColor: [Float!] = null

  """The ID of the RGB view to update"""
  id: ID!
}

input UpdateRoiInput {
  roi: ID!
  vectors: [FiveDVector!] = null
  kind: RoiKind = null
  entity: ID = null
  entityKind: ID = null
  entityGroup: ID = null
  entityParent: ID = null
}

type User {
  id: ID!
  sub: String!
  preferredUsername: String!
  activeOrganization: Organization
}

type UserObjectPermission {
  user: User!
  permission: String!
}

type ValueHistogram {
  id: ID!
  p1: Float
  p99: Float
  histogram: [Float!]!
  bins: [Float!]!
  min: Float
  max: Float
}

"""
Input type for a value histogram, which specifies the histogram of pixel values along certain dimensions to provide additional context about the distribution of pixel values in an image
"""
input ValueHistogramInput {
  """The histogram of the pixel values (y values)"""
  histogram: [Float!]!

  """The bin indices of the histogram (x values)"""
  bins: [Float!]!

  """The minimum pixel value of the histogram"""
  min: Float = null

  """The maximum pixel value of the histogram"""
  max: Float = null

  """The 1st percentile pixel value of the histogram"""
  p1: Float = null

  """The 99th percentile pixel value of the histogram"""
  p99: Float = null
}

"""3D vector or point in space"""
type Vec3 {
  x: Float
  y: Float
  z: Float
}

"""A 3D vector representing a point or offset in space."""
input Vec3Input {
  x: Float = null
  y: Float = null
  z: Float = null
}

type Video implements Render {
  createdAt: DateTime!
  creator: User
  id: ID!
  store: MediaStore!
  thumbnail: MediaStore!
}

interface View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
}

type ViewCollection {
  id: ID!
  name: String!
  views: [View!]!

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
  affineTransformationViews(filters: AffineTransformationViewFilter, pagination: OffsetPaginationInput): [AffineTransformationView!]!
  labelViews: [LabelView!]!
  channelViews: [ChannelView!]!
}

input ViewCollectionInput {
  name: String!
}

input ViewFilter {
  isGlobal: Boolean
  AND: ViewFilter
  OR: ViewFilter
  NOT: ViewFilter
  DISTINCT: Boolean
}

enum ViewKind {
  CHANNEL
  LABEL
  AFFINE_TRANSFORMATION
  TIMEPOINT
  OPTICS
  HISTOGRAM
  MASK_VIEW
  INSTANCE_MASK_VIEW
  REFERENCE
  LIGHTPATH
  RGB
}

type WellPositionView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  well: MultiWellPlate
  row: Int
  column: Int
}

input WellPositionViewFilter {
  isGlobal: Boolean
  AND: WellPositionViewFilter
  OR: WellPositionViewFilter
  NOT: WellPositionViewFilter
  DISTINCT: Boolean
  well: MultiWellPlateFilter
  row: Int
  column: Int
}

input WellPositionViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  well: ID = null
  row: Int = null
  column: Int = null
  image: ID!
}

"""Temporary S3 credentials for reading a Zarr store."""
type ZarrAccessGrant {
  status: String!
  accessKey: String!
  secretKey: String!
  sessionToken: String!
  region: String!
  bucket: String!
  key: String!
  path: String!
  expiresIn: Int!
  store: String
}

type ZarrStore {
  id: ID!
  path: String!
  bucket: String!
  key: String!
  shape: [Int!]!
  chunks: [Int!]!
  version: String
  dtype: String
  dimensionNames: [String]
  fillValue: JSON!
  attributes: JSON
  storageTransformers: JSON
  chunkKeyEncoding: JSON
  codecs: JSON

  """Get temporary S3 read credentials for the Zarr object."""
  accessGrant(host: String = null): ZarrAccessGrant!
}

input ZarrStoreFilter {
  shape: IntFilterLookup
  AND: ZarrStoreFilter
  OR: ZarrStoreFilter
  NOT: ZarrStoreFilter
  DISTINCT: Boolean
}

"""Temporary S3 credentials for uploading a Zarr store."""
type ZarrUploadGrant {
  action: String!
  status: String!
  accessKey: String!
  secretKey: String!
  sessionToken: String!
  bucket: String!
  key: String!
  path: String!
  expiresIn: Int!
  store: String!
  maxBytes: Int!
  originalFileName: String
  uploadFileName: String!
  uploadContentType: String
  uploadFormField: String!
}

scalar _Any

union _Entity = ADataset | AcquisitionView | AffineTransformationView | BigFileStore | Camera | ChannelView | Client | ContinousScanView | CoordinateAnchor | DataArray | DataRoi | Dataset | DerivedView | Era | Experiment | File | FileView | HistogramView | Image | ImageAccessor | InstanceMaskView | Instrument | LabelAccessor | LabelView | Layer | Lens | LightpathView | MaskView | MediaStore | Membership | Mesh | MultiWellPlate | Objective | OpticsView | OptikitState | Organization | ParquetStore | RGBContext | RGBView | ROI | ROIView | ReferenceView | RenderTree | ScaleView | Scene | Snapshot | Stage | Table | TimepointView | User | ValueHistogram | Video | ViewCollection | WellPositionView | ZarrStore

type _Service {
  sdl: String!
}