# page.cavu.pages

> Published by [cavu.page](https://lexicon.garden/identity/did:plc:citulkqjdzbnf7wd5xb6lled)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:citulkqjdzbnf7wd5xb6lled/page.cavu.pages)
- [Documentation](https://lexicon.garden/lexicon/did:plc:citulkqjdzbnf7wd5xb6lled/page.cavu.pages/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:citulkqjdzbnf7wd5xb6lled/page.cavu.pages/examples)

## Definitions

### `page.cavu.pages`

**Type**: `object`

Pre-paginated image content (comics, graphic novels, picture books, scanned pages) for a book chunk, carried in a site.standard.document record's `content` open union — the fixed-layout counterpart to a pub.leaflet.content text chunk. Each page is one image; readers lay pages into single-page or two-page-spread views using the book's pageProgression direction and each page's spread hint. The document's `textContent` field may carry a transcript or page descriptions for search and accessibility.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `pages` | `array` | Yes | Pages in reading order. Chunk boundaries are storage artifacts, invisible to the reader, exactly as for text chunks; a chunk is usually chapter- or issue-sized. |

### `page.cavu.pages#page`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | `string` | No | Stable anchor id, unique within the document — the comic equivalent of a text block id. Targets for TOC entries and intra-book links: (document AT-URI, page id), stable across edits, unlike array indices. |
| `alt` | `string` | No | Description of the page for accessibility — ideally a transcript of panels and dialogue. |
| `image` | `blob` | Yes | The page image at full resolution. Prefer formats that decode progressively (progressive JPEG, JPEG XL) so readers can show a low-resolution preview from a byte prefix where range requests are available. |
| `spread` | `string` | No | Placement hint for two-page-spread views, mirroring EPUB's page-spread properties: `left`/`right` pin the page to a physical side of the spread (renderers insert a blank slot when the natural flow disagrees, as print does), `center` gives the page a spread to itself. Absent means pages fill spreads in reading order per the book's pageProgression. Renderers treat wider-than-tall pages as `center` regardless. |
| `aspectRatio` | `ref` → `pub.leaflet.blocks.image#aspectRatio` | Yes | Intrinsic pixel dimensions, for layout before the blob loads. A page wider than tall is a double-page spread drawn as one image; renderers give it both slots of a two-page view. |

## Raw Schema

```json
{
  "id": "page.cavu.pages",
  "defs": {
    "main": {
      "type": "object",
      "required": [
        "pages"
      ],
      "properties": {
        "pages": {
          "type": "array",
          "items": {
            "ref": "#page",
            "type": "ref"
          },
          "maxLength": 1000,
          "description": "Pages in reading order. Chunk boundaries are storage artifacts, invisible to the reader, exactly as for text chunks; a chunk is usually chapter- or issue-sized."
        }
      },
      "description": "Pre-paginated image content (comics, graphic novels, picture books, scanned pages) for a book chunk, carried in a site.standard.document record's `content` open union — the fixed-layout counterpart to a pub.leaflet.content text chunk. Each page is one image; readers lay pages into single-page or two-page-spread views using the book's pageProgression direction and each page's spread hint. The document's `textContent` field may carry a transcript or page descriptions for search and accessibility."
    },
    "page": {
      "type": "object",
      "required": [
        "image",
        "aspectRatio"
      ],
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 1000,
          "description": "Stable anchor id, unique within the document — the comic equivalent of a text block id. Targets for TOC entries and intra-book links: (document AT-URI, page id), stable across edits, unlike array indices."
        },
        "alt": {
          "type": "string",
          "maxLength": 20000,
          "description": "Description of the page for accessibility — ideally a transcript of panels and dialogue.",
          "maxGraphemes": 5000
        },
        "image": {
          "type": "blob",
          "accept": [
            "image/*"
          ],
          "maxSize": 20000000,
          "description": "The page image at full resolution. Prefer formats that decode progressively (progressive JPEG, JPEG XL) so readers can show a low-resolution preview from a byte prefix where range requests are available."
        },
        "spread": {
          "type": "string",
          "description": "Placement hint for two-page-spread views, mirroring EPUB's page-spread properties: `left`/`right` pin the page to a physical side of the spread (renderers insert a blank slot when the natural flow disagrees, as print does), `center` gives the page a spread to itself. Absent means pages fill spreads in reading order per the book's pageProgression. Renderers treat wider-than-tall pages as `center` regardless.",
          "knownValues": [
            "left",
            "right",
            "center"
          ]
        },
        "aspectRatio": {
          "ref": "pub.leaflet.blocks.image#aspectRatio",
          "type": "ref",
          "description": "Intrinsic pixel dimensions, for layout before the blob loads. A page wider than tall is a double-page spread drawn as one image; renderers give it both slots of a two-page view."
        }
      }
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}
```
