macOS 本地跨平台内容归档器 + 私人搜索库
把各个平台的内容链接粘贴进来,解析后保存为本地可长期查看、可搜索、可整理的私人资料库。即使原平台内容被删除,本地仍有完整副本。
你是不是经常在抖音、小红书、酷安、B站上看到不错的内容,想保存下来但又怕以后找不到?
ArchiveBox 就是解决这个问题的:
- 你在任意平台看到一条想保存的内容,复制它的链接
- 打开 ArchiveBox,粘贴链接,点击保存
- App 自动识别平台、解析内容、下载图片/视频到本地
- 以后随时可以在本地搜索、浏览、整理这些内容
关键区别: 这不是社交平台的同步工具,不同步你的点赞和收藏。它是你主动把链接粘贴进来,做一个本地的私人资料库。
| 平台 | 支持内容 | 状态 |
|---|---|---|
| 抖音 | 图文笔记 + 视频 | ✅ 已支持 |
| 小红书 | 图文笔记 | ✅ 已支持 |
| 酷安 | 动态 / 文章 | ✅ 已支持 |
| B站 | 视频 | ✅ 已支持 |
- 粘贴链接 → 自动识别平台 → 解析内容 → 保存到本地
- 支持短链接自动展开(如
v.douyin.com、xhslink.com、b23.tv)
- 图片保存原图到本地文件系统
- 视频尽量下载保存(失败不影响图文归档)
- 封面图本地缓存
- 即使原帖被删,本地仍有完整副本
- 同一链接重复粘贴不会创建重复记录
- 三级去重策略:平台内容 ID → 标准化 URL → 原始 URL
- 搜索标题和正文内容
- 关键词高亮显示
- 支持按平台、状态分类、内容类型筛选
- 四个状态分类:收藏 / 灵感 / 待整理 / 已归档
- 文件夹二级结构,手动整理归类
- 修改标题、正文、备注
- 移动、删除、回收站、恢复、彻底删除
- 网格视图 — 适合图片为主的视觉浏览
- 列表视图 — 适合正文内容的信息检索
- 内容详情页展示完整元数据、图片画廊、正文、备注
- 解析失败也会保留一条记录(链接 + 平台 + 时间)
- 媒体下载失败支持手动重试
- 用户可手动补充标题、正文、备注
# 克隆仓库
git clone https://github.com/V-Linkin/ArchiveBox.git
cd ArchiveBox
# 用 Xcode 打开
open ArchiveBox.xcodeproj- 在 Xcode 中选择 ArchiveBox scheme
- 运行目标选 My Mac
- Cmd + R 编译运行
git clone https://github.com/V-Linkin/ArchiveBox.git
cd ArchiveBox
# 编译
swift build
# 运行
swift run# 安装 xcodegen
brew install xcodegen
# 生成 Xcode 项目
xcodegen generate
# 打开项目
open ArchiveBox.xcodeproj1. 打开 App
↓
2. 粘贴一个链接到首页输入框
↓
3. 系统自动识别平台(显示平台图标)
↓
4. 点击「保存」
↓
5. 系统解析内容 + 下载媒体文件
↓
6. 内容自动进入「待整理」分类
↓
7. 随时搜索、移动到文件夹、修改状态分类
ArchiveBox/
├── Package.swift # Swift Package Manager 配置
├── project.yml # xcodegen 配置
├── Resources/Info.plist # 应用配置
│
├── Sources/ArchiveBox/
│ ├── App/ # 应用入口
│ │ ├── ArchiveBoxApp.swift # @main App 入口
│ │ └── AppState.swift # 全局状态管理
│ │
│ ├── Models/ # 数据模型
│ │ ├── Enums.swift # 所有枚举定义
│ │ ├── Item.swift # 内容条目
│ │ ├── Folder.swift # 文件夹
│ │ ├── MediaAsset.swift # 媒体资源
│ │ ├── ImportTask.swift # 导入任务
│ │ └── ParsedContent.swift # 解析中间模型
│ │
│ ├── Database/ # 数据库层 (GRDB/SQLite)
│ │ ├── DatabaseManager.swift # 数据库连接管理
│ │ ├── Migrations/Migrations.swift
│ │ ├── ItemRepository.swift # 内容 CRUD
│ │ ├── FolderRepository.swift # 文件夹 CRUD
│ │ ├── MediaAssetRepository.swift
│ │ └── ImportTaskRepository.swift
│ │
│ ├── Parsers/ # 平台解析器
│ │ ├── PlatformParser.swift # 协议定义
│ │ ├── URLDetector.swift # URL 识别
│ │ ├── URLNormalizer.swift # URL 标准化
│ │ ├── ParserRegistry.swift # 解析器注册中心
│ │ ├── DouyinParser.swift # 抖音解析
│ │ ├── XHSParser.swift # 小红书解析
│ │ ├── CoolapkParser.swift # 酷安解析
│ │ └── BilibiliParser.swift # B站解析
│ │
│ ├── Services/ # 业务服务层
│ │ ├── ImportService.swift # 导入流程编排
│ │ ├── MediaService.swift # 媒体下载
│ │ ├── SearchService.swift # 搜索服务
│ │ ├── DeduplicationService.swift
│ │ └── FileStorageManager.swift # 文件系统管理
│ │
│ ├── ViewModels/ # MVVM ViewModel
│ │ ├── HomeViewModel.swift
│ │ ├── PlatformViewModel.swift
│ │ ├── FolderViewModel.swift
│ │ ├── DetailViewModel.swift
│ │ ├── SearchViewModel.swift
│ │ ├── TrashViewModel.swift
│ │ └── SettingsViewModel.swift
│ │
│ ├── Views/ # SwiftUI 视图
│ │ ├── ContentView.swift # 根视图
│ │ ├── Sidebar/ # 侧边栏导航
│ │ ├── Home/ # 首页(粘贴输入、最近导入)
│ │ ├── Platform/ # 平台分类页
│ │ ├── Folder/ # 文件夹页
│ │ ├── Detail/ # 内容详情页
│ │ ├── Search/ # 搜索页
│ │ ├── Trash/ # 回收站
│ │ ├── Settings/ # 设置页
│ │ └── Components/ # 通用组件
│ │
│ └── Utilities/ # 工具类
│ ├── Constants.swift
│ ├── Extensions/
│ └── Helpers/
│
└── ArchiveBox/ # 原始设计文件
├── SPEC.md # 产品设计文档
└── Models/ # 初始模型定义
| 技术 | 用途 | 说明 |
|---|---|---|
| SwiftUI | UI 框架 | macOS 14+ 原生开发 |
| GRDB 7.x | 本地数据库 | SQLite 封装,支持 Migration |
| SwiftSoup | HTML 解析 | 从网页中提取结构化内容 |
| Swift Concurrency | 异步任务 | async/await 并发模型 |
| URLSession | 网络请求 | 媒体文件下载 |
| ImageIO | 图片处理 | 缩略图生成、尺寸获取 |
| CryptoKit | 哈希计算 | 文件 SHA256 校验 |
所有数据保存在本地,不上传任何云端:
~/Library/Application Support/ArchiveBox/
├── ArchiveBox.sqlite # 数据库(结构化数据)
├── Media/ # 媒体文件
│ └── {item-id}/ # 每条内容一个目录
│ ├── cover.jpg # 封面图
│ ├── 001.jpg # 图片文件
│ ├── 002.jpg
│ └── video.mp4 # 视频文件
└── Temp/ # 下载临时文件
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Item │────▶│ MediaAsset │ │ Folder │
│ (内容条目) │ │ (媒体资源) │ │ (文件夹) │
│ │◀────│ │ │ │
│ - title │ │ - type │ │ - name │
│ - content │ │ - localPath │ │ - platform │
│ - rawURL │ │ - fileHash │ │ - parentID │
│ - platform │ │ - fileSize │ └──────────────┘
│ - status │ │ - status │
│ - folderID │ └──────────────┘
└──────────────┘
- 四平台 URL 识别与解析
- 本地 SQLite 数据库
- 媒体文件下载与存储
- 全局搜索
- 文件夹二级结构
- 回收站
- 去重机制
- 网格/列表视图切换
- FTS5 全文搜索(提升搜索性能)
- 视频完整保存与本地播放
- 批量导入(粘贴多个链接)
- 标签系统
- Spotlight 集成
- 本地备份与恢复
- 深色/浅色模式适配
MIT License
欢迎提交 Issue 和 Pull Request。
如果你觉得这个项目有用,给个 Star 就是最好的鼓励 ⭐