{
"id": "social.skyphone.video.meta",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"subject",
"createdAt"
],
"properties": {
"alt": {
"type": "string",
"description": "Accessibility description of the video content.",
"maxGraphemes": 1000
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxGraphemes": 64
},
"maxLength": 8,
"description": "Author-chosen keywords, without a leading hash mark."
},
"thumb": {
"type": "blob",
"accept": [
"image/jpeg",
"image/png",
"image/webp"
],
"maxSize": 2000000,
"description": "Author-supplied custom thumbnail. Absence is normal: an app may generate thumbnails from the video outside the record, so readers SHOULD NOT treat a missing thumb as an error."
},
"title": {
"type": "string",
"maxLength": 3000,
"description": "Display title of the video. May be absent; clients SHOULD fall back to the announcement post text or a placeholder rather than showing an empty title.",
"maxGraphemes": 300
},
"labels": {
"refs": [
"com.atproto.label.defs#selfLabels"
],
"type": "union",
"description": "Self-applied labels for zoning (adult content, graphic media). Readers SHOULD honor these before playback."
},
"subject": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "Strong reference to the social.skyphone.video.post record this metadata describes."
},
"announce": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "Strong reference to the app.bsky.feed.post announcing this video, if any."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "When the video this metadata describes was created. Kept equal to the video record's createdAt across metadata edits, so readers can order videos by this field alone."
},
"description": {
"type": "string",
"maxLength": 30000,
"description": "Free-form description of the video.",
"maxGraphemes": 3000
}
}
},
"description": "Mutable metadata sidecar for a video. Record key MUST match the rkey of the social.skyphone.video.post record in the same repo, so a reader that holds a video record can fetch its metadata with one getRecord. Editing metadata is a put on this record; the canonical video record stays untouched."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}