CLI skill for Bilibili (哔哩哔哩, B站) with token-efficient YAML output for AI agents to browse videos, users, search, trending, dynamics, favorites, and interact...
---
name: bilibili-cli
description: CLI skill for Bilibili (哔哩哔哩, B站) with token-efficient YAML output for AI agents to browse videos, users, search, trending, dynamics, favorites, and interactions from the terminal
author: jackwener
version: "1.0.0"
tags:
- bilibili
- 哔哩哔哩
- b站
- video
- social-media
- cli
---
# bilibili-cli Skill
A CLI tool for interacting with Bilibili (哔哩哔哩). Use it to fetch video info, search content, browse user profiles, and perform interactions like liking or triple-clicking.
## Agent Defaults
When you need machine-readable output:
1. Prefer `--yaml` first because it is usually more token-efficient than pretty JSON.
2. Use `--json` only when downstream tooling strictly requires JSON.
3. Keep result sets small with `--max`, `--page`, or `--offset`.
4. Prefer specific commands over broad ones. Example: use `bili user-videos 946974 --max 3 --yaml` instead of fetching large timelines.
5. When summarizing a video, fetch subtitles first. Subtitles usually contain the video's core content and are the best primary source for summaries.
6. Only fall back to `--ai`, comments, or audio extraction when subtitles are unavailable or clearly insufficient.
## Prerequisites
```bash
# Install (requires Python 3.10+)
uv tool install bilibili-cli
# Or: pipx install bilibili-cli
# If you need audio extraction support (requires PyAV)
uv tool install "bilibili-cli[audio]"
# Or: pipx install "bilibili-cli[audio]"
```
## Authentication
Most read commands work without login. Subtitles, favorites/following/watch-later/history, feed, and interactions require login.
```bash
bili status # Check if logged in (exit 0 = yes, 1 = no)
bili login # QR code login (if not authenticated)
```
Authentication auto-detects local browser cookies (Chrome/Firefox/Edge/Brave). If cookies are found and valid, no manual login needed. Credentials are saved to `~/.bilibili-cli/credential.json`.
## Command Reference
### Video
```bash
# Get video details (accepts BV ID or full URL)
bili video BV1ABcsztEcY
bili video https://www.bilibili.com/video/BV1ABcsztEcY
# Options
bili video BV1ABcsztEcY --subtitle # Show subtitles (plain text)
bili video BV1ABcsztEcY --subtitle-timeline # Show subtitles with timestamps
bili video BV1ABcsztEcY -st --subtitle-format srt # Export as SRT format
bili video BV1ABcsztEcY --ai # Show B站 AI summary
bili video BV1ABcsztEcY --comments # Show top comments
bili video BV1ABcsztEcY --related # Show related videos
bili video BV1ABcsztEcY --yaml # Token-efficient YAML output
bili video BV1ABcsztEcY --json # Structured JSON envelope
```
### User
```bash
# Look up user profile (by UID or username)
bili user 946974
bili user "影视飓风"
# List user's videos
bili user-videos 946974 --max 20
bili user-videos "影视飓风" --yaml
```
### Search
```bash
# Search users (default)
bili search "关键词"
# Search videos
bili search "关键词" --type video
# Pagination and limit
bili search "关键词" --type video --max 5
bili search "关键词" --page 2
```
### Discovery
```bash
bili hot # Trending/popular videos
bili hot --page 2 --max 10 # Page 2, limit 10
bili rank # Site-wide ranking (3-day)
bili rank --day 7 --max 30 # 7-day ranking, top 30
bili feed # Dynamic timeline (requires login)
bili feed --offset 1234567890 # Next page via returned cursor
bili my-dynamics # My posted dynamics (requires login)
bili dynamic-post "hello" # Publish text dynamic (requires write credential)
bili dynamic-delete 123456789 # Delete one dynamic (requires write credential)
```
### Collections (require login)
```bash
bili favorites # List favorite folders
bili favorites <ID> --page 2 # Videos in a folder
bili following # Following list
bili watch-later # Watch later list
bili history # Watch history
```
### Audio Extraction
Requires `bilibili-cli[audio]` extra (PyAV). Install with `uv tool install "bilibili-cli[audio]"`.
```bash
# Download audio and split into ASR-ready WAV segments (25s each, 16kHz mono)
bili audio BV1ABcsztEcY # Split to /tmp/bilibili-cli/{title}/
bili audio BV1ABcsztEcY --segment 60 # 60s per segment
bili audio BV1ABcsztEcY --no-split # Full m4a file, no splitting
bili audio BV1ABcsztEcY -o ~/data/ # Custom output directory
```
### Interactions (require login)
```bash
bili like BV1ABcsztEcY # Like a video
bili like BV1ABcsztEcY --undo # Unlike
bili coin BV1ABcsztEcY # Give 1 coin
bili coin BV1ABcsztEcY -n 2 # Give 2 coins
bili triple BV1ABcsztEcY # 一键三连 (like + coin + favorite)
bili unfollow 946974 # Unfollow by UID
```
### Account
```bash
bili status # Quick login check
bili status --yaml # Structured auth status
bili whoami # Detailed profile info
bili whoami --yaml # Profile as YAML
bili whoami --json # Profile as JSON
bili login # QR code login
bili logout # Clear credentials
```
## Structured Output
Major query commands support both `--yaml` and `--json` for machine-readable output. Prefer YAML for agent use:
```bash
bili status --yaml # Quick structured auth check
bili video BV1ABcsztEcY --yaml # Preferred for AI agents
bili hot --max 5 --yaml # Smaller, token-efficient payload
bili user 946974 --json | jq -r '.data.user.name' # JSON when jq is needed
```
When stdout is not a TTY, `bilibili-cli` defaults to YAML automatically.
Use `OUTPUT=yaml|json|rich|auto` to override the default output mode.
All machine-readable output uses the envelope documented in [SCHEMA.md](./SCHEMA.md).
## Debugging
```bash
bili -v <command> # Enable verbose/debug logging for any command
```
## Common Patterns for AI Agents
```bash
# For video summarization, fetch subtitles first
bili video BV1ABcsztEcY --subtitle
# Only use AI summary as a fallback or secondary signal
bili video BV1ABcsztEcY --ai
# Get comments for sentiment analysis
bili video BV1ABcsztEcY --comments
# Extract audio for speech-to-text (ASR)
# Segments are saved to /tmp/bilibili-cli/{title}/seg_000.wav, seg_001.wav, ...
bili audio BV1ABcsztEcY --segment 25
# Find a user's latest video BV ID with minimal payload
bili user-videos 946974 --max 1 --yaml
# Check if logged in before performing actions
bili status && bili like BV1ABcsztEcY
# Search and inspect the first few results
bili search "topic" --type video --max 3 --yaml
```
### Workflow: Video Content Analysis
```bash
# 1. Search for a topic
bili search "AI" --type video --max 5
# 2. Get subtitles first for summarization
bili video BV1xxx --subtitle
# 3. If subtitles are missing or incomplete, try AI summary
bili video BV1xxx --ai
# 4. If there is still not enough content, extract audio for ASR
bili audio BV1xxx --segment 25
# 5. Get comments for audience reaction
bili video BV1xxx --comments
```
### Workflow: UP主 Research
```bash
# 1. Look up UP主 profile
bili user "影视飓风"
# 2. Get their recent videos
bili user-videos 946974 --max 10
# 3. Inspect a specific video
bili video BV1xxx --ai --comments
```
## Error Handling
- Commands exit with code 0 on success, non-zero on failure
- Error messages are prefixed with ❌
- Login-required commands show ⚠️ with instruction to run `bili login`
- Invalid BV IDs show a clear error message
## Safety Notes
- Do not ask users to share raw credential/cookie values in chat logs.
- Prefer local browser cookie extraction over manual secret copy/paste.
- If auth fails, ask the user to re-login via `bili login`.
don't have the plugin yet? install it then click "run inline in claude" again.
added explicit inputs with auth details and external connections, structured procedure into 15 numbered steps with clear input/output, extracted 10 decision points from implicit logic throughout original doc, documented output contract with YAML/JSON envelopes and file locations, specified outcome signals with exit codes and confirmation patterns, and added edge cases for rate limits auth expiry and empty result sets.
use bilibili-cli to query Bilibili (哔哩哔哩) for video metadata, user profiles, search results, trending content, and perform authenticated interactions (likes, coins, follows) from the terminal. most read operations work unauthenticated, but subtitles, favorites, history, feed, and interactions require login. prefer YAML output for token efficiency in agentic workflows.
external connection: bilibili.com
authentication (auto-detected or manual)
bili login~/.bilibili-cli/credential.jsonbili status (exit code 0 = logged in, 1 = not)dependencies
uv tool install bilibili-cli or pipx install bilibili-cli)uv tool install "bilibili-cli[audio]")environment variables (optional)
OUTPUT: override default output format (yaml, json, rich, auto). defaults to yaml when stdout is not a TTYinstall bilibili-cli
uv tool install bilibili-cli (or pipx install bilibili-cli)check authentication status
bili status or bili status --yamlauthenticate (if needed)
bili login~/.bilibili-cli/credential.jsonbili status returns exit code 0query videos (by BV ID or URL)
bili video BV1ABcsztEcY --yaml (add --subtitle, --ai, --comments, --related as needed)fetch subtitles (preferred for summarization)
bili video BV1ABcsztEcY --subtitle (or --subtitle-timeline for timestamps, --subtitle-format srt for SRT export)fetch AI summary (fallback)
bili video BV1ABcsztEcY --aiextract audio (if subtitle/AI insufficient)
bili audio BV1ABcsztEcY --segment 25 -o ~/data//tmp/bilibili-cli/{title}/search videos or users
bili search "keyword" --type video --max 5 --yamlbrowse user profile and videos
bili user 946974 (or bili user "username")bili user-videos 946974 --max 20 --yamlexplore trending/ranking content
bili hot --max 10 --yaml (or bili rank --day 7 --max 30)fetch feed (authenticated users)
bili feed or bili feed --offset 1234567890access collections (authenticated users)
bili favorites (or bili favorites <ID> --page 2), bili watch-later, bili historyperform interaction (like, coin, follow)
bili like BV1ABcsztEcY (or --undo to unlike), bili coin BV1ABcsztEcY -n 2, bili triple BV1ABcsztEcY, bili unfollow 946974post or delete dynamic (authenticated)
bili dynamic-post "hello" or bili dynamic-delete 123456789debug/troubleshoot
-v flagbili -v video BV1ABcsztEcYif not logged in (exit code 1 from step 2)
bili login to authenticate via QR code or auto-detect browser cookiesif command requires login but user is not authenticated
bili loginif subtitles are available for a video
--ai summary if available--comments or audio extractionif API rate-limit hit (429 response)
if authentication token expired or invalid
bili login to refreshif YAML output is not a TTY (piped, redirected, or non-interactive)
--yaml or --json specifiedif BV ID is invalid or video does not exist
if result set is empty (no videos found, no users matching search, empty feed)
if network timeout or connection refused
structured output formats (YAML and JSON)
all major query commands support --yaml and --json flags. output follows a standard envelope (documented in SCHEMA.md).
YAML example (preferred for agents):
code: 0
message: success
data:
video:
bvid: BV1ABcsztEcY
title: "Video Title"
views: 12345
likes: 678
publish: "2024-01-15"
description: "..."
subtitles:
- text: "subtitle line 1"
timestamp: "00:00:05"
- text: "subtitle line 2"
timestamp: "00:00:10"
JSON example:
{
"code": 0,
"message": "success",
"data": {
"video": {
"bvid": "BV1ABcsztEcY",
"title": "Video Title",
"views": 12345
}
}
}
file locations
~/.bilibili-cli/credential.json/tmp/bilibili-cli/{video_title}/seg_000.wav, seg_001.wav, etc. (or custom -o directory)-v flag used)exit codes
successful query commands print machine-readable output
bili video BV1ABcsztEcY --yaml outputs YAML envelope with code: 0 and video metadatabili search "keyword" --type video --max 5 --yaml outputs list of videosbili user 946974 --yaml outputs user profilesuccessful authentication
bili login displays QR code, user scans on phone, credential savedbili status returns exit code 0 and prints "✓ logged in" (or similar)bili whoami --yaml shows authenticated user profilesuccessful interaction (like, coin, follow, post)
successful audio extraction
/tmp/bilibili-cli/{title}/ with names seg_000.wav, seg_001.wav, etc.error conditions show clear feedback
bili login, exit code 1agent integration patterns
yaml library (Python) or equivalentcode field in response: 0 = success, non-zero = errordata payload for downstream processingbili status && bili like BV1...)