eBook cli downloader
Go to file
Mattias Svensson 22940deefe Add Storytel want-to-read (bookshelf) flow + make Storytel downloads work
Storytel's bookshelf API (api.storytel.net/libraries/bookshelf) returns each
book with a reading state; WILL_CONSUME is the user's want-to-read list. Add a
bookshelf flow mirroring the Nextory one: a .../want-to-read (or /bookshelf) URL
resolves to a Series of the ebook-format WILL_CONSUME ids. The endpoint needs a
JSON body sent with a form-urlencoded content type (it rejects application/json
with HTTP 400).

Along the way, fix two things that broke Storytel downloads entirely:
- login() was missing the url positional arg that __main__.authenticate()
  passes (every other source has it), so Storytel auth raised TypeError.
- populate authors/series/index/language/description in download_book_from_id
  (previously only title); and str()-coerce metadata values when building the
  output path, since a numeric series index made remove_unwanted_chars crash
  with "int has no attribute replace".

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 19:46:25 +02:00
grawlix Add Storytel want-to-read (bookshelf) flow + make Storytel downloads work 2026-07-01 19:46:25 +02:00
.gitignore Add support for marvel unlimited 2023-05-14 17:35:25 +02:00
flake.lock Add nix flake 2025-12-27 14:12:18 +01:00
flake.nix Add nix flake 2025-12-27 14:12:18 +01:00
LICENSE Create LICENSE 2023-04-29 17:14:27 +02:00
pyproject.toml Fix Nextory: bump X-App-Version, null series, missing urllib3 dep (#25) 2026-06-03 07:50:17 +00:00
README.md Add storytel support (#13) 2024-04-02 15:18:45 +00:00
setup.py Add code 2023-04-06 21:38:19 +02:00
uv.lock Add Storytel want-to-read (bookshelf) flow + make Storytel downloads work 2026-07-01 19:46:25 +02:00

grawlix

GitHub release GitHub top language License Donate using Ko-Fi

CLI ebook downloader

Supported services

grawlix currently supports downloading from the following sources:

Installation

pip install grawlix

From repo (unstable)

git clone https://github.com/jo1gi/grawlix.git
cd grawlix
python3 setup.py install

Authentication

Authentication can either be done with login (username and password) or cookies. Not all sources support both methods.

Login

Some sources require authentication, which can be done either with cli arguments or a config file.

Cli example

grawlix --username "user@example.com" --password "SuperSecretPassword" <url>

Config file example

[sources.name]
username = "user@example.com"
password = "SuperSecretPassword"

Config file should be placed in ~/.config/grawlix/grawlix.toml

Cookies

Some sources can be authenticated with Netscape cookie files. I use this extension to export my cookies from my browser.

Cookies can be placed in current dir as cookies.txt or be given with the --cookie argument.

Download books

To download a book run:

grawlix [options] <book url>