Skip to main content
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

{
  "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"
    }
  ]
}
FieldTypeRequiredDefaultNotes
version1YesManifest version. Must be the literal 1.
assetsobject[]YesThe asset registry. See Asset entries.
screensunknown[]NoOptional capture metadata.

Asset entries

Each entry in assets[] records one managed asset.
FieldTypeRequiredDefaultNotes
idstringYesStable id referenced from demo config as asset:<id>. Non-empty. Capture-written ids follow the cap-NNN pattern.
sha256stringYesContent hash for the asset bytes. Exactly 64 lowercase hex characters.
kindenumYesOne of screenshot, image, video, audio, font, other.
pathstringNoOptional source or delivery metadata. Non-empty when present.
uristringNoOptional legacy metadata. Non-empty when present.
contentTypestringNoMIME type recorded at upload time; lets resolvers derive a file extension. Non-empty when present.
publicUrlstringNoPublic CDN URL for synced or published assets. Non-empty when present.
cdnPathstringNoCDN object key for synced or published assets. Non-empty when present.
filestringNoDemo-local file within the demo’s public/ folder. Used for local and offline assets, never as a CDN URL.
sizenumberNoByte length. Non-negative integer. Omitted when unknown at write time.
createdAtstringNoCreation timestamp. Non-empty when present.
updatedAtstringNoLast-update timestamp. Non-empty when present.
viewportobjectNoCapture-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.