NOVELDOWNLOADER: rule-driven Chinese novel downloader and format converter
Project description
NDL - NOVELDOWNLOADER
Rule-driven Chinese novel downloader and format converter
Status
v0.1.0 is published on PyPI as ndl-storykit. The current source tree is back
on the next development version, 0.2.0.dev0, after shipping the first public
release. Implemented surfaces include download, TXT/EPUB convert, library
management, search, rule updates, optional browser rendering for supported
rules, local Web UI, and auditable packaging checks. See
docs/superpowers/SESSION-STATE.md for the current handoff snapshot.
What Works Now
- Validate YAML source rules with
ndl rules validate - Download a rule-matched static HTML site to TXT or EPUB after installing a YAML rule
- Convert local TXT files to TXT or styled EPUB
- Manage the local SQLite library with
ndl library list/show/remove - Refresh saved ongoing novels with
ndl update --all - Search rule-defined source indexes with
ndl search - Install validated remote YAML rules with
ndl rules update - Use optional Playwright-backed rendering when a rule declares
fetcher.type: browser, including rule-defined wait/viewport controls - Verify release wheel/sdist contents with
scripts/verify_distribution.py - Search, download, and trigger manual/recurring library updates from the local Web UI
- Enforce robots.txt, per-host rate limits, retries, and a first-run lawful-use disclaimer for downloads
What It Does (Roadmap)
- Download Chinese web novels from static HTML sites, with Playwright for JS-heavy sites as an optional extra
- Convert between TXT and EPUB formats, standalone or after download
- Manage a local SQLite library and track ongoing novels for updates
- Search across multiple sites via rule-defined search endpoints
- Add new sites by writing YAML rules, not Python code
- Use either CLI or a local Web UI, both sharing the same state
Non-Goals
NDL does not and will not:
- Support commercial platforms such as Qidian, Fanqie, Jinjiang, or Qimao
- Bypass paywalls, Cloudflare, CAPTCHAs, or DRM
- Include login/account features or proxy pools
See DISCLAIMER.md for the full ethics and legal stance.
Development Install
uv sync
uv run ndl --version
Optional browser-backed rules require the browser extra and a Playwright browser install:
uv sync --extra browser
uv run playwright install chromium
uv run ndl doctor browser
The package is published on PyPI as ndl-storykit. The import path inside the
package is still ndl, and the CLI entry point is still ndl:
pip install ndl-storykit
pip install 'ndl-storykit[browser]' # with optional Playwright fetcher
Usage
ndl download <url> -o book.epub --accept-disclaimer
ndl convert book.txt -o book.epub
ndl library list
ndl update --all --accept-disclaimer
ndl search "keyword"
ndl rules update --manifest-url <manifest-url>
ndl doctor browser
ndl serve --accept-disclaimer
ndl rules validate my-rule.yaml
Contributing
See CONTRIBUTING.md. Rule contributions are especially welcome and do not require Python.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ndl_storykit-0.2.0.tar.gz.
File metadata
- Download URL: ndl_storykit-0.2.0.tar.gz
- Upload date:
- Size: 369.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb08ecf1432325659eec8bdcdaed0a7b61cc9a71cb7f57a53ede207058074bf8
|
|
| MD5 |
3ee19dd78fe7578a7523fe7151ac3a73
|
|
| BLAKE2b-256 |
02990bc333b53baee9671f5bec56465b6a097748a378a3eac0ec8c54ac78253f
|
File details
Details for the file ndl_storykit-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ndl_storykit-0.2.0-py3-none-any.whl
- Upload date:
- Size: 78.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f36f118f3830a22023610591df3cdf09fefdd3b9af029e1e74414dd5136e362
|
|
| MD5 |
8bc655f923ba1d7eabd1fcdb8dbeb4c8
|
|
| BLAKE2b-256 |
2fbb9e741efc089f186db1d500577938bff0f11958dcba4c2b85d1b22a6fca21
|