pics.2bit.feed.photo

2bit.pics

Schema Diff

+11 -64

From

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

To

CID
bafyreibt7nvutwb...
Indexed At
2026-08-15 19:51 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

24 breaking changes, 4 non-breaking changes.

Breaking Changes (24)
  • RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear" }
  • RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.captureMethod" }
  • RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.device" }
  • RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.notes" }
  • RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.software" }
  • RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.transferTool" }
  • RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata" }
  • RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.alt" }
  • RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.caption" }
  • RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.capturedAt" }
  • RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.gear" }
  • RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo:body.metadata" }
  • RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.captureMethod", kind: "prop", name: Some("captureMethod") }
  • RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.device", kind: "prop", name: Some("device") }
  • RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.notes", kind: "prop", name: Some("notes") }
  • RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.software", kind: "prop", name: Some("software") }
  • RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.transferTool", kind: "prop", name: Some("transferTool") }
  • RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.alt", kind: "prop", name: Some("alt") }
  • RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.caption", kind: "prop", name: Some("caption") }
  • RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.capturedAt", kind: "prop", name: Some("capturedAt") }
  • RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.gear", kind: "prop", name: Some("gear") }
  • RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#metadata.gear", tgt: "pics.2bit.feed.photo#gear", kind: "ref", name: None }
  • RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.metadata", kind: "prop", name: Some("metadata") }
  • RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo:body.metadata", tgt: "pics.2bit.feed.photo#metadata", kind: "ref", name: None }
Non-Breaking Changes (4)
  • AddedVertex AddedVertex { vertex_id: "pics.2bit.feed.photo:body.alt" }
  • AddedVertex AddedVertex { vertex_id: "pics.2bit.feed.photo:body.caption" }
  • AddedEdge AddedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.alt", kind: "prop", name: Some("alt") }
  • AddedEdge AddedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.caption", kind: "prop", name: Some("caption") }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear" }
  • RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.captureMethod" }
  • RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.device" }
  • RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.notes" }
  • RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.software" }
  • RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.transferTool" }
  • RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata" }
  • RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.alt" }
  • RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.caption" }
  • RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.capturedAt" }
  • RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.gear" }
  • RemovedVertex { vertex_id: "pics.2bit.feed.photo:body.metadata" }

Added Elements

  • AddedVertex { vertex_id: "pics.2bit.feed.photo:body.alt" }
  • AddedVertex { vertex_id: "pics.2bit.feed.photo:body.caption" }

