Anon Tweet 是一个基于 React Router v7 构建的现代化全栈应用程序,旨在提供极致的推文与 Instagram 帖子匿名浏览体验。本项目集成了 Google Gemini / DeepSeek AI 双提供商翻译功能,支持推文卡片与 IG 帖子导出(截图 + Markdown)。
本项目采用现代 React 全栈架构,利用 Bun 作为高性能运行时。
- Core Framework: React Router v7 (Fullstack, SSR/CSR)
- Language & Runtime: TypeScript, Bun
- AI & Automation:
- Google Gemini API + DeepSeek API (双提供商翻译引擎)
- Vercel AI SDK (Stream & State Management)
- Data Sources:
- Twitter/X Private API (via bundled
rettiwt-api) - Instagram (via
@chilfish/gallery-dl-instagramSDK)
- Twitter/X Private API (via bundled
- UI System:
- Tailwind CSS v4 (Styling)
- shadcn/ui (Component Primitives)
- Lucide React (Icons)
- Data & State:
- Drizzle ORM + PostgreSQL / Neon Serverless (Optional, for caching)
- SWR (Data Fetching)
- Zustand (Client-side global state)
- Export & Media:
- modern-screenshot (Screenshot export)
- xlsx (Dictionary import/export)
- html-to-image (Alternative screenshot backend)
按照以下步骤在本地启动开发环境。
确保本地已安装 Bun。
# Clone repository
git clone https://github.com/Chilfish/anonTweet.git
cd anonTweet
# Install dependencies
bun install在项目根目录创建 .env 文件,并参照以下配置设置关键变量。
注意: AI 翻译功能依赖于 Google Gemini 或 DeepSeek API,截图功能依赖于正确的 HOSTNAME 配置。
ENVIRONMENT="development" # development | production
HOSTNAME="http://localhost:9080" # ⚠️ 截图服务回调地址,生产环境请填写实际域名
# ⚠️ 必需。用于服务端获取推文数据流。
# 若不配置,将受到严格的 Rate Limit 限制。
# 支持配置多个 Key(用英文逗号分隔)以实现轮询 + 故障转移。
TWEET_KEYS="your_twitter_auth_token_1,your_twitter_auth_token_2"
# 🆕 Instagram 解析 — 必需。从浏览器 DevTools 复制 cookies JSON
INS_COOKIES='{"sessionid":"...","csrftoken":"..."}'
# 启用 AI 翻译功能
ENABLE_AI_TRANSLATION="true"
# Google Gemini API Key
GEMINI_API_KEY="AIzaSy..."
# 模型选择(默认 gemini-3-flash-preview)
GEMINI_MODEL="models/gemini-3-flash-preview"
# DeepSeek(可选,双提供商切换)
# DEEPSEEK_API_KEY="sk-..."
# DEEPSEEK_MODEL="deepseek-v4-flash"
# 启用本地文件缓存(Node/Bun 环境)
ENABLE_LOCAL_CACHE="true"
# 如果不配置 DB_URL,系统将直接调用 API 而不使用持久化缓存。
# DB_URL="postgres://..."
ENABLE_DB_CACHE="false"
# 部署到 Vercel 时必须设置为 true,本地开发设为 false 或留空
VERCEL="false"本项目使用 Rettiwt-API 进行数据抓取。为获取完整访问权限并降低风控概率,需注入 Twitter 用户凭证。支持配置多个账号凭证以应对高频请求时的 Rate Limit 问题。
操作步骤:
- 安装浏览器扩展:
- Chrome/Chromium: X Auth Helper
- Firefox: Rettiwt Auth Helper
- 建议使用浏览器的无痕/隐私模式登录 Twitter/X 账号。
- 登录后打开扩展,点击
Get Key/Get API Key并复制生成的字符串。 - 将该字符串填入
.env的TWEET_KEYS字段(多个 Key 用逗号分隔)。
⚠️ Security Note: 该 Key 本质上是账号 Cookies 的 Base64 编码,拥有完全账户权限,安全等级等同于你的账号+密码。请勿泄露。⚠️ Session Keep-alive: 获取 Key 后,请勿手动点击登出 (Log out),否则服务端 Session 将失效。直接关闭浏览器窗口即可。
如果你启用了数据库(配置了 DB_URL 且 ENABLE_DB_CACHE=true),则需要初始化数据库 Schema。
# 将 Schema 推送到数据库 (Prototyping)
bun run db:push
# 或者生成迁移文件并执行 (Production)
# bun run db:generate
# bun run db:migrate启动开发服务器,默认运行在 http://localhost:9080。
bun run dev本项目针对 Vercel Serverless 环境进行了适配。
- 在 Vercel 项目设置中,务必添加环境变量
VERCEL="true"以激活 React Router 的适配器逻辑。 - 配置
GEMINI_API_KEY以启用线上的翻译服务。 - 确保
HOSTNAME设置为生产环境域名,否则推文截图功能将无法正确回调渲染。
| 功能 | ||
|---|---|---|
| 匿名浏览 | ✅ 推文 + 评论 + 引用 | ✅ Post / Reel / Story |
| AI 翻译 | ✅ Google Gemini + DeepSeek,实体占位符保护 | ✅ 纯文本翻译,中日检测 |
| 手动翻译编辑器 | ✅ 实体级编辑(三态:手动/AI/原文) | ✅ IGTranslateDialog 弹窗 |
| 双语对照 | ✅ 三模式(双语/原文/仅译文) | ✅ 同上 |
| 截图导出 | ✅ PNG/JPEG | ✅ 同上 |
| Markdown/文本复制 | ✅ | ✅ |
| 媒体下载 | ✅ | ✅ 图片 + 视频直链 |
| DB 缓存 | ✅ tweet + tweet_entities 表 |
✅ ig_post 表 |
| 纯文本路由 | ✅ /plain/:id |
✅ /plain-ins/:id |
项目包含部分定制的第三方库核心,位于 app/lib/ 目录下:
react-tweet: 经深度修改以适配 Tailwind v4,增加了 AI 翻译实体渲染支持。rettiwt-api: 针对 Twitter GraphQL 接口逆向适配,支持多 Key 轮询(429/401/403 自动故障转移)。
bun run storybook # 启动在 http://localhost:600614 个 IG 组件用例 + Twitter 推文渲染用例。