# Mimi Downloader: a Bilibili downloader with both a window and a terminal

> Mimi Downloader is a TypeScript Electron application for Bilibili that pulls the video and audio streams, the danmaku, and then merges them with ffmpeg, and it offers the same job as a graphical window or as a terminal UI. Its own README is blunt about the quality ceiling you get without logging in, and about who is responsible for how the files are used.

**stevenjoezhang/bilibili-downloader** — 哔哩哔哩视频下载器 | Yet another video downloader for Bilibili

- Repository: https://github.com/stevenjoezhang/bilibili-downloader
- Stars: 581 · Forks: 70
- Language: TypeScript
- License: GPL-3.0
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/stevenjoezhang-bilibili-downloader

## Video, audio and danmaku in one pass

The README describes Mimi Downloader, the repository is titled Mimi Downloader and the package is named mimi-downloader, as a Bilibili video and danmaku downloader written in TypeScript that supports two modes, an Electron graphical interface and a command line TUI.

The feature list is short and concrete. It queries video details and gets the download addresses from a video URL. It fetches the danmaku for a video by its cid and can convert the download format, either .xml or .ass. It downloads the video and the audio files separately, as .mp4 and .m4a, with resume support for interrupted transfers. And once both are on disk it can merge them automatically with ffmpeg.

The separate video and audio tracks are not a quirk of the implementation but how Bilibili serves media, and the merge step is what turns them into one playable file. The dependency list confirms the approach, with ffmpeg-static providing the binary and fluent-ffmpeg driving it, so the merge does not require a separate ffmpeg installation on the machine.

The top-level layout is small for an application of this kind: an app directory, a package.json, a tsconfig.json, a screenshot directory with images of both modes, a renovate.json for dependency updates, and the licence file.

## Not logging in means low quality, and that is the ceiling

The README states the main limitation in one line. Because of Bilibili's restrictions, without logging in you can only obtain low quality video.

That single constraint shapes most of the project's decisions. Without a session, the API hands back low bitrate streams, and there is no setting in the tool that changes that. The TUI therefore includes QR code login, so you can scan a code with the Bilibili app and get a session, and the README states that the login credentials are shared with the graphical interface, so logging in once covers both modes.

The TUI's workflow is described in a single sentence: you can scan the code to log in, enter a video link, parse and select the audio and video streams, download the danmaku, watch the download progress, and choose whether to merge automatically when the download finishes.

The todo list at the end of the README is honest about the state of the feature work. Showing the information of users who sent the danmaku is checked off as done, while checking the login status is still unchecked, which means the tool does not currently verify on its own whether a session is still valid. That is worth knowing before you rely on it for a batch of downloads, since an expired session surfaces as a quality drop rather than as an error.

## Install it with git, Node and npm

The README says you need Git and Node.js, with npm, to run the program. The clone and launch sequence is four commands:

```bash
git clone https://github.com/stevenjoezhang/bilibili-downloader.git
cd bilibili-downloader
npm install
npm start
```

If everything is fine, a window titled Mimi Downloader opens. You paste a video link, for example one of the bilibili.com/video/BV... URLs, and follow the prompts to download.

One dependency needs attention before the install. Electron is a significant dependency, and the README warns that if your network environment is restricted you should set the ELECTRON_MIRROR environment variable to the npmmirror mirror at https://npmmirror.com/mirrors/electron/ before running the commands. The README gives the form for a Unix-like shell, for Windows Command Prompt and for PowerShell, which is a detail that suggests the author has hit this problem in more than one environment.

That mirror is only needed for the install itself. It points the Electron binary download at a mirror host, and once the dependency is in node_modules the application runs normally without it.

## Two front ends over one TypeScript build

The package.json scripts show that the graphical and terminal interfaces are the same program, compiled once and launched two ways:

```json
    "build": "tsc -p tsconfig.json",
    "start": "npm run build && electron .",
    "tui": "npm run build && node app/tui/main.js",
```

Both start scripts compile before they launch, so there is no separate build step to remember. The main entry point is app/electron/main.js, and the terminal entry point is app/tui/main.js, and the TUI script compiles automatically before it starts, as the README notes.

There is also a typecheck script that runs tsc with no emit, and a Renovate configuration at the root, which is the mechanism by which the dependency versions in package.json get proposed updates. Electron is pinned to an exact 43.0.0 in the dev dependencies while the rest use caret ranges, which is the usual convention for a tool whose runtime is the electron binary itself.

The runtime dependencies describe the shape of the application. bootstrap and jquery handle the interface, node-fetch and mime handle HTTP, tough-cookie handles the cookie jar that a logged-in session needs, qrcode renders the login code for the TUI, progress-stream renders the download progress bar, and filenamify sanitises the output file name, which matters because Bilibili video titles contain characters that are illegal in file names on some systems.

## Danmaku is the part most downloaders skip

Danmaku, the scrolling comments that run over the top of a Bilibili video, are treated as a first-class output rather than an afterthought. The feature list says the downloader gets the danmaku content for a video by cid and supports converting the download format, to .xml or to .ass.

The .ass format is the subtitle format used by video players such as mpv and by the danmaku rendering tools, so the conversion is what makes the comments watchable outside Bilibili. The README credits a separate library for that job, the XML to ASS library by tiansh, and also points at bilibili ASS Danmaku Downloader, which handles the same task.

