MCPcopy Index your code
hub / github.com/Achaiccccc/local-javlibrary

github.com/Achaiccccc/local-javlibrary @v2.9.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.9.1 ↗ · + Follow
136 symbols 321 edges 34 files 52 documented · 38%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

JavLibrary

本地影视库管理系统

由于jellyfin和Emby,以及主流NAS的播放应用对某些小众影片的支持不太友好,所以借助AI自己动手做了一个。

基于 Electron + Vue 3 构建的桌面应用,自动扫描和解析本地 NFO 元数据文件,提供多维度浏览、搜索和管理功能(需搭配其它元数据刮削工具使用)。

版本: v2.9.0

功能特点

  • 🌓 主题切换: 日间/夜间模式切换,页面、组件与弹窗随主题联动(果然影视墙还是黑底更适合啊!)
  • 📁 自动扫描: 自动扫描本地文件夹中的 NFO 元数据文件,构建本地数据库
  • ⚙️ 多路径支持: 支持添加多个数据文件夹路径,数据叠加管理
  • 🔍 多维度浏览: 支持按演员、导演、制作商、分类、系列等多维度浏览影片
  • 🎯 列表页筛选器: 所有影片列表页顶部支持按分类标签筛选
  • ✏️ 数据编辑: 支持编辑影片信息,仅更新 NFO 中修改的字段、保留其余内容(建议使用前备份 NFO,确认符合预期后再批量使用)
  • ✏️ 演员数据编辑: 支持编辑演员名称,添加曾用名,修改头像(需外挂数据文件),当识别到重复名称时可合并(本功能只修改数据库,而不会修改原始nfo文件中的信息,请放心使用,如需编辑NFO中的信息请使用详情页的编辑功能)
  • 🔎 高级搜索: 提供简易搜索和多重搜索两种模式,支持多条件组合查询
  • ❤️ 收藏夹: 图文列表页、影片详情页可点击收藏,支持多收藏夹;内置「默认收藏夹」和「最近看过」(30天内播放过的数据)列表
  • 🧩 分类管理: 分类 Tab 支持编辑当前分类列表与一键导入默认分类,编辑弹窗中每个小类右侧展示「可播放/总数」统计,便于快速了解当前配置覆盖情况
  • 🎰 随机摸奖: 选择困难症犯了?试试随机抽奖吧!
  • 🎬 视频播放: 播放器开发不在本项目的考虑范围内,为调用系统默认播放器播放

视频介绍

📺 观看视频介绍

界面预览

首页 首页(日间/夜间模式)

视图切换 视图切换(文字/图文/缩图模式)

详情页 详情页

收藏夹 演员一览

收藏夹 收藏夹

影片搜索 简易搜索/多重搜索

应用设置 应用设置

随机功能 随机功能

技术栈

  • Electron: 跨平台桌面应用框架
  • Vue 3: 前端框架
  • Vite: 快速构建工具
  • SQLite: 轻量级本地数据库
  • Sequelize: Node.js ORM 框架
  • Element Plus: Vue 3 UI 组件库

开发环境要求

  • Node.js 18+
  • npm 或 pnpm

安装依赖

# 安装根目录依赖
npm install

# 安装前端依赖
cd frontend
npm install
cd ..

开发运行

# 同时启动 Electron 和前端开发服务器
npm run dev

# 或者分别启动
npm run dev:electron  # 启动 Electron
npm run dev:frontend  # 启动前端开发服务器(端口 5173)

构建打包

  • 正式版npm run build 或先 npm run build:frontendnpm run build:electron。安装包输出到 dist/,应用名为 JavLibrary,用户数据在 %APPDATA%\JavLibrary\
  • 测试版npm run build:test(前端以 --mode test 构建后,再按测试配置打包)。安装包输出到 dist-test/,应用名为 JavLibrary_beta,appId 为 com.javlibrary.app.test,用户数据在 %APPDATA%\JavLibrary-test\,与正式版完全隔离;可与正式版同时安装。

环境变量由根目录 .env.env.test 管理(如 VITE_APP_ENV);本地覆盖可使用 .env.local(已加入 .gitignore)。

# 正式版
npm run build:frontend
npm run build:electron

# 测试版(一键)
npm run build:test

# 快速构建(跳过 sqlite3 重新编译)
npm run build:quick

项目结构

JavLibrary/
├── electron/              # Electron 主进程
│   ├── main.js           # 主进程入口文件
│   ├── preload.js        # 预加载脚本(安全IPC通信)
│   └── src/
│       ├── config/       # 配置文件
│       ├── models/       # 数据模型
│       ├── services/     # 业务逻辑层
│       ├── ipc/          # IPC 处理器
│       └── utils/        # 工具函数
├── frontend/             # 前端应用(渲染进程)
│   ├── src/
│   │   ├── views/        # 页面组件
│   │   ├── components/   # 公共组件
│   │   ├── stores/       # 状态管理
│   │   ├── router/       # 路由配置
│   │   └── utils/        # 工具函数
│   └── vite.config.js
└── package.json

使用说明

首次启动

  1. 启动应用后,系统会提示选择 data 文件夹路径
  2. 选择包含 NFO 文件的文件夹
  3. 在设置页面点击"开始扫描数据文件夹"进行初始数据导入

数据格式

data 文件夹结构示例:

