← 返回项目列表

PickPic

SpringShaw/PickPic

Tinder 式卡片交互的 Web 版相册整理工具。快决策照片去留。纯本地运行、无外网请求、无数据收集,集成随机推送、手势操作(右滑/上滑/双击/左滑找回)、智能黑名单、MD5 去重过滤、缩略图缓存、视频播放、全屏查看、回收站管理、收藏夹、EXIF 解析等全部功能。

  • 语言Vue
  • 星标0
  • 更新2026-06-25

项目说明

README 同步: 2026/6/26

拣影 — 相册整理工具

Tinder 式卡片交互的 Web 版相册整理工具。快决策照片去留。纯本地运行、无外网请求、无数据收集,集成随机推送、手势操作(右滑/上滑/双击/左滑找回)、智能黑名单、MD5 去重过滤、缩略图缓存、视频播放、全屏查看、回收站管理、收藏夹、EXIF 解析等全部功能。

界面预览

📱 手机端       🖥️ PC 端
拣影 手机端演示 拣影 PC 端演示
↑ 点击封面播放 ↑ 点击封面播放

截图

照片 设置 设置 视频
Screenshot_2026-06-25-12-32-50-074_com.trim.app-edit Screenshot_2026-06-25-12-33-02-899_com.trim.app-edit Screenshot_2026-06-25-12-33-08-236_com.trim.app-edit Screenshot_2026-06-25-12-33-22-568_com.trim.app-edit

功能特性

📷 随机推送

  • 全局打乱图片,跨文件夹、跨时间、跨地点随机推送
  • 照片/视频双模式切换,互不干扰
  • 双层卡片架构:当前照片 + 下一张预加载,滑动时背面卡片渐进揭示

✋ 手势操作

  • 右滑 → 保留照片,切换下一张
  • 上滑 → 移入回收站(二次确认,可撤销)
  • 双击 → 收藏照片,触发淡粉色爱心动画
  • 单击 → 查看照片详情(时间、地点、路径、分辨率)
  • PC 端鼠标拖拽完全兼容

↩️ 左滑找回

  • 找回上一张右滑跳过的照片
  • 带 ease-out 缩放动画(0.3 → 1.0),视觉流畅

🚫 智能屏蔽

  • 已浏览图片自动加入黑名单,默认 3 年不重复推送
  • 支持 1 年 / 3 年 / 永久 三档可调
  • 后台增量扫描,新增/删除照片自动感知

🔄 去重过滤

  • 预计算 MD5 哈希,基于内容指纹自动过滤重复图片
  • 相同照片只推送一次,可选开关

🎬 视频支持

  • 7 种视频格式:MP4、MOV、AVI、MKV、WebM、3GP、FLV
  • ffmpeg 提取第一帧做缩略图,ffprobe 读取时长/分辨率
  • 全屏查看器内置 <video> 播放控件

🔍 全屏查看

  • 单击「放大查看」按钮进入全屏模式
  • 支持双指缩放(0.5x ~ 5x)、双击放大/还原、拖动平移
  • 鼠标滚轮缩放(PC 端)

🗑️ 回收站管理

  • 删除的照片移入回收站,非直接删除
  • 支持单张恢复、批量恢复、全部恢复
  • 支持选中永久删除、全部清空(二次确认)
  • 回收站缩略图自动补生成

⭐ 收藏夹

  • 双击收藏的照片集中浏览
  • 支持取消收藏、移入回收站
  • 收藏文件自动复制到独立目录

📊 数据统计

  • 实时展示已浏览、已收藏、已清理(释放空间 MB)
  • 支持重置黑名单、重置统计数据

⚙️ 灵活配置

  • 首次部署后在设置页面配置图片源/收藏/回收站目录
  • 目录路径实时验证(检查是否存在、可写、图片数量)
  • 手动触发全量重新扫描

🖼️ 性能优化

  • 400×400 JPEG 缩略图缓存,加载速度 10x+
  • EXIF Orientation 自动方向修正
  • 33K+ 照片秒级随机推送(SQLite 缓存)
  • 扫描期间不阻塞正常浏览

🎨 iOS 极简设计

  • 纯白背景 #FFFFFF,大面积留白
  • 毛玻璃效果:rgba(255,255,255,0.92) + backdrop-filter: blur(12px)
  • 轻量动画:弹出/滑出/缩放/淡入淡出
  • 淡粉色收藏爱心 #FFB6C1
  • 移动端 + PC 端响应式适配

