app.bluvy.tube.video.metadata
Bluvy Tube-specific metadata for a published video, written to the creator's own repo alongside the app.bsky.feed.post record that actually carries the video (via app.bsky.embed.video). Not required or validated by the PDS or any other AT Protocol app — Bluvy Tube reads this back itself to render an owner-editable title/description/language overlay on top of the plain post text. Written by App\Service\VideoPublicationProcessor (native uploads) and rewritten by App\Service\PdsMetadataSyncService on every owner edit, in the Bluvy Tube source.
Details · record, key tid
| Kind | record |
|---|---|
| Record key | tid |
| Authority | video.tube.bluvy.app |
| Indexed |
Showing version bafyreihewurihr6jickj5bidziypbgc22blzd4jsfacrjldip344gb5q7m. Show the latest
Checks
Validunlimited-stringdefs.endScreenItem.properties.kindNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.main.record.properties.captions.items.properties.langNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.main.record.properties.categoryNo maxLength, maxGraphemes or format limits this string.large-stringdefs.main.record.properties.descriptionmaxLength is over 20 KB. Use a blob for content that large.unlimited-stringdefs.main.record.properties.languageNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.main.record.properties.secondaryCategories.itemsNo maxLength, maxGraphemes or format limits this string.large-stringdefs.translation.properties.descriptionmaxLength is over 20 KB. Use a blob for content that large.
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"endScreen": {
"properties": {
"items": {
"items": {
"ref": "#endScreenItem",
"type": "ref"
},
"maxLength": 2,
"minLength": 1,
"type": "array"
},
"startOffset": {
"description": "How many seconds before the end the tiles appear.",
"maximum": 20,
"minimum": 5,
"type": "integer"
}
},
"required": [
"startOffset",
"items"
],
"type": "object"
},
"endScreenItem": {
"properties": {
"kind": {
"description": "'video': another of the creator's videos (subject: its app.bsky.feed.post); 'playlist': one of their app.bluvy.tube.playlist records; 'subscribe': a follow button for the creator (no subject).",
"knownValues": [
"video",
"playlist",
"subscribe"
],
"type": "string"
},
"subject": {
"ref": "com.atproto.repo.strongRef",
"type": "ref"
}
},
"required": [
"kind"
],
"type": "object"
},
"main": {
"description": "Bluvy Tube-specific metadata for a published video, written to the creator's own repo alongside the app.bsky.feed.post record that actually carries the video (via app.bsky.embed.video). Not required or validated by the PDS or any other AT Protocol app — Bluvy Tube reads this back itself to render an owner-editable title/description/language overlay on top of the plain post text. Written by App\\Service\\VideoPublicationProcessor (native uploads) and rewritten by App\\Service\\PdsMetadataSyncService on every owner edit, in the Bluvy Tube source.",
"key": "tid",
"record": {
"properties": {
"captions": {
"description": "Owner-uploaded WebVTT subtitle/caption tracks, one per language.",
"items": {
"properties": {
"lang": {
"description": "BCP-47 language tag for this track, e.g. 'fr' or 'en-US'.",
"type": "string"
},
"vtt": {
"accept": [
"text/vtt"
],
"description": "WebVTT subtitle/caption file for this language.",
"type": "blob"
}
},
"required": [
"lang",
"vtt"
],
"type": "object"
},
"maxLength": 20,
"type": "array"
},
"category": {
"description": "Primary category slug (e.g. 'gaming', 'tech', 'music', etc.).",
"type": "string"
},
"chapters": {
"description": "Owner-editable chapter markers shown on Bluvy Tube's scrubber.",
"items": {
"properties": {
"startTimeSeconds": {
"minimum": 0,
"type": "integer"
},
"title": {
"maxGraphemes": 100,
"maxLength": 500,
"type": "string"
}
},
"required": [
"title",
"startTimeSeconds"
],
"type": "object"
},
"maxLength": 50,
"type": "array"
},
"createdAt": {
"description": "Client-declared timestamp when this record was created.",
"format": "datetime",
"type": "string"
},
"description": {
"maxGraphemes": 3000,
"maxLength": 30000,
"type": "string"
},
"duration": {
"description": "Duration of the video in seconds.",
"type": "integer"
},
"endScreen": {
"description": "Optional end screen: tiles Bluvy Tube shows over the last seconds of the video.",
"ref": "#endScreen",
"type": "ref"
},
"isAiGenerated": {
"description": "Whether the video content was generated by AI.",
"type": "boolean"
},
"language": {
"description": "BCP-47 language tag for the video's primary spoken/subtitle language.",
"type": "string"
},
"postCid": {
"description": "The CID of the companion app.bsky.feed.post record as of the last write of this record; together with postUri, a strong reference to it. Set together with postUri.",
"format": "cid",
"type": "string"
},
"postUri": {
"description": "The at-uri of the companion app.bsky.feed.post record, set once that record has been created (this metadata record is written first, in a two-step publish).",
"format": "at-uri",
"type": "string"
},
"secondaryCategories": {
"description": "Optional secondary category slugs.",
"items": {
"type": "string"
},
"type": "array"
},
"thumbnail": {
"accept": [
"image/jpeg"
],
"description": "A thumbnail the owner chose for this video (at most 1280 px on each side). Bluvy Tube shows it instead of the frame generated by the video service; the companion post keeps the generated one.",
"maxSize": 2000000,
"type": "blob"
},
"title": {
"description": "Owner-editable title, shown on Bluvy Tube in place of the raw post text.",
"maxGraphemes": 300,
"maxLength": 3000,
"type": "string"
},
"translations": {
"description": "The creator's own translations of title and description; Bluvy Tube shows the one matching the viewer's language.",
"items": {
"ref": "#translation",
"type": "ref"
},
"maxLength": 10,
"type": "array"
},
"url": {
"description": "The Bluvy Tube web page that renders this video (a stable https://{host}/at/{did}/app.bsky.feed.post/{rkey} address). Attests the page in the record-to-page direction; the page links back via an at:canonical meta tag. Set together with postUri.",
"format": "uri",
"type": "string"
},
"video": {
"accept": [
"video/*"
],
"description": "The same video blob referenced by the companion app.bsky.feed.post's app.bsky.embed.video#video.",
"type": "blob"
}
},
"required": [
"video",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"translation": {
"properties": {
"description": {
"maxGraphemes": 3000,
"maxLength": 30000,
"type": "string"
},
"lang": {
"description": "BCP-47 language tag of this translation.",
"format": "language",
"type": "string"
},
"title": {
"maxGraphemes": 300,
"maxLength": 3000,
"type": "string"
}
},
"required": [
"lang"
],
"type": "object"
}
},
"id": "app.bluvy.tube.video.metadata",
"lexicon": 1
}