Version: 1.0
Status: Informational
Date: 2026-04-06
Authors: hyugogirubato, contributors
This document specifies the CBZ (Comic Book ZIP) file format, a widely-adopted standard for packaging and distributing digital comic books, manga, and graphic novels. CBZ files are ZIP archives containing sequential image files and an optional XML metadata descriptor (ComicInfo.xml). This RFC consolidates existing community practices, the ComicInfo XML schema (versions 1.0 through 2.1), and implementation experience into a single authoritative reference.
This document is an informational specification. It describes the CBZ format as implemented by major comic book readers and management tools including ComicRack, Kavita, Komga, Calibre, YACReader, and others. The format originated from the ComicRack application and has been extended by the community through the anansi-project.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.
| Term | Definition |
|---|---|
| CBZ | Comic Book ZIP - A ZIP archive containing comic book pages as images |
| CBR | Comic Book RAR - Similar format using RAR compression (read-only in most tools) |
| ComicInfo.xml | XML metadata descriptor file embedded in the archive |
| Page | A single image representing one page of the comic |
| Double Page | A single image representing a two-page spread |
application/vnd.comicbook+zip
The file extension is .cbz (case-insensitive).
A CBZ file is a standard ZIP archive (as defined in PKWARE APPNOTE) with the following structure:
archive.cbz (ZIP)
+-- ComicInfo.xml (OPTIONAL - metadata descriptor)
+-- page-001.jpg (image file)
+-- page-002.jpg (image file)
+-- page-003.png (image file)
+-- ...
- The archive MUST be a valid ZIP file conforming to PKWARE's ZIP Application Note.
- The archive SHOULD use
ZIP_STORED(no compression) as the compression method, since image formats already employ their own compression. UsingZIP_DEFLATEDis permitted but offers negligible size reduction at a performance cost. - The archive MUST contain at least one image file.
- The archive MAY contain a
ComicInfo.xmlmetadata file at the root level. - The archive MUST NOT contain executable files, scripts, or other non-image/non-metadata content at the root level. Subdirectories (e.g.,
__MACOSX/) SHOULD be ignored by readers.
- Image files SHOULD be named to sort in reading order using standard lexicographic (alphabetical) sorting.
- The RECOMMENDED naming convention is zero-padded sequential names:
page-001.ext,page-002.ext, etc. - Readers MUST sort image files alphabetically (case-insensitive) to determine page order when no
ComicInfo.xmlpage index is present. - The metadata file MUST be named exactly
ComicInfo.xml(case-sensitive).
Conforming readers MUST support the following image formats:
| Format | Extensions | MIME Type |
|---|---|---|
| JPEG | .jpg, .jpeg |
image/jpeg |
| PNG | .png |
image/png |
Conforming readers SHOULD support:
| Format | Extensions | MIME Type |
|---|---|---|
| GIF | .gif |
image/gif |
| BMP | .bmp |
image/bmp |
| WebP | .webp |
image/webp |
| TIFF | .tiff, .tif |
image/tiff |
Conforming readers MAY support:
| Format | Extensions | MIME Type |
|---|---|---|
| JPEG XL | .jxl |
image/jxl |
| AVIF | .avif |
image/avif |
- All image files within a single archive SHOULD use the same format for consistency.
- Images SHOULD be stored in their original resolution without additional compression artifacts.
- For optimal compatibility, JPEG is RECOMMENDED for photographic/scanned content, and PNG for digitally-produced content with sharp edges or transparency.
- Readers MUST determine page dimensions from the actual image data, not from metadata alone.
The ComicInfo.xml file is an XML document that describes the comic book's metadata and page structure. It follows the ComicInfo schema originally developed for the ComicRack application.
<?xml version="1.0" encoding="utf-8"?>The file MUST use UTF-8 encoding.
<ComicInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
</ComicInfo>The root element MUST be <ComicInfo>. The XML namespace declarations are RECOMMENDED for schema validation but not strictly required for parsing.
All metadata elements are OPTIONAL. They appear as child elements of <ComicInfo> in the order specified below. Absent elements indicate unknown or unset values.
| Element | Type | Default | Description |
|---|---|---|---|
Title |
xs:string |
"" |
Title of the comic issue |
Series |
xs:string |
"" |
Name of the comic series |
Number |
xs:string |
"" |
Issue number within the series (string to support "1.5", "Annual 1", etc.) |
Count |
xs:int |
-1 |
Total number of issues in the series (-1 = unknown) |
Volume |
xs:int |
-1 |
Volume number (-1 = unknown) |
AlternateSeries |
xs:string |
"" |
Alternate series name (for crossovers, reprints) |
AlternateNumber |
xs:string |
"" |
Issue number in the alternate series |
AlternateCount |
xs:int |
-1 |
Total issues in the alternate series |
Notes:
Numberis typed as string in the schema to accommodate non-integer issue numbers (e.g., "0.5", "Annual 3", "#1/2").- When
Countis -1, the series is ongoing or the total is unknown.
| Element | Type | Default | Description |
|---|---|---|---|
Summary |
xs:string |
"" |
Synopsis or description of the issue |
Notes |
xs:string |
"" |
Free-form notes (scan quality, source, etc.) |
Genre |
xs:string |
"" |
Genre(s), comma-separated |
Tags |
xs:string |
"" |
Tags/keywords, comma-separated |
Web |
xs:string |
"" |
URL to the comic's web page or source |
EAN |
xs:string |
"" |
European Article Number (ISBN/barcode) |
BookPrice |
xs:string |
"" |
Cover price (free-form string, e.g., "$3.99") |
Notes:
GenreandTagsuse comma-separated values. Readers SHOULD trim whitespace around each value.WebSHOULD contain a valid URL but no validation is required.
| Element | Type | Default | Description |
|---|---|---|---|
Year |
xs:int |
-1 |
Publication year (4 digits) |
Month |
xs:int |
-1 |
Publication month (1-12) |
Day |
xs:int |
-1 |
Publication day (1-31) |
Notes:
- A value of -1 indicates the date component is unknown.
- Readers SHOULD NOT assume Month and Day are present when Year is set.
| Element | Type | Default | Description |
|---|---|---|---|
Writer |
xs:string |
"" |
Writer(s), comma-separated |
Penciller |
xs:string |
"" |
Pencil artist(s), comma-separated |
Inker |
xs:string |
"" |
Inker(s), comma-separated |
Colorist |
xs:string |
"" |
Colorist(s), comma-separated |
Letterer |
xs:string |
"" |
Letterer(s), comma-separated |
CoverArtist |
xs:string |
"" |
Cover artist(s), comma-separated |
Editor |
xs:string |
"" |
Editor(s), comma-separated |
Translator |
xs:string |
"" |
Translator(s), comma-separated |
Notes:
- All credit fields support multiple names as comma-separated values.
- The
Translatorfield was added in schema v2.1.
| Element | Type | Default | Description |
|---|---|---|---|
Publisher |
xs:string |
"" |
Publisher name |
Imprint |
xs:string |
"" |
Publisher's imprint or sub-label |
| Element | Type | Allowed Values | Default | Description |
|---|---|---|---|---|
Format |
xs:string |
(see section 6.5) | "" |
Publication format |
BlackAndWhite |
YesNo |
Unknown, No, Yes |
Unknown |
Whether the comic is black and white |
Manga |
Manga |
Unknown, No, Yes, YesAndRightToLeft |
Unknown |
Whether the comic is manga (and reading direction) |
AgeRating |
AgeRating |
(see section 6.7) | Unknown |
Content age rating |
LanguageISO |
xs:string |
ISO 639 codes | "" |
Language code (e.g., "en", "fr", "ja") |
| Element | Type | Default | Description |
|---|---|---|---|
Characters |
xs:string |
"" |
Character names, comma-separated |
Teams |
xs:string |
"" |
Team names, comma-separated |
Locations |
xs:string |
"" |
Location names, comma-separated |
MainCharacterOrTeam |
xs:string |
"" |
Primary character or team |
StoryArc |
xs:string |
"" |
Story arc name |
StoryArcNumber |
xs:string |
"" |
Position within the story arc |
SeriesGroup |
xs:string |
"" |
Series grouping or universe |
| Element | Type | Default | Description |
|---|---|---|---|
CommunityRating |
Rating |
(none) | Community rating (0.0-5.0, single decimal) |
Review |
xs:string |
"" |
Review text |
ScanInformation |
xs:string |
"" |
Information about the scan/digitization process |
| Element | Type | Default | Description |
|---|---|---|---|
PageCount |
xs:int |
0 |
Number of pages in the archive |
FileSize |
xs:int |
"" |
Total size of image files in bytes |
FileCreationTime |
xs:string |
"" |
Archive creation timestamp (ISO 8601) |
FileModifiedTime |
xs:string |
"" |
Archive modification timestamp (ISO 8601) |
Added |
xs:string |
"" |
Date added to library |
Released |
xs:string |
"" |
Release/publication date |
Notes:
- Timestamps SHOULD use ISO 8601 format:
YYYY-MM-DDThh:mm:ss.sssZ PageCountMUST match the actual number of image files in the archive.FileSizerepresents the total uncompressed size of all image files, NOT the archive size.
| Element | Type | Default | Description |
|---|---|---|---|
CustomValuesStore |
xs:string |
"" |
Application-specific custom data (opaque string) |
The Format element accepts any string value, but the following are the recognized standard values:
Annotation, Annual, Anthology, Black & White, Box-Set, Crossover,
Director's Cut, Epilogue, Event, FCBD, Flyer, Giant-Size, Graphic Novel,
Hard-Cover, King-Size, Limited Series, Magazine, NSFW, One-Shot, Point 1,
Preview, Prologue, Reference, Review, Reviewed, Scanlation, Script,
Series, Sketch, Special, Trade Paper Back, Web Comic, Year One
Readers SHOULD accept these values case-insensitively. Alternative spellings exist in the wild (e.g., "TPB" for "Trade Paper Back", "WebComic" for "Web Comic") and readers SHOULD handle them gracefully.
| Value | Description |
|---|---|
Unknown |
Reading direction not specified |
No |
Western-style left-to-right reading |
Yes |
Manga-style (may be left-to-right or right-to-left) |
YesAndRightToLeft |
Manga with explicit right-to-left reading order |
Readers SHOULD use this value to determine the reading direction for page navigation and double-page spread orientation.
| Value | Description |
|---|---|
Unknown |
Not rated |
Adults Only 18+ |
Adult content only |
Early Childhood |
Suitable for very young children |
Everyone |
Suitable for all ages |
Everyone 10+ |
Suitable for ages 10 and up |
G |
General audiences |
Kids to Adults |
Suitable for children to adults |
M |
Mature content |
MA15+ |
Mature audiences 15+ |
Mature 17+ |
Mature audiences 17+ |
PG |
Parental guidance suggested |
R18+ |
Restricted 18+ |
Rating Pending |
Rating has not been assigned |
Teen |
Suitable for teens |
X18+ |
Explicit content 18+ |
The CommunityRating element uses a decimal type:
- Minimum value:
0.0 - Maximum value:
5.0 - Precision: 1 decimal place (schema v2.1) or 2 decimal places (schema v2.0)
The <Pages> element contains an ordered list of <Page> elements describing each page in the archive.
<Pages>
<Page Image="0" Type="FrontCover" ImageSize="245760" ImageWidth="800" ImageHeight="1200"/>
<Page Image="1" Type="Story" DoublePage="false" ImageSize="198432" ImageWidth="800" ImageHeight="1200"/>
<Page Image="2" Type="BackCover" ImageSize="210944" ImageWidth="800" ImageHeight="1200"/>
</Pages>| Attribute | Type | Required | Default | Description |
|---|---|---|---|---|
Image |
xs:int |
YES | - | Zero-based index of the page in the sorted file list |
Type |
ComicPageType |
No | Story |
Type/role of the page |
DoublePage |
xs:boolean |
No | false |
Whether this is a double-page spread |
ImageSize |
xs:long |
No | 0 |
Image file size in bytes |
Key |
xs:string |
No | "" |
Unique key for the page |
Bookmark |
xs:string |
No | "" |
Bookmark/chapter name for this page |
ImageWidth |
xs:int |
No | -1 |
Image width in pixels |
ImageHeight |
xs:int |
No | -1 |
Image height in pixels |
Notes:
Imageis the ONLY required attribute. It MUST be a zero-based index corresponding to the page's position in the alphabetically-sorted list of image files.Bookmarkwas added in schema v2.0.- Readers SHOULD use actual image dimensions from the file rather than relying solely on
ImageWidth/ImageHeightmetadata.
| Value | Description |
|---|---|
FrontCover |
Front cover image |
InnerCover |
Inner cover or dust jacket |
Roundup |
Recap or summary page |
Story |
Regular story page (default) |
Advertisement |
Advertisement page |
Editorial |
Editorial or credits page |
Letters |
Letters to the editor page |
Preview |
Preview of upcoming issues |
BackCover |
Back cover image |
Other |
Other content not fitting above categories |
Deleted |
Page marked for deletion (not displayed) |
Notes:
- The
FrontCoverpage is typically used by readers as the thumbnail/cover image for the comic. - Pages of type
DeletedSHOULD NOT be displayed to the user but MAY be retained in the archive.
| Version | Key Changes |
|---|---|
| 1.0 | Initial schema. Core metadata fields, basic page info. Manga typed as YesNo. No Bookmark, Tags, Translator, StoryArcNumber, AgeRating, CommunityRating, MainCharacterOrTeam, Review, Added, Released, FileSize, FileModifiedTime, FileCreationTime, BookPrice, CustomValuesStore. |
| 2.0 | Added Characters, Teams, Locations, ScanInformation, StoryArc, SeriesGroup, AgeRating, CommunityRating, MainCharacterOrTeam, Review. Manga gets its own type with YesAndRightToLeft. Bookmark added to pages. Rating type has 2 decimal places. |
| 2.1 | Added Translator, Tags, StoryArcNumber, Added, Released, FileSize, FileModifiedTime, FileCreationTime, BookPrice, CustomValuesStore. Rating precision reduced to 1 decimal place. Day field added to date. |
- Writers SHOULD generate metadata conforming to the latest schema version (2.1).
- Readers MUST gracefully handle unknown elements by ignoring them (forward compatibility).
- Readers MUST handle missing optional elements by using specified defaults (backward compatibility).
- Writers SHOULD NOT include elements with default/empty values to minimize file size.
- Extension:
.cbr - MIME Type:
application/vnd.comicbook-rar - Identical internal structure but using RAR archive format instead of ZIP.
- Requires external RAR extraction tools (e.g.,
unrar,7zip). - CBZ is RECOMMENDED over CBR for new archives due to the ubiquity of ZIP support.
- Extension:
.cb7 - MIME Type:
application/x-cb7 - Uses 7-Zip archive format. Less common.
- Extension:
.cbt - MIME Type:
application/x-cbt - Uses TAR archive format. No compression. Rare.
- PDF files can contain embedded images and are sometimes used for digital comics.
- PDF does not natively support ComicInfo metadata.
- Conversion from PDF to CBZ involves extracting images; metadata must be added separately.
A conforming reader MUST implement the following algorithm:
- Open the file as a ZIP archive.
- List all entries and sort them alphabetically (case-insensitive).
- Check for
ComicInfo.xmlat the root level:- If present, parse it and extract metadata.
- If absent or malformed, proceed with image-only mode.
- Filter entries to include only files with supported image extensions.
- Ignore directories, hidden files (starting with
.), and OS-specific metadata folders (e.g.,__MACOSX/). - Load images in sorted order as the page sequence.
- If
ComicInfo.xmlcontains a<Pages>section, use theImageattribute to map metadata to pages.
A conforming writer MUST implement the following:
- Create a new ZIP archive with
ZIP_STOREDcompression (RECOMMENDED). - Add
ComicInfo.xmlas the first entry (RECOMMENDED for fast metadata access). - Add image files in reading order with sequential, zero-padded names.
- Ensure
PageCountmatches the number of image files. - Set
Imageattributes in<Page>elements as zero-based indices matching the sorted file order. - Use UTF-8 encoding for the XML file.
- Self-close
<Page>elements: use<Page ... />not<Page ...></Page>.
ComicInfo.xmlMUST use UTF-8 encoding.- File names within the archive SHOULD use UTF-8 encoding.
- All text content in metadata fields MUST be valid UTF-8.
- Readers SHOULD be lenient in parsing: accept minor deviations from the schema.
- Unknown XML elements SHOULD be silently ignored.
- Malformed
ComicInfo.xmlSHOULD NOT prevent reading the images. - Unsupported image formats SHOULD be skipped with a warning.
- Readers MUST validate ZIP entries to prevent path traversal attacks (e.g., entries with
../in their names). - Readers SHOULD impose reasonable limits on image dimensions and file sizes to prevent resource exhaustion.
- Readers MUST NOT execute any content from the archive, even if it appears to be a script or executable.
CustomValuesStorecontent MUST be treated as opaque and untrusted.- URLs in the
Webfield SHOULD NOT be automatically fetched without user consent.
<?xml version="1.0" encoding="utf-8"?>
<ComicInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Title>Example Issue #1</Title>
<Series>Example Series</Series>
<Number>1</Number>
<PageCount>3</PageCount>
<Pages>
<Page Image="0" Type="FrontCover"/>
<Page Image="1" Type="Story"/>
<Page Image="2" Type="BackCover"/>
</Pages>
</ComicInfo><?xml version="1.0" encoding="utf-8"?>
<ComicInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Title>The Amazing Adventure #1</Title>
<Series>The Amazing Adventure</Series>
<Number>1</Number>
<Count>12</Count>
<Volume>1</Volume>
<Summary>The hero embarks on an incredible journey through uncharted territory.</Summary>
<Notes>Scanned from first printing</Notes>
<Year>2024</Year>
<Month>6</Month>
<Day>15</Day>
<Writer>Jane Smith</Writer>
<Penciller>John Doe</Penciller>
<Inker>John Doe</Inker>
<Colorist>Alice Johnson</Colorist>
<Letterer>Bob Williams</Letterer>
<CoverArtist>John Doe</CoverArtist>
<Editor>Carol Brown</Editor>
<Translator>Pierre Dupont</Translator>
<Publisher>Example Comics</Publisher>
<Imprint>Example Prestige</Imprint>
<Genre>Adventure, Fantasy</Genre>
<Tags>hero, quest, dragons</Tags>
<Web>https://example.com/amazing-adventure-1</Web>
<Format>Series</Format>
<EAN>9781234567890</EAN>
<BlackAndWhite>No</BlackAndWhite>
<Manga>No</Manga>
<Characters>Hero, Sidekick, Villain</Characters>
<Teams>The Adventurers</Teams>
<Locations>The Kingdom, Dragon Mountain</Locations>
<ScanInformation>600dpi scan, cleaned and leveled</ScanInformation>
<StoryArc>The Dragon Wars</StoryArc>
<StoryArcNumber>1</StoryArcNumber>
<SeriesGroup>Example Universe</SeriesGroup>
<AgeRating>Teen</AgeRating>
<CommunityRating>4.5</CommunityRating>
<MainCharacterOrTeam>Hero</MainCharacterOrTeam>
<Review>Excellent start to a new series</Review>
<LanguageISO>en</LanguageISO>
<Added>2024-06-20T10:30:00.000Z</Added>
<Released>2024-06-15T00:00:00.000Z</Released>
<FileSize>15728640</FileSize>
<FileCreationTime>2024-06-20T10:30:00.000Z</FileCreationTime>
<FileModifiedTime>2024-06-20T10:30:00.000Z</FileModifiedTime>
<PageCount>24</PageCount>
<Pages>
<Page Image="0" Type="FrontCover" ImageSize="524288" ImageWidth="1600" ImageHeight="2400" Bookmark="Cover"/>
<Page Image="1" Type="Story" ImageSize="491520" ImageWidth="1600" ImageHeight="2400" Bookmark="Chapter 1"/>
<Page Image="2" Type="Story" DoublePage="true" ImageSize="983040" ImageWidth="3200" ImageHeight="2400"/>
<!-- ... pages 3-22 ... -->
<Page Image="23" Type="BackCover" ImageSize="458752" ImageWidth="1600" ImageHeight="2400"/>
</Pages>
</ComicInfo>The normative XML Schema Definition for version 2.1 is provided in docs/schema/v2.1/ComicInfo.xsd.
Key type definitions:
<!-- YesNo enumeration -->
<xs:simpleType name="YesNo">
<xs:restriction base="xs:string">
<xs:enumeration value="Unknown"/>
<xs:enumeration value="No"/>
<xs:enumeration value="Yes"/>
</xs:restriction>
</xs:simpleType>
<!-- Manga enumeration -->
<xs:simpleType name="Manga">
<xs:restriction base="xs:string">
<xs:enumeration value="Unknown"/>
<xs:enumeration value="No"/>
<xs:enumeration value="Yes"/>
<xs:enumeration value="YesAndRightToLeft"/>
</xs:restriction>
</xs:simpleType>
<!-- Rating type (0.0 to 5.0) -->
<xs:simpleType name="Rating">
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="5"/>
<xs:fractionDigits value="1"/>
</xs:restriction>
</xs:simpleType>
<!-- Page type enumeration -->
<xs:simpleType name="ComicPageType">
<xs:list>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="FrontCover"/>
<xs:enumeration value="InnerCover"/>
<xs:enumeration value="Roundup"/>
<xs:enumeration value="Story"/>
<xs:enumeration value="Advertisement"/>
<xs:enumeration value="Editorial"/>
<xs:enumeration value="Letters"/>
<xs:enumeration value="Preview"/>
<xs:enumeration value="BackCover"/>
<xs:enumeration value="Other"/>
<xs:enumeration value="Deleted"/>
</xs:restriction>
</xs:simpleType>
</xs:list>
</xs:simpleType>- PKWARE ZIP Application Note - ZIP file format specification
- ComicRack - Original creator of the ComicInfo.xml format
- anansi-project - Community maintenance of the ComicInfo schema (https://anansi-project.github.io)
- RFC 2119 - Key words for use in RFCs
- ISO 639 - Language code standards
- ISO 8601 - Date and time format
This specification was compiled from the collective work of the comic book reader community, including the original ComicRack application by cYo Soft, the anansi-project contributors, and the numerous developers who have implemented CBZ support in their applications.
This document is provided as-is for informational purposes. The CBZ format is a community standard without a formal standards body. Implementers should prioritize interoperability with existing tools over strict schema conformance.