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.
tid
Timestamp-based ID
Properties
alt
string
Optional
Accessibility description of the video content.
maxGraphemes: 1000 graphemesannounce
ref
com.atproto.repo.strongRef
Optional
Strong reference to the app.bsky.feed.post announcing this video, if any.
createdAt
string
datetime
Required
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
string
Optional
Free-form description of the video.
maxLength: 30000 bytesmaxGraphemes: 3000 graphemeslabels
union
Optional
Self-applied labels for zoning (adult content, graphic media). Readers SHOULD honor these before playback.
subject
ref
com.atproto.repo.strongRef
Required
Strong reference to the social.skyphone.video.post record this metadata describes.
tags
array
of
string
Optional
Author-chosen keywords, without a leading hash mark.
maxLength: 8 itemsthumb
blob
Optional
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.
maxSize: 2.0 MBtitle
string
Optional
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.
maxLength: 3000 bytesmaxGraphemes: 300 graphemesView raw schema
{
"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."
}