diff --git a/README.md b/README.md index 16ed63d..46cca4a 100644 --- a/README.md +++ b/README.md @@ -5,27 +5,21 @@

qEmby

- A modern desktop client for Emby & Jellyfin media servers
- Emby & Jellyfin 媒体服务器的现代桌面客户端 + 面向 Arch Linux 的 Emby / Jellyfin 桌面客户端

License: MIT - Release - Qt 6 + Platform: Arch Linux + Qt 6 C++20 - Platform: Windows | Linux | macOS

-

- 中文 | English -

+qEmby 是一个使用 Qt 6 / C++20 编写的 Emby、Jellyfin 桌面客户端,内置基于 libmpv 的播放器,并针对 Arch Linux 桌面环境维护。 ---- +当前项目只维护 Arch Linux 版本。Windows 专属逻辑已经移除,macOS 和 Windows 不作为发布目标。 - - -## 📸 应用截图 +## 截图

首页 @@ -36,341 +30,203 @@ 管理仪表盘

-## 📥 下载 +## 功能 -最新版本:**v0.0.6** +- 浏览 Emby / Jellyfin 媒体库,支持电影和剧集视图。 +- 内置 libmpv 播放器,支持 VAAPI、VDPAU、CUDA 和软件解码选项。 +- 支持外部播放器:MPV、VLC、MPC-Qt。 +- 支持播放进度同步、连续播放、上一集 / 下一集和播放完成画廊。 +- 支持弹幕搜索、手动匹配、缓存、ASS 管线和原生弹幕渲染。 +- 支持媒体详情、元数据编辑、媒体识别、图片更新和播放列表管理。 +- 支持下载管理器、全局搜索、搜索历史、深色 / 浅色主题。 +- 支持服务器管理仪表盘和 WebDAV 配置同步。 +- 支持中文、英文、法语界面。 -| 安装包 | 说明 | -|---|---| -| [qEmby-v0.0.6-Win-x64-Setup.exe](https://github.com/qEmby/qEmby/releases/download/v0.0.6/qEmby-v0.0.6-Win-x64-Setup.exe) | Windows 10/11 x64 安装包 | -| [qEmby-v0.0.6-Win-x64.zip](https://github.com/qEmby/qEmby/releases/download/v0.0.6/qEmby-v0.0.6-Win-x64.zip) | Windows 10/11 x64 绿色便携版 | -| [qemby-0.0.6-macos-arm64.dmg](https://github.com/qEmby/qEmby/releases/download/v0.0.6/qemby-0.0.6-macos-arm64.dmg) | macOS 26+ (Apple 芯片) | - -旧版 Windows、Linux 和 macOS 构建可以在 [Releases](https://github.com/qEmby/qEmby/releases) 页面下载。 - -## 🚀 v0.0.6 更新内容 - -- 优化了剧集详情页展示,支持版本切换。 -- 支持播放状态展示和切换。 -- 增加了详情页的缓存,加快下一次载入速度。 -- 优化了播放界面 OSD,支持上一集和下一集,支持连续播放。 -- 优化了媒体库等上下滑动的流畅度,优化了加载图片的逻辑。 -- 新增播放完成画廊,默认关闭,可以在设置中打开。 - -## ✨ 功能特性 - -- 🎬 浏览和管理你的 Emby / Jellyfin 媒体库 -- ▶️ 内置 **libmpv** 驱动的视频播放器 -- 💬 弹幕播放,支持搜索、匹配、缓存和原生覆盖层渲染 -- 🧩 支持元数据编辑、媒体识别、图片更新和播放列表管理 -- 📥 下载管理器 -- 🌗 深色 / 浅色主题切换 -- 🌐 国际化支持(中文 / 英文 / 法语) -- 🔍 支持搜索历史的媒体搜索 -- 📺 当前支持电视剧、电影媒体类型 -- 📦 提供 Windows 安装包 / 绿色版,以及 Linux AppImage / deb 包 -- ⚡ 基于 C++20 协程的异步操作(QCoro) -- 🪟 原生风格的自定义窗口边框(QWindowKit) - -## 💻 平台支持 +## 平台支持 | 平台 | 状态 | -|---|---| -| Windows 10/11 x64 | ✅ 已适配 | -| Linux x64 (AppImage / deb) | ✅ 已适配 | -| macOS 26+ (Apple Silicon) | ✅ 已适配 | +| --- | --- | +| Arch Linux x86_64 | 维护中 | +| 其他 Linux 发行版 | 可自行编译,未作为发布目标 | +| Windows / macOS | 不维护 | -## 📋 开发路线图 +## 安装 -- [x] Emby / Jellyfin 媒体库浏览 -- [x] 内置视频播放器(libmpv) -- [x] 深色 / 浅色主题 -- [x] 国际化支持(中文 / 英文) -- [x] 媒体搜索与搜索历史 -- [x] 电视剧、电影支持 -- [x] 服务器管理仪表盘 -- [x] 支持添加到播放列表和从播放列表中移除 -- [x] 支持识别来更新元数据 -- [x] 支持修改元数据和图片 -- [x] 弹幕系统(搜索、匹配、设置、渲染) -- [x] 下载管理器 -- [ ] AI 字幕生成 -- [x] Linux 平台适配 -- [x] macOS 平台适配 +从 Gitea Releases 下载普通发布包: -> 本项目为个人兴趣开发,欢迎贡献和反馈! +```bash +sudo pacman -U qemby-0.0.6-1-x86_64.pkg.tar.zst +``` -## 🛠️ 技术栈 +启动: -| 组件 | 技术 | -|---|---| -| 框架 | Qt 6.x (Widgets) | +```bash +qemby +``` + +卸载: + +```bash +sudo pacman -R qemby +``` + +如果原生 Wayland 下遇到窗口或 OpenGL 兼容性问题,可以临时使用 XCB 后端: + +```bash +QEMBY_FORCE_XCB=1 qemby +``` + +发布给普通用户时,应先按下文重新构建安装包,然后上传生成的普通包: + +```text +packaging/arch/qemby-0.0.6-1-x86_64.pkg.tar.zst +``` + +不要把 `qemby-debug-*.pkg.tar.zst` 当作普通安装包分发;它体积更大,主要用于调试符号。 + +## 从源码构建 + +安装构建依赖: + +```bash +sudo pacman -S --needed \ + base-devel git cmake ninja pkgconf \ + qt6-base qt6-tools qt6-svg qt6-websockets \ + mpv qcoro spdlog fmt hicolor-icon-theme +``` + +克隆仓库: + +```bash +git clone --recursive <你的 Gitea 仓库地址> qEmby +cd qEmby +``` + +配置并构建: + +```bash +cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DQEMBY_USE_SYSTEM_DEPS=ON \ + -DQEMBY_FETCHCONTENT_FALLBACK=OFF + +cmake --build build +``` + +直接运行开发构建: + +```bash +./build/bin/qEmbyApp +``` + +## 构建 Arch 安装包 + +本仓库包含本地发布用的 PKGBUILD: + +```bash +git archive --format=tar.gz --prefix=qEmby-0.0.6/ \ + -o packaging/arch/qemby-0.0.6.tar.gz HEAD + +cd packaging/arch +makepkg -f +``` + +安装刚生成的包: + +```bash +sudo pacman -U qemby-0.0.6-1-x86_64.pkg.tar.zst +``` + +如果希望一边构建一边安装: + +```bash +makepkg -fi +``` + +## 发布流程 + +1. 确认版本号:`CMakeLists.txt` 和 `packaging/arch/PKGBUILD` 中的版本应一致。 +2. 从当前提交生成源码包并构建 Arch 安装包: + +```bash +git archive --format=tar.gz --prefix=qEmby-0.0.6/ \ + -o packaging/arch/qemby-0.0.6.tar.gz HEAD + +cd packaging/arch +makepkg -f +``` + +3. 本地安装并启动测试: + +```bash +sudo pacman -U qemby-0.0.6-1-x86_64.pkg.tar.zst +qemby +``` + +也可以直接测试开发构建: + +```bash +cd ../.. +cmake --build build +./build/bin/qEmbyApp +``` + +4. 在 Gitea 创建版本标签,例如 `v0.0.6`。 +5. 上传 `qemby-0.0.6-1-x86_64.pkg.tar.zst` 作为 Release 附件。 +6. 在 Release 说明中写清楚安装命令: + +```bash +sudo pacman -U qemby-0.0.6-1-x86_64.pkg.tar.zst +``` + +## 项目结构 + +```text +qEmby/ +├── CMakeLists.txt +├── cmake/ +├── libs/ +│ └── qwindowkit/ +├── packaging/ +│ └── arch/ +│ ├── PKGBUILD +│ └── README.md +├── screenshots/ +└── src/ + ├── qEmbyCore/ # API、模型、服务、配置 + └── qEmbyApp/ # Qt Widgets 桌面应用 +``` + +## 技术栈 + +| 组件 | 说明 | +| --- | --- | +| UI 框架 | Qt 6 Widgets | | 语言 | C++20 | -| 视频播放 | libmpv | -| 异步 | QCoro (Qt C++20 协程) | +| 播放器 | libmpv | +| 异步 | QCoro | | 日志 | spdlog | | 窗口框架 | QWindowKit | -| 构建系统 | CMake | +| 构建系统 | CMake + Ninja | +| 打包 | Arch PKGBUILD | -## 📦 环境要求 +## 反馈 -- **Qt 6.x**(包含 Widgets、Core、Network、Concurrent、OpenGLWidgets、LinguistTools、WebSockets 模块) -- **CMake** ≥ 3.16 -- 支持 **C++20** 的编译器(推荐 MSVC 2022) -- **libmpv** 开发文件(见下方说明) -- **Git**(用于克隆子模块) +请通过 Gitea Issues 反馈问题。提交问题时建议附上: -## 🚀 构建指南 +- qEmby 版本。 +- 桌面环境和会话类型,例如 KDE Wayland、GNOME Wayland、X11。 +- 复现步骤。 +- 终端启动日志。 -### 1. 克隆仓库 +## 许可证 -```bash -git clone --recursive https://github.com/qEmby/qEmby.git -cd qEmby -``` +本项目基于 [MIT License](LICENSE) 开源。 -### 2. 获取 libmpv +## 致谢 -下载 libmpv 开发包,并放置到 `libs/libmpv/` 目录下,结构如下: - -``` -libs/libmpv/ -├── bin/ -│ └── libmpv-2.dll -├── include/ -│ └── mpv/ -│ ├── client.h -│ └── render.h (等) -└── lib/ - └── libmpv.dll.a -``` - -libmpv 获取方式: -- [shinchiro/mpv-winbuild-cmake](https://github.com/shinchiro/mpv-winbuild-cmake/releases)(Windows 预编译版本) -- [mpv-player/mpv](https://github.com/mpv-player/mpv)(从源码编译) - -### 3. 配置和构建 - -```bash -cmake -B build -DCMAKE_PREFIX_PATH="/path/to/Qt6/lib/cmake" -cmake --build build --config Release -``` - -> **提示:** 在 Windows 上使用 MSVC 时,也可以直接在 Qt Creator 或 Visual Studio 中打开 CMake 项目。 - -## 📁 项目结构 - -``` -qEmby/ -├── CMakeLists.txt # 根 CMake 配置 -├── libs/ -│ ├── libmpv/ # libmpv SDK(未纳入版本控制,见构建指南) -│ └── qwindowkit/ # QWindowKit(git 子模块) -└── src/ - ├── qEmbyCore/ # 核心库(API、模型、服务) - │ ├── api/ # Emby/Jellyfin API 客户端 - │ ├── config/ # 配置管理 - │ ├── models/ # 数据模型 - │ └── services/ # 业务逻辑服务 - └── qEmbyApp/ # 桌面应用 - ├── components/ # 可复用 UI 组件 - ├── managers/ # 应用管理器 - ├── resources/ # 图标、主题、翻译 - ├── utils/ # 工具类 - └── views/ # 应用视图 -``` - -## 💬 交流社区 - -加入 Telegram 交流群:[https://t.me/+qXQ-zU56z9gxOWNl](https://t.me/+qXQ-zU56z9gxOWNl) - -> **注意:** 本项目是为爱发电项目,测试覆盖不全,敬请谅解。如有问题请通过 [GitHub Issues](https://github.com/qEmby/qEmby/issues) 反馈。 - -## 📄 许可证 - -本项目基于 [MIT 许可证](LICENSE) 开源。 - -## 🙏 致谢 - -- [Qt](https://www.qt.io/) — 应用框架 (LGPL v3) -- [mpv](https://mpv.io/) — 媒体播放引擎 (LGPL v2.1+) -- [QWindowKit](https://github.com/stdware/qwindowkit) — 自定义窗口框架 (Apache-2.0) -- [QCoro](https://github.com/danvratil/qcoro) — Qt C++20 协程库 (MIT) -- [spdlog](https://github.com/gabime/spdlog) — 高性能日志库 (MIT) - ---- - - - -## 📸 Screenshots - -

