一个基于 S3 存储的兼容 PicGo的图床管理工具,使用 PySide6 构建的桌面应用程序。
为什么不用 PicGo ?
- 尝试过PicGo, 使用minio插件连接自己搭建的图床, 不知为何上传卡顿, 即使是局域网内也要反应一会儿
- 对PicGo的技术栈不熟, 不会从源码修改
- 至少在开发者的机器上, 上传响应比最新版的
PicGo迅速
- 🖼️ 图片上传管理 - 支持多种图片格式(PNG、JPG、GIF、WebP、BMP、TIFF、SVG、ICO)
- ☁️ S3 兼容存储 - 支持 AWS S3 及兼容的对象存储服务
- 🎨 界面 - 基于 PySide6
- 📋 剪贴板集成 - 支持从剪贴板直接上传图片
- 🌐 HTTP 服务器 - 内置 PicGo 兼容的 HTTP 上传接口
- 🔄 自动重命名 - 智能文件命名和冲突处理
- 📊 缓存管理 - 高效的图片缓存和预览系统
- 🚀 单例模式
- Windows 10/11
- Python 3.11+
- 支持 S3 兼容的对象存储服务
-
下载仓库:
git clone https://github.com/BrandonLittle666/picbed.git cd picbed -
安装依赖:
uv sync- 运行应用:
uv run main.py在应用设置中配置以下参数:
- Endpoint URL - S3 服务端点(如:
https://s3.amazonaws.com) - Region - 存储区域
- Bucket - 存储桶名称
- Access Key - 访问密钥
- Secret Key - 秘密密钥
- Path Style - 是否使用路径样式访问
- Prefix - 文件路径前缀
支持以下占位符:
yearmonthdayhourminutesecondmillisecondtimestamptimestampMSfullName, 不含扩展名fileName, 不含扩展名extName, 例如pngmd5sha1sha256randstr, 可以通过:count指定字符数, 例如randstr:5randnum, 可以通过:count指定数量, 例如randnum:5
对于上传后复制到剪切板, 还支持一下占位符:
key, 上传后文件名(不含目录结构)fullKey, 上传后文件名(含目录结构)bucket, 上传的存储桶endpoint, 上传的服务器地址prefix, 上传时设定的前缀
- 启动应用后,在系统托盘中找到 PicBed 图标
- 右键点击图标打开菜单
- 选择"设置"配置 S3 参数
- 选择"上传图片"或使用快捷键上传图片
- 上传完成后,图片链接会自动复制到剪贴板
应用内置 HTTP 服务器,默认端口 36677,提供 PicGo 兼容的上传接口:
# 上传图片
curl -X POST http://localhost:36677/upload \
-F "file=@image.jpg"使用提供的 PowerShell 脚本构建可执行文件:
.\build.ps1picbed/
├── main.py # 应用入口
├── picbed/
│ ├── app.py # 主应用程序
│ ├── s3_client.py # S3 客户端
│ ├── server.py # HTTP 服务器
│ ├── cache_manager.py # 缓存管理
│ ├── message_label.py # 消息标签组件
│ ├── singleton.py # 单例模式管理
│ ├── utils.py # 工具函数
│ └── image/ # 资源文件
└── nuitkaFolder/ # 构建输出目录
- GUI 框架: PySide6
- 云存储: boto3 (AWS SDK)
- 图像处理: Pillow
- 日志: loguru
- 构建工具: Nuitka
- 包管理: uv
本项目采用 MIT 许可证。
欢迎提交 Issue 和 Pull Request!
- 初始版本发布
- 支持 S3 兼容存储
- 现代化 PySide6 界面
- HTTP 服务器集成
- 缓存管理系统