Published on March 05th 2023
This document is licensed under Creative Commons Attribution-Share Alike.
The OPDS Page Streaming Extension (OPDS-PSE) is an unofficial extension of the Open Distribution Publication System. Its goal is to enrich the OPDS feed with information allowing the client to request a specific page of a document without having to download it completely. This extension was designed primarily for comic books, to allow reading them on connected devices without having to wait for the book to be completely downloaded.
OPDS-PSE adds new attributes and conventions but does not break compatibility. OPDS-PSE feeds are still valid OPDS feeds.
The keywords "MUST", "MUST NOT", "SHOULD", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
The OPDS-PSE extension simply consists in an additional type of Acquisition Link in an OPDS entry. This link is to be used by clients to request pages of a document, one page at a time.
An OPDS-PSE feed MUST declare the OPDS-PSE namespace: http://vaemendis.net/opds-pse/ns
Namespace declaration in the feed element (in our example, we use the prefix pse
):
<feed xmlns="http://www.w3.org/2005/Atom"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:pse="http://vaemendis.net/opds-pse/ns"
xmlns:opds="http://opds-spec.org/2010/catalog"
xml:lang="en"
xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
Additional link in an entry to allow page by page access to the document:
<link rel="http://vaemendis.net/opds-pse/stream"
type="image/jpeg"
href="/opds-comics/stream/1217?page={pageNumber}&width={maxWidth}"
pse:count="35"
pse:lastRead="10"
pse:lastReadDate="2010-01-10T10:01:11Z"
/>
The Link MUST contain the following attributes:
rel
MUST have the valuehttp://vaemendis.net/opds-pse/stream
that indicates that this link is a OPDS-PSE page streaming linktype
MUST indicate the type of image returned by the server (value MUST be one of the following :image/jpeg
,image/gif
orimage/png
)count
MUST provide the number of pages of the documenthref
MUST provide the URL that the client has to use to get individual pages of the document. This URL MUST contain the string{pageNumber}
, which the client MUST replace with the number of the desired page. This URL MAY contain the string{maxWidth}
that the client MUST replace (if it exists) by the desired maximum width of the returned page.
The Link MAY contain the following attributes:
lastRead
MUST provide the last page read for this document. The numbering starts at 1.lastReadDate
MAY provide the date of when thelastRead
attribute was last updated. Attribute MUST conform Atom's Date construct.
- pages are numbered from
0
toN-1
(N
being the total number of pages). - double pages (one image containing two pages) MUST be treated as a single page. If a split is to be done, it is the responsibility of the client. The server MUST NOT split images.
- Panels (2.14.2+) (iOS)