app.bluvy.tube.video.metadata
Schema Diff
+5 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 2 non-breaking changes.
Non-Breaking Changes (2)
- AddedVertex AddedVertex { vertex_id: "app.bluvy.tube.video.metadata:body.url" }
- AddedEdge AddedEdge { src: "app.bluvy.tube.video.metadata:body", tgt: "app.bluvy.tube.video.metadata:body.url", kind: "prop", name: Some("url") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.bluvy.tube.video.metadata:body.url" }
Additional Notes
- Non-breaking: AddedEdge { src: "app.bluvy.tube.video.metadata:body", tgt: "app.bluvy.tube.video.metadata:body.url", kind: "prop", name: Some("url") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"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.",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
9
"captions": {
10
10
"description": "Owner-uploaded WebVTT subtitle/caption tracks, one per language.",
11
11
"items": {
12
12
"properties": {
13
13
"lang": {
14
14
"description": "BCP-47 language tag for this track, e.g. 'fr' or 'en-US'.",
15
15
"type": "string"
16
16
},
17
17
"vtt": {
18
18
"accept": [
19
19
"text/vtt"
20
20
],
21
21
"description": "WebVTT subtitle/caption file for this language.",
22
22
"type": "blob"
23
23
}
24
24
},
25
25
"required": [
26
26
"lang",
27
27
"vtt"
28
28
],
29
29
"type": "object"
30
30
},
31
31
"maxLength": 20,
32
32
"type": "array"
33
33
},
34
34
"category": {
35
35
"description": "Primary category slug (e.g. 'gaming', 'tech', 'music', etc.).",
36
36
"type": "string"
37
37
},
38
38
"chapters": {
39
39
"description": "Owner-editable chapter markers shown on Bluvy Tube's scrubber.",
40
40
"items": {
41
41
"properties": {
42
42
"startTimeSeconds": {
43
43
"minimum": 0,
44
44
"type": "integer"
45
45
},
46
46
"title": {
47
47
"maxGraphemes": 100,
48
48
"maxLength": 500,
49
49
"type": "string"
50
50
}
51
51
},
52
52
"required": [
53
53
"title",
54
54
"startTimeSeconds"
55
55
],
56
56
"type": "object"
57
57
},
58
58
"maxLength": 50,
59
59
"type": "array"
60
60
},
61
61
"createdAt": {
62
62
"description": "Client-declared timestamp when this record was created.",
63
63
"format": "datetime",
64
64
"type": "string"
65
65
},
66
66
"description": {
67
67
"maxGraphemes": 3000,
68
68
"maxLength": 30000,
69
69
"type": "string"
70
70
},
71
71
"duration": {
72
72
"description": "Duration of the video in seconds.",
73
73
"type": "integer"
74
74
},
75
75
"isAiGenerated": {
76
76
"description": "Whether the video content was generated by AI.",
77
77
"type": "boolean"
78
78
},
79
79
"language": {
80
80
"description": "BCP-47 language tag for the video's primary spoken/subtitle language.",
81
81
"type": "string"
82
82
},
83
83
"postCid": {
84
84
"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.",
85
85
"format": "cid",
86
86
"type": "string"
87
87
},
88
88
"postUri": {
89
89
"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).",
90
90
"format": "at-uri",
91
91
"type": "string"
92
92
},
93
93
"secondaryCategories": {
94
94
"description": "Optional secondary category slugs.",
95
95
"items": {
96
96
"type": "string"
97
97
},
98
98
"type": "array"
99
99
},
100
100
"title": {
101
101
"description": "Owner-editable title, shown on Bluvy Tube in place of the raw post text.",
102
102
"maxGraphemes": 300,
103
103
"maxLength": 3000,
104
104
"type": "string"
105
105
},
106
+
"url": {
107
+
"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.",
108
+
"format": "uri",
109
+
"type": "string"
110
+
},
106
111
"video": {
107
112
"accept": [
108
113
"video/*"
109
114
],
110
115
"description": "The same video blob referenced by the companion app.bsky.feed.post's app.bsky.embed.video#video.",
111
116
"type": "blob"
112
117
}
113
118
},
114
119
"required": [
115
120
"video",
116
121
"createdAt"
117
122
],
118
123
"type": "object"
119
124
},
120
125
"type": "record"
121
126
}
122
127
},
123
128
"id": "app.bluvy.tube.video.metadata",
124
129
"lexicon": 1
125
130
}