FictionReaper
Download Royal Road fiction as Markdown and/or EPUB.
Works on macOS and Linux (Python 3.12+). Ships a CLI and a small HTTP API.
Install (end users)
Pick one. All put a fictionreaper command on your PATH.
Option A — uv tool (recommended)
Install uv, then:
uv tool install git+https://github.com/Fluder-Paradyne/FictionReaper.git
fictionreaper --version
Upgrade later:
uv tool upgrade fictionreaper
# or reinstall from git tip:
uv tool install --force git+https://github.com/Fluder-Paradyne/FictionReaper.git
Option B — pipx
pipx install git+https://github.com/Fluder-Paradyne/FictionReaper.git
fictionreaper --version
Option C — pip (venv)
python3 -m venv .venv
source .venv/bin/activate
pip install "git+https://github.com/Fluder-Paradyne/FictionReaper.git"
fictionreaper --version
Option D — PyPI (after first publish)
pip install fictionreaper
# or: uv tool install fictionreaper
# or: pipx install fictionreaper
Publishing notes for maintainers: docs/PUBLISHING.md.
Requirements
| OS | macOS or Linux |
| Python | 3.12+ (3.13 supported) |
| Network | outbound HTTPS to royalroad.com / CDN |
Native wheels for dependencies (lxml, etc.) are published for common Mac/Linux platforms; a normal install does not need a compiler in most cases.
Quick start
# One chapter → Markdown + EPUB (default)
fictionreaper download \
"https://www.royalroad.com/fiction/21220/mother-of-learning/chapter/301778/1-good-morning-brother"
# Whole fiction (many chapters — be polite with --delay)
fictionreaper download \
"https://www.royalroad.com/fiction/21220/mother-of-learning" \
--delay 1.0
# Formats
fictionreaper download "<url>" --format markdown
fictionreaper download "<url>" --format epub
fictionreaper download "<url>" --format markdown,epub
fictionreaper download "<url>" -f markdown -f epub
# Output directory
fictionreaper download "<url>" --output-dir ~/Books/rr
Output layout:
downloads/<fiction-slug>/
0001-chapter-slug.md
0002-chapter-slug.md
...
<fiction-slug>.epub
HTTP API
fictionreaper serve --host 127.0.0.1 --port 8000
# docs: http://127.0.0.1:8000/docs
curl -sS -X POST 'http://127.0.0.1:8000/download' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://www.royalroad.com/fiction/21220/mother-of-learning/chapter/301778/1-good-morning-brother",
"output_dir": "downloads",
"delay_seconds": 1.0,
"formats": ["markdown", "epub"]
}'
Development
git clone https://github.com/Fluder-Paradyne/FictionReaper.git
cd FictionReaper
uv sync --all-groups
uv run pytest
uv run mypy src
uv run ruff check src tests
uv build
Ethics & legal
- For personal archival / offline reading of content you are allowed to access.
- Be polite: keep a non-zero
--delay, don’t hammer the site. - Respect Royal Road’s Terms of Service and copyright.
- Default User-Agent:
FictionReaper/0.1 (+https://github.com/Fluder-Paradyne/FictionReaper).
License
MIT — see LICENSE.
Release files for fictionreaper 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fictionreaper-0.1.0.tar.gz | 15.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fictionreaper-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.5 kB
Release files / fictionreaper-0.1.0.tar.gz
| Download URL | fictionreaper-0.1.0.tar.gz |
|---|---|
| Size | 15.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
acadf0d4755316642c295bc95b24c4faf3cb930d52886e709b74cbd942e7cc37
|
|
BLAKE2b-256 checksum How to use checksums |
d51831abb70c6d98845181710f4067991c6279bad24e99c5b1628d214bd852d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / fictionreaper-0.1.0-py3-none-any.whl
| Download URL | fictionreaper-0.1.0-py3-none-any.whl |
|---|---|
| Size | 20.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
baac9d62a9e64ae0c6577dd43d416dc7bcdd22ccb653acc34d97777845dc862c
|
|
BLAKE2b-256 checksum How to use checksums |
72a7a48ad6e26ab750fa6a5b8ac5f392b18f715936d53e59c8302651c1278626
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|