我为 NAS 党手撸了一个极简且强大的开源云图库CloudImgs(云图) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
qazzxxx
V2EX    分享创造

我为 NAS 党手撸了一个极简且强大的开源云图库CloudImgs(云图)

  •  
  •   qazzxxx
    qazzxxx 1 天前 672 次点击

    今天想和大家分享一个我最近开发的开源项目**云图 (CloudImgs)**。

    这是一个极简风格的自建图床/云图库,支持 Docker 一键部署,完美适配 NAS 环境,并且拥有超灵活的 API 接口

    云图

    为什么要造这个轮子?

    说实话,起初我并没有打算写个图床。

    事情的起因是我在使用 N8N 处理自动化工作流时,遇到了大量的图片处理需求。我尝试寻找现有的开源解决方案,但结果并不理想:

    • 太老旧:很多曾经优秀的开源项目已经几年没更新了,UI 停留在十年前,代码维护也停滞了。
    • 要付费:好用一点的现代图床,往往需要购买 PRO 版本才能解锁高级功能(如图片压缩、格式转换等)。
    • 功能过剩或不足:有的太复杂,有的又太简陋,不支持 API 自动化调用。

    既然我自己有 NAS,又懂一点代码,为什么不自己写一个呢?于是,云图 (CloudImgs) 诞生了。它主打自由、开放、极简,专为解决实际问题而来。


    在线体验

    先别急着看技术细节,大家可以直接上手体验一下 UI 和交互。

    :演示站为纯静态 Mock 模式,上传/删除仅演示 UI 交互,数据不保存。真实部署后,体验会更好(特别是缩略图加载)。


    核心亮点:不仅仅是存图片

    1. 颜值即正义:极简瀑布流 & 丝滑交互

    我们抛弃了繁杂的后台界面,采用现代化的瀑布流布局。集成 ThumbHash 技术,在图片未完全加载时通过算法生成极小的占位哈希图,实现无感加载,告别“白屏”等待,视觉体验极佳。

    2. 生产力工具:PicGo 插件无缝集成

    对于写博客、Markdown 文档的朋友,图床的便捷性至关重要。云图原生支持 PicGo,我已经写好了对应的插件,安装即用。截图 -> 自动上传 -> 粘贴链接,一气呵成。

    3. 开发者福音:强大的实时处理 API

    这是我最自豪的功能之一。云图不仅仅是存储,还是一个即时的图片处理引擎。你可以通过 URL 参数实时处理图片:

    • 格式转换image.jpg?fmt=webp (自动转 WebP ,节省带宽)
    • 尺寸调整image.jpg?w=500&h=300 (强制缩放)
    • 质量压缩image.jpg?q=80 (80% 质量压缩)

    这就意味着,你上传一张 4K 原图,在不同设备上可以通过参数调用不同尺寸的缩略图,极大减轻前端压力。

    4. 全能管理与安全

    • 多级目录:支持文件夹管理,井井有条。
    • 隐私保护:支持设置访问密钥,保护你的私有图片。
    • 全格式支持:不仅仅是 JPG/PNG ,SVG 甚至其他文件格式也能传。
    • SVG 转 PNG:专为设计师和前端优化的功能。
    • 批量操作:支持圈选批量删除,效率拉满。

    更多界面预览

    登录页面:简洁大方,支持密码保护。 登录页面

    瀑布流管理图片:支持瀑布流展示管理图片。 瀑布流管理图片

    批量操作:支持圈选多图一键操作。 批量操作

    整页上传:支持多图拖拽一键上传。 整页上传

    相册分享:一键生成分享链接,发给朋友。 相册分享

    开放 API:灵活调用开放 API 。 开放 API


    极速部署 (NAS/Docker)

    作为 NAS 党,我深知部署难度的痛点。云图完全 Docker 化,只需要一个 docker-compose.yml 即可跑起来。

    1. 创建 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 用户的 UID (终端输入 id -u 查看) - PGID=1000 # 替换为你 NAS 用户组的 GID (终端输入 id -g 查看) - UMASK=002 - NODE_ENV=production - PORT=3001 - STORAGE_PATH=/app/uploads # 如果需要密码访问,请取消下面这行的注释并修改密码 # - PASSWORD=your_secure_password_here 

    2. 启动服务

    docker-compose up -d 

    启动后,访问 http://ip:3001 即可开始使用!

    关于密码保护

    如果你是在公网环境或者不想让别人随意查看,强烈建议在环境变量中配置 PASSWORD。配置后,访问系统需要输入密码,且状态会保存在本地浏览器中,既安全又不用频繁登录。


    项目地址

    开源不易,如果你觉得「云图」还不错,或者帮到了你的忙,希望能去 GitHub 点个 Star 支持一下!这也是我持续维护的动力。

    如果你在使用过程中遇到任何问题,欢迎在 GitHub 提 Issue 或在评论区留言,我会尽快回复大家!

    1 条回复    2025-12-28 15:38:55 +08:00
    ryd994
        1
    ryd994  
       1 天前 via Android
    看起来和 immich 大部分重复,除了 immich 不能以 API 指定分辨率以外
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5403 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 07:54 PVG 15:54 LAX 23:54 JFK 02:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86