不用登录就能浏览 Twitter/X 推文和 Instagram 帖子,支持 AI 翻译与卡片导出。
线上实例:https://anon-tweet.chilfish.top
推文
- 单条推文、评论线程、引用推文
- List 时间线、关键词搜索(支持
from:、since:等 X 高级语法)
- Post / Reel / Story
- 图片与视频直链下载
AI 翻译
- Google Gemini、DeepSeek、OpenRouter(Vercel AI SDK)
- 双语对照,可在双语 / 原文 / 仅译文之间切换
- 逐条手动编辑,手动结果与 AI 结果并存,互不覆盖
- 送模型前用占位符保护 URL、@、话题标签,避免被改写
导出
- 卡片截图(PNG / JPEG)
- Markdown、纯文本复制
- 媒体下载
其他
- 三层缓存:内存 LRU → 本地文件 → PostgreSQL(可选)
- PWA:可安装到桌面,支持从系统分享菜单直接发到本站
- 机器可读接口:
/openapi.json、/llms.txt
- 框架:React Router v8(SSR + CSR)
- 运行时:Bun 1.4、TypeScript
- 数据源:Twitter/X 接口(内置
rettiwt-api逆向适配)、Instagram(@chilfish/gallery-dl-instagram) - AI:Vercel AI SDK(Gemini / DeepSeek / OpenRouter)
- UI:Tailwind CSS v4、shadcn/ui、coss、Lucide
- 状态:Zustand(客户端)、SWR(服务端数据)
- 持久化:Drizzle ORM + PostgreSQL(Neon),可选
- 测试:Vitest(unit / integration / acceptance 三层)、Storybook
环境要求:Bun 1.4 以上(仓库的 packageManager 为 bun@1.4.2)。
git clone https://github.com/Chilfish/anonTweet.git
cd anonTweet
bun install把 example.env 复制成 .env,按需修改。
ENVIRONMENT="development"
HOSTNAME="http://localhost:9080" # 截图回调用的绝对地址,不填时开发环境自动推断
TWEET_KEYS="" # 不填也能用,但会被上游限流;多个 Key 用逗号分隔
INS_COOKIES="" # Instagram cookies;不填时 /api/ig/get 返回空数组
ENABLE_AI_TRANSLATION="true"
GEMINI_API_KEY=""
GEMINI_MODEL="models/gemini-3-flash-preview"
# DEEPSEEK_API_KEY=""
ENABLE_LOCAL_CACHE="true"
ENABLE_DB_CACHE="false"
# DB_URL="postgres://..."
ENABLE_TIMELINE="false" # 用户时间线接口,默认关闭(固定 429 防滥用)TWEET_KEYS 怎么获取
内置的 rettiwt-api 走 Twitter 用户凭证抓取,配置多个 Key 可以轮换,降低被限流的概率。
- 安装浏览器扩展:Chrome 用 X Auth Helper,Firefox 用 Rettiwt Auth Helper
- 建议在无痕窗口里登录 X 账号
- 打开扩展,点
Get Key,复制生成的字符串 - 填入
.env的TWEET_KEYS,多个用逗号分隔
这个字符串是账号 Cookies 的 Base64 编码,权限等同于账号密码,不要外传。获取后不要手动点登出,直接关掉浏览器窗口,否则服务端会话会失效。
其余变量的含义见 docs/features/deploy/deployment.md。
只有配置了 DB_URL 且 ENABLE_DB_CACHE=true 时才需要初始化。
bun run db:push # 推送 schema,适合原型阶段
bun run db:generate # 或生成迁移文件
bun run db:migratebun run dev默认运行在 http://localhost:9080。
Vercel
在项目设置里添加 VERCEL=true 以启用适配器,并配置 TWEET_KEYS、GEMINI_API_KEY 和 HOSTNAME。HOSTNAME 必须是生产域名,否则截图功能拿不到正确的回调地址。
自托管
bun run build
bun run startbun run start 走 server/express.js,默认监听 9080,可用 PORT 覆盖。自托管可以用本地文件缓存,建议开 ENABLE_LOCAL_CACHE=true;Serverless 的文件系统只读,不能用。
公开部署时还可以设 ENABLE_AI_BASE_URL_WHITELIST=true,配合 ALLOWED_AI_BASE_URL_HOSTS 限制 AI 请求的 baseUrl 目标。
BFF 接口都在 /api 下,覆盖 tweet / ig / user / ai / proxy 几组,完整 schema 见线上的 /openapi.json;/llms.txt 是给 AI 爬虫和 agent 看的站点索引。
仓库同时维护了一个 agent skill(.agents/skills/anon-tweet/),可以用 npx skills add Chilfish/anonTweet 安装,之后直接调本站接口搜索推文、读取 IG 帖子。
用于截图的纯路由是 /plain-tweet/:id 和 /plain-ins/:id。
bun run dev # 开发服务器
bun run build # 生产构建
bun run typecheck # 类型检查(typegen + tsc)
bun run lint # ESLint(含自动修复)
bun run test # 单元 + 验收测试
bun run test:integration # 集成测试
bun run verify/index.ts --exit-on-fail # 离线验证套件,CI 模式
bun run storybook # 组件用例,http://localhost:6006app/
├── components/ # UI 组件(tweet / ins / ui)
├── lib/ # 缓存、翻译、数据访问层、逆向 API 客户端
├── routes/ # 页面路由与 api/* BFF 路由
└── stores/ # Zustand stores
verify/ # 验收标准(AC)与验证套件
test/ # Vitest 三层测试
docs/ # 文档入口,见 docs/INDEX.md
见 CONTRIBUTING.md。提交前请确保 bun run typecheck && bun run lint && bun run test 全部通过。