pics.2bit.feed.photo
Schema Diff
+10 -1
Compatibility Analysis
Backward Compatible
Backward compatible. 6 non-breaking changes.
Non-Breaking Changes (6)
- AddedVertex AddedVertex { vertex_id: "app.bsky.richtext.facet" }
- AddedVertex AddedVertex { vertex_id: "pics.2bit.feed.photo:body.facets" }
- AddedVertex AddedVertex { vertex_id: "pics.2bit.feed.photo:body.facets:items" }
- AddedEdge AddedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.facets", kind: "prop", name: Some("facets") }
- AddedEdge AddedEdge { src: "pics.2bit.feed.photo:body.facets", tgt: "pics.2bit.feed.photo:body.facets:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "pics.2bit.feed.photo:body.facets:items", tgt: "app.bsky.richtext.facet", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.bsky.richtext.facet" }AddedVertex { vertex_id: "pics.2bit.feed.photo:body.facets" }AddedVertex { vertex_id: "pics.2bit.feed.photo:body.facets:items" }
Additional Notes
- Non-breaking: AddedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.facets", kind: "prop", name: Some("facets") }
- Non-breaking: AddedEdge { src: "pics.2bit.feed.photo:body.facets", tgt: "pics.2bit.feed.photo:body.facets:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "pics.2bit.feed.photo:body.facets:items", tgt: "app.bsky.richtext.facet", kind: "ref", name: None }
1
1
{
2
2
"id": "pics.2bit.feed.photo",
3
3
"defs": {
4
4
"main": {
5
5
"key": "tid",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"image",
11
11
"colors",
12
12
"createdAt"
13
13
],
14
14
"properties": {
15
15
"alt": {
16
16
"type": "string",
17
17
"maxLength": 3000,
18
18
"description": "Alt text for accessibility.",
19
19
"maxGraphemes": 300
20
20
},
21
21
"image": {
22
22
"type": "bytes",
23
23
"maxLength": 3584,
24
24
"minLength": 3584,
25
25
"description": "128x112 2bpp Game Boy Camera tile data: 16x14 tiles in row-major order, 16 bytes per tile (8 rows of low+high bit-plane bytes, MSB-first)."
26
26
},
27
27
"colors": {
28
28
"type": "array",
29
29
"items": {
30
30
"type": "integer",
31
31
"maximum": 16777215,
32
32
"minimum": 0
33
33
},
34
34
"maxLength": 4,
35
35
"minLength": 4,
36
36
"description": "Four 24-bit RGB colors (0 to 0xFFFFFF) corresponding to 2bpp pixel values 0 through 3, where 0 is lightest and 3 is darkest."
37
37
},
38
+
"facets": {
39
+
"type": "array",
40
+
"items": {
41
+
"ref": "app.bsky.richtext.facet",
42
+
"type": "ref"
43
+
},
44
+
"maxLength": 64,
45
+
"description": "Annotations of `caption`, in the shape Bluesky uses for rich text - hashtags today, and whatever this app grows next. Byte offsets index the UTF-8 encoding of `caption`, not its characters. Written by the author's client rather than derived here: what a facet records is what the author meant by a run of their own text, which is theirs to say. This app's AppView refuses any facet whose range falls outside the caption or whose tag doesn't match the text it covers, so an indexed tag always corresponds to something actually written."
46
+
},
38
47
"labels": {
39
48
"ref": "com.atproto.label.defs#selfLabels",
40
49
"type": "ref",
41
50
"description": "Self-applied content labels, set by the author. 2bit.pics writes any of porn/sexual/nudity/graphic-media, at most one of which is porn/sexual/nudity; clients blur or warn on labeled photos."
42
51
},
43
52
"caption": {
44
53
"type": "string",
45
54
"maxLength": 5000,
46
-
"description": "Free-text caption.",
55
+
"description": "Free-text caption. Any #hashtags in it are read out by this app's AppView and indexed there; nothing about them is stored on the record.",
47
56
"maxGraphemes": 500
48
57
},
49
58
"createdAt": {
50
59
"type": "string",
51
60
"format": "datetime",
52
61
"description": "When this photo record was published."
53
62
}
54
63
}
55
64
},
56
65
"description": "A single 4-shade, low-resolution photo. The core record of 2bit.pics."
57
66
}
58
67
},
59
68
"$type": "com.atproto.lexicon.schema",
60
69
"lexicon": 1
61
70
}