A modern, cross-platform desktop application for downloading videos from Bilibili and other platforms using yt-dlp. Built with Qt6 and C++17.
一个现代化的跨平台桌面应用程序,用于从 Bilibili 平台下载视频,基于 yt-dlp 构建。使用 Qt6 和 C++17 开发。
ZNote features a clean and intuitive user interface with a left navigation sidebar containing five main functional modules. The main interface supports direct input of Bilibili video URLs for parsing, with real-time log display and progress information.
The download list page displays all parsed video information, including video ID, title, episode count, type, parsing time, and save path. Supports batch selection and download management for convenient task control.
The settings page provides rich configuration options, including:
- Basic Download Configuration: Default save path, download thread count
- File Naming Rules: Custom file prefix/suffix
- Post-Download Actions: Sound notifications, auto-open directory, etc.
- 🎬 Multi-platform Support: Download videos from Bilibili and other platforms supported by yt-dlp
- 📥 Batch Download: Download multiple videos or entire playlists at once
- 🎯 Smart Queue Management: Intelligent task queue with concurrent download support
- 📊 Download History: Track all your downloads with detailed history records
- 🎨 Modern UI: Beautiful, responsive interface with light/dark theme support
- ⚙️ Customizable Settings: Configure download paths, file naming, thread count, and more
- 🔊 Notifications: Sound notifications when downloads complete
- 📁 Auto-open Directory: Automatically open download directory when finished
- 💾 Persistent Storage: JSON-based configuration and history storage
- Qt 6.9.1 or later (Core, Gui, Widgets, Multimedia)
- CMake 3.24 or later
- C++17 compatible compiler
- yt-dlp (automatically detected or can be placed in application directory)
- ✅ Windows (tested on Windows 10/11)
- ✅ Linux (should work with Qt6)
- ✅ macOS (should work with Qt6)
-
Clone the repository
git clone https://github.com/1716285375/ZNote.git cd ZNote -
Install Qt6
- Download and install Qt6 from qt.io
- Make sure Qt6 is in your PATH or set
CMAKE_PREFIX_PATH
-
Configure and build
# Using CMake presets (recommended) cmake --preset Qt-Debug cmake --build out/build/debug # Or manually mkdir build && cd build cmake .. cmake --build .
-
Install yt-dlp (if not in PATH)
- Download from yt-dlp releases
- Place
yt-dlp.exe(Windows) oryt-dlp(Linux/macOS) in the application directory
- Download the latest release from Releases
- Extract and run
ZNote.exe - Place
yt-dlp.exein the same directory as the executable
- Launch the application
- Enter a video URL in the input field (supports Bilibili video URLs and playlists)
- Click "解析" (Parse) to analyze the video
- Select videos you want to download from the list
- Configure download settings:
- Set download directory
- Choose file prefix/suffix
- Set thread count (1-10)
- Click "下载" (Download) to start downloading
The application uses config.json for settings. A default configuration is created on first run.
Example config.json:
{
"download": {
"defaultPath": "C:/Downloads/Bilibili",
"threadCount": 4,
"filePrefix": "ZN_",
"fileSuffix": "_video",
"onComplete": {
"playSound": true,
"autoOpenDir": false
}
}
}- Default Path: Default download directory
- Thread Count: Number of concurrent downloads (1-10)
- File Prefix/Suffix: Customize downloaded file names
- Play Sound: Enable sound notification when download completes
- Auto Open Directory: Automatically open download folder when finished
ZNote/
├── ZNote/ # Main project directory
│ ├── assets/ # Resources (icons, styles, sounds)
│ ├── include/ # Header files
│ │ ├── app/ # Application core
│ │ ├── component/ # UI components
│ │ ├── core/ # Core functionality
│ │ ├── services/ # Service layer
│ │ ├── ui/ # UI classes
│ │ └── utils/ # Utility functions
│ ├── src/ # Source files
│ ├── tests/ # Test files
│ ├── CMakeLists.txt # CMake configuration
│ └── resources.qrc # Qt resource file
├── CMakeLists.txt # Root CMake configuration
└── README.md # This file
# Debug build
cmake --preset Qt-Debug
cmake --build out/build/debug
# Release build
cmake --preset Qt-Release # (if configured)
cmake --build out/build/release- Follow Qt coding conventions
- Use meaningful variable and function names
- Add comments for complex logic
- Keep functions focused and small
The application follows a layered architecture:
- UI Layer: Qt widgets and models
- Service Layer: Business logic (DownloadService, ConfigService, HistoryService)
- Core Layer: Core functionality (URL parsing, video downloading)
- Utils Layer: Utility functions and helpers
Contributions are welcome! Please read ZNote/CONTRIBUTING.md (中文) for details on our code of conduct and the process for submitting pull requests.
欢迎贡献!请阅读贡献指南了解详情。
This project is licensed under the MIT License - see the ZNote/LICENSE file for details.
- yt-dlp - The amazing video downloader
- Qt - The cross-platform framework
- Bilibili - The video platform
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- QQ Group: ZNote Open Source Project Group (Group ID: 491086094)
- ✨ Initial release
- 🎬 Multi-platform video download support
- 📊 Download history management
- 🎨 Modern UI with theme support
- ⚙️ Comprehensive settings system
- 🔊 Sound notifications
- 📁 Auto-open directory feature
Note: This project is for educational purposes. Please respect the terms of service of video platforms and copyright laws.


