pics.2bit.actor.profile

2bit.pics

Schema Diff

+27 -8

From

CID
bafyreigpn7aym2k...
Indexed At
2026-08-15 16:46 UTC
View this version

To

CID
bafyreie3jtjhwh7...
Indexed At
2026-08-20 03:52 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

3 breaking changes, 10 non-breaking changes.

Breaking Changes (3)
  • KindChanged KindChanged { vertex_id: "pics.2bit.actor.profile:body.avatar", old_kind: "blob", new_kind: "bytes" }
  • ConstraintAdded ConstraintAdded { vertex_id: "pics.2bit.actor.profile:body.avatar", sort: "maxLength", value: "3584" }
  • ConstraintAdded ConstraintAdded { vertex_id: "pics.2bit.actor.profile:body.avatar", sort: "minLength", value: "3584" }
Non-Breaking Changes (10)
  • AddedVertex AddedVertex { vertex_id: "com.atproto.label.defs#selfLabels" }
  • AddedVertex AddedVertex { vertex_id: "pics.2bit.actor.profile:body.avatarColors" }
  • AddedVertex AddedVertex { vertex_id: "pics.2bit.actor.profile:body.avatarColors:items" }
  • AddedVertex AddedVertex { vertex_id: "pics.2bit.actor.profile:body.labels" }
  • AddedVertex AddedVertex { vertex_id: "pics.2bit.actor.profile:body.updatedAt" }
  • AddedEdge AddedEdge { src: "pics.2bit.actor.profile:body", tgt: "pics.2bit.actor.profile:body.avatarColors", kind: "prop", name: Some("avatarColors") }
  • AddedEdge AddedEdge { src: "pics.2bit.actor.profile:body", tgt: "pics.2bit.actor.profile:body.labels", kind: "prop", name: Some("labels") }
  • AddedEdge AddedEdge { src: "pics.2bit.actor.profile:body", tgt: "pics.2bit.actor.profile:body.updatedAt", kind: "prop", name: Some("updatedAt") }
  • AddedEdge AddedEdge { src: "pics.2bit.actor.profile:body.avatarColors", tgt: "pics.2bit.actor.profile:body.avatarColors:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "pics.2bit.actor.profile:body.labels", tgt: "com.atproto.label.defs#selfLabels", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "com.atproto.label.defs#selfLabels" }
  • AddedVertex { vertex_id: "pics.2bit.actor.profile:body.avatarColors" }
  • AddedVertex { vertex_id: "pics.2bit.actor.profile:body.avatarColors:items" }
  • AddedVertex { vertex_id: "pics.2bit.actor.profile:body.labels" }
  • AddedVertex { vertex_id: "pics.2bit.actor.profile:body.updatedAt" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "pics.2bit.actor.profile:body.avatar", sort: "maxLength", value: "3584" }
  • ConstraintAdded ConstraintAdded { vertex_id: "pics.2bit.actor.profile:body.avatar", sort: "minLength", value: "3584" }

Additional Notes

  • Breaking: KindChanged { vertex_id: "pics.2bit.actor.profile:body.avatar", old_kind: "blob", new_kind: "bytes" }
  • Non-breaking: AddedEdge { src: "pics.2bit.actor.profile:body", tgt: "pics.2bit.actor.profile:body.avatarColors", kind: "prop", name: Some("avatarColors") }
  • Non-breaking: AddedEdge { src: "pics.2bit.actor.profile:body", tgt: "pics.2bit.actor.profile:body.labels", kind: "prop", name: Some("labels") }
  • Non-breaking: AddedEdge { src: "pics.2bit.actor.profile:body", tgt: "pics.2bit.actor.profile:body.updatedAt", kind: "prop", name: Some("updatedAt") }
  • Non-breaking: AddedEdge { src: "pics.2bit.actor.profile:body.avatarColors", tgt: "pics.2bit.actor.profile:body.avatarColors:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "pics.2bit.actor.profile:body.labels", tgt: "com.atproto.label.defs#selfLabels", kind: "ref", name: None }
1 1
{
2 2
  "id": "pics.2bit.actor.profile",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "literal:self",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "properties": {
10 10
          "gear": {
11 11
            "type": "string",
12 12
            "maxLength": 100,
13 13
            "description": "Main rig flex slot."
14 14
          },
15 15
          "avatar": {
16 -
            "type": "blob",
17 -
            "accept": [
18 -
              "image/png",
19 -
              "image/jpeg"
20 -
            ],
21 -
            "maxSize": 1000000,
22 -
            "description": "Ideally also dithered."
16 +
            "type": "bytes",
17 +
            "maxLength": 3584,
18 +
            "minLength": 3584,
19 +
            "description": "128x112 2bpp Game Boy Camera tile data, same layout as pics.2bit.feed.photo#image. Square avatars are produced by cropping at render time, not on write."
20 +
          },
21 +
          "labels": {
22 +
            "ref": "com.atproto.label.defs#selfLabels",
23 +
            "type": "ref",
24 +
            "description": "Self-applied labels on this account. 2bit.pics writes at most `!no-unauthenticated`, the atproto value meaning \"don't show this account to logged-out viewers\" - the same one Bluesky writes for its own logged-out visibility setting, so other clients already know how to read it."
23 25
          },
24 26
          "createdAt": {
25 27
            "type": "string",
26 -
            "format": "datetime"
28 +
            "format": "datetime",
29 +
            "description": "When this profile record was first published."
27 30
          },
31 +
          "updatedAt": {
32 +
            "type": "string",
33 +
            "format": "datetime",
34 +
            "description": "When this profile record was last edited. Unset on a profile that has never been edited since creation."
35 +
          },
28 36
          "description": {
29 37
            "type": "string",
30 38
            "maxLength": 2560,
31 39
            "maxGraphemes": 256
32 40
          },
33 41
          "displayName": {
34 42
            "type": "string",
35 43
            "maxLength": 640,
36 44
            "maxGraphemes": 64
45 +
          },
46 +
          "avatarColors": {
47 +
            "type": "array",
48 +
            "items": {
49 +
              "type": "integer",
50 +
              "maximum": 16777215,
51 +
              "minimum": 0
52 +
            },
53 +
            "maxLength": 4,
54 +
            "minLength": 4,
55 +
            "description": "Four 24-bit RGB colors (0 to 0xFFFFFF) corresponding to the avatar's 2bpp pixel values 0 through 3, where 0 is lightest and 3 is darkest."
37 56
          }
38 57
        }
39 58
      },
40 59
      "description": "A 2bit.pics profile."
41 60
    }
42 61
  },
43 62
  "$type": "com.atproto.lexicon.schema",
44 63
  "lexicon": 1
45 64
}

Compare Other Versions

Lexicon Garden

@