nodeseek-cli
A command-line reader for NodeSeek forum threads.
NodeSeek serves each thread as fully server-rendered HTML, so nodeseek-cli fetches a post URL
(no API key, no login) and converts it to Markdown, or to structured JSON with --json. It handles
pagination, quoted replies, images, code blocks, tables, and NodeSeek's "magic tab" benchmark
widgets.
Install / run
Run without installing (recommended):
uvx nodeseek-cli 355740
Or install:
uv tool install nodeseek-cli # global CLI: `nodeseek` and `nodeseek-cli`
pip install nodeseek-cli # into current environment
Usage
nodeseek <post> [options]
<post> bare id (355740), slug (post-355740-1), or full URL
-p, --page N fetch only page N (overrides page in the URL)
-a, --all fetch every page of the thread and merge
-j, --json emit structured JSON instead of markdown
--ansi keep ANSI colour codes inside code blocks (default: strip)
-V, --version print version
-h, --help show help
By default only one page is fetched (the page in the URL/slug, or page 1). The markdown
header shows page X/N and a footer tells you how to reach the next page or the whole thread.
Examples
nodeseek 355740 # first page as markdown
nodeseek post-250906-2 # a specific page
nodeseek 250906 --all # whole thread, merged
nodeseek 250906 --all --json | jq '.comments[].author'
nodeseek https://www.nodeseek.com/post-355740-1 --ansi
Formatting notes
- Stickers are meaningless out of context and render as
[Sticker]. - Images render as markdown
with absolute URLs. - Replies are detected from the leading
@user #Nmarker and shown as aReply to @user #Nline (and areply_toobject in JSON); the marker is stripped from the body. - Magic tab widgets (hardware/network benchmark reports, etc.) expand into one titled code
block per tab. ANSI colour is reconstructed from NodeSeek's
data-ansicodeencoding and stripped by default (keep it with--ansi).
Library API
from nodeseek_cli import fetch_post, to_markdown, to_json
post = fetch_post("250906", all_pages=True) # -> nodeseek_cli.models.Post
print(post.title, post.pages, len(post.comments))
for c in post.comments:
print(c.floor, c.author, c.reply_to)
print(to_markdown(post))
print(to_json(post))
Parse already-downloaded HTML offline:
from nodeseek_cli import parse_page
title, max_page, comments = parse_page(html, ansi=False)
Errors
fetch_post / fetch_page raise PostNotFound (404), RateLimited (429), or the base
NodeSeekError. parse_target raises ValueError on an unparseable reference.
Development
uv sync --extra dev
uv run pytest # offline tests against saved fixtures
uv run nodeseek 355740 # run the CLI from source
Linting and formatting use ruff, wired up through prek (a drop-in pre-commit runner):
uv run ruff format . # format
uv run ruff check . # lint
uv run prek install # install the git pre-commit hook
uv run prek run --all-files
License
MIT
Metadata
Release files for nodeseek-cli 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| nodeseek_cli-0.1.0.tar.gz | 40.6 kB | Without provenance | Details for nodeseek_cli-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| nodeseek_cli-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for nodeseek_cli-0.1.0-py3-none-any.whl |
Total release size: 53.3 kB
Release files / nodeseek_cli-0.1.0.tar.gz
| Download URL | nodeseek_cli-0.1.0.tar.gz |
|---|---|
| Size | 40.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a89e403234bad8b55de6922cebde8db8cc37808c37ed4079c983e3ddf2aa7ff6
|
|
BLAKE2b-256 checksum How to use checksums |
2716cd06d5b6c9a44eef9aac49021ff8008db1e0a84d80feeedfdef0b9008220
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"43","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / nodeseek_cli-0.1.0-py3-none-any.whl
| Download URL | nodeseek_cli-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e41feb84a04b1802fe050bc63a46968da5573eafc6076c29426930d71e7af51a
|
|
BLAKE2b-256 checksum How to use checksums |
c4c23054e25d4c7ff0db87aa8a30785581c6b5fc22707835100fcb27fb46416f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"43","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for nodeseek-cli 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.