家庭媒体中心搭照片库:Jellyfin 照片管理,10 分钟从乱到齐
【免费下载链接】jellyfinThe Free Software Media System - Server Backend & API项目地址: https://gitcode.com/GitHub_Trending/je/jellyfin
手机 8 千张、相机卡 3 千张、旧笔记本里还有几个没敢删的文件夹——照片越存越散,想翻出 2019 年那张合影,得挨个设备找。Jellyfin 是一套免费开源的家庭媒体中心,很多人只拿它看剧,其实它管照片的能力一直被低估:你只需把照片文件夹指给它,它自己读元数据、按拍摄时间归档,之后家里任何设备的浏览器都能访问。
为什么是 Jellyfin,而不是云相册
价值就一句话:照片文件从头到尾留在你自己的机器上,Jellyfin 只负责扫描、整理和展示,不收订阅费,也不经过第三方服务器。相比云相册,它没有存储额度限制;相比自己搭网盘,它多做了元数据解析和统一的多端浏览界面。对只想"把家里的照片放一处"的人来说,这点就够用了。
10 分钟搭一个能看照片的库
👇 全程按顺序做一遍就行,不用分步找资料:
- 装好服务器。在 Debian/Ubuntu 上用官方安装脚本,或用 Docker 一行起一个容器。装完浏览器打开
http://你的服务器IP:8096。 - 初始化。第一次访问会进入向导:设管理员账号 → 选语言 → 创建媒体库。
- 建照片库。在控制台"媒体库"里点"添加",库类型直接选"照片",指向存照片的文件夹。
- 等它扫完。扫描期间服务器会解析每张图片,结束后刷新页面,照片库就有了。
到这里,目录结构就是浏览层级:一个子文件夹等于一个相册;每张卡片显示的是拍摄日期,不是文件修改时间。
它替你做了什么:EXIF 提取
照片库建好之后,幕后干活的是 PhotoProvider.cs。它对 jpg、jpeg、png、tiff、cr2、webp、avif 这 7 种格式打开文件头,读出相机品牌型号、拍摄日期、光圈、快门、焦距、ISO、经纬度,还有照片里带的关键词标签,全部写进数据库。
item.CameraMake = image.ImageTag.Make; // 相机品牌,如 "Canon" item.CameraModel = image.ImageTag.Model; // 型号,如 "EOS R6" item.DateCreated = dateTaken.Value; // 拍摄时间,用于按年归档 item.Latitude = image.ImageTag.Latitude; // 地理位置 item.Longitude = image.ImageTag.Longitude;这 5 行的白话版:把文件头里的品牌、型号、时间、坐标抄进数据库。之后你能按年份翻、按设备找、按关键词筛——都是这一次"抄写"换来的。这些字段最终存放在 Photo.cs 里,每张图对应的相册容器则是 PhotoAlbum.cs。
进阶一:用元数据把库"喂"肥
EXIF 只是起点,两件事能把它用出价值:
- 按拍摄日期建相册:导入后去"库编辑器"把整理方式改成按年/按月,2 万张照片瞬间变成 5 个年份文件夹,比手动分文件夹快几个量级。
- 给截图和修图留后手:没有 EXIF 时,程序会直接读图片像素补上宽高(PhotoProvider.cs 里的回退逻辑),所以缩略图比例不会错乱。
进阶二:家庭成员各管各的
照片库搭好后,隐私问题马上冒出来:亲戚不该看到孩子的照片。Jellyfin 的用户体系直接够用——控制台"用户"里给每人建账号,逐个勾选他能看的媒体库;认证和授权由 AuthenticationManager.cs 统一拦截,未登录请求一律拒绝。原始文件只读不写,误删的风险比往网盘里传低得多。
常见坑与排查
- 有些照片不显示:先查格式,白名单外(比如 HEIC)的会直接跳过,转换后再导入。
- 拍摄日期、相机信息是空的:通常是截图或转发图,EXIF 本身不存在,属正常现象,不影响浏览。
- 照片改过却"没更新":扫描器靠文件修改时间判断变化(见 PhotoProvider 的
HasChanged),手动改过时间戳的,进控制台触发一次"刷新元数据"即可。 - 别只信一份库:定期用完整备份功能把数据库和配置打包走一份,BackupService.cs 负责这项,误操作后恢复靠它。
做完备份这一步,这套家庭照片库就算真正立住了——今晚就可以把手机里最旧的那个文件夹导进去试试。
【免费下载链接】jellyfinThe Free Software Media System - Server Backend & API项目地址: https://gitcode.com/GitHub_Trending/je/jellyfin
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考