Additional Notes

  • Breaking: RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.captureMethod", kind: "prop", name: Some("captureMethod") }
  • Breaking: RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.device", kind: "prop", name: Some("device") }
  • Breaking: RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.notes", kind: "prop", name: Some("notes") }
  • Breaking: RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.software", kind: "prop", name: Some("software") }
  • Breaking: RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.transferTool", kind: "prop", name: Some("transferTool") }
  • Breaking: RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.alt", kind: "prop", name: Some("alt") }
  • Breaking: RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.caption", kind: "prop", name: Some("caption") }
  • Breaking: RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.capturedAt", kind: "prop", name: Some("capturedAt") }
  • Breaking: RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.gear", kind: "prop", name: Some("gear") }
  • Breaking: RemovedEdge { src: "pics.2bit.feed.photo#metadata.gear", tgt: "pics.2bit.feed.photo#gear", kind: "ref", name: None }
  • Breaking: RemovedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.metadata", kind: "prop", name: Some("metadata") }
  • Breaking: RemovedEdge { src: "pics.2bit.feed.photo:body.metadata", tgt: "pics.2bit.feed.photo#metadata", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.alt", kind: "prop", name: Some("alt") }
  • Non-breaking: AddedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.caption", kind: "prop", name: Some("caption") }
1 1
{
2 2
  "id": "pics.2bit.feed.photo",
3 3
  "defs": {
4 -
    "gear": {
5 -
      "type": "object",
6 -
      "properties": {
7 -
        "notes": {
8 -
          "type": "string",
9 -
          "maxLength": 300
10 -
        },
11 -
        "device": {
12 -
          "type": "string",
13 -
          "maxLength": 100,
14 -
          "description": "e.g. 'Game Boy Camera (1998)', 'Analogue Pocket + GB Camera', 'Game Boy Pocket'"
15 -
        },
16 -
        "software": {
17 -
          "type": "string",
18 -
          "maxLength": 100,
19 -
          "description": "e.g. emulator name, dithering tool/algorithm name"
20 -
        },
21 -
        "transferTool": {
22 -
          "type": "string",
23 -
          "maxLength": 100,
24 -
          "description": "e.g. 'GB Camera Capture Cable', 'BennVenn cart reader'"
25 -
        },
26 -
        "captureMethod": {
27 -
          "enum": [
28 -
            "cartridge",
29 -
            "emulator",
30 -
            "software",
31 -
            "other"
32 -
          ],
33 -
          "type": "string"
34 -
        }
35 -
      },
36 -
      "description": "Self-reported capture equipment/method. Optional, but encouraged - this is the whole hobby."
37 -
    },
38 4
    "main": {
39 5
      "key": "tid",
40 6
      "type": "record",
41 7
      "record": {
42 8
        "type": "object",
43 9
        "required": [
44 10
          "image",
45 11
          "colors",
46 12
          "createdAt"
47 13
        ],
48 14
        "properties": {
15 +
          "alt": {
16 +
            "type": "string",
17 +
            "maxLength": 3000,
18 +
            "description": "Alt text for accessibility.",
19 +
            "maxGraphemes": 300
20 +
          },
49 21
          "image": {
50 22
            "type": "bytes",
51 23
            "maxLength": 3584,
52 24
            "minLength": 3584,
53 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)."
54 26
          },
55 27
          "colors": {
56 28
            "type": "array",
57 29
            "items": {
58 30
              "type": "integer",
59 31
              "maximum": 16777215,
60 32
              "minimum": 0
61 33
            },
62 34
            "maxLength": 4,
63 35
            "minLength": 4,
64 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."
65 37
          },
66 -
          "metadata": {
67 -
            "ref": "#metadata",
68 -
            "type": "ref"
38 +
          "caption": {
39 +
            "type": "string",
40 +
            "maxLength": 5000,
41 +
            "description": "Free-text caption.",
42 +
            "maxGraphemes": 500
69 43
          },
70 44
          "createdAt": {
71 45
            "type": "string",
72 46
            "format": "datetime",
73 47
            "description": "When this photo record was published."
74 48
          }
75 49
        }
76 50
      },
77 51
      "description": "A single 4-shade, low-resolution photo. The core record of 2bit.pics."
78 -
    },
79 -
    "metadata": {
80 -
      "type": "object",
81 -
      "properties": {
82 -
        "alt": {
83 -
          "type": "string",
84 -
          "maxLength": 3000,
85 -
          "description": "Alt text for accessibility.",
86 -
          "maxGraphemes": 300
87 -
        },
88 -
        "gear": {
89 -
          "ref": "#gear",
90 -
          "type": "ref"
91 -
        },
92 -
        "caption": {
93 -
          "type": "string",
94 -
          "maxLength": 5000,
95 -
          "description": "Free-text caption.",
96 -
          "maxGraphemes": 500
97 -
        },
98 -
        "capturedAt": {
99 -
          "type": "string",
100 -
          "format": "datetime",
101 -
          "description": "When the photograph was captured, if known."
102 -
        }
103 -
      },
104 -
      "description": "Optional descriptive and capture metadata for the photo."
105 52
    }
106 53
  },
107 54
  "$type": "com.atproto.lexicon.schema",
108 55
  "lexicon": 1
109 56
}

Compare Other Versions

Lexicon Garden

@