> ## Documentation Index
> Fetch the complete documentation index at: https://docs.inklyai.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Assets

> The assets.json manifest and asset:<id> references.

Managed assets — captured screenshots, recordings, generated audio, and uploaded media — are tracked in a per-demo `assets.json` file alongside `demo.config.json`.

Files dropped into a hub's `public/` folder are not tracked here — they are served directly at relative URLs. Demo config may reference those by path, but managed assets use `asset:<id>` and resolve by `id`.

## `assets.json`

```json theme={null}
{
  "version": 1,
  "assets": [
    {
      "id": "cap-001",
      "sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
      "kind": "image",
      "contentType": "image/png",
      "publicUrl": "https://cdn.inklyai.dev/assets/9f86…png",
      "cdnPath": "assets/9f86…png",
      "size": 184320,
      "viewport": { "w": 2800, "h": 1600 },
      "createdAt": "2026-06-05T12:00:00.000Z",
      "updatedAt": "2026-06-05T12:00:00.000Z"
    }
  ]
}
```

| Field     | Type        | Required | Default | Notes                                                    |
| --------- | ----------- | -------- | ------- | -------------------------------------------------------- |
| `version` | `1`         | Yes      | —       | Manifest version. Must be the literal `1`.               |
| `assets`  | `object[]`  | Yes      | —       | The asset registry. See [Asset entries](#asset-entries). |
| `screens` | `unknown[]` | No       | —       | Optional capture metadata.                               |

## Asset entries

Each entry in `assets[]` records one managed asset.

| Field         | Type     | Required | Default | Notes                                                                                                               |
| ------------- | -------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------- |
| `id`          | `string` | Yes      | —       | Stable id referenced from demo config as `asset:<id>`. Non-empty. Capture-written ids follow the `cap-NNN` pattern. |
| `sha256`      | `string` | Yes      | —       | Content hash for the asset bytes. Exactly 64 lowercase hex characters.                                              |
| `kind`        | enum     | Yes      | —       | One of `screenshot`, `image`, `video`, `audio`, `font`, `other`.                                                    |
| `path`        | `string` | No       | —       | Optional source or delivery metadata. Non-empty when present.                                                       |
| `uri`         | `string` | No       | —       | Optional legacy metadata. Non-empty when present.                                                                   |
| `contentType` | `string` | No       | —       | MIME type recorded at upload time; lets resolvers derive a file extension. Non-empty when present.                  |
| `publicUrl`   | `string` | No       | —       | Public CDN URL for synced or published assets. Non-empty when present.                                              |
| `cdnPath`     | `string` | No       | —       | CDN object key for synced or published assets. Non-empty when present.                                              |
| `file`        | `string` | No       | —       | Demo-local file within the demo's `public/` folder. Used for local and offline assets, never as a CDN URL.          |
| `size`        | `number` | No       | —       | Byte length. Non-negative integer. Omitted when unknown at write time.                                              |
| `createdAt`   | `string` | No       | —       | Creation timestamp. Non-empty when present.                                                                         |
| `updatedAt`   | `string` | No       | —       | Last-update timestamp. Non-empty when present.                                                                      |
| `viewport`    | `object` | No       | —       | Capture-time viewport, set for screenshots and recordings. `{ w, h }`, both positive integers.                      |

## `asset:<id>` references

Across demo config, managed assets are referenced with the `asset:<id>` URI scheme, where `<id>` matches an entry's `id` in `assets.json`.

You can use `asset:<id>` in places such as content step `background.src`, widget `image.src`, headline `logo.src`, voiceover `src`, and brand `logo`. Inkly resolves these references when it previews, publishes, or hosts the demo.

Raw `https:` URLs, `data:` URLs, and in-repo paths are also accepted, but `asset:<id>` is preferred because it survives file moves and supports deduped, hash-addressed storage.

The capture pipeline writes both the `assets.json` entries and the matching `asset:<id>` references into demo config. See [Agentic capture](/cli/capture).