📦 项目结构

PickPic/
├── frontend/                 # Vue3 + Vite + TailwindCSS
│   └── src/
│       ├── App.vue           # 主页面(双层卡片架构)
│       ├── components/       # 9 个组件
│       ├── i18n/             # 中英文双语模块
│       ├── styles/           # 共享 CSS(modal / gridPanel)
│       ├── services/api.js   # API 封装(15 个接口)
│       └── utils/            # 共享工具函数
├── backend/                  # Python3 + FastAPI + SQLite
│   └── app/
│       ├── main.py           # FastAPI 入口
│       ├── config.py         # 配置项
│       ├── models/           # 数据库模型
│       ├── api/routes.py     # 19 个 REST API
│       └── services/         # 核心业务逻辑
├── README.md / README.en.md  # 中英文文档
├── README.assets/            # 中文截图
├── README.en.assets/         # 英文截图
├── Dockerfile
├── docker-compose.yml
├── deploy.sh                 # 一键部署脚本
├── .env.example              # 环境变量模板
├── .gitignore
└── LICENSE                   # MIT

🚀 快速开始

方式一:Docker 部署(推荐)

git clone https://github.com/SpringShaw/PickPic.git
cd PickPic
cp .env.example .env
# 编辑 .env 配置 PHOTOS_DIR、FAVORITES_DIR、RECYCLE_DIR
chmod +x deploy.sh
./deploy.sh
# 浏览器打开 http://localhost:8082

方式二:Docker Compose

cp .env.example .env
mkdir -p data/db data/thumbnails
docker compose up -d --build
# 访问 http://localhost:8082

方式三:裸机部署

适用于 Linux / macOS / Windows 主机,无 Docker 环境。

# 1. 克隆项目
git clone https://github.com/SpringShaw/PickPic.git
cd PickPic

# 2. 安装后端依赖
cd backend
pip install -r requirements.txt

# 3. 构建前端
cd ../frontend
npm install
npm run build

# 4. 将前端产物复制到后端静态目录
cp -r dist/* ../backend/static/

# 5. 创建数据目录
cd ../backend
mkdir -p data/db data/thumbnails

# 6. 配置环境变量(可选)
export PHOTOS_DIR=/path/to/your/photos
export FAVORITES_DIR=/path/to/your/favorites
export RECYCLE_DIR=/path/to/your/recycle

# 7. 启动服务
uvicorn app.main:app --host 0.0.0.0 --port 8082

生产环境建议配合 systemd / supervisor / pm2 做进程守护,或直接用 Docker。

方式四:本地开发

前后端分离热更新,适合调试。

# 后端
cd backend
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8082 --reload

# 前端(另开终端)
cd frontend
npm install
npm run dev

🔧 配置说明

变量 默认值 说明
PORT 8082 访问端口
PHOTOS_DIR ./photos 图片源目录(宿主机路径)
FAVORITES_DIR ./favorites 收藏目录
RECYCLE_DIR ./recycle 回收站目录
BLACKLIST_DURATION 3y 黑名单时长:1y / 3y / forever
ENABLE_DUPLICATE_FILTER true 重复图片过滤

📱 手势速查

手势 操作
右滑 保留照片,下一张
上滑 删除照片(回收站)
左滑 找回上一张
双击 收藏
单击 查看信息

🛠️ 技术栈

技术
前端 Vue 3 + Vite + TailwindCSS
后端 Python 3 + FastAPI + SQLite
容器 Docker + python:3.11-slim
图片处理 Pillow + pillow-heif(HEIC)
视频处理 ffmpeg(缩略图 + 元数据)

📋 支持格式

类型 格式
图片 JPG, JPEG, PNG, WebP, HEIC, HEIF, BMP, GIF, TIFF
视频 MP4, MOV, AVI, MKV, WebM, 3GP, FLV

特点

  • 🔒 纯本地运行,无外网请求,数据完全私有
  • 🐳 Docker 一键部署,5 分钟上手
  • 📱 移动端 + PC 端手势全面适配
  • ⚡ 33K+ 照片秒级随机推送
  • 🎨 iOS 极简风格,轻量动画
  • 🆓 MIT 开源协议

许可证

MIT License

致谢