blobs and images
const { blob, cid, mimeType, size, aspectRatio } = await airspace.blobs.upload(file, { maxBytes: 2_000_000 })
await airspace.projects.put(rkey, { ...value, images: [{ alt: 'Screenshot', image: blob }] })
await airspace.blobs.image(project.value.images?.[0]) // { url, alt, width, height }
await airspace.blobs.image(project.value.cover) // a bare blob field works too, with an empty altImage dimensions come from the file header, without decoding; the parser only loads when you call upload(). The token values of a community.lexicon.app.defs array live on the generated constants: community.lexicon.app.defs.purposeScreenshot.value.
airspace.blobs.url(blob) is async, since it needs the resolved PDS URL.