- Add Kokoro-FastAPI TTS integration to the chapter reader UI: - Browser-side MSE streaming with paragraph-level click-to-start - Voice selector, speed slider, auto-next with prefetch of the next chapter - New GET /ui/chapter-text endpoint that strips Markdown and serves plain text - Add ranking page (novelfire /ranking scraper, WriteRanking/ReadRankingItems in writer, GET /ranking + POST /ranking/refresh + GET /ranking/view routes) with local-library annotation and one-click scrape buttons - Add StrategyDirect (plain HTTP client) as a new browser strategy; the default strategy is now 'direct' for chapter fetching and 'content' for chapter-list URL retrieval (split via BROWSERLESS_URL_STRATEGY) - Fix chapter numbering bug: numbers are now derived from the URL path (/chapter-N) rather than list position, correcting newest-first ordering - Add 'refresh <slug>' CLI sub-command to re-scrape a book from its saved source_url without knowing the original URL - Extend NovelScraper interface with RankingProvider (ScrapeRanking) - Tune scraper timeouts: wait-for-selector reduced to 5 s, GotoOptions timeout set to 60 s, content/scrape client defaults raised to 90 s - Add cover extraction fix (figure.cover > img rather than bare img.cover) - Add AGENTS.md and .aiignore for AI tooling context - Add integration tests for browser client and novelfire scraper (build tag: integration) and unit tests for chapterNumberFromURL and pagination
42 lines
1.6 KiB
Plaintext
42 lines
1.6 KiB
Plaintext
# libnovel scraper — environment overrides
|
|
# Copy to .env and adjust values; do NOT commit this file with real secrets.
|
|
|
|
# Browserless API token (leave empty to disable auth)
|
|
BROWSERLESS_TOKEN=
|
|
|
|
# Number of concurrent browser sessions in Browserless
|
|
BROWSERLESS_CONCURRENT=10
|
|
|
|
# Queue depth before Browserless returns 429
|
|
BROWSERLESS_QUEUED=100
|
|
|
|
# Per-session timeout in ms
|
|
BROWSERLESS_TIMEOUT=60000
|
|
|
|
# Optional webhook URL for Browserless error alerts (leave empty to disable)
|
|
ERROR_ALERT_URL=
|
|
|
|
# Which Browserless strategy the scraper uses: content | scrape | cdp | direct
|
|
BROWSERLESS_STRATEGY=direct
|
|
|
|
# Strategy for URL retrieval (chapter list). Uses browserless content strategy by default.
|
|
# Set to direct to use plain HTTP, or content/scrape/cdp for browserless.
|
|
BROWSERLESS_URL_STRATEGY=content
|
|
|
|
# Chapter worker goroutines (0 = NumCPU inside the container)
|
|
SCRAPER_WORKERS=0
|
|
|
|
# Host path to mount as the static output directory
|
|
STATIC_ROOT=./static/books
|
|
|
|
# ── Kokoro-FastAPI TTS ────────────────────────────────────────────────────────
|
|
# Base URL for the Kokoro-FastAPI service. When running via docker-compose the
|
|
# default (http://kokoro:8880) is wired in automatically; override here only if
|
|
# you are pointing at an external or GPU instance.
|
|
KOKORO_URL=http://kokoro:8880
|
|
|
|
# Default voice used for chapter narration.
|
|
# Single voices: af_bella, af_sky, af_heart, am_adam, …
|
|
# Mixed voices: af_bella+af_sky or af_bella(2)+af_sky(1) (weighted blend)
|
|
KOKORO_VOICE=af_bella
|