data/
├── 文件夹目录1/
│   ├── 作品文件夹1/
│   │   ├── poster.jpg    # 封面(或 *ps.* / 文件名含 poster,如 ABC-001-poster.jpg)
│   │   ├── fanart.jpg    # 海报(或 *pl.* / 文件名含 fanart,如 ABC-001-fanart.jpg)
│   │   ├── xxx.nfo       # 元数据文件(任意 .nfo 后缀均可)
│   │   ├── video.mp4     # 视频文件(可选)
│   │   └── extrafanart/  # 预览图文件夹(可选,详情页多图轮播;文件夹名含 extrafanart 即可)
│   │       ├── 1.jpg
│   │       └── ...
│   └── ...
└── ...
  • NFO:支持任意文件名的 .nfo 文件,不限于 movie.nfo
  • 封面/海报:优先识别以 ps/pl 结尾的图片;其次按关键词匹配,文件名含 poster 为封面、含 fanart 为海报(支持 poster.jpg标题-poster.jpg 等)
  • 预览图:作品文件夹下名称含 extrafanart 的子文件夹内图片会作为详情页预览图,与详情主图一起可点击轮播放大
  • 识别码:NFO 中可使用 <uniqueid><num> 标签

如何准备演员数据(可选)

若需在应用中显示演员头像,可拉取 gfriends/gfriends 项目;在设置中选择的演员数据路径必须包含 Filetree.jsonContent 目录。选好包含以上两者的文件夹路径后点击「扫描演员信息」即可。 若需自建或修改数据,请参阅 演员头像数据格式说明(Filetree.json + Content)

注意: 考虑到演员数据一般较多,所以对该页面进行了缓存处理,不会频繁刷新,如果添加了演员数据发现头像并没有出现,可点击页面上的刷新按钮进行刷新

主要功能

  • 影片详情: 点击影片进入详情页,可查看完整信息、编辑数据、播放视频;演员名称统一优先使用用户编辑后的显示名称,未设置显示名时回退为 NFO 中的原始名称
  • 收藏夹管理: 图文列表页及详情页可对影片进行收藏,支持自定义收藏夹
  • 目录浏览: 在"目录"页面通过下拉框切换不同类型的目录(演员、文件目录、导演、制作商、分类);演员目录下支持放大/缩小按钮调整网格卡片大小,支持显示头像与统计信息
  • 搜索功能: 在"搜索"页面使用简易搜索或多重搜索查找影片;简易搜索支持输入即搜(防抖 0.7 秒),结果在页内展示
  • 设置管理: 在"设置"页面配置影片/演员数据路径、扫描数据、调整显示和同步设置
  • 演员目录与头像: 可选配置演员数据路径后,演员列表页(仅演员模式)、详情页、目录页展示头像;未配置时演员列表页不显示头部区域,配置后无头像时显示占位保持布局;支持简繁体与曾用名匹配,多头像时可选择默认展示
  • 演员名称与曾用名: 演员列表页(演员模式)名称旁可编辑显示名称与曾用名(仅改应用库,不修改 NFO);曾用名参与「扫描演员信息」时的头像匹配;编辑显示名或曾用名与其他演员发生重名/曾用名冲突时,系统会提示是否合并为同一演员,并采用软合并方式统一其影片与别名(不回写 NFO)

配置说明

应用开箱即用,如需自定义配置:

  • 影片数据路径: 在设置页面添加或删除数据文件夹路径(支持多路径,必填)
  • 演员数据路径: 可选。选择包含 Filetree.jsonContent 目录的文件夹,用于演员头像展示;设置后需点击「扫描演员信息」构建映射(支持简繁体匹配)
  • 自动同步: 开启"启动时自动扫描"可在应用启动时监听文件变化并自动同步数据
  • 显示设置: 开启"仅显示可播放"可过滤掉没有视频文件的影片

问题反馈

如果使用中遇到了 Bug 或问题,欢迎通过以下方式反馈:

  • 提交 Issue(提问前请先搜索是否已有类似问题)
  • 想要更多类型影片支持?请提供对应的nfo文件或门户网站
  • 联系开发者:x248336024@vip.qq.com

参与贡献

此项目完全借助 AI 进行开发。如果你想要帮助改进这个项目,欢迎通过以下方式参与:

  • 帮忙设计个logo?
  • 报告 Bug 或提出功能建议
  • 帮助测试和验证功能
  • 提交 Pull Request
  • 点个 Star 支持一下

License

本项目采用 GPL-3.0 License 开源协议。

重要声明

  • 本软件仅供学习和技术交流使用
  • 请勿在微博、微信等墙内的公共社交平台上宣传此项目
  • 用户在使用本软件时,请遵守当地法律法规
  • 禁止将本软件用于商业用途

注意: 本软件仅供学习和技术交流使用,请遵守当地法律法规。

Core symbols most depended-on inside this repo

getSequelize
called by 35
electron/src/config/database.js
getDataPaths
called by 16
electron/src/config/paths.js
extractText
called by 14
electron/src/utils/xmlParser.js
getOrderFromSortBy
called by 9
electron/src/ipc/handlers.js
sendProgress
called by 8
electron/src/services/sync.js
read
called by 8
electron/src/services/favoritesService.js
getMovieIdsWithAllGenres
called by 8
electron/src/ipc/handlers.js
buildYearOrCondition
called by 8
electron/src/ipc/handlers.js

Shape

Function 136

Languages

TypeScript100%

Modules by API surface

electron/src/services/actorAvatarService.js16 symbols
electron/src/services/favoritesService.js15 symbols
electron/src/utils/xmlParser.js13 symbols
electron/src/ipc/handlers.js12 symbols
frontend/src/utils/imageLoader.js9 symbols
electron/src/services/sync.js9 symbols
electron/src/config/paths.js8 symbols
frontend/src/utils/pageState.js7 symbols
electron/src/services/genreCategoriesService.js7 symbols
frontend/src/stores/listParamsStore.js6 symbols
electron/src/utils/fileUtils.js6 symbols
electron/src/state/scanState.js6 symbols

For agents

$ claude mcp add local-javlibrary \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact