Canonical video record. The video blob and durationMs MUST NOT change after creation; replacing the video requires a new record. This record intentionally carries no human-readable metadata: title, description, thumbnail and the announcement post live in a social.skyphone.video.meta record with the same record key in the same repo.
tid
Timestamp-based ID
Properties
aspectRatio
ref
app.bsky.embed.defs#aspectRatio
Required
Pixel dimensions of the canonical video, as measured by the transcoding worker. Required so clients can reserve layout before the blob is fetched.
captions
array
of
ref
app.bsky.embed.video#caption
Optional
Optional WebVTT caption tracks, same shape as app.bsky.embed.video#caption. Absence means no captions were supplied; it does not mean the video has burned-in subtitles.
maxLength: 20 itemscompat
blob
Optional
Bluesky-compatible mp4, only produced for videos of 3 minutes or less, at most 100MB.
maxSize: 100.0 MBcreatedAt
string
datetime
Required
When this record was created.
durationMs
integer
Required
Duration in milliseconds, as measured by the transcoding worker (ffprobe), not client-reported.
minimum: 0maximum: 3600000video
blob
Required
Server-side transcoded canonical video (H.264/AAC, up to 1080p, at most 1GB).
maxSize: 1073.7 MBView raw schema
{
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"video",
"durationMs",
"aspectRatio",
"createdAt"
],
"properties": {
"video": {
"type": "blob",
"accept": [
"video/mp4"
],
"maxSize": 1073741824,
"description": "Server-side transcoded canonical video (H.264/AAC, up to 1080p, at most 1GB)."
},
"compat": {
"type": "blob",
"accept": [
"video/mp4"
],
"maxSize": 100000000,
"description": "Bluesky-compatible mp4, only produced for videos of 3 minutes or less, at most 100MB."
},
"captions": {
"type": "array",
"items": {
"ref": "app.bsky.embed.video#caption",
"type": "ref"
},
"maxLength": 20,
"description": "Optional WebVTT caption tracks, same shape as app.bsky.embed.video#caption. Absence means no captions were supplied; it does not mean the video has burned-in subtitles."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "When this record was created."
},
"durationMs": {
"type": "integer",
"maximum": 3600000,
"minimum": 0,
"description": "Duration in milliseconds, as measured by the transcoding worker (ffprobe), not client-reported."
},
"aspectRatio": {
"ref": "app.bsky.embed.defs#aspectRatio",
"type": "ref",
"description": "Pixel dimensions of the canonical video, as measured by the transcoding worker. Required so clients can reserve layout before the blob is fetched."
}
}
},
"description": "Canonical video record. The video blob and durationMs MUST NOT change after creation; replacing the video requires a new record. This record intentionally carries no human-readable metadata: title, description, thumbnail and the announcement post live in a social.skyphone.video.meta record with the same record key in the same repo."
}