That choice, using an existing library rather than writing a converter, is worth noting against the rest of the design. The rest of the application is a self-contained implementation, the URL to stream resolution, the download with resume, the ffmpeg merge, the QR login, and the conversion is delegated. The README also lists two more libraries for reference, bilitwin and bili-api, so the ecosystem around Bilibili tooling is documented even where it is not used.

The cid requirement is the one practical constraint. A video's cid is not in the URL, so the downloader has to resolve it from the video page first, which is the first thing the tool does after you give it a link.

## How the alternatives differ

The README points at two categories of alternative, and the differences are specific.

For graphical tools it names downkyi by leiurayer and downkyicore by yaobiao131, and describes them as good choices that can download high quality video after a QR code login. So the difference from Mimi is not the feature set so much as the maturity of the surrounding ecosystem and the fact that Mimi itself does not advertise HD without a session.

For command line tools it names you-get by soimort under the MIT license, lux by iawia002, and youtube-dl by ytdl-org, and describes them as more powerful for the command line. The README adds the practical caveat that if you need high quality video you may have to set the cookie manually with those tools, which is exactly the inconvenience Mimi's QR login removes.

The division of labour that follows is reasonable. Mimi covers one site, does it in both a window and a terminal, and handles the login for you. The general purpose tools cover many sites and give you a wider feature set, and hand you a cookie to paste. If your interest is in Bilibili specifically and you want danmaku as well as video, Mimi is the narrower and less fiddling choice.

## GPL-3.0, an unpublished package, and a licence notice that says what it means

The package is marked private in package.json, so it is not published to npm, and the version field reads 1.9.0. The licence is GPL-3.0-or-later in the manifest, with the GNU General Public License v3 in the README and a LICENSE file at the root.

The README carries a Legal Issues section that is worth reading rather than skipping, because it is unusually direct. It repeats the standard no warranty disclaimer, and then translates it to plain terms: if your use of the software forms the basis of copyright infringement, or you use it for any other illegal purposes, the authors cannot take any responsibility for you. The README adds that only the code is shipped here and how you are going to use it is left to your own discretion.

That is a statement about the tool's legal position rather than about its features, and it belongs in any evaluation. A downloader that pulls video off a platform where the content is licensed to its rights holders is in a different category from a general file transfer utility, and the project does not pretend otherwise. The GPL-3.0 grant covers the software, and it says nothing about the media you fetch with it.

On maintenance, the repository is not archived and the last push was on 2026-09-29, with no GitHub releases, so the version number lives in package.json rather than in a tagged release. The presence of renovate.json means dependency updates are proposed automatically. The topics on the repository are bilibili, danmaku, electron-app and video-downloader, which is an honest summary of what it is.

## Conclusion

Mimi Downloader fits someone who wants Bilibili video and danmaku in one place, works in a terminal as readily as in a window, and is willing to log in for better quality. It is the wrong choice if you need a broad multi-site downloader, since the alternatives it names handle many more sources, and the wrong choice if you want a maintained release trail, since the repository publishes no GitHub releases. Verify first whether the QR login path works for your account, that your Node.js version satisfies Electron 43, and that the ffmpeg-static binary matches your architecture, because the merge step fails silently otherwise.

## FAQ

### How do I install Mimi Downloader?

Clone the repository with git, change into the bilibili-downloader directory, run npm install and then npm start, which opens a window titled Mimi Downloader. You need Git and Node.js with npm, and if your network is restricted you must set the ELECTRON_MIRROR environment variable to the npmmirror Electron mirror before installing.

### Can Mimi Downloader run without a graphical interface?

Yes. The npm run tui script compiles the TypeScript and launches the terminal interface, where you can scan a QR code to log in, enter a video link, parse and select the audio and video streams, download the danmaku and watch progress. The login credentials are shared with the graphical interface.

### Why are the downloaded videos low quality?

The README states that because of Bilibili's restrictions, without logging in you can only obtain low quality video. Logging in through the QR code scan in the TUI is what lifts that limit, and the tool does not currently check the login status on its own, since that item is still listed as unfinished in the README.

### What does Mimi Downloader download besides video?

It downloads the danmaku for a video by its cid and can save it as .xml or convert it to .ass, and it downloads the video and audio as separate .mp4 and .m4a files with resume support, then can merge them into one file automatically using ffmpeg, provided by the ffmpeg-static dependency.

### What are the alternatives to Mimi Downloader?

The README names downkyi and downkyicore as graphical alternatives that can download high quality video after a QR code login, and you-get, lux and youtube-dl as more powerful command line tools, where high quality downloads may require setting the cookie manually.

### What licence is Mimi Downloader released under and what does it say about use?

It is distributed under the GNU General Public License v3, with GPL-3.0-or-later in the package manifest and a LICENSE file in the repository. The README adds a notice that the authors cannot take responsibility if use of the software forms the basis of copyright infringement or is otherwise illegal.

## Sources

- [Issues](https://github.com/stevenjoezhang/bilibili-downloader/issues)
- [License: GPL-3.0](https://github.com/stevenjoezhang/bilibili-downloader/blob/main/LICENSE)
- [README](https://github.com/stevenjoezhang/bilibili-downloader/blob/main/README.md)
- [stevenjoezhang/bilibili-downloader on GitHub](https://github.com/stevenjoezhang/bilibili-downloader)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/stevenjoezhang-bilibili-downloader
