bilibili-cli

A CLI for Bilibili — browse videos, users, favorites from the terminal 📺
English | 中文
More Projects
- xiaohongshu-cli — Xiaohongshu (小红书) CLI for notes and account workflows
- twitter-cli — Twitter/X CLI tooling
- discord-cli — Discord CLI for local-first chat sync and search
- tg-cli — Telegram CLI for local-first sync, search, and export
Features
- 🎬 Video — details, subtitles, AI summary, comments, related videos
- 🎵 Audio — extract audio and split into ASR-ready WAV segments
- 👤 User — profile, video list, following list
- 🔍 Search — search users or videos by keyword
- 🔥 Trending — hot videos and site-wide ranking
- 📰 Feed — dynamic timeline from your follows
- 📂 Favorites — browse favorite folders, watch-later, and watch history
- 👍 Interactions — like, coin, triple (一键三连)
- 🔐 Smart auth — auto-extracts cookies from Chrome/Firefox, or QR code login
- 📊 Structured output — major query commands support
--yaml and --json
- 🤖 Agent-friendly defaults — non-TTY stdout defaults to YAML; override with
OUTPUT=yaml|json|rich|auto
- 📦 Stable envelope — see SCHEMA.md for
ok/schema_version/data/error
- 🧱 Normalized payloads — command-layer output is normalized instead of leaking raw upstream SDK responses
Installation
# Recommended: uv tool (fast, isolated)
uv tool install bilibili-cli
# Or: pipx
pipx install bilibili-cli
# If you need audio extraction support
uv tool install "bilibili-cli[audio]"
# or
pipx install "bilibili-cli[audio]"
Upgrade to the latest version:
uv tool upgrade bilibili-cli
# Or: pipx upgrade bilibili-cli
Tip: Upgrade regularly to avoid unexpected errors from outdated API handling.
Or from source:
git clone git@github.com:jackwener/bilibili-cli.git
cd bilibili-cli
uv sync
Run tests in the project environment:
uv sync --extra dev
uv run pytest -q
uv run ruff check .
uv run python -m mypy bili_cli
If the project directory was moved and stale virtualenv wrappers remain, rerun:
uv sync --extra dev --reinstall
Usage
# Login & account
bili status # Check login status
bili status --yaml # Structured auth status
bili login # QR code login
bili whoami # Detailed profile (level, coins, followers)
bili whoami --yaml # Structured profile
# Videos
bili video BV1ABcsztEcY # Video details
bili video BV1ABcsztEcY --subtitle # With subtitles (plain text)
bili video BV1ABcsztEcY --subtitle-timeline # With timeline
bili video BV1ABcsztEcY -st --subtitle-format srt # Export as SRT
bili video BV1ABcsztEcY --ai # AI summary
bili video BV1ABcsztEcY --comments # Top comments
bili video BV1ABcsztEcY --related # Related videos
bili video BV1ABcsztEcY --yaml # Agent-friendly YAML
bili video BV1ABcsztEcY --json # Normalized JSON envelope
bili video BV1ABcsztEcY --subtitle-timeline --comments --json # Extras in one payload
# Users
bili user 946974 # UP profile
bili user "影视飓风" # Search by name
bili user-videos 946974 --max 20 # Video list
# Discovery
bili hot # Trending videos (page 1)
bili hot --page 2 --max 10 # Page 2, top 10
bili rank # Site-wide ranking (3-day)
bili rank --day 7 --max 30 # 7-day ranking, top 30
bili search "关键词" # Search users
bili search "关键词" --type video --max 5 # Search videos (top 5)
bili search "关键词" --page 2 # Next page
bili feed # Dynamic timeline
bili feed --offset 1234567890 # Next page via returned cursor
bili my-dynamics # My posted dynamics
bili dynamic-post "抽个奖,明天开奖" # Publish text dynamic
bili dynamic-delete 123456789012345678 # Delete one dynamic
# Collections
bili favorites # Favorite folders
bili favorites <ID> --page 2 # Videos in a folder
bili following # Following list
bili watch-later # Watch later
bili history # Watch history
# Audio extraction
bili audio BV1ABcsztEcY # Download + split into 25s WAV segments
bili audio BV1ABcsztEcY --segment 60 # 60s per segment
bili audio BV1ABcsztEcY --no-split # Full m4a, no splitting
bili audio BV1ABcsztEcY -o ~/data/ # Custom output directory
# Interactions
bili like BV1ABcsztEcY # Like
bili coin BV1ABcsztEcY # Give coin
bili triple BV1ABcsztEcY # 一键三连 🎉
bili unfollow 946974 # Unfollow by UID
bili like BV1ABcsztEcY --json # Structured write result
bili coin BV1ABcsztEcY --yaml # Structured write result
Authentication
bilibili-cli uses a 3-tier authentication strategy:
- Saved credential — loads from
~/.bilibili-cli/credential.json
- Browser cookies — auto-extracts from Chrome, Firefox, Edge, or Brave
- QR code login —
bili login displays a QR code in the terminal
Credentials are validated on use for authenticated commands. Expired cookies are automatically cleared, while transient network validation failures keep local credentials for best-effort fallback.
bili status exits with code 0 only when authenticated; otherwise it exits with 1.
Most commands work without login. Subtitles, favorites/following/watch-later/history, feed, my-dynamics, and interactions require authentication. Write actions (like/coin/triple/unfollow/dynamic-post/dynamic-delete) require write-capable credential (bili_jct).
Audio extraction requires the optional audio dependency group (av).
Structured Output
All --json / --yaml output uses the shared envelope from SCHEMA.md.
Major commands now emit normalized payloads instead of raw upstream SDK blobs:
bili video → data.video, data.subtitle, data.ai_summary, data.comments, data.related, data.warnings
bili hot / bili rank → data.items
bili search → normalized user/video lists
bili like / bili coin / bili triple / bili unfollow → normalized write-action results
Structured errors now use more specific codes such as not_authenticated, permission_denied, invalid_input, network_error, upstream_error, and not_found.
Use as AI Agent Skill
bilibili-cli ships with a SKILL.md that teaches AI agents how to use it.
Agent Output Recommendation
If an AI agent needs machine-readable output, prefer --yaml first:
--yaml is usually more token-efficient than pretty-printed JSON
- It is still easy to parse for agents and scripts
- Keep
--json for jq, strict JSON-only tooling, or exact downstream schemas
- Non-TTY stdout defaults to YAML automatically
- Use
OUTPUT=yaml|json|rich|auto to override the default mode
Examples:
bili status --yaml
bili video BV1ABcsztEcY --yaml
bili hot --max 5 --yaml
bili user-videos 946974 --max 3 --yaml
For agent usage, also prefer narrower queries (--max, --page, --offset) to avoid wasting context on oversized payloads.
When an AI agent is asked to summarize a video, it should fetch subtitles first. Subtitles usually contain the core content of the video and are the best primary source for summarization. Only fall back to AI summary, comments, or audio extraction when subtitles are unavailable or insufficient.
npx skills add jackwener/bilibili-cli
| Flag | Description |
|---|
-g | Install globally (user-level, shared across projects) |
-a claude-code | Target a specific agent |
-y | Non-interactive mode |
Manual Install
mkdir -p .agents/skills
git clone git@github.com:jackwener/bilibili-cli.git .agents/skills/bilibili-cli
Once added, AI agents that support the .agents/skills/ convention will automatically discover and use bilibili-cli commands.
OpenClaw / ClawHub (Deprecated)
⚠️ ClawHub install method is deprecated and no longer supported. Use Skills CLI or Manual Install above.
Troubleshooting
需要登录 / not_authenticated — Run bili login to scan QR code, or ensure you're logged in to bilibili.com in Chrome/Firefox/Edge/Brave.
HTTP 412 / RateLimitError — Bilibili anti-scraping triggered. Wait a moment and retry, or reduce --max.
无法提取 BV 号 / InvalidBvidError — Check the BV ID or URL format. Must be BV followed by 10 alphanumeric characters.
NetworkError — Check your network connection. If behind a proxy, ensure it supports the target domain.
当前登录凭证不支持写操作 — Your saved cookies lack bili_jct. Run bili login to re-authorize with full write permission.
Structured error codes: not_authenticated, permission_denied, invalid_input, network_error, upstream_error, not_found, rate_limited, internal_error.
推荐项目
功能特性
- 🎬 视频 — 详情、字幕、AI 总结、评论、相关推荐
- 🎵 音频 — 提取视频音频,切分为语音识别 (ASR) 可用的 WAV 片段
- 👤 用户 — UP 主资料、视频列表、关注列表
- 🔍 搜索 — 按关键词搜索用户或视频
- 🔥 发现 — 热门视频、全站排行榜
- 📰 动态 — 关注的人的动态时间线
- 📂 收藏 — 收藏夹浏览、稍后再看、观看历史
- 👍 互动 — 点赞、投币、一键三连
- 🔐 智能认证 — 自动提取浏览器 Cookie,或扫码登录
- 📊 结构化输出 — 主要查询命令支持
--yaml 和 --json
- 🤖 更适合 Agent — stdout 不是 TTY 时默认输出 YAML,也可以用
OUTPUT=yaml|json|rich|auto 覆盖
- 🧱 规范化 payload — 结构化输出在命令层做了收口,不再直接暴露原始上游 SDK 返回
安装
# 推荐:uv tool(快速、隔离环境)
uv tool install bilibili-cli
# 或者:pipx
pipx install bilibili-cli
# 如果需要音频提取功能
uv tool install "bilibili-cli[audio]"
# 或
pipx install "bilibili-cli[audio]"
升级到最新版本:
uv tool upgrade bilibili-cli
# 或:pipx upgrade bilibili-cli
提示: 建议定期升级,避免因版本过旧导致的 API 调用异常。
或从源码安装:
git clone git@github.com:jackwener/bilibili-cli.git
cd bilibili-cli
uv sync
开发环境验证:
uv sync --extra dev
uv run pytest -q
uv run ruff check .
uv run python -m mypy bili_cli
如果项目目录发生过移动,导致旧的 virtualenv wrapper 失效,可重新执行:
uv sync --extra dev --reinstall
使用示例