这周发生了很多有意思的事情。

Clawdbot改名成Moltbot,然后某个B站UP发了条动态:

做个opencode desktop的视频,第二天就爆火Clawdbot,Clawdbot要发了把名字改成了moltbot。这个时代不要为难老人家好不好~

前天一看又把名字改成了OpenClaw,想蹭个热点真不容易啊2333。

CloudCone机房罕见的出故障了,因为虚拟机WEB控制面板 Virtualizor 上存在一个严重漏洞,本来还准备在周末在CC服务器上整个mjl-/mox,结果什么也干不了。

周末要结束了还没修复:

于是在用Memos记录这些事情的时候,发现Memos不能直接在post里上传图片,只能用图床。

既然现在没法部署mjl-/mox,那就整(shui)个(pian)图(bo)床(ke)好了。

这次主要用的是Claude + GLM-4.7,体验下Claude和OpenCode的区别。

为什么要自建

没怎么用图床,相关的工具倒是收藏了不少。

其中杀手级的App当属Molunerfinn/PicGo,功能非常全面,支持各种存储服务,还能和常见的文本编辑器交互:

虽然有很多免费的存储服务可以用,但这些都逃不开一个最大的问题:很难保证链接长期有效

比如把文件上传到OneDrive,得到一个链接,但如果哪天想要把图床迁移到另一个服务,那就不得不修改原来使用的链接,而用到这个链接的地方可能很多,emmm…

更不用说有些免费图床用着用着就跑路的。

而如果是用自己的域名访问的话,就能解决这个痛点。只在域名还在,做好备份恢复,就完全可以保证链接一直有效。

搭建思路

图床这种算是静态网站服务,有很多平台可以提供免费部署,比如Vercel,Github等,也能自定义域名。但这里用的是服务器+Nginx,毕竟现在的服务器很便宜了,这样也更方便备份迁移。

如果追求极致精简,直接把图片放在Nginx的静态文件目录就好。但这样服务器端是简单,客户端操作就有点复杂了,得用rsync, scp之类的工具把文件传上去,不方便也不安全。

所以设计原则是:客户端操作尽可能简单,无论在哪都能轻松上传图片

于是我选择使用curl,通过http请求的方式上传图片,这命令是个电脑都应该会有吧,而且命令也不会很长,很容易就能记住。

开始干活

当然不是我干活,而是指挥AI干活。

要实现的功能也不多,需求一描述,用Claude和GLM-4.7生成的代码直接就能跑起来。

然后不出意外的出意外了,在首次生成的代码上继续改进时,上传图片的权限突然从一开始的600变成了666

这可不是什么好事。

让Claude定位原因把图片权限改回去,但Claude并不知道是什么导致的权限改变,虽然加上了改变文件权限的代码,但最后图片权限依旧是666

眼看Claude解决不了,只好亲自出手了。

扫了一眼本就不多的Lua脚本,唯一对图片有修改是调用ImagicMagick压缩图片这段

1
2
3
4
5
-- Optimize images (requires ImageMagick)
local image_extensions = {jpg=true, jpeg=true, png=true, webp=true, gif=true, avif=true}
if image_extensions[ext:lower()] then
os.execute(string.format("/usr/bin/mogrify -quality 85 -strip %s", target, target))
end

于是把这段lua注掉一试,果然,就是用/usr/bin/mogrify压缩图片后图片文件的权限从600变成了666

而虽然Claude加上了改变文件权限的代码

1
os.execute("/bin/chmod 600 " .. target .. " 2>/dev/null")

但因这段代码放在ImagicMagick压缩图片之前,所以没能发挥任何效果。

收尾

最后照例生成了Git项目,把代码传到了Github上:qspidy/imgng

不得不夸一下OpenCode生成的README了。相比Claude,OpenCode生成的又有图标又有Badge,看起来很现代。

最后让Claude参考之前的项目才生成的现在这么现代的README:

结语

不得不感慨AI写代码之神速啊,虽然就目前看来还有一定的局限,有些问题还是得有人的配合才能解决。

但是,如果这次AI可以在本地调试,它应该能很快定位问题吧。

如果调试也被AI完全掌握,那或许真的就是程序员的末日了。

感觉也快了啊。