我写了一个极简的 NAS 图床,支持 PicGo 和 API
闲心逸之
2025年12月28日 17:25
如何玩转nas

大家好,我是云舟

作为一名 NAS 玩家和自动化折腾党,**“图床”**一直是我绕不开的痛点。 起初,我只是在使用 N8N 搭建自动化工作流时,需要一个地方临时中转处理图片。市面上的选择虽多,但总有些不如意:

  • 有的开源项目年久失修,UI 停留在十年前;

  • 有的功能很强,但部署太重,甚至需要付费买 PRO 版;

  • 有的依赖第三方云存储,数据隐私始终让人心里不踏实。

“不如自己写一个吧。”

于是,云图 (Cloud Imgs) 诞生了。它的核心理念只有两个:极简自由

它不需要复杂的数据库配置,一个 Docker 容器就能跑;它支持丰富的 API,为了配合我的写作习惯,我还专门开发了 PicGo 插件

今天就把它分享给大家。

🖼️ 它是样子的?

在这个“颜值即正义”的时代,不仅要好用,还要好看。

1. 瀑布流管理,丝滑体验

拒绝传统图床简陋的列表模式。云图采用了瀑布流布局,并集成了 Thumbhash 算法。 这意味着,即使在图片加载出来之前,你也能看到一个极其接近原图色彩的模糊预加载图,彻底告别加载时的白屏焦虑

2. 批量操作,不再手酸

支持鼠标批量圈选。就像在操作你电脑本地的文件管理器一样,按住鼠标左键一拖,即可批量删除或管理图片。

3. 全局拖拽,释放上传

支持多图拖拽一键上传。无论你在哪个页面,把图片往浏览器里一扔,剩下的交给云图。

4. 隐私保护,私有云的第一道门

支持设置访问密码。极简的锁屏界面,保护你的私人照片不被随意访问。

5. 一键分享,独乐乐不如众乐乐

想把一批照片发给朋友?不需要打包压缩。选中图片,一键生成分享链接,朋友打开浏览器就能看,还能一键复制图片链接。

⚡️ 核心功能:为什么选择云图?

除了好看的皮囊,它还有有趣的灵魂:

🛠️ 1. 强大的 API 支持(为自动化而生)

这是我开发它的初衷。云图提供了一套非常灵活的 RESTful API:

  • 实时处理:支持 URL 参数裁剪/压缩(例如 image.jpg?w=500&q=80&fmt=webp)。

  • 格式转换:支持 SVG 直接转 PNG 接口(前端开发狂喜)。

  • 随机图片:提供随机获取图片的 API。

  • 开发者文档:内置了完整的 API 文档和 cURL 示例。

✍️ 2. 完美适配 PicGo

对于写博客、做笔记(Obsidian/Notion)的朋友,PicGo 是必不可少的。 我专门开发了配套插件,安装后,截图 -> 快捷键上传 -> 自动生成 Markdown 链接,写作体验行云流水。

  • 👉 PicGo 插件地址

☁️ 3. 极简部署,NAS 友好

支持 Docker Compose 一键部署。数据存放在你自己的硬盘里,安全、可控。

🚀 30秒快速部署

无论你是群晖、威联通、极空间,还是绿联 NAS,只要支持 Docker,复制下面的 docker-compose.yml 即可直接运行。

services:

 cloudimgs:

  image: qazzxxx/cloudimgs:latest

  ports:

   - "3001:3001"

  volumes:

   - ./uploads:/app/uploads:rw # 上传目录配置,明确读写权限

  restart: unless-stopped

  container_name: cloudimgs-app

  environment:

   - PUID=1000 # 替换为您 NAS 用户的实际 ID (id -u)

   - PGID=1000  # 替换为您 NAS 用户组的实际 ID (id -g)

   - UMASK=002

   - NODE_ENV=production

   - PORT=3001

   - STORAGE_PATH=/app/uploads

   # 密码保护配置(可选)

   # - PASSWORD=your_secure_password_here

启动后,访问 http://你的NASIP:3001 即可使用。

🔗 在线体验与源码

为了方便大家体验,我部署了一个在线 Mock 演示站(数据不做保存,仅供体验交互):

  • 💻 演示地址:https://yt.qazz.site

    • 访问密码:123456

  • 📦 GitHub 项目地址:https://github.com/qazzxxx/cloudimgs

如果你觉得这个项目对你有帮助,欢迎去 GitHub 点个 Star 🌟,这对我是最大的鼓励!

💬 碎碎念

这个项目目前还在持续迭代中。如果你有任何建议,或者在使用中遇到了 Bug,欢迎在评论区留言或者在 GitHub 提 Issue,每一条我都会认真看!