A documented photo of a graffiti piece.
tid
Timestamp-based ID
Properties
artists
array
of
string
Optional
Artist names. Free strings; a piece may have several.
maxLength: 20 itemsaspectRatio
ref
#aspectRatio
Optional
Pixel dimensions of the image, used for justified layout / to avoid reflow. Best-effort.
bskyPost
ref
com.atproto.repo.strongRef
Optional
strongRef to an app.bsky.feed.post cross-posting this sighting.
camera
ref
#camera
Optional
No description available.
caption
string
Optional
No description available.
maxLength: 3000 bytesmaxGraphemes: 300 graphemescapturedAt
string
datetime
Optional
When the photo was taken (EXIF DateTimeOriginal), if known.
createdAt
string
datetime
Required
Record creation time.
grainCrosspost
ref
com.atproto.repo.strongRef
Optional
strongRef to a social.grain.gallery this admin created to syndicate the sighting onto grain (gallery == grain post). Distinct from grainPost, which is an external grain post used AS the photo source. Set by the syndication step; absence means the grain leg hasn't run.
grainPost
ref
com.atproto.repo.strongRef
Optional
strongRef to a grain post serving as the photo. Alternative to image (exactly one of image/grainPost required, app-enforced).
image
blob
Optional
The displayed photo. Optional in schema; exactly one of image or grainPost is required (enforced in app code).
maxSize: 4.0 MBlocation
ref
#location
Optional
No description available.
longform
ref
com.atproto.repo.strongRef
Optional
strongRef to a site.standard.document for pieces with an essay. Reserved; not wired yet.
notes
string
Optional
No description available.
maxLength: 10000 bytesmaxGraphemes: 1000 graphemessiteRecord
ref
com.atproto.repo.strongRef
Optional
strongRef to the site.standard.* record the website publishes per photo for discoverability.
tags
array
of
string
Optional
Faceted tags. Conventions (parsed/enforced in app code, not the lexicon): kind:<piece|throwup|tag|mural|sticker|roller|wheatpaste|other> (exactly one expected), crew:<name>, surface:<wall|truck|pole|shutter|...>. Plus freeform tags (e.g. "trackside", "two-color").
maxLength: 40 itemsView raw schema
{
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"createdAt"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"maxLength": 40,
"description": "Faceted tags. Conventions (parsed/enforced in app code, not the lexicon): kind:<piece|throwup|tag|mural|sticker|roller|wheatpaste|other> (exactly one expected), crew:<name>, surface:<wall|truck|pole|shutter|...>. Plus freeform tags (e.g. \"trackside\", \"two-color\")."
},
"image": {
"type": "blob",
"accept": [
"image/*"
],
"maxSize": 4000000,
"description": "The displayed photo. Optional in schema; exactly one of image or grainPost is required (enforced in app code)."
},
"notes": {
"type": "string",
"maxLength": 10000,
"maxGraphemes": 1000
},
"camera": {
"ref": "#camera",
"type": "ref"
},
"artists": {
"type": "array",
"items": {
"type": "string"
},
"maxLength": 20,
"description": "Artist names. Free strings; a piece may have several."
},
"caption": {
"type": "string",
"maxLength": 3000,
"maxGraphemes": 300
},
"bskyPost": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "strongRef to an app.bsky.feed.post cross-posting this sighting."
},
"location": {
"ref": "#location",
"type": "ref"
},
"longform": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "strongRef to a site.standard.document for pieces with an essay. Reserved; not wired yet."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Record creation time."
},
"grainPost": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "strongRef to a grain post serving as the photo. Alternative to image (exactly one of image/grainPost required, app-enforced)."
},
"capturedAt": {
"type": "string",
"format": "datetime",
"description": "When the photo was taken (EXIF DateTimeOriginal), if known."
},
"siteRecord": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "strongRef to the site.standard.* record the website publishes per photo for discoverability."
},
"aspectRatio": {
"ref": "#aspectRatio",
"type": "ref",
"description": "Pixel dimensions of the image, used for justified layout / to avoid reflow. Best-effort."
},
"grainCrosspost": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "strongRef to a social.grain.gallery this admin created to syndicate the sighting onto grain (gallery == grain post). Distinct from grainPost, which is an external grain post used AS the photo source. Set by the syndication step; absence means the grain leg hasn't run."
}
}
},
"description": "A documented photo of a graffiti piece."
}