From
bafyreidwa6ad62nccxrr2wdwokkhrv26fdyc6kl2jcztqagynrb726tgt4
indexed 2026-11-06 04:45 UTC
View this version
To
bafyreiaf72olmhm5izxk6ubfmrbk3wfqzwrivn3ix7fpm6xbxipma2gtmi
indexed 2026-11-07 07:19 UTC
View this version
Compatibility
breaking 1 breaking change, 0 non-breaking changes.
Breaking changes (1)
- ConstraintAdded ConstraintAdded { vertex_id: "org.consentvid.video:body.mimeType", sort: "knownValues", value: "[\"video/3gpp\",\"video/matroska\",\"video/mp2t\",\"video/mp4\",\"video/mpeg\",\"video/quicktime\",\"video/vnd.avi\",\"video/webm\",\"video/x-matroska\",\"video/x-msvideo\"]" }
Migration guidance
Constraint changes
- ConstraintAdded ConstraintAdded { vertex_id: "org.consentvid.video:body.mimeType", sort: "knownValues", value: "[\"video/3gpp\",\"video/matroska\",\"video/mp2t\",\"video/mp4\",\"video/mpeg\",\"video/quicktime\",\"video/vnd.avi\",\"video/webm\",\"video/x-matroska\",\"video/x-msvideo\"]" }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"main": {5
"description": "A video registered for inclusion in a consent-first dataset. Storage of the bytes is decoupled: this record only commits to a content hash and a pointer.",5
"description": "A video registered for inclusion in a consent-first dataset. Storage of the bytes is decoupled: this record only commits to a content hash and a pointer. Its consent, if any, is the org.consentvid.consent record in the same repo with the same record key.",66
"key": "tid",77
"record": {88
"properties": {99
"contentHash": {10
"description": "SHA-256 of the video bytes, hex-encoded with 'sha256-' prefix.",10
"description": "SHA-256 of the video bytes: \"sha256-\" followed by 64 lowercase hex characters.",1111
"maxLength": 80,1212
"type": "string"1313
},1414
"createdAt": {15
"description": "Record write time.",1516
"format": "datetime",1617
"type": "string"1718
},1819
"description": {1920
"maxLength": 3000,2021
"type": "string"2122
},2223
"durationMs": {23
"description": "Duration in milliseconds. ATproto records have no float type.",24
"description": "Duration in milliseconds: non-negative, at most 2^53-1. ATproto records have no float type.",2425
"type": "integer"2526
},2627
"height": {28
"description": "Frame height in pixels: non-negative, at most 2^53-1.",2729
"type": "integer"2830
},2931
"language": {30
"description": "BCP-47 language tag for primary audio if any.",32
"description": "BCP-47 language tag for the primary spoken language, if any, with a lowercase primary subtag (e.g. en, cs, pt-BR); readers reject other values.",3133
"type": "string"3234
},3335
"mimeType": {34
"description": "MIME type of the video bytes, e.g. video/mp4.",36
"description": "MIME type of the video bytes, e.g. video/mp4. Readers reject values outside knownValues: it becomes the dataset's encodingFormat, which dataset loaders act on.",37
"knownValues": [38
"video/3gpp",39
"video/matroska",40
"video/mp2t",41
"video/mp4",42
"video/mpeg",43
"video/quicktime",44
"video/vnd.avi",45
"video/webm",46
"video/x-matroska",47
"video/x-msvideo"48
],3549
"maxLength": 128,3650
"type": "string"3751
},3852
"storageRef": {3953
"ref": "#storageRef",4054
"type": "ref"4155
},4256
"tags": {57
"description": "Topic tags, at most 32, each at most 64 UTF-8 bytes.",4358
"items": {4459
"maxLength": 64,4560
"type": "string"4661
},4762
"maxLength": 32,4863
"type": "array"4964
},5065
"title": {66
"description": "Human-readable title, at most 300 UTF-8 bytes.",5167
"maxLength": 300,5268
"type": "string"5369
},5470
"width": {71
"description": "Frame width in pixels: non-negative, at most 2^53-1.",5572
"type": "integer"5673
}5774
},5875
"required": [5976
"title",6077
"contentHash",6178
"storageRef",6279
"createdAt"6380
],6481
"type": "object"6582
},6683
"type": "record"6784
},6885
"storageRef": {86
"description": "Where the video bytes live. Readers reject refs whose value does not match the kind.",6987
"properties": {7088
"kind": {89
"description": "'url' = a public https URL; 'r2' = the public https URL of a Cloudflare R2 object; 'peertube' = an https watch/download URL on a PeerTube instance (for these three: a public host on the default port, no credentials); 'ipfs' = a CID (bafy... or Qm...), optionally ipfs://-prefixed; 'local' = an opaque contributor-side name, never dereferenced (no control characters).",7190
"knownValues": [7291
"url",7392
"local",7493
"ipfs",7594
"r2",7695
"peertube"7796
],7897
"type": "string"7998
},8099
"value": {81100
"description": "Where the bytes live: a URL (url/r2/peertube), a CID (ipfs), or for 'local' an opaque contributor-side name. Never an absolute filesystem path (records are public).",82101
"type": "string"83102
}84103
},85104
"required": [86105
"kind",87106
"value"88107
],89108
"type": "object"90109
}91110
},92111
"id": "org.consentvid.video",93112
"lexicon": 194113
}