Simon Willison 6 月 22 日公开了一个个人移植项目:把 Moebius 0.2B 图像 inpainting 模型搬进浏览器。

Moebius 原发布版本依赖 PyTorch 和 NVIDIA CUDA。Willison 的做法是把模型转成 ONNX,再用 ONNX Runtime Web 的 WebGPU 后端在浏览器里跑。Demo 已经放在 GitHub Pages,ONNX 权重托管在 Hugging Face。

这个项目有意思的地方,不是 Moebius 一夜之间变成了“轻量网页应用”。恰恰相反,页面首次加载仍要拉约 1.3GB 文件。真正反常的是:一个编码代理在人的持续提示和验收下,已经能把模型转换、前端、部署、缓存这些脏活串起来。

从 CUDA 到 WebGPU:变的是入口,不是成本消失

Moebius 是一个 0.2B 参数级别的图像修复模型。用户标记图片中要移除的区域,模型补出空缺部分。原始项目面向 Python 和 NVIDIA CUDA 环境,不是面向普通网页用户。

Willison 的移植版也不是 Moebius 官方浏览器支持。它更像一次个人工程实验:把模型转换成 ONNX,用浏览器 GPU 能力执行,再做一个能上传图片、涂抹区域、点击运行的页面。

关键差异可以压成一张表:

对比项原始 MoebiusWillison 移植版实际含义
运行栈PyTorch + NVIDIA CUDAONNX Runtime Web + WebGPU从本地 CUDA 环境转到浏览器 GPU
项目性质官方发布模型与代码个人移植 Demo不能理解为官方已支持浏览器
前端入口需要本地工程环境GitHub Pages 页面更容易给别人试用
权重位置Hugging Face 上的模型权重约 1.24GB ONNX 权重托管在 Hugging Face页面首次加载约 1.3GB
缓存处理依赖本地环境CacheStorage API避免刷新时反复下载大文件

这里最值得看的是技术路线选择。Willison 一开始考虑过 Transformers.js,但最后走的是更底层的 ONNX Runtime Web。

这很合理。Transformers.js 对常见模型和 Hugging Face 生态更顺手,但遇到非标准结构时,ONNX Runtime Web 更像通用执行层。它不负责把体验包得很漂亮,重点是把计算图和权重交给浏览器执行。

对端侧 AI 开发者来说,这条路线给了一个现实参照:浏览器 AI 不只剩“套现成模型”一条路。非标准模型也可能被搬进网页,但代价是转换、算子兼容、内存、下载和缓存都要自己兜住。

这不是无成本迁移。

1.3GB 的首次下载,已经足以把很多消费级网页场景挡在门外。用户如果只想修一张图,可能不会等。企业如果要上线类似能力,也要先算带宽、等待时间和失败兜底。

Claude Code 做成了什么:不是自动驾驶,是可验收的工程推进

Willison 在原文里说得很直白:他基本没有读项目代码。

他做的事更像一个熟练开发者在带代理干活:先让 Claude 调研可行性,把研究结果存成 research.md;再让 Claude Code 写 plan.md 和 notes.md;中途把浏览器报错和截图贴回去;需要部署时,提供 Hugging Face token 和 GitHub Pages 的目标地址。

这不是“AI 自己完成一切”。人的角色没有消失,只是位置变了。

过去,把一个 PyTorch/CUDA 模型搬到浏览器,通常要有人熟悉几层东西:PyTorch 导出 ONNX、ONNX opset、WebGPU 后端、前端加载流程、大文件缓存、Hugging Face 托管。每一层都不算玄学,但串起来很费时间。

这次 Claude Code 至少表明一件事:编码代理已经能承担大量胶水工程。它能查资料、写转换脚本、搭 UI、处理部署,还能根据报错继续修。

但验收仍然在人手里。

Willison 持续给它目标、约束和反馈。比如页面每次刷新都会重新下载约 1.3GB 权重时,他提出要用 service worker 或类似办法缓存。Claude Code 去参考 Whisper Web,最后发现并使用了 CacheStorage API。

这个细节比“AI 写了很多代码”更有价值。因为真实工程里,难点常常不是写出第一版,而是发现第一版哪里不能给人用。

对技术管理者来说,行动建议也更具体:

对象可以怎么做不该怎么误判
做端侧 AI 的开发团队把 coding agent 用在模型移植、Demo 验证、部署脚手架上,缩短探索周期不要把一次 Demo 当成生产可用证明
评估代理编程的技术负责人让资深工程师定义目标、边界和验收标准,再让代理跑工程链路不要期待代理无人值守处理性能、许可、安全和兼容性责任

这类项目最适合当“探索工具”。如果团队想判断某个模型能不能进浏览器,可以先用代理做一轮移植验证。采购 GPU 服务、重写前端架构、押注某条端侧路线,都可以延后到 Demo 真的跑通之后。

换句话说,代理现在更像一台能跑得很快的工程小车。方向盘还在开发者手里。

浏览器端 AI 的边界:能跑之后,要看三件事

Willison 称自己在 Chrome、Firefox 和 Safari 中都试过这个 Demo。CacheStorage API 也能缓存约 1.3GB 的模型文件。

这对浏览器端 AI 是一个正向信号。图片修复这类能力,可以在客户端网页中完成。用户图片不必上传到服务器,这对隐私敏感场景有吸引力。

但“能跑”和“好用”之间,还有几道坎。

第一是下载体积。约 1.3GB 的首次加载,对桌面宽带用户还能接受,对移动网络和低耐心用户就很难。缓存能解决重复下载,解决不了第一次等待。

第二是设备差异。WebGPU 在主流浏览器里已经可用,但不同 GPU、驱动、内存限制会影响体验。原文只能说明作者在三大浏览器中试过,不等于各种设备都稳定。

第三是产品责任。Demo 可运行,不等于生产可交付。企业如果要放进产品,还要看模型许可、失败提示、带宽账单、低端设备降级方案,以及用户是否愿意为本地计算等待。

我更在意接下来三个变量:

  • 非标准模型转 ONNX 的成功率,能不能从“靠高手带代理试出来”变成稳定流程。
  • 浏览器缓存大模型文件,能不能形成可靠模式,而不是每个项目临时补洞。
  • coding agent 在多轮调试中,能不能继续减少资深工程师介入次数。

如果这三件事有进展,浏览器端 AI 会先落在低频、高价值、隐私敏感的功能里。比如本地图片修补、音频转写、文档解析。它们不一定要求秒开,但要求数据少出门。

这也回到开头那 1.3GB。

它既是门槛,也是提醒:浏览器 AI 的入口变低了,工程账单没有消失。Claude Code 这次证明的不是魔法,而是代理已经能帮人把一串麻烦事推进到可验收。