# Comicbox
A comic book archive metadata reader and writer.
## โจ <a href="features">Features</a>
### ๐<a href="comicFormats">Comic Formats</a>
Comicbox reads CBZ, CBR, CBT, and optionally PDF. Comicbox archives and writes
CBZ archives and PDF metadata.
### ๐ท๏ธ <a href="metadata_formats">Metadata Formats</a>
Comicbox reads and writes:
- [ComicRack ComicInfo.xml v2.1 (draft) schema](https://anansi-project.github.io/docs/comicinfo/schemas/v2.1),
- [Comic Book Lover ComicBookInfo schema](https://code.google.com/archive/p/comicbookinfo/)
- [CoMet schema](https://github.com/wdhongtw/comet-utils).
- [PDF Metadata](https://pymupdf.readthedocs.io/en/latest/tutorial.html#accessing-meta-data).
- Embedding ComicInfo.xml inside PDFS.
- A variety of filename schemes that encode metadata.
### Usefulness
Comicbox's primary purpose is a library for use by
[Codex comic reader](https://github.com/ajslater/codex/). The API isn't well
documented, but you can infer what it does pretty easily here:
[comicbox.comic_archive](https://github.com/ajslater/comicbox/blob/main/comicbox/comic_archive.py)
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](https://github.com/comictagger/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.
## ๐ฆ <a href="install">Installation</a>
<!-- eslint-skip -->
```sh
pip install comicbox
```
Comicbox supports PDFs as an extra when installed like:
<!-- eslint-skip -->
```sh
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.
## โจ๏ธ <a href="usage">Usage</a>
### Console
Type
<!-- eslint-skip -->
```sh
comicbox -h
```
see the CLI help.
#### Examples
<!-- eslint-skip -->
```sh
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.
Be sure to add spaces after colons so they are detected as valid YAML key value
pairs. This is easy to forget.
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:
<!-- eslint-skip -->
```sh
comicbox test.cbz -m "{Tags: a,b,c, story_arcs: {d:1,e:'',f:3}" -m "Publisher: SmallComics" -p
```
A recursive example:
<!-- eslint-skip -->
```sh
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.
#### Escaping YAML
the `-m` command line argument accepts the YAML language for tags. Certain
characters like `\,:;_()$%^@` are part of the YAML language. To successful
include them as data in your tags, look up
["Escaping YAML" documentation online](https://www.w3schools.io/file/yaml-escape-characters/)
##### Deleting Metadata
To delete metadata from the cli you're best off exporting the current metadata,
editing the file and then re-importing it with the delete previous metadata
option:
<!-- eslint-skip -->
```sh
# export the current metadata
comicbox --export cix "My Overtagged Comic.cbz"
# Adjust the metadata in an editor.
nvim comicinfo.xml
# Check that importing the metadata will look how you like
comicbox --import comicinfo.xml -p "My Overtagged Comic.cbz"
# Delete all previous metadata from the comic (careful!)
comicbox --delete "My Overtagged Comic.cbz"
# Import the metadata into the file and write it.
comicbox --import comicinfo.xml --write cix "My Overtagged Comic.cbz"
```
#### Quirks
The comicbox.yaml format represents the ComicInfo.xml Web tag as an
`identifiers.url` tag. Fear not, you don't have to remember this. The CLI
accepts heterogeneous tag types with the `-m` option, so you can type:
<!-- eslint-skip -->
```sh
comicbox -p -m "Web: https://foo.com" mycomic.cbz
```
and the identifier tag should appear in comicbox.yaml as:
```yaml
identifiers:
nss: foo.com
url: https://foo.com
```
#### 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](https://github.com/ajslater/comicbox/blob/main/comicbox/config_default.yaml)
The environment variables are the variable name prefixed with `COMICBOX_`. (e.g.
COMICBOX_COMICINFOXML=0)
#### Log Level
change logging level:
<!-- eslint-skip -->
```sh
LOGLEVEL=ERROR comicbox -p <path>
```
## ๐ <a href="development">Development</a>
You may access most development tasks from the makefile. Run make to see
documentation.
## ๐ค <a href="motivation">Motivation</a>
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](https://github.com/ajslater/codex/).
## ๐ <a href="schemas">Schemas</a>
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](https://developer.adobe.com/xmp/docs/XMPNamespaces/pdf/)
[Adobe PDF Standard](https://opensource.adobe.com/dc-acrobat-sdk-docs/standards/pdfstandards/pdf/PDF32000_2008.pdf)
ยง 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 |
#### Reading Embedded Metadata from `keywords`
Comicbox will read most any metadata standard it supports from the keywords
field. If that fails it will consider the keywords field as a comma delimited
"Tags" field.
#### Writing ComicInfo.xml to `keywords`
By default Comicbox will write ComicInfo XML to the keywords field (e.g.
`-w pdf`)
[Codex](https://github.com/ajslater/codex) supports this because it uses
Comicbox. Other comic readers do not support PDF embedded ComicInfo.xml, but
since they already have ComicInfo.xml parsers it's possible that they might
someday.
If Comicbox JSON is included in the write formats (e.g. `-w pdf,json`) Comicbox
will write comicbox.json to the keywords field instead. It is unlikely that any
other comic reader other than Codex will ever support this.
### CoMet Schema
An old and uncommon comic metadata standard from a defunct comic book reader.
[CoMet Specification](http://www.denvog.com/comet/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](https://code.google.com/archive/p/comicbookinfo/wikis/Example.wiki)
| 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](https://anansi-project.github.io/) now publishes the ComicInfo
spec and has compatibly and conservatively extended it.
[Anansi ComicInfo v2.1 Spec](https://anansi-project.github.io/docs/comicinfo/schemas/v2.1)
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](https://github.com/comictagger/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](https://github.com/comictagger/comictagger/blob/develop/comicapi/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](https://github.com/ajslater/comicbox/blob/main/schemas/comicbox.schema.json)
#### 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.
Specifying metadata on the command line like this is additive.
| 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
Raw data
{
"_id": null,
"home_page": "https://github.com/ajslater/comicbox",
"name": "comicbox",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.10",
"maintainer_email": null,
"keywords": "comic, cbz, cbr, cbt, pdf, comicinfo, comicbookinfo, comet, metroninfo",
"author": "AJ Slater",
"author_email": "aj@slater.net",
"download_url": "https://files.pythonhosted.org/packages/0d/a7/2b5a1c6bbef2751779cc9d001080d5f7da95e0b381ff4e5c4b74a8a814de/comicbox-1.2.1.tar.gz",
"platform": null,
"description": "# Comicbox\n\nA comic book archive metadata reader and writer.\n\n## \u2728 <a href=\"features\">Features</a>\n\n### \ud83d\udcda<a href=\"comicFormats\">Comic Formats</a>\n\nComicbox reads CBZ, CBR, CBT, and optionally PDF. Comicbox archives and writes\nCBZ archives and PDF metadata.\n\n### \ud83c\udff7\ufe0f <a href=\"metadata_formats\">Metadata Formats</a>\n\nComicbox reads and writes:\n\n- [ComicRack ComicInfo.xml v2.1 (draft) schema](https://anansi-project.github.io/docs/comicinfo/schemas/v2.1),\n- [Comic Book Lover ComicBookInfo schema](https://code.google.com/archive/p/comicbookinfo/)\n- [CoMet schema](https://github.com/wdhongtw/comet-utils).\n- [PDF Metadata](https://pymupdf.readthedocs.io/en/latest/tutorial.html#accessing-meta-data).\n - Embedding ComicInfo.xml inside PDFS.\n- A variety of filename schemes that encode metadata.\n\n### Usefulness\n\nComicbox's primary purpose is a library for use by\n[Codex comic reader](https://github.com/ajslater/codex/). The API isn't well\ndocumented, but you can infer what it does pretty easily here:\n[comicbox.comic_archive](https://github.com/ajslater/comicbox/blob/main/comicbox/comic_archive.py)\nas the primary interface.\n\nThe command line is increasingly useful and can read and write metadata\nrecursively and extract pages.\n\n### Limitations and Alternatives\n\nComicbox does _not_ use popular metadata database APIs or have a GUI!\n\n[Comictagger](https://github.com/comictagger/comictagger) is a popular\nalternative. It does most of what Comicbox does but also automatically tags\ncomics with the ComicVine API and has a desktop UI.\n\n## \ud83d\udce6 <a href=\"install\">Installation</a>\n\n<!-- eslint-skip -->\n\n```sh\npip install comicbox\n```\n\nComicbox supports PDFs as an extra when installed like:\n\n<!-- eslint-skip -->\n\n```sh\npip install comicbox[pdf]\n```\n\n### Dependencies\n\nComicbox generally works without any binary dependencies but requires `unrar` be\non the path to convert CBR into CBZ or extract files from CBRs.\n\n## \u2328\ufe0f <a href=\"usage\">Usage</a>\n\n### Console\n\nType\n\n<!-- eslint-skip -->\n\n```sh\ncomicbox -h\n```\n\nsee the CLI help.\n\n#### Examples\n\n<!-- eslint-skip -->\n\n```sh\ncomicbox test.cbz -m \"{Tags: a,b,c, story_arcs: {d:1,e:'',f:3}\" -m \"Publisher: SmallComics\" -w cr\n```\n\nWill write those tags to comicinfo.xml in the archive.\n\nBe sure to add spaces after colons so they are detected as valid YAML key value\npairs. This is easy to forget.\n\nBut it's probably better to use the --print action to see what it's going to do\nbefore you actually write to the archive:\n\n<!-- eslint-skip -->\n\n```sh\ncomicbox test.cbz -m \"{Tags: a,b,c, story_arcs: {d:1,e:'',f:3}\" -m \"Publisher: SmallComics\" -p\n```\n\nA recursive example:\n\n<!-- eslint-skip -->\n\n```sh\ncomicbox --recurse -m \"publisher: 'SC Comics'\" -w cr ./SmallComicsComics/\n```\n\nWill recursively change the publisher to \"SC Comics\" for every comic found in\nunder the SmallComicsComics directory.\n\n#### Escaping YAML\n\nthe `-m` command line argument accepts the YAML language for tags. Certain\ncharacters like `\\,:;_()$%^@` are part of the YAML language. To successful\ninclude them as data in your tags, look up\n[\"Escaping YAML\" documentation online](https://www.w3schools.io/file/yaml-escape-characters/)\n\n##### Deleting Metadata\n\nTo delete metadata from the cli you're best off exporting the current metadata,\nediting the file and then re-importing it with the delete previous metadata\noption:\n\n<!-- eslint-skip -->\n\n```sh\n# export the current metadata\ncomicbox --export cix \"My Overtagged Comic.cbz\"\n# Adjust the metadata in an editor.\nnvim comicinfo.xml\n# Check that importing the metadata will look how you like\ncomicbox --import comicinfo.xml -p \"My Overtagged Comic.cbz\"\n# Delete all previous metadata from the comic (careful!)\ncomicbox --delete \"My Overtagged Comic.cbz\"\n# Import the metadata into the file and write it.\ncomicbox --import comicinfo.xml --write cix \"My Overtagged Comic.cbz\"\n```\n\n#### Quirks\n\nThe comicbox.yaml format represents the ComicInfo.xml Web tag as an\n`identifiers.url` tag. Fear not, you don't have to remember this. The CLI\naccepts heterogeneous tag types with the `-m` option, so you can type:\n\n<!-- eslint-skip -->\n\n```sh\ncomicbox -p -m \"Web: https://foo.com\" mycomic.cbz\n```\n\nand the identifier tag should appear in comicbox.yaml as:\n\n```yaml\nidentifiers:\n nss: foo.com\n url: https://foo.com\n```\n\n#### Packages\n\nComicbox actually installs three different packages:\n\n- `comicbox` The main API and CLI script.\n- `comicfn2dict` A separate library for parsing comic filenames into dicts it\n also includes a CLI script.\n- `pdffile` A utility library for reading and writing PDF files with an API like\n Python's ZipFile\n\n### \u2699\ufe0f Config\n\ncomicbox accepts command line arguments but also an optional config file and\nenvironment variables.\n\nThe variables have defaults specified in\n[a default yaml](https://github.com/ajslater/comicbox/blob/main/comicbox/config_default.yaml)\n\nThe environment variables are the variable name prefixed with `COMICBOX_`. (e.g.\nCOMICBOX_COMICINFOXML=0)\n\n#### Log Level\n\nchange logging level:\n\n<!-- eslint-skip -->\n\n```sh\nLOGLEVEL=ERROR comicbox -p <path>\n```\n\n## \ud83d\udee0 <a href=\"development\">Development</a>\n\nYou may access most development tasks from the makefile. Run make to see\ndocumentation.\n\n## \ud83e\udd14 <a href=\"motivation\">Motivation</a>\n\nI didn't like Comictagger's API, so I built this for myself as an educational\nexercise and to use as a library for\n[Codex comic reader](https://github.com/ajslater/codex/).\n\n## \ud83d\udccb <a href=\"schemas\">Schemas</a>\n\nComicbox supports reading and writing several comic book metadata schemas.\n\n### Filename Schema\n\nComicbox includes a pretty good comic archive filename parser. It can extract a\nnumber of common fields from comic archive filenames.\n\n| Location | Name |\n| ------------- | --------------------- |\n| Archive | The archive filename |\n| Import/Export | comicbox-filename.txt |\n\n### PDF Schema\n\nThe pdf metadata standard. Can be exported as an xml file or written directly to\nthe pdf itself.\n\n[Adobe PDF Namespace](https://developer.adobe.com/xmp/docs/XMPNamespaces/pdf/)\n[Adobe PDF Standard](https://opensource.adobe.com/dc-acrobat-sdk-docs/standards/pdfstandards/pdf/PDF32000_2008.pdf)\n\u00a7 14.3.3 Document Information Dictionary\n\nPDF metadata is only read or written from and to PDF files.\n\n| Location | Name |\n| ------------- | ---------------- |\n| Archive | PDF internal |\n| Import/Export | pdf-metadata.xml |\n\n#### Reading Embedded Metadata from `keywords`\n\nComicbox will read most any metadata standard it supports from the keywords\nfield. If that fails it will consider the keywords field as a comma delimited\n\"Tags\" field.\n\n#### Writing ComicInfo.xml to `keywords`\n\nBy default Comicbox will write ComicInfo XML to the keywords field (e.g.\n`-w pdf`)\n\n[Codex](https://github.com/ajslater/codex) supports this because it uses\nComicbox. Other comic readers do not support PDF embedded ComicInfo.xml, but\nsince they already have ComicInfo.xml parsers it's possible that they might\nsomeday.\n\nIf Comicbox JSON is included in the write formats (e.g. `-w pdf,json`) Comicbox\nwill write comicbox.json to the keywords field instead. It is unlikely that any\nother comic reader other than Codex will ever support this.\n\n### CoMet Schema\n\nAn old and uncommon comic metadata standard from a defunct comic book reader.\n\n[CoMet Specification](http://www.denvog.com/comet/comet-specification/)\n\n| Location | Name |\n| ------------- | --------- |\n| Archive | comet.xml |\n| Import/Export | comet.xml |\n\n### ComicBookInfo Schema (Comic Book Lover)\n\nThe Comic Book Lover schema. A rare but still encountered JSON schema. It\nprobably survives because Comictagger supports writing it.\n\n[ComicBookInfo](https://code.google.com/archive/p/comicbookinfo/wikis/Example.wiki)\n\n| Location | Name |\n| ------------- | -------------------- |\n| Archive | Zip & Rar Comments |\n| Import/Export | comic-book-info.json |\n\n### ComicInfo Schema (Comic Rack)\n\nThe Comic Rack schema. The de facto standard of comic book metadata. The Comic\nRack reader is defunct, but the\n[Anansi Project](https://anansi-project.github.io/) now publishes the ComicInfo\nspec and has compatibly and conservatively extended it.\n\n[Anansi ComicInfo v2.1 Spec](https://anansi-project.github.io/docs/comicinfo/schemas/v2.1)\nAlso, an unofficial, undocumented Mylar extension to ComicInfo.xml that encodes\nmultiple Story Arcs and Story Arc Numbers as CSV values.\n\n| Location | Name |\n| ------------- | ------------- |\n| Archive | comicinfo.xml |\n| Import/Export | comicinfo.xml |\n\n### ComicTagger Schema\n\nThe most useful comic book metadata writer is\n[ComicTagger](https://github.com/comictagger/comictagger). It supports the\nComicVine API, is extensible to other APIs, and features a nice desktop GUI.\nInternally, Comictagger keeps a metadata object to work with the schemas it\nsupports. This schema allows the import and export of that schema.\n\n[Comictaggger genericmetadata.py](https://github.com/comictagger/comictagger/blob/develop/comicapi/genericmetadata.py)\n\nThis schema may only be useful to developers. The author of ComicTagger offers\nno promises as to the stability of this API and I am very lazy, so the chances\nof this drifting out of date are anyone's guess. It was included because it was\neasy to do.\n\n| Location | Name |\n| ------------- | ---------------- |\n| Archive | comictagger.json |\n| Import/Export | comictagger.json |\n\n### Comicbox Schema\n\nThe comicbox internal data structure which acts as a superset of the above\nschemas to allow interpolating.\n\n[Comicbox JSON Schema](https://github.com/ajslater/comicbox/blob/main/schemas/comicbox.schema.json)\n\n#### JSON Format\n\n| Location | Name |\n| ------------- | ------------- |\n| Archive | comicbox.json |\n| Import/Export | comicbox.json |\n\n#### YAML Format\n\nYAML is a superset of JSON, so the JSON schema applies here.\n\n| Location | Name |\n| ------------- | ------------- |\n| Archive | comicbox.yaml |\n| Import/Export | comicbox.yaml |\n\n#### CLI Format\n\nThe Comicbox CLI uses \"flow style\" YAML, which is an all on one line format to\nenter metadata on the command line.\n\nSpecifying metadata on the command line like this is additive.\n\n| Location | Name |\n| ------------- | ----------------- |\n| Comicbox CLI | -m --metadata |\n| Archive | comicbox-cli.yaml |\n| Import/Export | comicbox-cli.yaml |\n\n## Environment variables\n\nThere is a special environment variable `DEBUG_TRANSFORM` that will print\nverbose schema transform information\n",
"bugtrack_url": null,
"license": "LGPL-3.0-only",
"summary": "An API for reading comic archive contents and metadata: CBZ, CBR, CBT and PDF",
"version": "1.2.1",
"project_urls": {
"Documentation": "https://github.com/ajslater/comicbox",
"Homepage": "https://github.com/ajslater/comicbox",
"Repository": "https://github.com/ajslater/comicbox"
},
"split_keywords": [
"comic",
" cbz",
" cbr",
" cbt",
" pdf",
" comicinfo",
" comicbookinfo",
" comet",
" metroninfo"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "3087726ab6fa7016ff940876b55daa7f3ad85da33837ace54310ee9db2818e23",
"md5": "2ef593c231627bfbdd8e0b94dc1f9bf5",
"sha256": "af49c68dd21b0945e49e9c1a42783deb46abe7ead640522cd8685b7798fb406b"
},
"downloads": -1,
"filename": "comicbox-1.2.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2ef593c231627bfbdd8e0b94dc1f9bf5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.10",
"size": 105217,
"upload_time": "2024-10-09T17:48:45",
"upload_time_iso_8601": "2024-10-09T17:48:45.269874Z",
"url": "https://files.pythonhosted.org/packages/30/87/726ab6fa7016ff940876b55daa7f3ad85da33837ace54310ee9db2818e23/comicbox-1.2.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0da72b5a1c6bbef2751779cc9d001080d5f7da95e0b381ff4e5c4b74a8a814de",
"md5": "e73f69e5659e9af3850b779225cb6412",
"sha256": "283203289ea20cafa0c0cc2f2c1fcddea68642b74d6afd6c19b7157ea07c211e"
},
"downloads": -1,
"filename": "comicbox-1.2.1.tar.gz",
"has_sig": false,
"md5_digest": "e73f69e5659e9af3850b779225cb6412",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.10",
"size": 82030934,
"upload_time": "2024-10-09T17:48:48",
"upload_time_iso_8601": "2024-10-09T17:48:48.446861Z",
"url": "https://files.pythonhosted.org/packages/0d/a7/2b5a1c6bbef2751779cc9d001080d5f7da95e0b381ff4e5c4b74a8a814de/comicbox-1.2.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-09 17:48:48",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ajslater",
"github_project": "comicbox",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"circle": true,
"lcname": "comicbox"
}