{"id":17151952,"url":"https://github.com/dancardin/chapter-sync","last_synced_at":"2025-04-13T12:42:48.176Z","repository":{"id":225573509,"uuid":"765488645","full_name":"DanCardin/chapter-sync","owner":"DanCardin","description":null,"archived":false,"fork":false,"pushed_at":"2024-07-23T00:11:13.000Z","size":595,"stargazers_count":8,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-27T03:41:41.822Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DanCardin.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"DanCardin"}},"created_at":"2024-03-01T02:34:20.000Z","updated_at":"2024-07-23T00:11:08.000Z","dependencies_parsed_at":"2024-03-19T02:31:48.097Z","dependency_job_id":"4a31d498-4a75-4ca9-bc67-f67d5bc10c90","html_url":"https://github.com/DanCardin/chapter-sync","commit_stats":null,"previous_names":["dancardin/chapter-sync"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanCardin%2Fchapter-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanCardin%2Fchapter-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanCardin%2Fchapter-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanCardin%2Fchapter-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DanCardin","download_url":"https://codeload.github.com/DanCardin/chapter-sync/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248717226,"owners_count":21150387,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-14T21:42:26.799Z","updated_at":"2025-04-13T12:42:48.154Z","avatar_url":"https://github.com/DanCardin.png","language":"Python","funding_links":["https://github.com/sponsors/DanCardin"],"categories":[],"sub_categories":[],"readme":"# Chapter-sync\n\n[![Actions Status](https://github.com/DanCardin/chapter-sync/actions/workflows/test.yml/badge.svg)](https://github.com/dancardin/chapter-sync/actions)\n[![codecov](https://codecov.io/gh/DanCardin/chapter-sync/graph/badge.svg?token=e8T6QN2tTz)](https://codecov.io/gh/DanCardin/chapter-sync)\n[![Documentation Status](https://readthedocs.org/projects/chapter-sync/badge/?version=latest)](https://chapter-sync.readthedocs.io/en/latest/?badge=latest)\n[![Docker](https://img.shields.io/docker/v/dancardin/chapter-sync?label=Docker\u0026style=flat)](https://hub.docker.com/r/dancardin/chapter-sync)\n\n- [Full documentation here](https://chapter-sync.readthedocs.io/en/latest/).\n- [Installation/Usage](https://chapter-sync.readthedocs.io/en/latest/installation.html).\n\nA tool for recording serialized web content, in partial web-serial type novels,\nor other serialized content for which you want to be sent updates as they're\npublished.\n\nThe other tools in the space (at least that I'm aware of: Leech, FanFicFare) are\nmostly designed around manual one-off usage of the tool to capture the current\nstate of a story/series and turn it into an ebook.\n\n`chapter-sync`, by contrast, records everything it captures to a sqlite database\nand will only collect new/missing chapters. It also bakes in (through supported\nsubscription methods) the ability to send new chapters to \"subscribers\" who have\nnot yet received it.\n\n## Quickstart\n\n```bash\n❯ chapter-sync series add some-book 'https://some-book.com/table-of-contents/' --title 'Some Book' --settings '{\"content_selector\": \"#main .entry-content\", \"chapter_selector\": \"#main .entry-content \u003e ul \u003e li \u003e a\"}'\nAdded series \"some-book\" at \"https://some-book.com/table-of-contents/\"\n\n❯ chapter-sync series list\n┏━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ ID ┃ Name                       ┃ URL                                  ┃\n┡━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n│ 1  │ some-book                  │ https://some-book.com/table-of-cont… │\n└────┴────────────────────────────┴──────────────────────────────────────┘\n\n❯ chapter-sync sync\n...\nDone\n\n❯ chapter-sync chapter list 1\n                               Some Book\n┏━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┓\n┃ Title      ┃ Chapter ┃ Size (Kb) ┃ Sent       ┃ Published  ┃ Created    ┃\n┡━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━┩\n│ Chapter 1  │ 1       │ 37.3      │ 2024-03-02 │ 2023-07-28 │ 2024-03-02 │\n│ Chapter 2  │ 2       │ 37.1      │ 2024-03-02 │ 2023-08-04 │ 2024-03-02 │\n│ Chapter 3  │ 3       │ 36.9      │ 2024-03-02 │ 2023-08-11 │ 2024-03-02 │\n│ Chapter 4  │ 4       │ 36.9      │ 2024-03-02 │ 2023-08-18 │ 2024-03-02 │\n└────────────┴─────────┴───────────┴────────────┴────────────┴────────────┘\n\n❯ chapter-sync chapter export 1 4\n❯ ls\nSome Book: Chapter 4.epub\n\n❯ chapter-sync series export 1\n❯ ls\nSome Book.epub\n```\n\n## Web\n\nThe tool also ships with a web service which can be used to view and manage\nsubscriptions.\n\n![Web Example](docs/web.png)\n\n## Inspiration\n\n**this** tool started off as an attempt at a refactor/PR to\n[Leech](https://github.com/kemayo/leech) to enable it to more granularly record\nupdates to books as they changed.\n\nHowever, `chapter-sync` is designed from the ground up to be able to\nindividually record/send chapters as they are published, which ultimately means\nthe to tools ultimately end up being almost entirely different.\n\nI **had** been using InstaPaper to send updates of series to my kindle, until\nthey made that a paid feature. Additionally the drawback there, was that the\nfile they'd send would contain all chapters in the whole series, in reverse.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdancardin%2Fchapter-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdancardin%2Fchapter-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdancardin%2Fchapter-sync/lists"}