# bochord
Backup books from macOS Books to usable ePubs
This works because macOS Books with iCloud turned on stores books as exploded
epub directories with their proper titles as the directory name. This program
zips them up into epub archives to a specified backup dir and copies other,
non-epub dir files, like PDFs, to that directory as well.
## Why
I like to manage my books with Apple Books instead of Calibre for convenience on
all my Apple devices, but Apple makes it a pain to export books
programmatically. Backing up books like this also defends against Apple making
all my books inaccessible someday for no reason.
Raw data
{
"_id": null,
"home_page": "https://github.com/ajslater/bochord",
"name": "bochord",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.10",
"maintainer_email": null,
"keywords": null,
"author": "AJ Slater",
"author_email": "aj@slater.net",
"download_url": "https://files.pythonhosted.org/packages/5a/5f/d2b05dc7888eae7dcb2c484d334b81f762bbf9781a3152847e044f305acb/bochord-1.2.0.tar.gz",
"platform": null,
"description": "# bochord\n\nBackup books from macOS Books to usable ePubs\n\nThis works because macOS Books with iCloud turned on stores books as exploded\nepub directories with their proper titles as the directory name. This program\nzips them up into epub archives to a specified backup dir and copies other,\nnon-epub dir files, like PDFs, to that directory as well.\n\n## Why\n\nI like to manage my books with Apple Books instead of Calibre for convenience on\nall my Apple devices, but Apple makes it a pain to export books\nprogrammatically. Backing up books like this also defends against Apple making\nall my books inaccessible someday for no reason.\n",
"bugtrack_url": null,
"license": "GPL-3.0-only",
"summary": null,
"version": "1.2.0",
"project_urls": {
"Docker Image": "https://hub.docker.com/r/ajslater/",
"Documentation": "https://github.com/ajslater/bochord",
"Homepage": "https://github.com/ajslater/bochord",
"News": "https://github.com/ajslater/",
"Report Issues": "https://github.com/ajslater/",
"Repository": "https://github.com/ajslater/bochord"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0cee3d8cf29db59b22abc5477606c2ad0b2f524f10aa0df29fc1428f6a7247cf",
"md5": "32c6de1ab012369973495caafc5af093",
"sha256": "b6d928ca0887b6284cd3d8222690c71cdeec6396a5fd7680f6bf40a72e9b0d0d"
},
"downloads": -1,
"filename": "bochord-1.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "32c6de1ab012369973495caafc5af093",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.10",
"size": 11638,
"upload_time": "2025-01-21T19:52:58",
"upload_time_iso_8601": "2025-01-21T19:52:58.852711Z",
"url": "https://files.pythonhosted.org/packages/0c/ee/3d8cf29db59b22abc5477606c2ad0b2f524f10aa0df29fc1428f6a7247cf/bochord-1.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5a5fd2b05dc7888eae7dcb2c484d334b81f762bbf9781a3152847e044f305acb",
"md5": "920ad362d4fe066f69dd7e5f1edb8bb0",
"sha256": "7c9de3cb1c53779cb04fa286f66a27fb3493234f1e2030f73ccb525aa83fc4f0"
},
"downloads": -1,
"filename": "bochord-1.2.0.tar.gz",
"has_sig": false,
"md5_digest": "920ad362d4fe066f69dd7e5f1edb8bb0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.10",
"size": 11440,
"upload_time": "2025-01-21T19:52:59",
"upload_time_iso_8601": "2025-01-21T19:52:59.855320Z",
"url": "https://files.pythonhosted.org/packages/5a/5f/d2b05dc7888eae7dcb2c484d334b81f762bbf9781a3152847e044f305acb/bochord-1.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-21 19:52:59",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ajslater",
"github_project": "bochord",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"circle": true,
"lcname": "bochord"
}