org.cannadb.growPhoto

cannadb.org

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "A single photo in a grow's gallery. Modeled as its own record (rather than blobs embedded in entries) so galleries can grow without bloating other records and so each photo carries its own caption, ordering, and capture date. A photo attaches to a plant (the usual case — per-plant galleries) and/or to the grow (group/room shots, the cover), and may optionally link to the `org.cannadb.growEntry` it documents. The image blob lives on the publishing PDS; the record carries the blob ref plus metadata. Publishing this record IS the claim — contextualized by the publisher DID at display time. Visibility follows the parent grow's `listed` preference, gated by the AppView.",
      "key": "tid",
      "record": {
        "properties": {
          "caption": {
            "description": "Optional plain-or-markdown caption for the photo.",
            "maxGraphemes": 2000,
            "maxLength": 20000,
            "type": "string"
          },
          "createdAt": {
            "description": "Client-declared timestamp when this photo record was created.",
            "format": "datetime",
            "type": "string"
          },
          "entry": {
            "description": "Optional AT-URI reference to the `org.cannadb.growEntry` this photo documents (e.g., the photo taken at a given check-up or transition). Lets clients show photos inline on the timeline event. (Consumers should validate the ref resolves to an `org.cannadb.growEntry` record.)",
            "format": "at-uri",
            "type": "string"
          },
          "grow": {
            "description": "AT-URI reference to the `org.cannadb.grow` this photo belongs to. Used for grow-wide shots (room, canopy, cover) or as a denormalized cache of the plant's grow. At least one of `plant` or `grow` SHOULD be present. (Consumers should validate the ref resolves to an `org.cannadb.grow` record.)",
            "format": "at-uri",
            "type": "string"
          },
          "image": {
            "accept": [
              "image/png",
              "image/jpeg",
              "image/webp"
            ],
            "description": "The photo. Accepts common web image formats; capped at 2 MB — larger than review images (1 MB) because documenting a full run with day-by-day galleries is the point, but still bounded to keep PDS storage burden reasonable. SVG is excluded for XSS safety.",
            "maxSize": 2000000,
            "type": "blob"
          },
          "order": {
            "description": "Optional manual sort order within the gallery. Lower sorts first. When absent, consumers fall back to `takenAt` then `createdAt`.",
            "minimum": 0,
            "type": "integer"
          },
          "plant": {
            "description": "AT-URI reference to the `org.cannadb.plant` this photo is of. Optional, but at least one of `plant` or `grow` SHOULD be present so the photo has a home; consumers should ignore a photo that references neither. (Consumers should validate the ref resolves to an `org.cannadb.plant` record.)",
            "format": "at-uri",
            "type": "string"
          },
          "takenAt": {
            "description": "When the photo was taken, if different from `createdAt`. Used to order galleries chronologically.",
            "format": "datetime",
            "type": "string"
          }
        },
        "required": [
          "image",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "org.cannadb.growPhoto",
  "lexicon": 1
}

Validate Record

Validate a record against org.cannadb.growPhoto

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:lrtzzib3ycggsodkfidzuorw
CID
bafyreigrsy3ueevhmva27a62c4jeoogtkfr4r6gplwwar244y7dknimiju
Indexed At
2026-06-20 00:44 UTC
AT-URI
at://did:plc:lrtzzib3ycggsodkfidzuorw/com.atproto.lexicon.schema/org.cannadb.growPhoto

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • A grow — one documented cultivation run (a tent, a garden, a season's cycle). The grow is a lightweight container: it groups one or more `org.cannadb.plant` records and carries the shared setup and a publisher-chosen …

  • A photo in an atview gallery. Stores the image blob alongside accessibility text, an optional caption, and categorization tags.

  • ATPix photo record. Metadata mapped to Dublin Core and Schema.org ImageObject terms (see docs/lexicon/net.atpix.gallery.md).

  • An image uploaded to the garden.

  • One append-only event on a plant's timeline. A single record type unifies what other journals split into status changes, activities, measurements, and notes — because they are all the same shape (a timestamped thing t…

Lexicon Garden

@