Extract bilibili vup info from vtbs.moe with user avatars
- Extract and merge live vtbs.moe database and vdb with only valid vup info
- Make the final output much smaller. Better suited for FaaS platforms and low-end machines.
- Make output static and can be deployed to any web server.
Every file under dist/ is a projection of the same record set, rebuilt hourly.
Object variants are keyed by bilibili uid; *-array.json variants are flat lists
with the uid folded in as the first field.
| File | Fields |
|---|---|
vup.json |
name, type, room, face, group_name |
vup-desc.json |
the above plus sign |
vup-full.json |
the above plus followers, videos, guards |
vup-slim.json |
name, type, room, group_name |
vup-room.json |
as vup.json, but room is named room_id (deprecated) |
vup-array.json, vup-desc-array.json, vup-full-array.json, vup-slim-array.json |
array forms of the matching object variant, prefixed with uid |
vup.json:
{
"375504219": {
"name": "湊-阿库娅Official",
"type": "vtuber",
"room": 14917277,
"face": "/bfs/face/a7195c09c6ba4722966d745d6f692035d3fe4d95.jpg",
"group_name": "Hololive"
}
}vup-full.json:
{
"375504219": {
"name": "湊-阿库娅Official",
"type": "vtuber",
"room": 14917277,
"face": "/bfs/face/a7195c09c6ba4722966d745d6f692035d3fe4d95.jpg",
"sign": "holoIive二期生、虚拟女仆、湊(みなと)あくあ!❖担当画师:がおう",
"group_name": "Hololive",
"followers": 744538,
"videos": 492,
"guards": 1
}
}vup-full-array.json:
[
{
"uid": 375504219,
"name": "湊-阿库娅Official",
"type": "vtuber",
"room": 14917277,
"face": "/bfs/face/a7195c09c6ba4722966d745d6f692035d3fe4d95.jpg",
"sign": "holoIive二期生、虚拟女仆、湊(みなと)あくあ!❖担当画师:がおう",
"group_name": "Hololive",
"followers": 744538,
"videos": 492,
"guards": 1
}
]face is a path only; prefix it with a bilibili image host such as
https://i0.hdslb.com to resolve it.
Only the following types are included from upstream APIs:
vtubergroupfanunknown
Requires uv. Rebuild everything under dist/:
uv run main.pyThe build refuses to write if an upstream fetch keeps failing, or if the record count drops more than 10% below what is already committed — so a partial upstream response cannot overwrite a good dataset.
Lint and format:
uv run ruff check .
uv run ruff format .Download avatars for the top VUPs into tmp/ (needs the avatars group for Pillow):
uv run --group avatars avatar.py --limit 300 --sort followersMIT