Bili23-Downloader: a cross-platform Bilibili downloader with a PySide6 GUI
开源、免费、跨平台的 B 站视频下载工具,支持多线程加速、音视频分离、弹幕元数据获取、自定义命名与分类等功能。Open Source, Free, Cross-Platform Bilibili Video Downloader.
At a glance
- What is it?
- Bili23-Downloader is a GPL-3.0 desktop application for downloading Bilibili videos, audio, danmaku and metadata on Windows, Linux and macOS. It is built for people who want a graphical tool rather than a command line, and it is explicit about staying within an account's normal access rights.
- Who is it for?
- Adopt Bili23-Downloader if you want a graphical Bilibili downloader that handles danmaku, subtitles, NFO metadata and library naming in one place, and if you are comfortable with the GPL-3.0 terms and the project's non-commercial use condition. Do not adopt it if you need a headless tool for a server, an APK for a phone, or anything that bypasses paid access, because the README states the software only works within the permissions of a user account.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What Bili23-Downloader solves, and who it is actually for
Bilibili serves video and audio as separate streams, wraps some content behind account permissions, and exposes danmaku, subtitles, covers and chapter data through endpoints that a browser does not save to disk in a usable form. Bili23-Downloader is a desktop application that takes a Bilibili link, resolves it, lets you pick what to keep, and writes the result to your filesystem. The README lists the supported input types: regular submissions, bangumi, movies, courses, interactive videos, music (au and am), UP space pages, favourites, weekly picks, subscribed collections, follow lists, watch later and history.
The intended user is someone who keeps a local media library and wants the extras, not just an mp4. The project advertises danmaku in xml, ass and json, subtitles in srt, lrc, txt, ass and json, cover images in jpg, png, avif and webp, chapter markers, and NFO files shaped for Kodi, Jellyfin and Emby. That combination points at a home-theatre audience. Someone who just wants one file saved quickly will find more machinery here than they need.
The README also states the project is for personal study and research, that downloaded content is limited to personal non-commercial use, and that the software operates only within the legal access rights of a user account. It says it does not bypass paywalls or platform protection measures. That is a stated boundary, and it shapes who the tool is for.
The parsing, signing and download pipeline
The repository is a Python application built on PySide6 and PySide6-Fluent-Widgets, with httpx for network calls, orjson for JSON handling, protobuf, qrcode for login, and psutil. The GUI layer is the Fluent Design interface shown in the README screenshot. The download layer is described as multi-threaded with resume support and automatic retry on network errors, plus a global speed limit.
Bilibili requests need signed parameters, and the README credits SocialSisterYi/bilibili-API-collect as the reference for wbi signing, some interfaces, and parameters such as buvid3. So the data flow is: the GUI collects a URL or a batch of URLs, the signing layer produces valid request parameters, the resolver returns available streams and metadata, you choose quality and format, and the downloader fetches the streams in parallel and mixes them into mp4 or mkv.
Two details in the feature list are worth separating from marketing language. First, the tool does not merge streams itself in a bespoke way that the README describes; it says it supports packaging output as mp4 or mkv, which implies a muxing step. Second, ass-format danmaku and subtitles can be embedded into an mkv container, which is a container-level operation, not a re-encode. The README does not state which muxer is used, so if that matters to your workflow, the source tree under src/ is where to confirm it.
Installing from source and running a first download
The README does not give a command-line install procedure. It points to two download locations: GitHub Releases for the latest published version, and the project site for users in mainland China, which the README says is usually faster and more stable. If you are on Windows, Linux or macOS, the packaged build is the path the project intends.
If you want to run from source, pyproject.toml sets requires-python to >=3.10 and pins the dependencies. Clone the repository and install them:
git clone https://github.com/ScottSloan/Bili23-Downloader.git
cd Bili23-Downloader
python -m pip install -r requirements.txtrequirements.txt pins PySide6==6.10.3, PySide6-Fluent-Widgets==1.11.3, orjson==3.11.9, qrcode==8.2, protobuf==7.35.1, httpx==0.28.1 and psutil==7.2.2. Those exact pins are what the repository ships, so a resolver that upgrades PySide6 on its own can put you on a combination the project did not test. After installation, launch the application entry point from the src/ directory. The README does not document the module name, so check src/ before assuming one.
Once the window is open, the README's described flow is: paste one or more Bilibili links, let the parser resolve them, choose the quality and audio, then start the download. The README states that the media to be downloaded can be previewed before the download begins, and that a clipboard monitor can recognise a copied Bilibili link and offer to start the parse.
Login, proxy and CDN settings you will have to configure
Much of Bilibili's higher-quality content requires an authenticated session, and the README lists three login routes: QR code, SMS verification, and cookie. QR login is the least invasive of the three, and the qrcode dependency in pyproject.toml is consistent with that being a first-class path. Cookie login means you are copying session credentials into the application, which is a decision worth making deliberately rather than by default.
Networking has three modes according to the README: no proxy, system proxy, and manual configuration. It also says you can select a CDN node based on your location to improve download speed, and that User-Agent and Host can be customised. The CDN selection is the most interesting of these, because Bilibili's edge nodes perform differently by region, and a manual override is the only lever a desktop client has over that.
What the README does not describe is how credentials are stored at rest, or whether the cookie is encrypted on disk. That is a gap you should resolve before using cookie login on a shared machine. The project's own request for bug reports asks for a problem description and a complete log, which implies logging exists, but the README does not say where logs are written or how to redact a session cookie from one before posting it publicly.
Where Bili23-Downloader is the wrong tool
The first limitation is stated by the project itself: it does not bypass paid access or platform protection. If a video is behind a paywall or a membership tier your account does not hold, this tool will not retrieve it. That is a design boundary, not a bug to report.
The second is the platform. The topics list includes gui, pyside6 and wxpython, and the README describes Windows, Linux and macOS builds. There is no server mode, no documented CLI, and no Android package. The related searches include a query about an APK, and nothing in the README or the repository layout supports one. If you need scheduled downloads on a headless box, this is the wrong shape of software.
The third is the licence and the use terms together. GPL-3.0 means that if you distribute a modified version, you must do so under the same licence with source. The README additionally restricts downloaded content to personal non-commercial use and forbids public distribution. Those are separate constraints, and the second one is a project-level condition rather than a licence term. Anyone planning to embed this in a product should read both before writing code.
A fourth, quieter issue: the README does not document rollback or a downgrade path. If a new release changes the naming template engine or the output layout, the README gives no stated way to return to the previous behaviour beyond installing an older release.
How it differs from command-line Bilibili downloaders
The related searches name Downkyi, Bilidown, Bililive tools and Yutto, which are the tools people compare this against. The meaningful difference is the interface model. Yutto is a command-line downloader: you compose arguments, script it, and run it on a server or in a container. Bili23-Downloader is a PySide6 desktop application with a Fluent Design interface, light and dark themes, remembered window geometry and high-DPI handling. That is a different audience, not a better one.
The second difference is scope of inputs. The README lists space pages, favourites, weekly picks, subscribed collections, follow lists, watch later and history as parseable sources, with keyword search across those lists and optional filtering of the current page versus all content. A CLI downloader typically takes a URL and leaves collection traversal to the user or to a separate script.
The third is the metadata layer. NFO generation for Kodi, Jellyfin and Emby, cover embedding, chapter writing and ass-in-mkv embedding are library-management features. If your goal is a scripted nightly archive, a CLI tool composes better with cron. If your goal is a curated local library you browse in Jellyfin, the GUI plus NFO path is the shorter route.
Maintenance, upgrade cost and licence terms
The repository is not archived, and the last push was on 2026-09-21, one day before this writing. Recent releases include v2.15.0 on 2026-08-19, v2.14.0 on 2026-08-14 and v2.13.0 on 2026-08-12, and pyproject.toml carries version 2.15.0. Three releases inside eight days indicates a fast cadence, which cuts both ways: fixes arrive quickly, and so do changes that can alter output naming or directory layout between upgrades.
The upgrade cost is mostly dependency drift. PySide6 is pinned to 6.10.3 and PySide6-Fluent-Widgets to 1.11.3. A Fluent Widgets bump can move widget behaviour, and PySide6 bumps have historically changed Qt-level APIs. If you install from source rather than using the packaged builds, pin those two packages and upgrade them deliberately rather than with a blanket pip update. The README does not document a migration path for naming templates, so if you have built a large library with a custom template, test a new release against a small folder before pointing it at your archive.
The licence is GPL-3.0, stated in both the README and pyproject.toml, and the repository contains a LICENSE file. GPL-3.0 is a copyleft licence: distributing a modified binary obliges you to provide the corresponding source under the same terms. Separately, the README's use agreement restricts downloaded content to personal non-commercial use and prohibits public distribution. That second restriction is not a licence grant and does not come from GPL-3.0. This is a description of what the files say, not legal advice; if you plan to redistribute anything, consult someone qualified.
Editorial conclusion
Adopt Bili23-Downloader if you want a graphical Bilibili downloader that handles danmaku, subtitles, NFO metadata and library naming in one place, and if you are comfortable with the GPL-3.0 terms and the project's non-commercial use condition. Do not adopt it if you need a headless tool for a server, an APK for a phone, or anything that bypasses paid access, because the README states the software only works within the permissions of a user account. Before committing, verify that PySide6 6.10.3 and the other pinned dependencies install cleanly on your Python version, and check the release notes for the change that matters most to you.
Frequently asked questions
Is there a free online downloader for Bilibili, or does Bili23-Downloader need to be installed?
Bili23-Downloader is a desktop application, not a web service. The README offers two download routes, GitHub Releases and the project site, and describes builds for Windows, Linux and macOS.
How do I download Bilibili videos for free with Bili23-Downloader?
Download the application from GitHub Releases or the project site, open it, paste a Bilibili link, let the parser resolve it, choose the quality and audio you want, and start the download. The README states the software is free and open source under GPL-3.0, and that it only operates within the access rights of your own account.
Why can't I download a Bilibili video with Bili23-Downloader?
The README states the software does not bypass any paywall or platform protection measure, so content your account cannot access will not be retrievable. Some content also needs a logged-in session, which the application supports through QR code, SMS verification or cookie login.
Can Bili23-Downloader download Bilibili videos in 4K or 8K?
The README lists 8K, 4K, HDR and Dolby Vision among the selectable quality options, with Hi-Res lossless and Dolby Atmos audio, and AVC, HEVC or AV1 encoding. Availability depends on what the source video offers and on your account's access rights.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/scottsloan-bili23-downloader)