app.bluvy.tube.video.metadata

tube.bluvy.app

Schema Diff

+5 -0

From

CID
bafyreickn5lfur3...
Indexed At
2026-09-27 16:16 UTC
View this version

To

CID
bafyreicml54twx3...
Indexed At
2026-10-05 16:16 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@