- Home - Detail -

-

- Settings - Admin Dashboard -

- -## 📥 Download - -Latest release: **v0.0.6** - -| Package | Description | -|---|---| -| [qEmby-v0.0.6-Win-x64-Setup.exe](https://github.com/qEmby/qEmby/releases/download/v0.0.6/qEmby-v0.0.6-Win-x64-Setup.exe) | Windows 10/11 x64 installer | -| [qEmby-v0.0.6-Win-x64.zip](https://github.com/qEmby/qEmby/releases/download/v0.0.6/qEmby-v0.0.6-Win-x64.zip) | Windows 10/11 x64 portable package | -| [qemby-0.0.6-macos-arm64.dmg](https://github.com/qEmby/qEmby/releases/download/v0.0.6/qemby-0.0.6-macos-arm64.dmg) | macOS 26+ (Apple Silicon) | - -Older Windows, Linux and macOS builds are available on the [Releases](https://github.com/qEmby/qEmby/releases) page. - -## 🚀 What's New in v0.0.6 - -- Optimized episode detail page display with version switching support. -- Added playback status display and switching. -- Added detail page caching for faster subsequent loading. -- Enhanced player OSD with previous/next episode and continuous playback. -- Improved scrolling smoothness in media library views and optimized image loading logic. -- Added post-playback gallery (disabled by default, configurable in settings). - -## ✨ Features - -- 🎬 Browse and manage your Emby / Jellyfin media library -- ▶️ Built-in video player powered by **libmpv** -- 💬 Danmaku playback with search, matching, cache and native overlay rendering -- 🧩 Metadata editing, media identification, image updates and playlist tools -- 📥 Download manager -- 🌗 Dark and Light theme support -- 🌐 Internationalization support (Chinese / English) -- 🔍 Media search with history -- 📺 TV series and movies media types -- 📦 Windows installer / portable packages and Linux AppImage / deb packages -- ⚡ Asynchronous operations with C++20 coroutines (QCoro) -- 🪟 Custom window frame with native look (QWindowKit) - -## 💻 Platform Support - -| Platform | Status | -|---|---| -| Windows 10/11 x64 | ✅ Supported | -| Linux x64 (AppImage / deb) | ✅ Supported | -| macOS 26+ (Apple Silicon) | ✅ Supported | - -## 📋 Roadmap - -- [x] Emby / Jellyfin media library browsing -- [x] Built-in video player (libmpv) -- [x] Dark / Light theme -- [x] Internationalization (Chinese / English) -- [x] Media search with history -- [x] TV series & movies support -- [x] Server administration dashboard -- [x] Playlist support (add/remove items) -- [x] Media identification & metadata refresh -- [x] Metadata and image editing -- [x] Danmaku (bullet comments) system -- [x] Download manager -- [ ] AI-powered subtitle generation -- [x] Linux platform support -- [x] macOS platform support - -> This is a personal hobby project, developed out of interest. Contributions and feedback are welcome! - -## 🛠️ Tech Stack - -| Component | Technology | -|---|---| -| Framework | Qt 6.x (Widgets) | -| Language | C++20 | -| Video Player | libmpv | -| Async | QCoro (C++20 Coroutines for Qt) | -| Logging | spdlog | -| Window Kit | QWindowKit | -| Build System | CMake | - -## 📦 Prerequisites - -- **Qt 6.x** (with Widgets, Core, Network, Concurrent, OpenGLWidgets, LinguistTools, WebSockets) -- **CMake** ≥ 3.16 -- **C++20** compatible compiler (MSVC 2022 recommended) -- **libmpv** development files (see below) -- **Git** (for cloning submodules) - -## 🚀 Build - -### 1. Clone the repository - -```bash -git clone --recursive https://github.com/qEmby/qEmby.git -cd qEmby -``` - -### 2. Get libmpv - -Download the libmpv development package and place it in `libs/libmpv/` with the following structure: - -``` -libs/libmpv/ -├── bin/ -│ └── libmpv-2.dll -├── include/ -│ └── mpv/ -│ ├── client.h -│ └── render.h (etc.) -└── lib/ - └── libmpv.dll.a -``` - -You can get libmpv from: -- [shinchiro/mpv-winbuild-cmake](https://github.com/shinchiro/mpv-winbuild-cmake/releases) (Windows builds) -- [mpv-player/mpv](https://github.com/mpv-player/mpv) (build from source) - -### 3. Configure and build - -```bash -cmake -B build -DCMAKE_PREFIX_PATH="/path/to/Qt6/lib/cmake" -cmake --build build --config Release -``` - -> **Tip:** On Windows with MSVC, you can also open the project in Qt Creator or Visual Studio with CMake support. - -## 📁 Project Structure - -``` -qEmby/ -├── CMakeLists.txt # Root CMake configuration -├── libs/ -│ ├── libmpv/ # libmpv SDK (not tracked, see Build section) -│ └── qwindowkit/ # QWindowKit (git submodule) -└── src/ - ├── qEmbyCore/ # Core library (API, models, services) - │ ├── api/ # Emby/Jellyfin API client - │ ├── config/ # Configuration management - │ ├── models/ # Data models - │ └── services/ # Business logic services - └── qEmbyApp/ # Desktop application - ├── components/ # Reusable UI components - ├── managers/ # Application managers - ├── resources/ # Icons, themes, translations - ├── utils/ # Utility classes - └── views/ # Application views -``` - -## 💬 Community - -Join our Telegram group: [https://t.me/+qXQ-zU56z9gxOWNl](https://t.me/+qXQ-zU56z9gxOWNl) - -> **Note:** This is a passion project with limited testing. Your understanding is appreciated. Please report any issues via [GitHub Issues](https://github.com/qEmby/qEmby/issues). - -## 📄 License - -This project is licensed under the [MIT License](LICENSE). - -## 🙏 Acknowledgements - -- [Qt](https://www.qt.io/) — Application framework (LGPL v3) -- [mpv](https://mpv.io/) — Media player engine (LGPL v2.1+) -- [QWindowKit](https://github.com/stdware/qwindowkit) — Custom window frame (Apache-2.0) -- [QCoro](https://github.com/danvratil/qcoro) — C++20 Coroutines for Qt (MIT) -- [spdlog](https://github.com/gabime/spdlog) — Fast logging library (MIT) +- [Qt](https://www.qt.io/) +- [mpv](https://mpv.io/) +- [QWindowKit](https://github.com/stdware/qwindowkit) +- [QCoro](https://github.com/danvratil/qcoro) +- [spdlog](https://github.com/gabime/spdlog)