This project is an automated pipeline for scraping, processing, and converting web novel chapters into high-quality audiobooks. It supports multiple sources and advanced audio processing, including effects and playback speed adjustment.
- 📖 Scrape chapters from RoyalRoad and ScribbleHub
- 🧠 Generate speech using Coqui TTS
- 🎵 Merge and apply audio effects with
ffmpeg - 🎧 Change playback speed
- 💪 Designed for batch processing and meta-progression tracking
- 🐇 Easily configurable via
config.yml
git clone https://github.com/robert-clayton/audiobook.git
cd audiobook(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -curl -sSL https://install.python-poetry.org | python3 -Make sure Poetry is in your PATH. If not, use:
py -m poetry --versionpoetry installpoetry run audiobook [--speed 1.2] [--dev]--speed: Playback speed multiplier (default: 1.0)--dev: Use the development config file (config_dev.yml)
Edit config.yml or config_dev.yml:
config:
output_dir: \\192.168.0.1\your\mapped\network\location\media
series:
- latest: https://www.royalroad.com/fiction/36049/the-primal-hunter/chapter/2309548/chapter-1095-beauty-brain
name: The Primal Hunter
narrator: onyx
url: https://www.royalroad.com/fiction/36049/the-primal-hunter
- latest: https://www.royalroad.com/fiction/24709/defiance-of-the-fall/chapter/2307815/chapter-1329-past-lifes-dream
enabled: false
name: Defiance of the Fall
narrator: onyx
url: https://www.royalroad.com/fiction/24709/defiance-of-the-fall
- latest: https://www.royalroad.com/fiction/76463/mage-tank/chapter/2306656/273-the-truth-revealed
name: Mage Tank
narrator: onyx
replacements:
DR: Damage Reduction
system:
speed: 1.1
modulate: true
type:
- bold
voice: fable
url: https://www.royalroad.com/fiction/76463/mage-tankEach series entry includes:
name: Display nameurl: Table of Contents urllatest: Latest chapter urlnarrator: What voice to use for TTS synthesis. Must match name (sans ext) of files inspeakers/enabled: Toggle scraping for this series (optional, defaultTrue)replacements: Optional strings to replace from the source material (optional)system: Identify certain divs as from a "system" to modulate the audio for (optional)- Currently supported types:
bold,italic,bracket,braces,table,center,angle,blockquote - Modulate adds a "tech-y" filter to the voice
- Speed will speed up and down the system voice
- Currently supported types:
audiobook/
├── scrapers/ # RoyalRoad and ScribbleHub specific scrapers
├── processors/ # TTS, audio merging, playback speed adjustments
├── utils/ # Logging, color codes, audio helpers
└── __main__.py # CLI entry point
speakers/ # User-provided source audio for voice cloning
config.yml # User-editable configUse py -m poetry or add Poetry to your shell PATH manually.
Ensure ffmpeg is installed and accessible via your system PATH. You can verify with:
ffmpeg -versionMIT License. See LICENSE file for details.