# art.graphik.issue

> Published by [graphik.art](https://lexicon.garden/identity/did:plc:3vr6kzmrdua5wlmb755uvjfu)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:3vr6kzmrdua5wlmb755uvjfu/art.graphik.issue)
- [Documentation](https://lexicon.garden/lexicon/did:plc:3vr6kzmrdua5wlmb755uvjfu/art.graphik.issue/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:3vr6kzmrdua5wlmb755uvjfu/art.graphik.issue/examples)

## Definitions

### `art.graphik.issue`

**Type**: `record`

One issue or chapter. Points at its series by AT-URI rather than being nested inside it, so a series record does not have to be rewritten (and re-synced) every time a chapter ships, and so an anthology can accept an issue from another repo.

**Key**: `tid`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `tags` | `array` | No |  |
| `cover` | `blob` | No |  |
| `pages` | `array` | Yes | The pages, in reading order. |
| `title` | `string` | No | Display label when the number alone isn't the name. |
| `format` | `string` | No | Per-issue override; inherits from the series when absent. |
| `number` | `integer` | No | Issue number. Fractional numbering is expressed via `numberDecimal` so an interlude can sit between 1 and 2 without renumbering anything. |
| `series` | `string` (at-uri) | No | AT-URI of the art.graphik.series this belongs to. Absent for a one-shot. |
| `createdAt` | `string` (datetime) | Yes |  |
| `description` | `string` | No | Author's note or synopsis for this issue. |
| `publishedAt` | `string` (datetime) | No | The date the creator claims for this issue. Feeds sort on this, not on when we indexed it. |
| `contributors` | `array` | No |  |
| `contentRating` | `string` | No |  |
| `numberDecimal` | `string` | No | Issue number as a decimal string (e.g. "1.5"). Takes precedence over `number` when both are present. |
| `readingDirection` | `string` | No | Per-issue override; inherits from the series when absent. |

### `art.graphik.issue#page`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `alt` | `string` | No | Alt text. Comics are images; without this the work is simply unavailable to a screen-reader user. |
| `image` | `blob` | Yes | The page art. |
| `width` | `integer` | No | Intrinsic pixel width, so a reader can reserve the right box before the image decodes. |
| `height` | `integer` | No | Intrinsic pixel height. |
| `spread` | `boolean` | No | A two-page spread that should render across the fold rather than being paired with a neighbour. |
| `placeholder` | `string` | No | Tiny inline preview (blurhash or data URI) shown while the full page streams in. |

## Raw Schema

```json
{
  "id": "art.graphik.issue",
  "defs": {
    "main": {
      "key": "tid",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "pages",
          "createdAt"
        ],
        "properties": {
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 64
            },
            "maxLength": 32
          },
          "cover": {
            "type": "blob",
            "accept": [
              "image/png",
              "image/jpeg",
              "image/webp",
              "image/avif"
            ],
            "maxSize": 10000000
          },
          "pages": {
            "type": "array",
            "items": {
              "ref": "#page",
              "type": "ref"
            },
            "maxLength": 1000,
            "description": "The pages, in reading order."
          },
          "title": {
            "type": "string",
            "maxLength": 1000,
            "description": "Display label when the number alone isn't the name.",
            "maxGraphemes": 100
          },
          "format": {
            "type": "string",
            "maxLength": 16,
            "description": "Per-issue override; inherits from the series when absent.",
            "knownValues": [
              "page",
              "strip"
            ]
          },
          "number": {
            "type": "integer",
            "description": "Issue number. Fractional numbering is expressed via `numberDecimal` so an interlude can sit between 1 and 2 without renumbering anything."
          },
          "series": {
            "type": "string",
            "format": "at-uri",
            "description": "AT-URI of the art.graphik.series this belongs to. Absent for a one-shot."
          },
          "createdAt": {
            "type": "string",
            "format": "datetime"
          },
          "description": {
            "type": "string",
            "maxLength": 10000,
            "description": "Author's note or synopsis for this issue.",
            "maxGraphemes": 1000
          },
          "publishedAt": {
            "type": "string",
            "format": "datetime",
            "description": "The date the creator claims for this issue. Feeds sort on this, not on when we indexed it."
          },
          "contributors": {
            "type": "array",
            "items": {
              "ref": "art.graphik.series#contributor",
              "type": "ref"
            },
            "maxLength": 64
          },
          "contentRating": {
            "type": "string",
            "maxLength": 16,
            "knownValues": [
              "all-ages",
              "teen",
              "mature",
              "explicit"
            ]
          },
          "numberDecimal": {
            "type": "string",
            "maxLength": 16,
            "description": "Issue number as a decimal string (e.g. \"1.5\"). Takes precedence over `number` when both are present."
          },
          "readingDirection": {
            "type": "string",
            "maxLength": 16,
            "description": "Per-issue override; inherits from the series when absent.",
            "knownValues": [
              "ltr",
              "rtl"
            ]
          }
        }
      },
      "description": "One issue or chapter. Points at its series by AT-URI rather than being nested inside it, so a series record does not have to be rewritten (and re-synced) every time a chapter ships, and so an anthology can accept an issue from another repo."
    },
    "page": {
      "type": "object",
      "required": [
        "image"
      ],
      "properties": {
        "alt": {
          "type": "string",
          "maxLength": 2000,
          "description": "Alt text. Comics are images; without this the work is simply unavailable to a screen-reader user."
        },
        "image": {
          "type": "blob",
          "accept": [
            "image/png",
            "image/jpeg",
            "image/webp",
            "image/avif"
          ],
          "maxSize": 20000000,
          "description": "The page art."
        },
        "width": {
          "type": "integer",
          "description": "Intrinsic pixel width, so a reader can reserve the right box before the image decodes."
        },
        "height": {
          "type": "integer",
          "description": "Intrinsic pixel height."
        },
        "spread": {
          "type": "boolean",
          "description": "A two-page spread that should render across the fold rather than being paired with a neighbour."
        },
        "placeholder": {
          "type": "string",
          "maxLength": 8000,
          "description": "Tiny inline preview (blurhash or data URI) shown while the full page streams in."
        }
      }
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}
```
