Skip to main content

An API for reading comic archives

Project description

Comicbox

A comic book archive metadata reader and writer.

Features

📚Comic Formats

Comicbox reads CBZ, CBR, CBT, and optionally PDF. Comicbox archives and writes CBZ archives and PDF metadata.

🏷️ Metadata Formats

Comicbox reads and writes:

Usefulness

Comicbox's primary purpose is a library for use by Codex comic reader. The API isn't well documented, but you can infer what it does pretty easily here: comicbox.comic_archive as the primary interface.

The command line is increasingly useful and can read and write metadata recursively and extract pages.

Limitations and Alternatives

Comicbox does not use popular metadata database APIs or have a GUI!

Comictagger is a popular alternative. It does most of what Comicbox does but also automatically tags comics with the ComicVine API and has a desktop UI.

📦 Installation

pip install comicbox

Comicbox supports PDFs as an extra when installed like:

pip install comicbox[pdf]

Dependencies

Comicbox generally works without any binary dependencies but requires unrar be on the path to convert CBR into CBZ or extract files from CBRs.

⌨️ Usage

Console

Type

comicbox -h

see the CLI help.

Examples

comicbox test.cbz -m "{Tags: a,b,c, story_arcs: {d:1,e:'',f:3}" -m "Publisher: SmallComics" -w cr

Will write those tags to comicinfo.xml in the archive.

But it's probably better to use the --print action to see what it's going to do before you actually write to the archive:

comicbox test.cbz -m "{Tags: a,b,c, story_arcs: {d:1,e:'',f:3}" -m "Publisher: SmallComics" -p

A recursive example:

comicbox --recurse -m "publisher: SC Comics" -w cr ./SmallComicsComics/

Will recursively change the publisher to "SC Comics" for every comic found in under the SmallComicsComics directory.

Packages

Comicbox actually installs three different packages:

  • comicbox The main API and CLI script.
  • comicfn2dict A separate library for parsing comic filenames into dicts it also includes a CLI script.
  • pdffile A utility library for reading and writing PDF files with an API like Python's ZipFile

⚙️ Config

comicbox accepts command line arguments but also an optional config file and environment variables.

The variables have defaults specified in a default yaml

The environment variables are the variable name prefixed with COMICBOX_. (e.g. COMICBOX_COMICINFOXML=0)

Log Level

change logging level:

LOGLEVEL=ERROR comicbox -p <path>

🛠 Development

You may access most development tasks from the makefile. Run make to see documentation.

🤔 Motivation

I didn't like Comictagger's API, so I built this for myself as an educational exercise and to use as a library for Codex comic reader.

📋 Schemas

Comicbox supports reading and writing several comic book metadata schemas.

Filename Schema

Comicbox includes a pretty good comic archive filename parser. It can extract a number of common fields from comic archive filenames.

Location Name
Archive The archive filename
Import/Export comicbox-filename.txt

PDF Schema

The pdf metadata standard. Can be exported as an xml file or written directly to the pdf itself.

Adobe PDF Namespace Adobe PDF Standard § 14.3.3 Document Information Dictionary

PDF metadata is only read or written from and to PDF files.

Location Name
Archive PDF internal
Import/Export pdf-metadata.xml

CoMet Schema

An old and uncommon comic metadata standard from a defunct comic book reader.

CoMet Specification

Location Name
Archive comet.xml
Import/Export comet.xml

ComicBookInfo Schema (Comic Book Lover)

The Comic Book Lover schema. A rare but still encountered JSON schema. It probably survives because Comictagger supports writing it.

ComicBookInfo

Location Name
Archive Zip & Rar Comments
Import/Export comic-book-info.json

ComicInfo Schema (Comic Rack)

The Comic Rack schema. The de facto standard of comic book metadata. The Comic Rack reader is defunct, but the Anansi Project now publishes the ComicInfo spec and has compatibly and conservatively extended it.

Anansi ComicInfo v2.1 Spec Also, an unofficial, undocumented Mylar extension to ComicInfo.xml that encodes multiple Story Arcs and Story Arc Numbers as CSV values.

Location Name
Archive comicinfo.xml
Import/Export comicinfo.xml

ComicTagger Schema

The most useful comic book metadata writer is ComicTagger. It supports the ComicVine API, is extensible to other APIs, and features a nice desktop GUI. Internally, Comictagger keeps a metadata object to work with the schemas it supports. This schema allows the import and export of that schema.

Comictaggger genericmetadata.py

This schema may only be useful to developers. The author of ComicTagger offers no promises as to the stability of this API and I am very lazy, so the chances of this drifting out of date are anyone's guess. It was included because it was easy to do.

Location Name
Archive comictagger.json
Import/Export comictagger.json

Comicbox Schema

The comicbox internal data structure which acts as a superset of the above schemas to allow interpolating.

Comicbox JSON Schema

JSON Format

Location Name
Archive comicbox.json
Import/Export comicbox.json

YAML Format

YAML is a superset of JSON, so the JSON schema applies here.

Location Name
Archive comicbox.yaml
Import/Export comicbox.yaml

CLI Format

The Comicbox CLI uses "flow style" YAML, which is an all on one line format to enter metadata on the command line.

Location Name
Comicbox CLI -m --metadata
Archive comicbox-cli.yaml
Import/Export comicbox-cli.yaml

Environment variables

There is a special environment variable DEBUG_TRANSFORM that will print verbose schema transform information

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

comicbox-1.0.0rc8.tar.gz (81.3 MB view details)

Uploaded Source

Built Distribution

comicbox-1.0.0rc8-py3-none-any.whl (96.1 kB view details)

Uploaded Python 3

File details

Details for the file comicbox-1.0.0rc8.tar.gz.

File metadata

  • Download URL: comicbox-1.0.0rc8.tar.gz
  • Upload date:
  • Size: 81.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.11.7 Linux/5.15.0-1050-aws

File hashes

Hashes for comicbox-1.0.0rc8.tar.gz
Algorithm Hash digest
SHA256 b20647c49a1200bc2b134ad37cea4a9ae2a15fa2292a0ce62df04c2b758cf8c6
MD5 356f3c24a82a0fbcabfdc578fff18d55
BLAKE2b-256 6e2e1e48338f1a130bffc862a708ed249f08accd03fa35a0224e530ca0e3a37a

See more details on using hashes here.

File details

Details for the file comicbox-1.0.0rc8-py3-none-any.whl.

File metadata

  • Download URL: comicbox-1.0.0rc8-py3-none-any.whl
  • Upload date:
  • Size: 96.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.11.7 Linux/5.15.0-1050-aws

File hashes

Hashes for comicbox-1.0.0rc8-py3-none-any.whl
Algorithm Hash digest
SHA256 d81dee5ff2c1bb8130e9e8b9bb114cf4f862d69b464e4bba391fd85ace8b4d4e
MD5 3847ab4fee6712ebf6fb57fd40748aed
BLAKE2b-256 b9d7a7bc08b31add5b16bd67d5245be81294eef4d2e9937485a56b8701267ca3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page