Skip to main content

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)

Source distribution for fictionreaper 0.1.0
File Size Uploaded
fictionreaper-0.1.0.tar.gz 15.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fictionreaper 0.1.0
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page