我的作品 独立开发分享:基于 TanStack Start + Cloudflare 全家桶撸了一个 4 秒极速 AI 生图工具 NanoScene AI

xiaokeai · July 08, 2026 · 17 hits

各位 Solo 圈的朋友们好

最近把做的一个小产品 NanoScene AI 搞上线了,这是一个主打极速、低算力成本的 AI 图像生成与编辑的 Web App。因为是自己独立开发的第一步,想在这里真诚地和大家分享一下我的技术方案、遇到的坑以及开发初衷,顺便希望能收获大家的一些真实意见。


一、 为什么想做这个产品?

目前市面上的主流生图工具(比如 Midjourney,或者某些大厂的 SD 托管服务),普遍面临两个痛点:

  1. 生成延迟长:生一张图往往要等 20s 到几十秒甚至更长,在做 UI Mockup 或者快速脑暴视觉时,频繁的等待非常容易打断工作流。
  2. 算力成本偏贵:对于非重度用户来说,每个月高昂的订阅费有些浪费。

后来我注意到了 Nano Banana 2 Lite 模型。虽然它是一个 distilled(蒸馏)过的轻量级模型,但生图效率极高,单图推理成本折合下来很低。于是我想,为什么不利用这个引擎,做一个极速、低成本,且在浏览器里开箱即用的生图工作流呢?


二、 技术栈与架构分享

为了让整套服务做到零硬件维护成本,且在冷启动阶段几乎不产生服务器开销,我采用了以下全 Serverless 架构:

  • 前端 & 路由框架:TanStack Start (V3)。这是我第一次在生产环境完整体验 TanStack Start,它的 Server Fn (服务端函数) 在处理数据请求时极度顺手,结合 TanStack Query 使得前端状态同步非常舒服。
  • 样式与 UI:Tailwind CSS 4 + shadcn/ui。Tailwind CSS 4 的配置比老版本精简了许多,对整体包体积优化也有帮助。
  • 后端 & 基础设施:Nitro 框架部署在 Cloudflare Workers。
  • 数据库:Cloudflare D1 (SQLite) 数据库,用来存放用户配置、积分和订单数据。
  • 国际化:Paraglide JS。对于独立开发出海来说,多语言几乎是标配。Paraglide 在 Nitro/TanStack Start 的路由重写中表现优秀,无缝适配了多语言路径。

因为服务器开销基本就是 Cloudflare 的免费额度或低额计费,所以我们有底气给所有注册用户每天赠送免费额度,供大家随便折腾。


三、 独立开发中踩到的坑

在部署到 Cloudflare Workers 的过程中,有几个细节让我折腾了不少时间,分享给准备走类似技术路线的朋友:

  1. 敏感 API 密钥的安全性: 起初我打算直接将第三方 AI 接口的 Key 堆在 .env 或 Workers 的环境变量中。但这样不方便在运行时灵活切换和控制。后来我们重新设计了流程:把 API 密匙加密存储在 D1 数据库中。读取时,通过一个统一的 getAllConfigs() 在服务端读取,由解密 Key(存放在 Workers 环境变量中保护)实时解密,且有内存缓存。这个设计虽然多走了一步,但极大地提升了 SaaS 模板后续变现和多接口动态管理的灵活性。
  2. i18n 路由匹配问题: 由于使用了 Paraglide 编译多语言,非默认语言(如中文)会带有 /zh 前缀。这在配合 Nitro 服务端 API 路由时,需要仔细编写重写规则,否则会导致 API 调用 404。建议使用 locale-free 的路径进行内联导航,让路由库自动补全前缀。

四、 目前的功能与下一步计划

目前 NanoScene AI 已经实现了:

  1. 极速生图:平均生成时间在 4 秒左右。
  2. 角色一致性 (Character Consistency):允许在不同 prompt 里复用相同角色风格。
  3. K-level Upscaler:把 1K 的低分辨率快速生成重建为 4K/8K 生产级画面。
  4. 一键背景移除

下一步规划: 目前在尝试做基于轻量模型的视频生成能力,如果大家有兴趣,我很乐意在后续帖子中继续分享视频 pipeline 在 Cloudflare Workers 上的踩坑体验。


五、 期待大家的反馈

产品刚上线,肯定有很多不完美的地方(尤其是移动端适配和生图参数的调节)。非常期待社区各位大佬的板砖:

  • 这个 4 秒的生图速度,相比你现在用的工具有优势吗?
  • 对于这种偏向独立开发者/设计师的 Placeholder 生成,你觉得最缺的刚需功能是什么?

再次感谢大家能读到这里!

No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.