Back to skills
SKILL.md
Bilibili All In One
ASecurityA comprehensive Bilibili toolkit that integrates hot trending monitoring, video downloading, video watching/playback, subtitle downloading, and video publishing capabilities into a single unified skill. Supports Bilibili session cookie authentication for publishing and high-quality downloads. Requests go to official Bilibili API endpoints over HTTPS.
- 4 stars
- 0 votes
- 0 copies
- 1 view
- Added September 12, 2026
Works with
Security analysis
92/100- Installs packages at runtime which could introduce malicious dependencies
Pro scans all 2 files and shows the line behind each finding
npx -y skills add aibot88/sec_skill_store --skill bilibili-all-in-one --agent claude-codeAre you the author of Bilibili All In One?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/aibot88-bilibili-all-in-one)---
name: bilibili-all-in-one
description: >
A comprehensive Bilibili toolkit that integrates hot trending monitoring,
video downloading, video watching/playback, subtitle downloading,
and video publishing capabilities into a single unified skill.
Supports Bilibili session cookie authentication for publishing and
high-quality downloads. Requests go to official Bilibili API endpoints
over HTTPS.
version: 1.0.18
type: code
implementation: python
interface: cli-and-api
runtime: python>=3.8
languages:
- zh-CN
- en
tags:
- bilibili
- video-download
- hot-trending
- subtitle
- danmaku
- video-publish
- video-player
- batch-download
- multi-format
author: wscats
license: MIT
homepage: https://github.com/wscats/bilibili-all-in-one
repository: https://github.com/wscats/bilibili-all-in-one
entry_point: main.py
required_env_vars: []
optional_env_vars:
- BILIBILI_SESSDATA
- BILIBILI_BILI_JCT
- BILIBILI_BUVID3
- BILIBILI_PERSIST
install: pip install -r requirements.txt
---
# Bilibili All-in-One Skill
A comprehensive Bilibili toolkit that integrates hot trending monitoring, video downloading, video watching/playback, subtitle downloading, and video publishing capabilities into a single unified skill.
> **โ ๏ธ Optional Environment Variables:** `BILIBILI_SESSDATA`, `BILIBILI_BILI_JCT` (optional), `BILIBILI_BUVID3` (optional), `BILIBILI_PERSIST` (optional)
> These are sensitive Bilibili session cookies needed **only** for publishing and high-quality (1080p+/4K) downloads.
> **Most features work WITHOUT any credentials:** hot monitoring, standard-quality downloads, subtitle listing, danmaku, stats viewing.
>
> **๐ฆ Install:** `pip install -r requirements.txt` (all standard PyPI packages: httpx, aiohttp, beautifulsoup4, lxml, requests)
>
> **๐ Source:** [github.com/wscats/bilibili-all-in-one](https://github.com/wscats/bilibili-all-in-one)
---
### ไฝๆถๆฟๆดป
ๅฝ็จๆท**ๆ็กฎ่ฏทๆฑ**ไปฅไธ Bilibili ็ธๅ
ณๆไฝๆถ๏ผๆฌ Skill ๅฏ่ขซๆฟๆดป๏ผ
| ่งฆๅๅบๆฏ | ๅน้
็ๆจกๅ | ๅ
ธๅ่งฆๅ่ฏ |
|---|---|---|
| ๆฅ็B็ซ็ญ้จใ็ญๆใๆ่กๆฆใๅฟ
็ๆฆ | ๐ฅ Hot Monitor | "็ญ้จ"ใ"็ญๆ"ใ"ๆ่ก"ใ"่ถๅฟ"ใ"ๅฟ
็"ใ"ๆต่ก"ใ"ๆฆๅ" |
| ไธ่ฝฝB็ซ่ง้ขใๆๅ้ณ้ขใๆน้ไธ่ฝฝ | โฌ๏ธ Downloader | "ไธ่ฝฝ"ใ"ไฟๅญ่ง้ข"ใ"ๆๅ้ณ้ข"ใ"ๅฏผๅบMP4"ใ"ๆน้ไธ่ฝฝ" |
| ๆฅ็่ง้ขๆญๆพ้ใ็น่ตๆฐใๆฐๆฎ่ฟฝ่ธชใๅฏนๆฏ | ๐ Watcher | "ๆญๆพ้"ใ"็น่ต"ใ"ๆฐๆฎ"ใ"็ป่ฎก"ใ"ๅฏนๆฏ"ใ"็ๆง"ใ"่ฟฝ่ธช"ใ"่ง็้" |
| ไธ่ฝฝๅญๅนใ่ฝฌๆขๅญๅนๆ ผๅผใๅๅนถๅญๅน | ๐ Subtitle | "ๅญๅน"ใ"CC"ใ"SRT"ใ"ASS"ใ"ๅญๅนไธ่ฝฝ"ใ"ๅญๅน่ฝฌๆข"ใ"็ฟป่ฏ" |
| ๆญๆพ่ง้ขใ่ทๅๅผนๅนใๆญๆพๅ่กจ | โถ๏ธ Player | "ๆญๆพ"ใ"ๅผนๅน"ใ"ๆญๆพๅฐๅ"ใ"ๅP"ใ"ๆญๆพๅ่กจ"ใ"danmaku" |
| ไธไผ ่ง้ขใๅๅธใๅฎๆถๅๅธใ่็จฟใ็ผ่พ | ๐ค Publisher | "ไธไผ "ใ"ๅๅธ"ใ"ๆ็จฟ"ใ"ๅฎๆถๅๅธ"ใ"่็จฟ"ใ"็ผ่พ่ง้ข" |
> โ ๏ธ **ๆณจๆ**๏ผๆฌ Skill ไธไผไป
ๅ ๆถๆฏไธญๅบ็ฐ Bilibili ้พๆฅๆ BV ๅทๅฐฑ่ชๅจๆฟๆดปใๅชๆๅฝ็จๆทๆ็กฎ่กจ่พพไบๆไฝๆๅพ๏ผๅฆ"ไธ่ฝฝ่ฟไธช่ง้ข"ใ"ๆฅ็็ญ้จ"็ญ๏ผๆถๆไผ่ขซ่ฐ็จใๆถๅๅๆไฝ๏ผๅๅธ/็ผ่พ๏ผๆถ๏ผ้่ฆ็จๆทๆพๅผๆไพๅญ่ฏใ
---
## Features
| Module | Description |
|---|---|
| ๐ฅ **Hot Monitor** | Monitor Bilibili hot/trending videos and topics in real-time |
| โฌ๏ธ **Downloader** | Download Bilibili videos with multiple quality and format options |
| ๐ **Watcher** | Watch and track video engagement metrics (supports Bilibili) |
| ๐ **Subtitle** | Download and process subtitles in multiple formats and languages |
| โถ๏ธ **Player** | Get playback URLs, danmaku (bullet comments), and playlist info |
| ๐ค **Publisher** | Upload, schedule, edit, and manage videos on Bilibili |
## Installation
### Requirements
- Python >= 3.8
- ffmpeg (optional, for merging video/audio streams)
### Install Dependencies
```bash
pip install -r requirements.txt
```
### Dependencies
- `httpx >= 0.24.0`
- `aiohttp >= 3.8.0`
- `beautifulsoup4 >= 4.12.0`
- `lxml >= 4.9.0`
- `requests >= 2.31.0`
- `faster-whisper >= 1.0.0` *(optional, for speech recognition subtitle fallback)*
## Configuration
Some features (downloading high-quality videos, publishing, etc.) require Bilibili authentication. You can provide credentials in three ways:
### 1. Environment Variables
```bash
export BILIBILI_SESSDATA="your_sessdata"
export BILIBILI_BILI_JCT="your_bili_jct"
export BILIBILI_BUVID3="your_buvid3"
```
### 2. Credential File
Create a JSON file (e.g., `credentials.json`):
```json
{
"sessdata": "your_sessdata",
"bili_jct": "your_bili_jct",
"buvid3": "your_buvid3"
}
```
### 3. Direct Parameters
Pass credentials directly when initializing:
```python
from main import BilibiliAllInOne
app = BilibiliAllInOne(
sessdata="your_sessdata",
bili_jct="your_bili_jct",
buvid3="your_buvid3",
)
```
### 4. Persistent Storage (Optional)
By default, credentials are kept **in-memory only** and are not saved to disk. To enable automatic persistence across sessions:
```bash
# Via environment variable
export BILIBILI_PERSIST=1
```
```python
# Or via code
app = BilibiliAllInOne(persist=True)
```
When persistence is enabled:
- Credentials are auto-saved to `.credentials.json` (with `0600` permissions) after initialization
- On next startup, credentials are auto-loaded from this file
- You can toggle persistence at runtime: `app.auth.persist = True` / `app.auth.persist = False`
- To delete the persisted file: `app.auth.clear_persisted()`
> **How to get cookies:** Log in to [bilibili.com](https://www.bilibili.com), open browser DevTools (F12) โ Application โ Cookies, and copy the values of `SESSDATA`, `bili_jct`, and `buvid3`.
## โ ๏ธ Security & Privacy
### Credential Handling
This skill handles **sensitive Bilibili session cookies**. Please read the following carefully:
| Concern | Detail |
|---|---|
| **What credentials are needed?** | `SESSDATA`, `bili_jct`, `buvid3` โ Bilibili **full browser session cookies** (not limited API keys). Providing them grants broad access to your Bilibili account. |
| **Which features require authentication?** | Publishing (upload/edit/schedule/draft), downloading 1080p+/4K quality videos |
| **Which features work WITHOUT credentials?** | Hot monitoring, standard-quality downloads, subtitle listing, danmaku fetching, stats viewing |
| **Where are credentials sent?** | To official Bilibili API endpoints (`api.bilibili.com`, `member.bilibili.com`) over HTTPS only |
| **Are credentials persisted to disk?** | **NO** by default โ credentials stay in memory. Set `persist=True` or `BILIBILI_PERSIST=1` to opt-in to automatic persistence (saved to `.credentials.json` with `0600` permissions). You can also manually call `auth.save_to_file()` |
| **File permissions for saved credentials** | `0600` (owner read/write only) โ restrictive by default |
### Best Practices
1. ๐งช **Use a test account** โ Do NOT provide your primary Bilibili account cookies for evaluation/testing purposes. These are **full session cookies** that grant broad account access (not limited API keys).
2. ๐ **Prefer in-memory credentials** โ Pass credentials via environment variables or direct parameters rather than saving to a file. Only enable `persist=True` if you need credentials to survive across sessions.
3. ๐ **If you enable persistence** โ Credentials are saved with `0600` permissions. Use `auth.clear_persisted()` or `auth.persist = False` to remove the file when no longer needed.
4. ๐ณ **Run in isolation** โ When possible, run this skill in an isolated container/environment and inspect network traffic.
5. ๐ **Verify network traffic** โ All HTTP requests go to Bilibili's official domains only. You can verify by monitoring outbound connections.
6. โ **No exfiltration** โ This skill does NOT send credentials to any third-party service, analytics endpoint, or telemetry server.
7. ๐ **Credential scope** โ `SESSDATA` and `bili_jct` are full session cookies. They are NOT scoped/limited API keys. Treat them with the same care as your account password.
### Network Endpoints Used
| Domain | Purpose |
|---|---|
| `api.bilibili.com` | Video info, stats, hot lists, subtitles, danmaku, playback URLs |
| `member.bilibili.com` | Video publishing (upload, edit) |
| `upos-sz-upcdnbda2.bilivideo.com` | Video file upload CDN |
| `www.bilibili.com` | Web page scraping fallback |
### Credential Requirement by Module
| Module | Auth Required? | Notes |
|---|---|---|
| ๐ฅ Hot Monitor | โ No | All public APIs |
| โฌ๏ธ Downloader | โ ๏ธ Optional | Required only for 1080p+ / 4K quality |
| ๐ Watcher | โ No | Public stats APIs |
| ๐ Subtitle | โ No | Public subtitle APIs |
| โถ๏ธ Player | โ ๏ธ Optional | Required for high-quality playback URLs |
| ๐ค Publisher | โ
**Required** | All operations need `SESSDATA` + `bili_jct` |
## Usage
### CLI
```bash
python main.py <skill_name> <action> [params_json]
```
### Python API
```python
import asyncio
from main import BilibiliAllInOne
app = BilibiliAllInOne()
async def demo():
result = await app.execute("hot_monitor", "get_hot", limit=5)
print(result)
asyncio.run(demo())
```
---
## Skills Reference
### 1. ๐ฅ Hot Monitor (`bilibili_hot_monitor`)
Monitor Bilibili hot/trending videos and topics in real-time. Supports filtering by category, tracking rank changes.
#### Actions
| Action | Description | Parameters |
|---|---|---|
| `get_hot` | Get popular/hot videos | `page`, `page_size` |
| `get_trending` | Get trending series/topics | `limit` |
| `get_weekly` | Get weekly must-watch list | `number` (week number, optional) |
| `get_rank` | Get category ranking videos | `category`, `limit` |
#### Supported Categories
`all`, `anime`, `music`, `dance`, `game`, `tech`, `life`, `food`, `car`, `fashion`, `entertainment`, `movie`, `tv`
#### Examples
```bash
# Get top 10 hot videos
python main.py hot_monitor get_hot '{"page_size": 10}'
# Get trending topics
python main.py hot_monitor get_trending '{"limit": 5}'
# Get this week's must-watch
python main.py hot_monitor get_weekly
# Get game category rankings
python main.py hot_monitor get_rank '{"category": "game", "limit": 10}'
```
```python
# Python API
result = await app.execute("hot_monitor", "get_hot", page_size=10)
result = await app.execute("hot_monitor", "get_rank", category="game", limit=10)
```
---
### 2. โฌ๏ธ Downloader (`bilibili_downloader`)
Download Bilibili videos with support for multiple quality options, batch downloading, and format selection.
#### Actions
| Action | Description | Parameters |
|---|---|---|
| `get_info` | Get video information | `url` |
| `get_formats` | List available qualities/formats | `url` |
| `download` | Download a single video | `url`, `quality`, `output_dir`, `format`, `page` |
| `batch_download` | Download multiple videos | `urls`, `quality`, `output_dir`, `format` |
#### Quality Options
`360p`, `480p`, `720p`, `1080p` (default), `1080p+`, `4k`
#### Format Options
`mp4` (default), `flv`, `mp3` (audio only)
#### Examples
```bash
# Get video info
python main.py downloader get_info '{"url": "BV1xx411c7mD"}'
# List available formats
python main.py downloader get_formats '{"url": "BV1xx411c7mD"}'
# Download in 1080p MP4
python main.py downloader download '{"url": "BV1xx411c7mD", "quality": "1080p", "format": "mp4"}'
# Extract audio only
python main.py downloader download '{"url": "BV1xx411c7mD", "format": "mp3"}'
# Batch download
python main.py downloader batch_download '{"urls": ["BV1xx411c7mD", "BV1yy411c8nE"], "quality": "720p"}'
```
```python
# Python API
info = await app.execute("downloader", "get_info", url="BV1xx411c7mD")
result = await app.execute("downloader", "download", url="BV1xx411c7mD", quality="1080p")
```
---
### 3. ๐ Watcher (`bilibili_watcher`)
Watch and monitor Bilibili videos. Track view counts, comments, likes, and other engagement metrics over time.
#### Actions
| Action | Description | Parameters |
|---|---|---|
| `watch` | Get detailed video information | `url` |
| `get_stats` | Get current engagement statistics | `url` |
| `track` | Track metrics over time | `url`, `interval` (minutes), `duration` (hours) |
| `compare` | Compare multiple videos | `urls` |
#### Supported Platforms
- **Bilibili**: `https://www.bilibili.com/video/BVxxxxxx` or `BVxxxxxx`
#### Examples
```bash
# Get video details
python main.py watcher watch '{"url": "BV1xx411c7mD"}'
# Get current stats
python main.py watcher get_stats '{"url": "BV1xx411c7mD"}'
# Track views every 30 minutes for 12 hours
python main.py watcher track '{"url": "BV1xx411c7mD", "interval": 30, "duration": 12}'
# Compare multiple videos
python main.py watcher compare '{"urls": ["BV1xx411c7mD", "BV1yy411c8nE"]}'
```
```python
# Python API
comparison = await app.execute("watcher", "compare", urls=["BV1xx411c7mD", "BV1yy411c8nE"])
```
---
### 4. ๐ Subtitle (`bilibili_subtitle`)
Download and process subtitles/CC from Bilibili videos. Supports multiple subtitle formats and languages.
**When no CC subtitles are available**, the module automatically falls back to:
1. **Speech Recognition** โ Downloads the video's audio and transcribes it using `faster-whisper` (requires `pip install faster-whisper`)
2. **Danmaku Extraction** โ Fetches bullet comments from the video as a text reference
Both fallback results are returned together when triggered.
#### Actions
| Action | Description | Parameters |
|---|---|---|
| `list` | List available subtitles | `url` |
| `download` | Download subtitles (with auto-fallback) | `url`, `language`, `format`, `output_dir` |
| `convert` | Convert subtitle format | `input_path`, `output_format`, `output_dir` |
| `merge` | Merge multiple subtitle files | `input_paths`, `output_path`, `output_format` |
#### Supported Formats
`srt` (default), `ass`, `vtt`, `txt`, `json`
#### Supported Languages
`zh-CN` (default), `en`, `ja`, and other language codes available on the video.
#### Fallback Strategy
When `download` is called and no CC subtitles exist:
```
CC Subtitle Available? โโYesโโโถ Download CC subtitle
โ
No
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Fallback 1: Speech Recognition โ
โ Download audio โ faster-whisper โ
โ Output: {title}_transcribed.srt โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Fallback 2: Danmaku Extraction โ
โ Fetch bullet comments โ SRT โ
โ Output: {title}_danmaku.srt โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
#### Examples
```bash
# List available subtitles
python main.py subtitle list '{"url": "BV1xx411c7mD"}'
# Download Chinese subtitles in SRT format (auto-fallback if no CC)
python main.py subtitle download '{"url": "BV1xx411c7mD", "language": "zh-CN", "format": "srt"}'
# Download English subtitles in ASS format
python main.py subtitle download '{"url": "BV1xx411c7mD", "language": "en", "format": "ass"}'
# Convert SRT to VTT
python main.py subtitle convert '{"input_path": "./subtitles/video.srt", "output_format": "vtt"}'
# Merge subtitle files
python main.py subtitle merge '{"input_paths": ["part1.srt", "part2.srt"], "output_path": "merged.srt"}'
```
```python
# Python API
subs = await app.execute("subtitle", "list", url="BV1xx411c7mD")
result = await app.execute("subtitle", "download", url="BV1xx411c7mD", language="zh-CN", format="srt")
# When no CC subtitles, result includes both fallback outputs:
# result["transcription"]["filepath"] โ speech recognition SRT
# result["danmaku"]["filepath"] โ danmaku SRT
```
---
### 5. โถ๏ธ Player (`bilibili_player`)
Play Bilibili videos with support for playback control, playlist management, and danmaku (bullet comments) display.
#### Actions
| Action | Description | Parameters |
|---|---|---|
| `play` | Get complete playback info | `url`, `quality`, `page` |
| `get_playurl` | Get direct play URLs | `url`, `quality`, `page` |
| `get_danmaku` | Get danmaku/bullet comments | `url`, `page`, `segment` |
| `get_playlist` | Get playlist/multi-part info | `url` |
#### Danmaku Modes
| Mode | Description |
|---|---|
| 1 | Scroll (right to left) |
| 4 | Bottom fixed |
| 5 | Top fixed |
#### Examples
```bash
# Get playback info
python main.py player play '{"url": "BV1xx411c7mD", "quality": "1080p"}'
# Get direct play URLs
python main.py player get_playurl '{"url": "BV1xx411c7mD", "quality": "720p"}'
# Get danmaku
python main.py player get_danmaku '{"url": "BV1xx411c7mD"}'
# Get playlist for multi-part video
python main.py player get_playlist '{"url": "BV1xx411c7mD"}'
# Get page 3 of a multi-part video
python main.py player play '{"url": "BV1xx411c7mD", "quality": "1080p", "page": 3}'
```
```python
# Python API
play_info = await app.execute("player", "play", url="BV1xx411c7mD", quality="1080p")
danmaku = await app.execute("player", "get_danmaku", url="BV1xx411c7mD")
playlist = await app.execute("player", "get_playlist", url="BV1xx411c7mD")
```
---
### 6. ๐ค Publisher (`bilibili_publisher`)
Publish videos to Bilibili. Supports uploading videos, setting metadata, scheduling publications, and managing drafts.
> โ ๏ธ **Authentication Required**: All publisher actions require valid Bilibili credentials.
#### Actions
| Action | Description | Parameters |
|---|---|---|
| `upload` | Upload and publish a video | `file_path`, `title`, `description`, `tags`, `category`, `cover_path`, `dynamic`, `no_reprint`, `open_elec` |
| `draft` | Save as draft | `file_path`, `title`, `description`, `tags`, `category`, `cover_path` |
| `schedule` | Schedule future publication | `file_path`, `title`, `schedule_time`, `description`, `tags`, `category`, `cover_path` |
| `edit` | Edit existing video metadata | `bvid`, `file_path`, `title`, `description`, `tags`, `cover_path` |
#### Upload Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| `file_path` | string | *required* | Path to the video file |
| `title` | string | *required* | Video title (max 80 chars) |
| `description` | string | `""` | Video description (max 2000 chars) |
| `tags` | string[] | `["bilibili"]` | Tags (max 12, each max 20 chars) |
| `category` | string | `"171"` | Category TID |
| `cover_path` | string | `null` | Path to cover image (JPG/PNG) |
| `no_reprint` | int | `1` | 1 = original content, 0 = repost |
| `open_elec` | int | `0` | 1 = enable charging, 0 = disable |
#### Examples
```bash
# Upload and publish
python main.py publisher upload '{"file_path": "./video.mp4", "title": "My Video", "description": "Hello World", "tags": ["test", "demo"], "category": "171"}'
# Save as draft
python main.py publisher draft '{"file_path": "./video.mp4", "title": "Draft Video"}'
# Schedule publication
python main.py publisher schedule '{"file_path": "./video.mp4", "title": "Scheduled Video", "schedule_time": "2025-12-31T20:00:00+08:00"}'
# Edit video metadata (requires re-uploading the video file)
python main.py publisher edit '{"bvid": "BV1xx411c7mD", "file_path": "./video.mp4", "title": "New Title", "tags": ["updated"]}'
```
```python
# Python API (authentication required)
app = BilibiliAllInOne(sessdata="xxx", bili_jct="xxx", buvid3="xxx")
result = await app.execute("publisher", "upload",
file_path="./video.mp4",
title="My Video",
description="Published via bilibili-all-in-one",
tags=["python", "bilibili"],
)
# Edit video (requires file_path for re-upload)
result = await app.execute("publisher", "edit",
bvid="BV1xx411c7mD",
file_path="./video.mp4",
title="New Title",
tags=["updated"],
)
```
---
## Project Structure
```
bilibili-all-in-one/
โโโ skill.json # Skill configuration & parameter schema
โโโ skill.md # This documentation file
โโโ README.md # Project README (Chinese)
โโโ LICENSE # MIT License
โโโ requirements.txt # Python dependencies
โโโ .gitignore # Git ignore rules
โโโ main.py # Entry point & unified BilibiliAllInOne class
โโโ src/
โโโ __init__.py # Package exports
โโโ auth.py # Authentication & credential management
โโโ utils.py # Shared utilities, API constants, helpers
โโโ hot_monitor.py # Hot/trending video monitoring
โโโ downloader.py # Video downloading
โโโ watcher.py # Video watching & stats tracking
โโโ subtitle.py # Subtitle downloading & processing
โโโ player.py # Video playback & danmaku
โโโ publisher.py # Video uploading & publishing
```
## Response Format
All skill actions return a JSON object with a unified structure:
```json
{
"success": true,
"...": "action-specific fields"
}
```
On error:
```json
{
"success": false,
"message": "Error description"
}
```
## License
MIT
Files in this skill
- SKILL.md
- source.json
Attribution
Comments
Loading commentsโฆ
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.