{
"id": "zone.zephyra.screens.frame",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"season",
"episode",
"frame",
"frameRate",
"resolution",
"image",
"createdAt"
],
"properties": {
"frame": {
"type": "integer",
"maximum": 8388608,
"minimum": 0,
"description": "Frame index within the episode video."
},
"image": {
"type": "blob",
"accept": [
"image/*"
],
"maxSize": 10485760,
"description": "PNG render of the frame."
},
"season": {
"type": "integer",
"maximum": 256,
"minimum": 1,
"description": "Season number."
},
"episode": {
"type": "integer",
"maximum": 256,
"minimum": 1,
"description": "Episode number within the season."
},
"subtitle": {
"type": "string",
"description": "Subtitle text active at this frame, if any. Not all frames have subtitles."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Timestamp the frame was published."
},
"frameRate": {
"type": "string",
"description": "Frame rate of the source video as a rational number string (e.g. '24000/1001'). Combine with `frame` to derive the time offset."
},
"resolution": {
"ref": "#resolution",
"type": "ref",
"description": "Pixel dimensions of `image`."
},
"externalRecords": {
"type": "array",
"items": {
"ref": "#externalRecord",
"type": "ref"
},
"description": "Records on external services or other ATProto collections that disseminate this frame."
}
}
}
},
"resolution": {
"type": "object",
"required": [
"width",
"height"
],
"properties": {
"width": {
"type": "integer",
"minimum": 1
},
"height": {
"type": "integer",
"minimum": 1
}
}
},
"externalRecord": {
"type": "object",
"required": [
"collection",
"ref"
],
"properties": {
"ref": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "Strong reference to the ATProto record."
},
"collection": {
"type": "string",
"description": "Identifier of the collection the record belongs to."
}
}
}
},
"lexicon": 1,
"description": "A single frame extracted from a TV show, published alongside disseminated posts on external services."
}