A comic manifest presenting a Bluesky post thread as a paginated comic. The record key SHOULD equal the rkey of the subject post so that clients can look up this record directly from a post. `posts`, when present, is an ordered snapshot of the thread composition; readers may alternatively reconstruct pages by walking the self-reply chain from `subject`.
any
Any valid record key
Properties
createdAt
string
datetime
Required
Client-declared timestamp when this record was created.
labels
union
Optional
Self labels for this comic as a whole. Labels on the referenced posts remain authoritative for the images themselves.
language
string
language
Optional
Primary language of the comic content.
pageCount
integer
Optional
Total page (image) count at the time of writing. Informational.
minimum: 1posts
array
of
ref
com.atproto.repo.strongRef
Optional
Ordered snapshot of the posts composing this comic as of the last record update. The first item MUST equal `subject`. Readers MAY render pages directly from this list without walking the reply graph; the live self-reply chain remains the source for pages appended after the record was written. Images are always fetched from the referenced posts' embeds in listed order; they are never duplicated here.
minLength: 1 itemsstartSide
string
Optional
Which side the first page is placed on in two-page spread view. Distinct from reading direction.
maxLength: 32 bytesright, leftrightsubject
ref
com.atproto.repo.strongRef
Required
Strong reference to the root post (source of the first page). Expected to be authored by the same account as this record.
title
string
Optional
Optional display title of the comic.
maxLength: 1000 bytesmaxGraphemes: 100 graphemesurl
string
uri
Required
Canonical reader URL where this comic can be read. Clients may present this as a 'read' action.
View raw schema
{
"key": "any",
"type": "record",
"record": {
"type": "object",
"required": [
"subject",
"url",
"createdAt"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Canonical reader URL where this comic can be read. Clients may present this as a 'read' action."
},
"posts": {
"type": "array",
"items": {
"ref": "com.atproto.repo.strongRef",
"type": "ref"
},
"minLength": 1,
"description": "Ordered snapshot of the posts composing this comic as of the last record update. The first item MUST equal `subject`. Readers MAY render pages directly from this list without walking the reply graph; the live self-reply chain remains the source for pages appended after the record was written. Images are always fetched from the referenced posts' embeds in listed order; they are never duplicated here."
},
"title": {
"type": "string",
"maxLength": 1000,
"description": "Optional display title of the comic.",
"maxGraphemes": 100
},
"labels": {
"refs": [
"com.atproto.label.defs#selfLabels"
],
"type": "union",
"description": "Self labels for this comic as a whole. Labels on the referenced posts remain authoritative for the images themselves."
},
"subject": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "Strong reference to the root post (source of the first page). Expected to be authored by the same account as this record."
},
"language": {
"type": "string",
"format": "language",
"description": "Primary language of the comic content."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when this record was created."
},
"pageCount": {
"type": "integer",
"minimum": 1,
"description": "Total page (image) count at the time of writing. Informational."
},
"startSide": {
"type": "string",
"default": "right",
"maxLength": 32,
"description": "Which side the first page is placed on in two-page spread view. Distinct from reading direction.",
"knownValues": [
"right",
"left"
]
}
}
},
"description": "A comic manifest presenting a Bluesky post thread as a paginated comic. The record key SHOULD equal the rkey of the subject post so that clients can look up this record directly from a post. `posts`, when present, is an ordered snapshot of the thread composition; readers may alternatively reconstruct pages by walking the self-reply chain from `subject`."
}