Skip to main content

NOVELDOWNLOADER: rule-driven Chinese novel downloader and format converter

Project description

NDL - NOVELDOWNLOADER

Rule-driven Chinese novel downloader and format converter

CI License: MIT Python

简体中文

Status

Under active development. P0-P6 are implemented, and P7.1 added repeatable release-candidate distribution verification. First release (v0.1) targets MVP features: 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 fixture site to TXT or EPUB
  • Convert local TXT files to TXT or 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-candidate 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 has not been released to PyPI yet. The distribution name will be ndl-storykit (the import path inside the package is still ndl, and the CLI entry point is still ndl). When v0.1 ships the install becomes:

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

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ndl_storykit-0.1.0.tar.gz (322.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ndl_storykit-0.1.0-py3-none-any.whl (72.7 kB view details)

Uploaded Python 3

File details

Details for the file ndl_storykit-0.1.0.tar.gz.

File metadata

  • Download URL: ndl_storykit-0.1.0.tar.gz
  • Upload date:
  • Size: 322.0 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

Hashes for ndl_storykit-0.1.0.tar.gz
Algorithm Hash digest
SHA256 28e31ae6b7877461a58a4624248a9a6efd6adff7b0bc186cde9b15af3c471dfe
MD5 89542a70aa8b5dd8184de69be54353f6
BLAKE2b-256 337608c235baa6d2e423d4a7d0f7f1e117d10b7b9e55af0532c09c436084eb91

See more details on using hashes here.

File details

Details for the file ndl_storykit-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ndl_storykit-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 72.7 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

Hashes for ndl_storykit-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d9d71bab9cbfed5c29e99e9f80861cac8698a6dcb15ee994af2b7f9b959b3571
MD5 907617f7c16db34f958ba6e53972c5ff
BLAKE2b-256 6636025e04ec5d3bec7b0ec5c28fc7a2f65b51c4800e2e5e53a2e0f04002d4da

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page