# zone.zephyra.screens.frame

> Published by [zephyra.zone](https://lexicon.garden/identity/did:plc:qdzngsk72vcfytwvuhbm7z6g)

✓ This is the authoritative definition for this NSID.

## Description

A single frame extracted from a TV show, published alongside disseminated posts on external services.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:qdzngsk72vcfytwvuhbm7z6g/zone.zephyra.screens.frame)
- [Documentation](https://lexicon.garden/lexicon/did:plc:qdzngsk72vcfytwvuhbm7z6g/zone.zephyra.screens.frame/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:qdzngsk72vcfytwvuhbm7z6g/zone.zephyra.screens.frame/examples)

## Definitions

### `zone.zephyra.screens.frame`

**Type**: `record`

**Key**: `tid`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `frame` | `integer` | Yes | Index of the frame within the episode video file. |
| `image` | `blob` | Yes | Image render of the frame. |
| `season` | `integer` | Yes | Season number. 1-indexed. |
| `episode` | `integer` | Yes | Episode number within the season. 1-indexed. |
| `subtitle` | `string` | No | Subtitle text active at this frame, if any. Not all frames have subtitles. |
| `createdAt` | `string` (datetime) | Yes | Timestamp the frame was published. |
| `frameRate` | `string` | Yes | Frame rate of the source video, probably as a rational number string (e.g. '24000/1001'). Combine with `frame` to derive the time offset. |
| `resolution` | `ref` → `#resolution` | Yes | Pixel dimensions of `image`. |
| `externalRecords` | `array` | Yes | Records on external services or other ATProto collections that disseminate this frame. |

### `zone.zephyra.screens.frame#resolution`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `width` | `integer` | Yes |  |
| `height` | `integer` | Yes |  |

### `zone.zephyra.screens.frame#externalRecord`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `ref` | `ref` → `com.atproto.repo.strongRef` | Yes | Strong reference to the ATProto record. |
| `collection` | `string` | Yes | Identifier of the collection the record belongs to. |

## Raw Schema

```json
{
  "id": "zone.zephyra.screens.frame",
  "defs": {
    "main": {
      "key": "tid",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "episode",
          "externalRecords",
          "frame",
          "frameRate",
          "image",
          "resolution",
          "season",
          "createdAt"
        ],
        "properties": {
          "frame": {
            "type": "integer",
            "maximum": 8388608,
            "minimum": 0,
            "description": "Index of the frame within the episode video file."
          },
          "image": {
            "type": "blob",
            "accept": [
              "image/*"
            ],
            "maxSize": 10485760,
            "description": "Image render of the frame."
          },
          "season": {
            "type": "integer",
            "maximum": 256,
            "minimum": 1,
            "description": "Season number. 1-indexed."
          },
          "episode": {
            "type": "integer",
            "maximum": 256,
            "minimum": 1,
            "description": "Episode number within the season. 1-indexed."
          },
          "subtitle": {
            "type": "string",
            "maxLength": 1024,
            "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, probably 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": [
        "height",
        "width"
      ],
      "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."
}
```
