[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-viperrcrypto--Siftly":3,"tool-viperrcrypto--Siftly":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",140436,2,"2026-04-05T23:32:43",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":79,"owner_email":79,"owner_twitter":79,"owner_website":79,"owner_url":80,"languages":81,"stars":102,"forks":103,"last_commit_at":104,"license":105,"difficulty_score":23,"env_os":106,"env_gpu":107,"env_ram":108,"env_deps":109,"category_tags":119,"github_topics":120,"view_count":23,"oss_zip_url":79,"oss_zip_packed_at":79,"status":16,"created_at":131,"updated_at":132,"faqs":133,"releases":162},3455,"viperrcrypto\u002FSiftly","Siftly","Local Twitter\u002FX bookmark organizer with AI categorization and mindmap visualization","Siftly 是一款完全本地运行的 Twitter\u002FX 书签管理工具，旨在将用户零散收藏的推文转化为可搜索、分类清晰且可视化的个人知识库。它解决了社交媒体书签难以检索、缺乏组织以及依赖云端服务导致隐私泄露的痛点，让用户无需安装浏览器插件或支付订阅费，即可在本地高效管理海量信息。\n\n这款工具特别适合注重数据隐私的研究人员、内容创作者、开发者以及希望构建第二大脑的普通用户。其核心亮点在于内置的四阶段 AI 处理流水线：首先自动提取推文中的实体（如标签、链接），接着利用视觉模型分析图片与视频内容生成详细标签，随后进行语义标记以支持自然语言搜索（例如查找“关于加密货币暴跌的搞笑梗图”），最后智能归类并生成交互式思维导图。\n\nSiftly 基于 Next.js 和 SQLite 构建，部署简单，仅需一条命令即可启动。它巧妙兼容 Claude Code CLI，若用户已登录该环境，可实现零配置自动调用 AI 能力，否则也支持手动填入 API Key。所有数据处理均在本地完成，仅必要的 AI 推理请求会发送至配置的服务端，确保了数据的私密性与安全性。","\u003Cdiv align=\"center\">\n  \u003Cimg src=\"public\u002Flogo.svg\" alt=\"Siftly\" width=\"80\" height=\"80\" \u002F>\n\n  \u003Ch1>Siftly\u003C\u002Fh1>\n\n  \u003Cp>\u003Cstrong>Self-hosted Twitter\u002FX bookmark manager with AI-powered organization\u003C\u002Fstrong>\u003C\u002Fp>\n\n  \u003Cp>Import · Analyze · Categorize · Search · Explore\u003C\u002Fp>\n\n  \u003Cp>\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNext.js-16-black?style=flat-square&logo=next.js\" alt=\"Next.js 16\" \u002F>\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-5-blue?style=flat-square&logo=typescript\" alt=\"TypeScript\" \u002F>\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSQLite-local-green?style=flat-square&logo=sqlite\" alt=\"SQLite\" \u002F>\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTailwind-v4-38bdf8?style=flat-square&logo=tailwindcss\" alt=\"Tailwind CSS\" \u002F>\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-yellow?style=flat-square\" alt=\"MIT License\" \u002F>\n  \u003C\u002Fp>\n\u003C\u002Fdiv>\n\n---\n\n## What is Siftly?\n\nSiftly turns your Twitter\u002FX bookmarks into a **searchable, categorized, visual knowledge base** — running entirely on your machine. No cloud, no subscriptions, no browser extensions required. Everything stays local except the AI API calls you configure.\n\nIt runs a **4-stage AI pipeline** on your bookmarks:\n\n```\n📥 Import (built-in bookmarklet or console script — no extensions needed)\n    ↓\n🏷️  Entity Extraction   — mines hashtags, URLs, mentions, and 100+ known tools from raw tweet data (free, zero API calls)\n    ↓\n👁️  Vision Analysis      — reads text, objects, and context from every image\u002FGIF\u002Fvideo thumbnail (30–40 visual tags per image)\n    ↓\n🧠 Semantic Tagging     — generates 25–35 searchable tags per bookmark for AI-powered search\n    ↓\n📂 Categorization       — assigns each bookmark to 1–3 categories with confidence scores\n```\n\nAfter the pipeline runs, you get:\n- **AI search** — find bookmarks by meaning, not just keywords (*\"funny meme about crypto crashing\"*)\n- **Interactive mindmap** — explore your entire bookmark graph visually\n- **Filtered browsing** — grid or list view, filter by category, media type, and date\n- **Export tools** — download media, export as CSV \u002F JSON \u002F ZIP\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- [Node.js 18+](https:\u002F\u002Fnodejs.org)\n- npm (comes with Node.js)\n\n**That's it.** If you have [Claude Code CLI](https:\u002F\u002Fclaude.ai\u002Fcode) installed and signed in, AI features work automatically — no API key needed.\n\n### Option A — One command (recommended)\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fviperrcrypto\u002FSiftly.git\ncd Siftly\n.\u002Fstart.sh\n```\n\n`start.sh` installs dependencies, sets up the database, checks for Claude CLI auth, and opens [http:\u002F\u002Flocalhost:3000](http:\u002F\u002Flocalhost:3000) automatically.\n\n### Option B — Using Claude Code\n\nIf you're using [Claude Code](https:\u002F\u002Fclaude.ai\u002Fcode) to set up the project, it will read `CLAUDE.md` and know exactly how to get started. Just open the project folder:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fviperrcrypto\u002FSiftly.git\nclaude Siftly\u002F\n```\n\nClaude Code will handle setup and start the app using your existing Claude subscription — no extra configuration needed.\n\n### Option C — Manual setup\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fviperrcrypto\u002FSiftly.git\ncd Siftly\nnpm install\nnpx prisma generate\nnpx prisma migrate dev --name init\nnpx next dev\n```\n\nOpen [http:\u002F\u002Flocalhost:3000](http:\u002F\u002Flocalhost:3000)\n\n---\n\n## AI Authentication\n\nSiftly automatically detects the best available auth method — no configuration needed in the most common case.\n\n### Priority order\n\n| # | Method | How |\n|---|--------|-----|\n| 1 | **Claude Code CLI** *(zero config)* | Already signed in? Siftly reads your session from the macOS keychain automatically |\n| 2 | **API key in Settings** | Open Settings in the app and paste your key |\n| 3 | **`ANTHROPIC_API_KEY` env var** | Set in `.env.local` or your shell environment |\n| 4 | **Local proxy** | Set `ANTHROPIC_BASE_URL` to any Anthropic-compatible endpoint |\n\n### Claude Code CLI (no API key needed)\n\nIf you use [Claude Code](https:\u002F\u002Fclaude.ai\u002Fcode), you're already signed in. Siftly detects your session from the macOS keychain and uses your Claude subscription (Free\u002FPro\u002FMax) automatically.\n\nThe Settings page shows a green **\"Claude CLI detected — no API key needed\"** badge with your subscription tier when this is active.\n\n> **Note:** This works on macOS. On Linux\u002FWindows, add an API key in Settings instead.\n\n### Getting an API key (if needed)\n\n1. Go to [console.anthropic.com](https:\u002F\u002Fconsole.anthropic.com)\n2. Create a new API key\n3. Open Siftly → Settings → paste it in\n\nNew accounts include $5 free credit — enough for thousands of bookmarks at Haiku pricing (~$0.00025\u002Fbookmark).\n\n---\n\n## Importing Your Bookmarks\n\nSiftly has **built-in import tools** — no browser extensions required. Go to the **Import** page and choose either method:\n\n### Method A — Bookmarklet *(Recommended)*\n\n1. Go to **Import** in the Siftly sidebar\n2. Drag the **\"Export X Bookmarks\"** link to your browser's bookmark bar\n   *(or right-click the bookmark bar → Add Bookmark → paste the URL)*\n3. Go to [x.com\u002Fi\u002Fbookmarks](https:\u002F\u002Fx.com\u002Fi\u002Fbookmarks) while logged in to X\n4. Click **\"Export X Bookmarks\"** in your bookmark bar — a purple button appears on the page\n5. Click **\"▶ Auto-scroll\"** — the tool scrolls through and captures all your bookmarks automatically\n6. When complete, click the purple **\"Export N bookmarks\"** button — `bookmarks.json` downloads\n7. Back in Siftly → **Import** → drop or upload the file\n\n### Method B — Browser Console Script\n\n1. Go to [x.com\u002Fi\u002Fbookmarks](https:\u002F\u002Fx.com\u002Fi\u002Fbookmarks) while logged in to X\n2. Open DevTools: press `F12` (Windows\u002FLinux) or `⌘⌥J` (Mac), then go to the **Console** tab\n3. Copy the console script from the Siftly Import page, paste it into the console, and press Enter\n4. Click **\"▶ Auto-scroll\"** and wait for all bookmarks to be captured\n5. Click the export button — `bookmarks.json` downloads automatically\n6. Back in Siftly → **Import** → upload the file\n\n### Re-importing\n\nRe-import anytime — Siftly automatically skips duplicates and only adds new bookmarks.\n\n---\n\n## AI Categorization\n\n**Categorization starts automatically as soon as you import.** You can also trigger it manually from:\n\n- The **Import** page (after upload)\n- The **Mindmap** page (when bookmarks are uncategorized)\n- The **Categorize** page in the sidebar\n\n### The 4-Stage Pipeline\n\n| Stage | What it does |\n|-------|-------------|\n| **Entity Extraction** | Mines hashtags, URLs, @mentions, and 100+ known tool\u002Fproduct names from stored tweet JSON — free, zero API calls |\n| **Vision Analysis** | Analyzes every image, GIF, and video thumbnail — OCR text, objects, scene, mood, meme templates, 30–40 visual tags per image |\n| **Semantic Tagging** | Generates 25–35 precise search tags per bookmark by combining tweet text + image context. Also extracts sentiment, people, and company names. |\n| **Categorization** | Assigns 1–3 categories per bookmark with confidence scores using all enriched data |\n\nThe pipeline is **incremental** — if interrupted, it picks up where it left off. Use **\"Re-run everything (force all)\"** to re-analyze bookmarks that were already processed.\n\n---\n\n## Features\n\n### 🔍 AI Search\n\nNatural language queries across all bookmark data:\n\n- *\"funny meme about crypto crashing\"*\n- *\"react hooks tutorial\"*\n- *\"bitcoin price chart\"*\n- *\"best AI coding tools\"*\n\nSearches tweet text, image OCR, visual tags, semantic tags, and categories simultaneously using a full-text search index (FTS5) + Claude semantic reranking. Results are ranked by relevance with AI-generated explanations for each match.\n\n### 🗺️ Mindmap\n\nInteractive force-directed graph showing all bookmarks organized by category:\n\n- Expand\u002Fcollapse any category to reveal its bookmarks\n- Click a bookmark node to open the original tweet on X\n- Color-coded legend by category\n- If bookmarks aren't categorized yet, an inline **AI Categorize** button starts the pipeline without leaving the page\n\n### 📚 Browse & Filter\n\n- **Grid view** (masonry layout) or **List view**\n- Filter by category, media type (photo \u002F video), or search text\n- Sort by newest or oldest\n- Pagination with 24 items per page\n- Active filter chips — removable individually or all at once\n- Hover any card to download media or jump to the original tweet\n\n### ⚙️ Categories\n\n8 default categories pre-seeded with AI-readable descriptions:\n\n| Category | Color |\n|----------|-------|\n| Funny Memes | Amber |\n| AI Resources | Violet |\n| Dev Tools | Cyan |\n| Design | Pink |\n| Finance & Crypto | Green |\n| Productivity | Orange |\n| News | Indigo |\n| General | Slate |\n\nCreate custom categories with a name, color, and optional description. The description is passed directly to the AI during categorization — the more specific, the more accurate the results.\n\n### 📤 Export\n\n- **CSV** — spreadsheet-compatible with all fields\n- **JSON** — full structured data export\n- **ZIP** — exports a category's bookmarks + all media files with a `manifest.csv`\n\n### ⌨️ Command Palette\n\nPress `Cmd+K` (Mac) or `Ctrl+K` (Windows\u002FLinux) to search across all bookmarks from anywhere in the app.\n\n---\n\n## Configuration\n\nAll settings are manageable in the **Settings** page at `\u002Fsettings` or via environment variables:\n\n| Setting | Env Var | Description |\n|---------|---------|-------------|\n| Anthropic API Key | `ANTHROPIC_API_KEY` | Optional if Claude CLI is signed in — otherwise required for AI features |\n| API Base URL | `ANTHROPIC_BASE_URL` | Custom endpoint for proxies or local Anthropic-compatible models |\n| AI Model | Settings page only | Haiku 4.5 (default, fastest\u002Fcheapest), Sonnet 4.6, Opus 4.6 |\n| OpenAI Key | Settings page only | Alternative provider if no Anthropic key is set |\n| Database | `DATABASE_URL` | SQLite file path (default: `file:.\u002Fprisma\u002Fdev.db`) |\n\n### Custom API Endpoint\n\nPoint Siftly at any Anthropic-compatible server:\n\n```env\nANTHROPIC_BASE_URL=http:\u002F\u002Flocalhost:8080\n```\n\n---\n\n## Architecture\n\n```\nsiftly\u002F\n├── app\u002F\n│   ├── api\u002F\n│   │   ├── analyze\u002Fimages\u002F   # Batch image vision analysis (GET progress, POST run)\n│   │   ├── bookmarks\u002F        # List, filter, paginate, delete\n│   │   │   └── [id]\u002Fcategories\u002F # Per-bookmark category management\n│   │   ├── categories\u002F       # Category CRUD\n│   │   │   └── [slug]\u002F       # Individual category operations\n│   │   ├── categorize\u002F       # 4-stage AI pipeline (start, status, stop)\n│   │   ├── export\u002F           # CSV, JSON, ZIP export\n│   │   ├── import\u002F           # JSON file import with dedup + auto-pipeline trigger\n│   │   │   ├── bookmarklet\u002F  # Bookmarklet-specific import endpoint\n│   │   │   └── twitter\u002F      # Twitter-specific import endpoint\n│   │   ├── link-preview\u002F     # Server-side OG metadata scraper\n│   │   ├── media\u002F            # Media proxy\u002Fdownload endpoint\n│   │   ├── mindmap\u002F          # Graph nodes + edges for visualization\n│   │   ├── search\u002Fai\u002F        # Natural language semantic search (FTS5 + Claude)\n│   │   ├── settings\u002F         # API key + model config\n│   │   │   ├── cli-status\u002F   # Claude CLI auth detection endpoint\n│   │   │   └── test\u002F         # API key validation endpoint\n│   │   └── stats\u002F            # Dashboard stats\n│   ├── ai-search\u002F            # AI search page\n│   ├── bookmarks\u002F            # Browse, filter, paginate\n│   ├── categories\u002F           # Category management\n│   │   └── [slug]\u002F           # Category detail page\n│   ├── categorize\u002F           # Pipeline monitor with live progress\n│   ├── import\u002F               # 3-step import flow (instructions → upload → categorize)\n│   ├── mindmap\u002F              # Interactive graph\n│   ├── settings\u002F             # Configuration\n│   └── page.tsx              # Dashboard\n│\n├── components\u002F\n│   ├── mindmap\u002F              # Mindmap canvas, nodes, edges\n│   │   ├── mindmap-canvas.tsx\n│   │   ├── category-node.tsx\n│   │   ├── tweet-node.tsx\n│   │   ├── root-node.tsx\n│   │   ├── chain-edge.tsx\n│   │   └── mindmap-context.ts\n│   ├── command-palette.tsx   # Cmd+K global search\n│   ├── nav.tsx               # Sidebar navigation\n│   └── theme-toggle.tsx      # Light\u002Fdark mode\n│\n├── lib\u002F\n│   ├── categorizer.ts        # AI categorization logic + default categories\n│   ├── claude-cli-auth.ts    # Claude CLI OAuth session detection (macOS keychain)\n│   ├── vision-analyzer.ts    # Image analysis + batch semantic tagging\n│   ├── image-context.ts      # Shared image context builder\n│   ├── fts.ts                # SQLite FTS5 full-text search index\n│   ├── rawjson-extractor.ts  # Entity extraction from raw tweet JSON\n│   ├── parser.ts             # Multi-format JSON parser\n│   ├── exporter.ts           # CSV, JSON, ZIP export\n│   ├── types.ts              # Shared TypeScript types\n│   └── db.ts                 # Prisma client singleton\n│\n├── prisma\u002F\n│   └── schema.prisma         # SQLite schema\n│\n├── start.sh                  # One-command launcher (install + DB setup + open browser)\n└── CLAUDE.md                 # Instructions for Claude Code AI assistant\n```\n\n### Database Schema\n\n```\nBookmark          — tweet text, author, date, raw JSON, semantic tags, enrichment metadata\n  ├── MediaItem   — images \u002F videos \u002F GIFs with AI-generated image tags\n  └── BookmarkCategory — category assignments with confidence scores (0–1)\n\nCategory          — name, slug, hex color, AI-readable description\nSetting           — key-value store (API keys, model preferences)\nImportJob         — tracks import file status and progress\n```\n\n### Prisma + SQLite + FTS5\n\nSiftly uses Prisma migrations for relational schema changes.\nIn development, run `npx prisma migrate dev --name \u003Cchange-name>` when schema changes.\nFor runtime\u002Fprod-style startup, apply committed migrations with `npx prisma migrate deploy`.\nFTS5 (`bookmark_fts`) is managed at runtime in [`lib\u002Ffts.ts`](.\u002Flib\u002Ffts.ts), not in `schema.prisma`.\nThis is intentional for now because Prisma does not model SQLite virtual table definitions directly.\n\nFor Prisma command and workflow details, see:\n- https:\u002F\u002Fwww.prisma.io\u002Fdocs\u002Form\u002Fprisma-migrate\u002Fworkflows\u002Fdevelopment-and-production\n- https:\u002F\u002Fwww.prisma.io\u002Fdocs\u002Form\u002Fprisma-client\u002Fsetup-and-configuration\u002Fgenerating-prisma-client\n\n---\n\n## Tech Stack\n\n| Technology | Version | Role |\n|------------|---------|------|\n| [Next.js](https:\u002F\u002Fnextjs.org) | 16 | Full-stack framework (App Router) |\n| [TypeScript](https:\u002F\u002Fwww.typescriptlang.org) | 5 | Type safety throughout |\n| [Prisma](https:\u002F\u002Fwww.prisma.io) | 7 | ORM + migrations |\n| [SQLite](https:\u002F\u002Fsqlite.org) | — | Local database — zero setup, includes FTS5 |\n| [Tailwind CSS](https:\u002F\u002Ftailwindcss.com) | v4 | Styling |\n| [Anthropic SDK](https:\u002F\u002Fdocs.anthropic.com) | — | Vision, semantic tagging, categorization, search |\n| [@xyflow\u002Freact](https:\u002F\u002Fxyflow.com) | 12 | Interactive mindmap graph |\n| [Framer Motion](https:\u002F\u002Fwww.framer.com\u002Fmotion\u002F) | 12 | Animations |\n| [Radix UI](https:\u002F\u002Fwww.radix-ui.com) | — | Accessible UI primitives |\n| [JSZip](https:\u002F\u002Fstuk.github.io\u002Fjszip\u002F) | — | Category ZIP export |\n| [Lucide React](https:\u002F\u002Flucide.dev) | — | Icons |\n\n---\n\n## Development\n\n```bash\n# One-command start (installs, sets up DB, opens browser)\n.\u002Fstart.sh\n\n# Or manually:\nnpm install\nnpx prisma generate\nnpx prisma migrate dev --name init\nnpx next dev\n\n# Type check\nnpx tsc --noEmit\n\n# Open database GUI\nnpx prisma studio\n\n# Build for production\nnpm run build && npm start\n```\n\n### Customizing Categories\n\nEdit `DEFAULT_CATEGORIES` in `lib\u002Fcategorizer.ts`. Each entry needs:\n\n```ts\n{\n  name: 'My Category',       \u002F\u002F Display name\n  slug: 'my-category',       \u002F\u002F URL-safe identifier (must be unique)\n  color: '#6366f1',          \u002F\u002F Hex color shown in UI\n  description: '...',        \u002F\u002F Natural language description — used verbatim in AI prompts\n}\n```\n\nThe `description` field directly shapes how the AI classifies bookmarks. Be specific.\n\n### Adding Known Tools\n\nAdd domain strings to `KNOWN_TOOL_DOMAINS` in `lib\u002Frawjson-extractor.ts` to have the entity extractor automatically recognize links to those tools in tweet data.\n\n---\n\n## Privacy\n\n- All data is stored **locally** in a SQLite file on your machine\n- The only external calls are to the AI provider you configure (tweet text + image data)\n- No telemetry, no tracking, no accounts required\n- Your bookmarks never touch any third-party server except your configured AI endpoint\n\n---\n\n## Support Development\n\nIf Siftly saves you time, consider leaving a tip ☕\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n\n---\n\n\u003Cdiv align=\"center\">\n  \u003Cp>Built by \u003Ca href=\"https:\u002F\u002Fx.com\u002Fviperr\">@viperr\u003C\u002Fa> · Self-hosted · No extensions · No cloud\u003C\u002Fp>\n\u003C\u002Fdiv>\n","\u003Cdiv align=\"center\">\n  \u003Cimg src=\"public\u002Flogo.svg\" alt=\"Siftly\" width=\"80\" height=\"80\" \u002F>\n\n  \u003Ch1>Siftly\u003C\u002Fh1>\n\n  \u003Cp>\u003Cstrong>自托管的 Twitter\u002FX 书签管理器，配备 AI 驱动的整理功能\u003C\u002Fstrong>\u003C\u002Fp>\n\n  \u003Cp>导入 · 分析 · 分类 · 搜索 · 探索\u003C\u002Fp>\n\n  \u003Cp>\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNext.js-16-black?style=flat-square&logo=next.js\" alt=\"Next.js 16\" \u002F>\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-5-blue?style=flat-square&logo=typescript\" alt=\"TypeScript\" \u002F>\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSQLite-local-green?style=flat-square&logo=sqlite\" alt=\"SQLite\" \u002F>\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTailwind-v4-38bdf8?style=flat-square&logo=tailwindcss\" alt=\"Tailwind CSS\" \u002F>\n    \u003Cimg src=\"https6:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-yellow?style=flat-square\" alt=\"MIT License\" \u002F>\n  \u003C\u002Fp>\n\u003C\u002Fdiv>\n\n---\n\n## Siftly 是什么？\n\nSiftly 可以将你的 Twitter\u002FX 书签转化为一个 **可搜索、分类、可视化的知识库** —— 完全在你的本地机器上运行。无需云端、无需订阅、也不需要浏览器扩展。除了你配置的 AI API 调用之外，所有数据都保留在本地。\n\n它会在你的书签上运行一个 **四阶段的 AI 流程**：\n\n```\n📥 导入（内置书签小工具或控制台脚本——无需扩展）\n    ↓\n🏷️ 实体提取   — 从原始推文数据中挖掘标签、URL、提及以及 100 多种已知工具（免费，零 API 调用）\n    ↓\n👁️ 视觉分析      — 读取每张图片\u002FGIF\u002F视频缩略图中的文本、物体和上下文信息（每张图片约 30–40 个视觉标签）\n    ↓\n🧠 语义标签     — 为每个书签生成 25–35 个可搜索标签，支持 AI 驱动的搜索\n    ↓\n📂 分类       — 为每个书签分配 1–3 个类别，并附带置信度分数\n```\n\n流程完成后，你将获得：\n- **AI 搜索** — 不仅能按关键词，还能按语义查找书签（*\"关于加密货币崩盘的搞笑表情包\"*）\n- **交互式思维导图** — 可视化地探索你的整个书签图谱\n- **筛选浏览** — 网格或列表视图，可按类别、媒体类型和日期进行筛选\n- **导出工具** — 下载媒体文件，或导出为 CSV \u002F JSON \u002F ZIP 格式\n\n---\n\n## 快速开始\n\n### 前提条件\n\n- [Node.js 18+](https:\u002F\u002Fnodejs.org)\n- npm（随 Node.js 自带）\n\n**就这么简单。** 如果你已经安装并登录了 [Claude Code CLI](https:\u002F\u002Fclaude.ai\u002Fcode)，AI 功能将自动生效——无需 API 密钥。\n\n### 选项 A — 一条命令（推荐）\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fviperrcrypto\u002FSiftly.git\ncd Siftly\n.\u002Fstart.sh\n```\n\n`start.sh` 会安装依赖项、设置数据库、检查 Claude CLI 的认证状态，并自动打开 [http:\u002F\u002Flocalhost:3000](http:\u002F\u002Flocalhost:3000)。\n\n### 选项 B — 使用 Claude Code\n\n如果你使用 [Claude Code](https:\u002F\u002Fclaude.ai\u002Fcode) 来搭建项目，它会读取 `CLAUDE.md` 文件，准确知道如何开始。只需打开项目文件夹：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fviperrcrypto\u002FSiftly.git\nclaude Siftly\u002F\n```\n\nClaude Code 会帮你完成设置并启动应用，直接利用你现有的 Claude 订阅——无需额外配置。\n\n### 选项 C — 手动设置\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fviperrcrypto\u002FSiftly.git\ncd Siftly\nnpm install\nnpx prisma generate\nnpx prisma migrate dev --name init\nnpx next dev\n```\n\n打开 [http:\u002F\u002Flocalhost:3000](http:\u002F\u002Flocalhost:3000)\n\n---\n\n## AI 认证\n\nSiftly 会自动检测最佳可用的认证方式——在大多数情况下无需任何配置。\n\n### 优先级顺序\n\n| 序号 | 方法           | 如何操作                     |\n|------|----------------|------------------------------|\n| 1    | **Claude Code CLI** *(无需配置)* | 已经登录？Siftly 会自动从 macOS 钥匙串中读取你的会话 |\n| 2    | **设置中的 API 密钥** | 打开应用内的“设置”页面，粘贴你的密钥 |\n| 3    | **`ANTHROPIC_API_KEY` 环境变量** | 在 `.env.local` 或你的 shell 环境中设置 |\n| 4    | **本地代理**     | 将 `ANTHROPIC_BASE_URL` 设置为任何与 Anthropic 兼容的端点 |\n\n### Claude Code CLI（无需 API 密钥）\n\n如果你使用 [Claude Code](https:\u002F\u002Fclaude.ai\u002Fcode)，你已经登录。Siftly 会从 macOS 钥匙串中检测到你的会话，并自动使用你的 Claude 订阅（Free\u002FPro\u002FMax）。\n\n当此功能启用时，“设置”页面会显示一个绿色的 **“检测到 Claude CLI——无需 API 密钥”** 标志，并注明你的订阅等级。\n\n> **注意：** 此方法仅适用于 macOS。在 Linux\u002FWindows 上，请改用“设置”中的 API 密钥。\n\n### 获取 API 密钥（如果需要）\n\n1. 访问 [console.anthropic.com](https:\u002F\u002Fconsole.anthropic.com)\n2. 创建一个新的 API 密钥\n3. 打开 Siftly → “设置” → 粘贴密钥\n\n新账户会提供 $5 的免费额度——按照 Haiku 定价，足够处理数千个书签（约 $0.00025\u002F书签）。\n\n---\n\n## 导入你的书签\n\nSiftly 提供了 **内置的导入工具**——无需浏览器扩展。前往 **“导入”** 页面，选择以下任一方法：\n\n### 方法 A — 书签小工具 *(推荐)*\n\n1. 在 Siftly 侧边栏中进入 **“导入”** 页面\n2. 将 **“导出 X 书签”** 链接拖到浏览器书签栏中\n   （或者右键点击书签栏 → 添加书签 → 粘贴 URL）\n3. 登录 X 后，访问 [x.com\u002Fi\u002Fbookmarks](https:\u002F\u002Fx.com\u002Fi\u002Fbookmarks)\n4. 点击书签栏中的 **“导出 X 书签”**——页面上会出现一个紫色按钮\n5. 点击 **“▶ 自动滚动”**——工具会自动滚动并捕获所有书签\n6. 完成后，点击紫色的 **“导出 N 个书签”** 按钮——`bookmarks.json` 文件会被下载\n7. 回到 Siftly → **“导入”** → 拖放或上传该文件\n\n### 方法 B — 浏览器控制台脚本\n\n1. 登录 X 后，访问 [x.com\u002Fi\u002Fbookmarks](https:\u002F\u002Fx.com\u002Fi\u002Fbookmarks)\n2. 打开开发者工具：按下 `F12`（Windows\u002FLinux）或 `⌘⌥J`（Mac），然后切换到 **“控制台”** 选项卡\n3. 从 Siftly 的导入页面复制控制台脚本，粘贴到控制台并按下回车键\n4. 点击 **“▶ 自动滚动”**，等待所有书签被捕获\n5. 点击导出按钮——`bookmarks.json` 文件会自动下载\n6. 回到 Siftly → **“导入”** → 上传该文件\n\n### 重新导入\n\n你可以随时重新导入——Siftly 会自动跳过重复项，只添加新的书签。\n\n---\n\n## AI 分类\n\n**一旦你导入书签，分类就会自动开始。** 你也可以手动触发分类，方法如下：\n\n- 在 **“导入”** 页面（上传后）\n- 在 **“思维导图”** 页面（当书签尚未分类时）\n- 在侧边栏的 **“分类”** 页面\n\n### 4 阶段流水线\n\n| 阶段 | 功能 |\n|-------|-------------|\n| **实体提取** | 从存储的推文 JSON 中挖掘话题标签、URL、@提及以及 100 多种已知工具\u002F产品名称 — 免费，无需 API 调用 |\n| **视觉分析** | 分析每张图片、GIF 和视频缩略图 — OCR 文本、物体、场景、情绪、梗模板，每张图片包含 30–40 个视觉标签 |\n| **语义标记** | 结合推文文本和图片上下文，为每个书签生成 25–35 个精准的搜索标签。同时提取情感、人物和公司名称。|\n| **分类** | 利用所有丰富后的数据，为每个书签分配 1–3 个类别，并附带置信度分数 |\n\n该流水线是 **增量式** 的——如果中断，它会从中断处继续运行。使用 **“重新运行全部（强制全部）”** 可以重新分析已处理过的书签。\n\n---\n\n## 功能\n\n### 🔍 AI 搜索\n\n支持对所有书签数据进行自然语言查询：\n\n- *“关于加密货币崩盘的搞笑表情包”*\n- *“React Hooks 教程”*\n- *“比特币价格走势图”*\n- *“最佳 AI 编码工具”*\n\n通过全文检索索引 (FTS5) 加上 Claude 的语义重排序，同时搜索推文文本、图片 OCR、视觉标签、语义标签和类别。结果按相关性排序，并为每个匹配项提供 AI 生成的解释说明。\n\n### 🗺️ 思维导图\n\n交互式的力导向图，按类别组织显示所有书签：\n\n- 展开或折叠任意类别以查看其书签\n- 点击书签节点即可在 X 平台上打开原始推文\n- 按类别进行颜色编码的图例\n- 如果书签尚未分类，内嵌的 **AI 分类** 按钮可在不离开页面的情况下启动流水线。\n\n### 📚 浏览与筛选\n\n- **网格视图**（马赛克布局）或 **列表视图**\n- 按类别、媒体类型（照片\u002F视频）或搜索文本进行筛选\n- 按最新或最旧排序\n- 每页 24 条记录分页\n- 当前筛选条件芯片可单独移除或一键清空\n- 将鼠标悬停在任一卡片上即可下载媒体内容或跳转至原始推文。\n\n### ⚙️ 类别\n\n预设了 8 个默认类别，并配有 AI 可读的描述：\n\n| 类别 | 颜色 |\n|----------|-------|\n| 搞笑表情包 | 琥珀色 |\n| AI 资源 | 紫色 |\n| 开发工具 | 青色 |\n| 设计 | 粉色 |\n| 金融与加密 | 绿色 |\n| 生产效率 | 橙色 |\n| 新闻 | 靛蓝色 |\n| 综合 | 灰蓝色 |\n\n您可以创建自定义类别，指定名称、颜色及可选描述。描述将在分类过程中直接传递给 AI——描述越具体，分类结果就越准确。\n\n### 📤 导出\n\n- **CSV** — 与电子表格兼容，包含所有字段\n- **JSON** — 完整结构化数据导出\n- **ZIP** — 导出某个类别的书签及所有媒体文件，并附带 `manifest.csv` 清单文件。\n\n### ⌨️ 命令面板\n\n按下 `Cmd+K`（Mac）或 `Ctrl+K`（Windows\u002FLinux），即可在应用的任何位置搜索所有书签。\n\n---\n\n## 配置\n\n所有设置均可在 `\u002Fsettings` 页面或通过环境变量进行管理：\n\n| 设置 | 环境变量 | 描述 |\n|---------|---------|-------------|\n| Anthropic API 密钥 | `ANTHROPIC_API_KEY` | 如果已登录 Claude CLI，则可选；否则，AI 功能需要此密钥 |\n| API 基础 URL | `ANTHROPIC_BASE_URL` | 自定义端点，用于代理或本地 Anthropic 兼容模型 |\n| AI 模型 | 仅限设置页面 | Haiku 4.5（默认，最快且最便宜）、Sonnet 4.6、Opus 4.6 |\n| OpenAI 密钥 | 仅限设置页面 | 如果未设置 Anthropic 密钥，则可作为替代提供商 |\n| 数据库 | `DATABASE_URL` | SQLite 文件路径（默认：`file:.\u002Fprisma\u002Fdev.db`）\n\n### 自定义 API 端点\n\n将 Siftly 指向任何 Anthropic 兼容的服务器：\n\n```env\nANTHROPIC_BASE_URL=http:\u002F\u002Flocalhost:8080\n```\n\n---\n\n## 架构\n\n```\nsiftly\u002F\n├── app\u002F\n│   ├── api\u002F\n│   │   ├── analyze\u002Fimages\u002F   # 批量图像视觉分析（获取进度，POST 启动）\n│   │   ├── bookmarks\u002F        # 列表、筛选、分页、删除\n│   │   │   └── [id]\u002Fcategories\u002F # 单个书签的类别管理\n│   │   ├── categories\u002F       # 类别增删改查\n│   │   │   └── [slug]\u002F       # 单个类别的操作\n│   │   ├── categorize\u002F       # 4 阶段 AI 流水线（启动、状态、停止）\n│   │   ├── export\u002F           # CSV、JSON、ZIP 导出\n│   │   ├── import\u002F           # JSON 文件导入，带有去重功能并自动触发流水线\n│   │   │   ├── bookmarklet\u002F  # 书签小工具专用导入端点\n│   │   │   └── twitter\u002F      # Twitter 专用导入端点\n│   │   ├── link-preview\u002F     # 服务器端 OG 元数据抓取\n│   │   ├── media\u002F            # 媒体代理\u002F下载端点\n│   │   ├── mindmap\u002F          # 图形节点与边，用于可视化\n│   │   ├── search\u002Fai\u002F        # 自然语言语义搜索（FTS5 + Claude）\n│   │   ├── settings\u002F         # API 密钥和模型配置\n│   │   │   ├── cli-status\u002F   # Claude CLI 认证检测端点\n│   │   │   └── test\u002F         # API 密钥验证端点\n│   │   └── stats\u002F            # 仪表板统计数据\n│   ├── ai-search\u002F            # AI 搜索页面\n│   ├── bookmarks\u002F            # 浏览、筛选、分页\n│   ├── categories\u002F           # 类别管理\n│   │   └── [slug]\u002F           # 类别详情页\n│   ├── categorize\u002F           # 流水线监控器，实时显示进度\n│   ├── import\u002F               # 三步导入流程（说明 → 上传 → 分类）\n│   ├── mindmap\u002F              # 交互式图形\n│   ├── settings\u002F             # 配置\n│   └── page.tsx              # 仪表板\n│\n├── components\u002F\n│   ├── mindmap\u002F              # 思维导图画布、节点、边\n│   │   ├── mindmap-canvas.tsx\n│   │   ├── category-node.tsx\n│   │   ├── tweet-node.tsx\n│   │   ├── root-node.tsx\n│   │   ├── chain-edge.tsx\n│   │   └── mindmap-context.ts\n│   ├── command-palette.tsx   # Cmd+K 全局搜索\n│   ├── nav.tsx               # 侧边导航\n│   └── theme-toggle.tsx      # 明暗模式切换\n│\n├── lib\u002F\n│   ├── categorizer.ts        # AI 分类逻辑及默认类别\n│   ├── claude-cli-auth.ts    # 检测 macOS Keychain 中的 Claude CLI OAuth 会话\n│   ├── vision-analyzer.ts    # 图像分析及批量语义标记\n│   ├── image-context.ts      # 共享图像上下文构建器\n│   ├── fts.ts                # SQLite FTS5 全文检索索引\n│   ├── rawjson-extractor.ts  # 从原始推文 JSON 中提取实体\n│   ├── parser.ts             # 多格式 JSON 解析器\n│   ├── exporter.ts           # CSV、JSON、ZIP 导出\n│   ├── types.ts              # 共享 TypeScript 类型\n│   └── db.ts                 # Prisma 客户端单例\n│\n├── prisma\u002F\n│   └── schema.prisma         # SQLite 模式\n│\n├── start.sh                  # 一键启动脚本（安装 + 数据库初始化 + 打开浏览器）\n└── CLAUDE.md                 # Claude Code AI 助手使用说明\n```\n\n### 数据库模式\n\n```\n书签          — 推文文本、作者、日期、原始 JSON、语义标签、增强元数据\n  ├── 媒体项   — 包含 AI 生成图像标签的图片\u002F视频\u002FGIF\n  └── 书签类别 — 带置信度分数（0–1）的类别分配\n\n类别          — 名称、别名、十六进制颜色、AI 可读描述\n设置           — 键值存储（API 密钥、模型偏好）\n导入任务         — 跟踪导入文件的状态和进度\n```\n\n### Prisma + SQLite + FTS5\n\nSiftly 使用 Prisma 迁移来管理关系型模式变更。\n在开发环境中，当模式发生变化时，运行 `npx prisma migrate dev --name \u003Cchange-name>`。\n对于生产环境或运行时启动，使用 `npx prisma migrate deploy` 应用已提交的迁移。\nFTS5 (`bookmark_fts`) 在运行时由 [`lib\u002Ffts.ts`](.\u002Flib\u002Ffts.ts) 管理，而不是在 `schema.prisma` 中定义。\n目前这是有意为之，因为 Prisma 并不直接支持 SQLite 虚拟表的定义。\n\n有关 Prisma 命令和工作流的详细信息，请参阅：\n- https:\u002F\u002Fwww.prisma.io\u002Fdocs\u002Form\u002Fprisma-migrate\u002Fworkflows\u002Fdevelopment-and-production\n- https:\u002F\u002Fwww.prisma.io\u002Fdocs\u002Form\u002Fprisma-client\u002Fsetup-and-configuration\u002Fgenerating-prisma-client\n\n---\n\n## 技术栈\n\n| 技术         | 版本    | 作用                     |\n|--------------|---------|--------------------------|\n| [Next.js](https:\u002F\u002Fnextjs.org) | 16 | 全栈框架（App Router）     |\n| [TypeScript](https:\u002F\u002Fwww.typescriptlang.org) | 5 | 全程类型安全             |\n| [Prisma](https:\u002F\u002Fwww.prisma.io) | 7 | ORM + 迁移               |\n| [SQLite](https:\u002F\u002Fsqlite.org) | — | 本地数据库 — 零配置，包含 FTS5 |\n| [Tailwind CSS](https:\u002F\u002Ftailwindcss.com) | v4 | 样式                     |\n| [Anthropic SDK](https:\u002F\u002Fdocs.anthropic.com) | — | 视觉处理、语义标注、分类、搜索 |\n| [@xyflow\u002Freact](https:\u002F\u002Fxyflow.com) | 12 | 交互式思维导图图表       |\n| [Framer Motion](https:\u002F\u002Fwww.framer.com\u002Fmotion\u002F) | 12 | 动画                     |\n| [Radix UI](https:\u002F\u002Fwww.radix-ui.com) | — | 无障碍 UI 原语            |\n| [JSZip](https:\u002F\u002Fstuk.github.io\u002Fjszip\u002F) | — | 导出类别 ZIP 文件        |\n| [Lucide React](https:\u002F\u002Flucide.dev) | — | 图标                     |\n\n---\n\n## 开发\n\n```bash\n# 一键启动（安装依赖、设置数据库、打开浏览器）\n.\u002Fstart.sh\n\n# 或者手动：\nnpm install\nnpx prisma generate\nnpx prisma migrate dev --name init\nnpx next dev\n\n# 类型检查\nnpx tsc --noEmit\n\n# 打开数据库 GUI\nnpx prisma studio\n\n# 构建生产环境\nnpm run build && npm start\n```\n\n### 自定义类别\n\n编辑 `lib\u002Fcategorizer.ts` 中的 `DEFAULT_CATEGORIES`。每个条目需要：\n\n```ts\n{\n  name: '我的类别',       \u002F\u002F 显示名称\n  slug: 'my-category',   \u002F\u002F URL 安全标识符（必须唯一）\n  color: '#6366f1',      \u002F\u002F UI 中显示的十六进制颜色\n  description: '...',    \u002F\u002F 自然语言描述 — 直接用于 AI 提示词\n}\n```\n\n`description` 字段会直接影响 AI 对书签的分类方式，请尽量具体。\n\n### 添加已知工具\n\n将域名字符串添加到 `lib\u002Frawjson-extractor.ts` 中的 `KNOWN_TOOL_DOMAINS`，以便实体提取器能够自动识别推文数据中指向这些工具的链接。\n\n---\n\n## 隐私\n\n- 所有数据均**本地**存储在您机器上的 SQLite 文件中\n- 唯一的外部调用是您配置的 AI 提供商（推文文本 + 图像数据）\n- 无遥测、无跟踪、无需账户\n- 您的书签绝不会触及其他第三方服务器，仅会发送至您配置的 AI 端点\n\n---\n\n## 支持开发\n\n如果 Siftly 为您节省了时间，请考虑留下小费 ☕\n\n---\n\n## 许可证\n\nMIT — 详见 [LICENSE](LICENSE)\n\n---\n\n\u003Cdiv align=\"center\">\n  \u003Cp>由 \u003Ca href=\"https:\u002F\u002Fx.com\u002Fviperr\">@viperr\u003C\u002Fa> 构建 · 自托管 · 无扩展 · 无云\u003C\u002Fp>\n\u003C\u002Fdiv>","# Siftly 快速上手指南\n\nSiftly 是一款可自托管的 Twitter\u002FX 书签管理器，利用 AI 技术将您的书签转化为可搜索、可分类的可视化知识库。所有数据本地存储，无需浏览器扩展。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**：macOS（推荐，支持自动检测 Claude CLI）、Linux 或 Windows\n*   **Node.js**：版本 18 或更高 ([下载地址](https:\u002F\u002Fnodejs.org))\n*   **包管理器**：npm (随 Node.js 安装)\n*   **AI 认证（二选一）**：\n    *   **方案 A (推荐 macOS 用户)**：安装并登录 [Claude Code CLI](https:\u002F\u002Fclaude.ai\u002Fcode)，Siftly 可自动读取会话，无需 API Key。\n    *   **方案 B (通用)**：准备一个 [Anthropic API Key](https:\u002F\u002Fconsole.anthropic.com) (新用户赠送 $5 额度)。\n\n## 安装步骤\n\n您可以选择以下任一方式进行安装和启动。\n\n### 方式 A：一键启动脚本（推荐）\n\n这是最简便的方法，脚本会自动处理依赖安装、数据库初始化和应用启动。\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fviperrcrypto\u002FSiftly.git\ncd Siftly\n.\u002Fstart.sh\n```\n\n执行后，浏览器将自动打开 [http:\u002F\u002Flocalhost:3000](http:\u002F\u002Flocalhost:3000)。\n\n### 方式 B：使用 Claude Code\n\n如果您已安装 Claude Code，它会自动读取项目配置并完成设置：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fviperrcrypto\u002FSiftly.git\nclaude Siftly\u002F\n```\n\n### 方式 C：手动安装\n\n如果上述方法不适用，可手动执行以下步骤：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fviperrcrypto\u002FSiftly.git\ncd Siftly\nnpm install\nnpx prisma generate\nnpx prisma migrate dev --name init\nnpx next dev\n```\n\n启动成功后，访问 [http:\u002F\u002Flocalhost:3000](http:\u002F\u002Flocalhost:3000)。\n\n## 基本使用\n\n### 1. 配置 AI (如需)\n\n*   **macOS 用户**：若已登录 Claude Code CLI，进入设置页面即可看到绿色徽章提示\"Claude CLI detected\"，无需额外操作。\n*   **其他用户**：点击侧边栏 **Settings**，粘贴您的 `ANTHROPIC_API_KEY`。\n\n### 2. 导入书签\n\nSiftly 内置了导入工具，无需安装浏览器扩展。\n\n1.  在 Siftly 界面点击侧边栏的 **Import**。\n2.  **创建书签工具**：将页面上的 **\"Export X Bookmarks\"** 链接拖拽到浏览器的书签栏。\n3.  **获取数据**：\n    *   登录 [x.com\u002Fi\u002Fbookmarks](https:\u002F\u002Fx.com\u002Fi\u002Fbookmarks)。\n    *   点击刚才添加的书签，页面会出现紫色按钮。\n    *   点击 **\"▶ Auto-scroll\"**，工具会自动滚动并抓取所有书签。\n    *   完成后点击 **\"Export N bookmarks\"**，下载 `bookmarks.json` 文件。\n4.  **上传**：回到 Siftly 的 Import 页面，拖入或上传该 JSON 文件。\n\n### 3. 自动分析与分类\n\n文件上传后，**4 阶段 AI 流水线**会自动启动：\n1.  **实体提取**：免费提取标签、URL 和提及。\n2.  **视觉分析**：分析图片\u002F视频内容，生成视觉标签。\n3.  **语义标记**：为每个书签生成 25-35 个搜索标签。\n4.  **分类归档**：自动将书签分配至 1-3 个类别。\n\n您可以在 **Categorize** 页面查看实时进度。\n\n### 4. 搜索与浏览\n\n*   **AI 搜索**：在搜索框输入自然语言，例如 `\"funny meme about crypto crashing\"` 或 `\"react hooks tutorial\"`，系统会基于语义而非单纯关键词匹配结果。\n*   **思维导图**：点击 **Mindmap** 查看可视化的书签关系图，支持按类别展开\u002F折叠。\n*   **快捷搜索**：在任何页面按下 `Cmd+K` (Mac) 或 `Ctrl+K` (Win\u002FLinux) 唤起全局命令面板进行搜索。","资深前端开发者李明习惯在 Twitter\u002FX 上收藏大量关于 Next.js 新特性、UI 设计灵感及开源项目的推文，日积月累形成了数百条杂乱无章的书签列表。\n\n### 没有 Siftly 时\n- **检索效率极低**：只能依靠模糊的关键词搜索，想找回“上周看到的关于 Server Components 的搞笑梗图”时，往往因记不准具体词汇而一无所获。\n- **信息孤岛严重**：书签仅是线性列表，无法直观看出不同技术点（如 Tailwind CSS 与动画库）之间的关联，难以构建系统化的知识网络。\n- **多媒体内容沉睡**：包含代码截图或演示 GIF 的推文被淹没在文字流中，宝贵的视觉参考素材几乎从未被二次利用。\n- **整理成本高昂**：手动为每条书签添加标签或分类耗时费力，导致收藏后几乎不再回顾，收藏夹逐渐变成“数字垃圾场”。\n\n### 使用 Siftly 后\n- **语义化精准查找**：Siftly 的 AI 语义 tagging 功能让李明可以直接用自然语言搜索“加密货币崩盘的搞笑梗图”，瞬间定位目标，无需匹配确切关键词。\n- **可视化知识图谱**：通过交互式思维导图，李明能清晰看到收藏内容的聚类关系，轻松发现 React 生态中不同工具链的内在联系。\n- **深度视觉分析**：Siftly 自动提取了所有图片中的代码片段和上下文标签，使原本难以检索的截图变成了可搜索的高价值知识库。\n- **自动化分类归档**：运行一次 AI 流水线，数百条书签即被自动归入\"UI 灵感”、“性能优化”等类别并附带置信度评分，彻底解放双手。\n\nSiftly 将原本杂乱无章的社交媒体收藏夹，瞬间转化为本地运行、可深度交互的个人第二大脑。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fviperrcrypto_Siftly_99a4669e.png","viperrcrypto","Viperr","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fviperrcrypto_01a8ddce.jpg","Degenerate lawyer who loves to vibe code",null,"https:\u002F\u002Fgithub.com\u002Fviperrcrypto",[82,86,90,94,98],{"name":83,"color":84,"percentage":85},"TypeScript","#3178c6",96.6,{"name":87,"color":88,"percentage":89},"Shell","#89e051",2.1,{"name":91,"color":92,"percentage":93},"CSS","#663399",0.8,{"name":95,"color":96,"percentage":97},"Dockerfile","#384d54",0.3,{"name":99,"color":100,"percentage":101},"JavaScript","#f1e05a",0.1,2349,218,"2026-04-04T19:07:58","MIT","macOS, Linux, Windows","未说明 (基于云 API 调用，无需本地 GPU)","未说明",{"notes":110,"python":111,"dependencies":112},"该工具主要依赖外部 AI API（如 Anthropic Claude），而非本地运行大模型。在 macOS 上若安装了 Claude Code CLI 并登录，可自动复用其会话无需配置 API Key；Linux\u002FWindows 用户需在设置中手动填入 API Key。数据库默认使用本地 SQLite，无需额外部署数据库服务。","不需要 (基于 Node.js)",[113,114,115,116,117,118],"Node.js 18+","Next.js 16","TypeScript 5","SQLite","Tailwind CSS v4","Prisma",[14,15,13],[121,122,123,124,125,126,127,128,129,130],"ai","bookmarks","categorization","local-first","mindmap","nextjs","open-source","productivity","twitter","typescript","2026-03-27T02:49:30.150509","2026-04-06T11:31:08.570885",[134,139,144,149,154,158],{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},15853,"为什么导入 Twitter 文章时只显示链接，无法获取文章文本或图片？","该问题已被修复。如果您仍遇到此问题，请确保已更新到最新版本。维护者确认修复后，导入流程应能正常抓取文章文本和图片。如果问题依旧，建议提供截图以便进一步排查。","https:\u002F\u002Fgithub.com\u002Fviperrcrypto\u002FSiftly\u002Fissues\u002F5",{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},15854,"全新安装后导入书签失败，提示数据库缺少 'source' 列，如何解决？","这是因为初始迁移文件未包含 'source' 字段。可以通过手动执行 SQL 命令添加该列来解决。具体步骤如下：\n1. 进入 prisma 目录：`cd prisma`\n2. 使用 sqlite3 打开数据库：`sqlite3 dev.db`\n3. 执行添加列命令：`alter table Bookmark add column source TEXT;`\n此外，根本原因是 `start.sh` 脚本在 `migrate deploy` 成功后不再执行 `db push`，导致新字段未同步。未来版本应包含修复此问题的新迁移文件。","https:\u002F\u002Fgithub.com\u002Fviperrcrypto\u002FSiftly\u002Fissues\u002F10",{"id":145,"question_zh":146,"answer_zh":147,"source_url":148},15855,"如何在本地部署中使用 Ollama 或其他本地大语言模型（LLM）？","目前看来，本地 LLM（如 Ollama）很可能可以直接作为替代方案使用，无需大量修改。因为 Siftly 的文档指出其能自动确定最佳登录方式，且其他 URL 路径通常已兼容。您可以尝试将 API 端点指向本地 Ollama 服务进行部署，例如配合 Docker 栈和 Qwen3 等模型使用。","https:\u002F\u002Fgithub.com\u002Fviperrcrypto\u002FSiftly\u002Fissues\u002F9",{"id":150,"question_zh":151,"answer_zh":152,"source_url":153},15856,"导入功能完全失效，控制台报错与 Bookmark 表结构有关，这是已知问题吗？","是的，这是一个已知问题（重复 Issue #10）。原因是数据库架构中缺少 `source` 列，导致所有书签导入操作静默失败。虽然 API 返回 200 状态码，但实际导入数量为 0。解决方法是手动向 SQLite 数据库的 Bookmark 表中添加 `source` 列，或者等待官方合并包含修复补丁的新迁移文件。","https:\u002F\u002Fgithub.com\u002Fviperrcrypto\u002FSiftly\u002Fissues\u002F16",{"id":155,"question_zh":156,"answer_zh":157,"source_url":143},15857,"为什么我的服务器控制台显示 'The column source does not exist' 错误，但前端没有提示？","这是因为错误在 `lib\u002Ftwitter-api.ts` 中被捕获并仅记录到服务器控制台，未向前端用户展示。根本原因是新鲜安装的数据库中缺少 `source` 列。您需要手动运行 SQL 命令 `ALTER TABLE Bookmark ADD COLUMN source TEXT;` 来修复数据库架构，或者重新运行正确的迁移流程以同步架构。",{"id":159,"question_zh":160,"answer_zh":161,"source_url":143},15858,"运行 .\u002Fstart.sh 后导入书签数量为 0，但没有任何错误弹窗，该怎么办？","这通常是因为底层数据库缺少必要的 `source` 列，导致导入逻辑静默失败。请检查服务器控制台日志，通常会看到类似 \"Failed to import tweet ... The column `source` does not exist\" 的错误。解决方案是手动进入数据库（如使用 sqlite3）执行 `alter table Bookmark add column source TEXT;` 来补全字段。",[163,168],{"id":164,"version":165,"summary_zh":166,"released_at":167},90577,"v0.2.0","## 新功能\n\n- **全面支持 OpenAI\u002FCodex 命令行工具** —— 仅需 ChatGPT 登录即可使用\n- **提供商切换**：Anthropic ↔ OpenAI\n- **X 平台文章** 终于显示封面图和预览文本\n- **AI 搜索** 现在无需 API 密钥即可使用\n- **视频书签** 显示真实缩略图，不再出现空白卡片\n- **X OAuth 2.0 实时导入** —— 直接从 X 平台导入书签\n- **分类编辑器** 已修复，并进行了界面优化\n- **SSRF 漏洞修复**、输入内容净化等基础但重要的安全改进\n\n所有功能均在本地运行，完全自托管。您的数据始终属于您。","2026-03-28T04:41:30",{"id":169,"version":170,"summary_zh":171,"released_at":172},90578,"v1.0.1","## 新增功能\n\n🤖 **全面支持 OpenAI\u002FCodex CLI** — AIClient 抽象层同时封装了 Anthropic 和 OpenAI 的 SDK，并为使用 ChatGPT OAuth 的用户集成了 Codex CLI\n\n🔄 **提供商切换：Anthropic ↔️ OpenAI** — 在设置中可切换提供商并选择模型；所有消费者（分类器、内容增强、视觉分析、搜索）均使用与提供商无关的客户端，优先采用 CLI 方式作为后备\n\n📰 **X 文章终于显示封面图片 + 预览文本** — 通过 Twitter 联盟 API 实现富预览效果，针对仅包含链接的书签采用更醒目的链接预览布局\n\n🔍 **AI 搜索无需 API 密钥即可运行** — AI 搜索和视觉分析提供 CLI 备用方案\n\n🛡️ **SSRF 漏洞修复、输入 sanitization 及其他优化** — 在重定向后验证最终 URL，修复 tweetId 参数注入漏洞，确保临时文件命名安全，修正 API 密钥槽位路由问题\n\n### 其他变更\n- 为导入解析器添加对 Siftly 重新导出格式的支持\n- 修复当解析器无法解析格式时显示“已是最新”的问题\n- 将管道并发数从 20 降低至 5 个工作线程\n- 多项社区贡献的 PR：HTML 实体解码、文章区块回退机制、清理未使用的代码","2026-03-10T00:16:27"]