From
bafyreiabslfxbigs7yl7zst2ecsq22q2fa4suztaxu3so652h4s7cx7nya
indexed 2026-11-06 04:45 UTC
View this version
To
bafyreiaxmkxzabeq42gwhyc6eqhjqqvr3cfak264ibk7adda4monqob2gu
indexed 2026-11-07 07:19 UTC
View this version
Compatibility
backward compatible No changes detected.
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"main": {5
"description": "A consent receipt declaring permissions for AI training use of a referenced video record. Cryptographically signed by the user's repo key (inherent to ATproto records).",5
"description": "A consent receipt declaring permissions for AI training use of a referenced video record. Cryptographically signed by the user's repo key (inherent to ATproto records). The record key MUST equal the record key of the referenced org.consentvid.video record (a sidecar record, like app.bsky.feed.threadgate); consents with any other key are ignored. There is therefore at most one consent per video; replacing terms rewrites this record, and deleting it withdraws consent. Readers treat a consent as invalid unless videoCid is present, revocable, authorshipAttested and adultAttested are all true and peoplePresent is one of its knownValues (readers reject other values). Vocabulary values (modalities, purposes, modelClasses, compensation, rightsBasis, captureProvenance, peoplePresent) must not contain control or format characters.",66
"key": "tid",77
"record": {88
"properties": {99
"adultAttested": {1010
"description": "The contributor affirms, under their signing key, that they are an adult (18 or older, or the age of majority where they live, if higher) and legally capable of giving this consent. Self-declared, not verified. Optional in the schema for evolution compatibility, but ConsentVid treats a consent without adultAttested=true as invalid.",1111
"type": "boolean"1212
},1313
"authorshipAttested": {1414
"description": "The contributor affirms, under their signing key, that they recorded this video themselves (or are otherwise its rightful author) and are authorized to grant this consent. A consent receipt is invalid unless this is true; uploading someone else's video and consenting to its use would be unlawful.",1515
"type": "boolean"1616
},1717
"captureProvenance": {1818
"description": "Strength of the capture-provenance guarantee. 'attested' = capture-time cryptographic provenance (e.g. C2PA/CAWG) binds the recording to the contributor's DID; 'selfAttested' = signed authorship attestation only; 'unverified' = neither.",1919
"knownValues": [2020
"attested",2121
"selfAttested",2222
"unverified"2323
],2424
"type": "string"2525
},2626
"compensation": {2727
"description": "What compensation the contributor declares they expect. Informational only: ConsentVid does not broker or enforce payment. Researchers may filter on it.",2828
"knownValues": [2929
"none",3030
"creditOnly",3131
"monetary"3232
],3333
"type": "string"3434
},3535
"createdAt": {36
"description": "Record write time. Informational: there is only ever one consent per video.",3637
"format": "datetime",3738
"type": "string"3839
},3940
"expiresAt": {40
"description": "Optional expiry; after this time the consent is no longer valid.",41
"description": "Optional expiry; after this time the consent is no longer valid. Must be later than createdAt.",4142
"format": "datetime",4243
"type": "string"4344
},4445
"modalities": {46
"description": "What may be used: 'video' = the picture; 'audio' = the soundtrack; 'transcript' = text derived from the speech; 'face' = identifiable faces (e.g. for face recognition or synthesis); 'voice' = identifiable voices (e.g. for speaker recognition or voice cloning). 'face' and 'voice' are incompatible with peoplePresent 'noIdentifiablePeople'. No duplicate values.",4547
"items": {4648
"knownValues": [4749
"video",4850
"audio",4951
"transcript",5052
"face",5153
"voice"5254
],5355
"type": "string"5456
},5557
"minLength": 1,5658
"type": "array"5759
},5860
"modelClasses": {59
"description": "WHO may use the data, and under what release model. 'foundationModel' is DEPRECATED: it describes a kind of model, not a user; new clients don't offer it, but it remains valid in existing records.",61
"description": "WHO may use the data, and under what release model. 'foundationModel' is DEPRECATED: it describes a kind of model, not a user; new clients don't offer it, but it remains valid in existing records. No duplicate values.",6062
"items": {6163
"knownValues": [6264
"academic",6365
"openWeights",6466
"commercial",6567
"foundationModel"6668
],6769
"type": "string"6870
},6971
"minLength": 1,7072
"type": "array"7173
},7274
"peoplePresent": {7375
"description": "Who identifiably appears or is heard in the video: 'onlyMe' = only the contributor; 'allConsented' = every identifiable person gave the contributor permission for this use; 'noIdentifiablePeople' = no identifiable face or voice (e.g. hands-only footage), which is incompatible with the 'face' and 'voice' modalities. Optional in the schema for evolution compatibility, but ConsentVid treats a consent without one of these values as invalid.",7476
"knownValues": [7577
"onlyMe",7678
"allConsented",7779
"noIdentifiablePeople"7880
],7981
"type": "string"8082
},8183
"purposes": {82
"description": "What the data may be used FOR. 'researchOnly' is DEPRECATED: it overlaps the 'academic' model class (who may use it); new clients don't offer it, but it remains valid in existing records.",84
"description": "What the data may be used FOR. 'researchOnly' is DEPRECATED: it overlaps the 'academic' model class (who may use it); new clients don't offer it, but it remains valid in existing records. No duplicate values.",8385
"items": {8486
"knownValues": [8587
"training",8688
"evaluation",8789
"benchmarking",8890
"researchOnly"8991
],9092
"type": "string"9193
},9294
"minLength": 1,9395
"type": "array"9496
},9597
"revocable": {9698
"description": "Whether the contributor may withdraw consent. Consent to processing personal data (faces, voices) must be withdrawable (GDPR Art. 7(3)); ConsentVid clients always write true. Withdrawal is performed by deleting this record.",9799
"type": "boolean"98100
},99101
"rightsBasis": {100102
"description": "Basis on which the contributor holds the right to grant consent: 'ownRecording' = they captured it, 'licensed' = licensed from the creator, 'otherRightsHolder' = other documented basis.",101103
"knownValues": [102104
"ownRecording",103105
"licensed",104106
"otherRightsHolder"105107
],106108
"type": "string"107109
},108110
"videoCid": {109
"description": "CID of the exact org.consentvid.video record version this consent applies to (together with videoUri, a strong reference). If the video record is later rewritten, this consent no longer applies to it.",111
"description": "CID of the exact org.consentvid.video record version this consent applies to (together with videoUri, a strong reference): CIDv1 (dag-cbor, sha-256) in base32, exactly as returned by the PDS. If the video record is later rewritten, this consent no longer applies to it. Optional in the schema for evolution compatibility, but readers treat a consent without it as invalid.",110112
"format": "cid",111113
"type": "string"112114
},113115
"videoUri": {114
"description": "AT-URI of the org.consentvid.video record this consent applies to. Must be in the same repo as this consent.",116
"description": "AT-URI of the org.consentvid.video record this consent applies to. Must be the DID-form at://<did>/org.consentvid.video/<rkey> in the same repo as this consent, with the same record key; handle-form URIs are invalid.",115117
"format": "at-uri",116118
"type": "string"117119
}118120
},119121
"required": [120122
"videoUri",121123
"modalities",122124
"purposes",123125
"modelClasses",124126
"compensation",125127
"revocable",126128
"authorshipAttested",127129
"createdAt"128130
],129131
"type": "object"130132
},131133
"type": "record"132134
}133135
},134136
"id": "org.consentvid.consent",135137
"lexicon": 1136138
}