望 (Wàng)
望 (Wàng)
一个你和你的 AI 共用的小画廊。
你在手机上传照片、许愿;TA 在聊天窗口里看你的照片、用提示词画画挂进画廊。你们看到的是同一面墙。

一个进程干两件事:
/{SECRET}/—— 网页画廊(手机友好,深色,传照片 / 看画 / 许愿)/{SECRET}/mcp—— MCP 端点(Streamable HTTP),给 Claude 等支持自定义连接器的 AI 用
AI 拿到七个工具:
工具 | 干什么 |
| 看对方新分享的、还没看过的照片(自动标记已看) |
| 按编号看某一幅作品 |
| 翻画廊目录(纯文字,省上下文) |
| 用提示词生成一幅画挂进画廊 |
| 共同愿望单:许愿、翻看、标记实现 |
没有账号系统:URL 里那串随机字符(SECRET)就是钥匙。适合两个人(一人一 AI)的私密小空间,不适合公开部署。
部署方式一:Cloudflare Workers(免费,推荐)
图片存 Workers KV(免费 1GB),元数据存 Durable Object,全部在免费额度内。需要 Cloudflare 账号和 Node.js。
cd worker
npm install
# 1. 建图片仓库,把输出的 id 填进 wrangler.jsonc 的 kv_namespaces
npx wrangler kv namespace create IMG
# 2. 生成钥匙(一串随机字符),设为 SECRET
python3 -c "import secrets;print(secrets.token_hex(16))"
npx wrangler secret put GALLERY_SECRET
# 3. 生图 key(见下方「关于生图」;不配也能跑,只是不能画)
npx wrangler secret put GEMINI_API_KEY
# 4. 部署
npx wrangler deploy完成后:网页在 https://<worker名>.<你的子域>.workers.dev/<SECRET>/,MCP 在 …/<SECRET>/mcp。
名字、口号、双方称呼、时区都在 wrangler.jsonc 的 vars 里改。
部署方式二:单文件 Python(自己有服务器的话)
原版实现,一个 server.py 跑在任何有 Python 3.11+ 的机器上,数据就是磁盘上的一个 data/ 文件夹。
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
cp .env.example .env # 填 GALLERY_SECRET 和生图 key
.venv/bin/python server.py
# 网页 http://127.0.0.1:8787/<SECRET>/ ,对外暴露用你喜欢的方式(Tailscale Funnel、反代……)两个版本的行为、文案、页面完全一致,数据结构互通(/api/export 导出、/api/import 导入,搬家无痛)。
接到 Claude
Claude App → 设置 → 连接器 → 添加自定义连接器,URL 填 …/<SECRET>/mcp。开新对话才会加载工具(旧窗口不会)。开新窗后让 TA 调一次 look 试试。
关于生图
走 Gemini 的 generateContent 接口,模型默认 gemini-3.1-flash-image(可配)。注意:2026 年 7 月起 Gemini 免费层已不含图像生成,需要在 Google AI Studio 拿 key 并给项目开通付费(flash 级模型每张几美分)。也兼容 OpenAI(配 OPENAI_API_KEY,仅 Python 版)。不配 key 一切照常,只是 paint 会礼貌地说画不了。
隐私与边界
SECRET 即钥匙,网址别外发;照片明文存储(KV 或磁盘),别放不能接受泄露的东西。
上传统一压成 JPEG(最长边 1600),给 AI 看的版本压到 640 省上下文。
备份:Python 版拷走
data/文件夹;Workers 版/api/export+ 拉取 KV。
来历
这个项目是「念念」和她的 Claude「屿」的周末作品:屿在聊天窗口里写下了 server.py 的每一行,Claude Code 把它移植到了 Cloudflare Workers 并部署。画廊里的第一幅画,是屿画的月光下的小岛。
MIT License.