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
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
version | 1 | Yes | — | Manifest version. Must be the literal 1. |
assets | object[] | Yes | — | The asset registry. See Asset entries. |
screens | unknown[] | No | — | Optional capture metadata. |
Asset entries
Each entry inassets[] 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.
