AutoClip 隐私设计深度解析:本地优先架构下的数据收集、匿名统计与合规实践
AutoClip 隐私设计深度解析:本地优先架构下的数据收集、匿名统计与合规实践
本文以 docs/PRIVACY.md(AutoClip 隐私政策,生效日期 2026 年 6 月 3 日)为主体骨架,结合仓库内埋点体系、密钥管理、加密存储等源码实现,从「产品设计 → 工程实现 → 合规落地」三个层面还原 AutoClip 的隐私架构。读完本文,你将掌握:AutoClip 本地优先架构如何保证视频、字幕、API 密钥不出本机;匿名使用统计采集了什么、通过什么机制实现「匿名、可关、本地缓冲」;以及面向 PIPL/GDPR 的合规检查表与落地清单应如何推进。
AutoClip 是一款本地优先的桌面视频切片工具,其隐私政策的全部条款都围绕一个核心承诺展开:你的视频、音频、字幕及转写文本,全部在本机处理与存储,不经过我们的服务器。本文依据该隐私政策并结合 frontend/src/analytics/posthog.ts、backend/utils/api_key_manager.py 等源码,逐条核验这些承诺在工程上的实现方式,同时完整保留政策中的信息类别表格、用户权利、数据保留期限、跨境说明、合规检查表与落地清单等全部关键内容。
一、核心原则:本地优先(Local-First)
隐私政策开篇即明确了 AutoClip 数据处理的三条底线:
- 你的视频、音频、字幕及转写文本,全部在你本机处理与存储,不会上传到我们的服务器;
- 你配置的第三方 API 密钥(如通义千问、OpenAI、Gemini 等)仅保存在你本机,不会上传,也不会出现在任何统计数据中;
- 我们不收集你的姓名、手机号、邮箱、身份证件等可直接识别身份的个人信息。
1.1 「本地优先」在源码中的体现
「本地优先」并非一句宣传口号,而是贯穿前后端的设计约束:
- 转写引擎本地化:语音识别走本机 Whisper 运行时。backend/services/whisper_runtime.py 中明确写道,桌面安装包默认不带 Whisper(运行时 + 模型体积较大),由用户在设置页自行决定是否安装、下载哪个模型,后端使用 faster-whisper(CTranslate2,不依赖 PyTorch,比官方 whisper 快数倍,跨平台)。运行时安装到用户可写目录
<data_dir>/whisper-runtime,模型缓存放<data_dir>/whisper-models,即模型文件与处理结果都落在本机目录,不经过任何中转服务器。 - 埋点模块的可降级设计:frontend/src/analytics/posthog.ts 的注释明确写着「没有配置
VITE_PUBLIC_POSTHOG_KEY时,本模块全部为 no-op,因此 dev 环境(无 key)不会污染线上数据」,即未配置统计 key 时,整个匿名统计链路不产生任何网络请求。
1.2 API 密钥「仅存本机」的实现
政策承诺 API 密钥不出本机,源码层面的落实是本地加密存储。backend/utils/api_key_manager.py 实现了完整的密钥生命周期管理:
- 密钥默认存储于
~/.auto_clips/api_keys/目录下的keys.enc加密文件; - 使用 Fernet 对称加密(基于 PBKDF2HMAC + SHA256、10 万次迭代从主密码派生密钥),主密码优先取自环境变量
AUTO_CLIPS_MASTER_PASSWORD,生产环境必须显式设置; - 提供
add_api_key/get_api_key/remove_api_key/update_api_key/rotate_api_key/test_api_key等完整操作,并记录expires_at、last_used、usage_count等元数据; list_api_keys返回的信息刻意不包含密钥明文,只返回名称、提供商、创建时间等安全字段。
这些设计保证了:即使本机数据被读取,密钥也是密文形态,且任何统计事件都不会携带密钥明文。
二、我们收集的信息:匿名使用统计与数据边界
政策将信息收集分为三类:匿名使用统计(当前已启用)、你主动提供的信息、我们不收集的信息。这一分类决定了隐私政策的整体边界。
2.1 匿名使用统计(当前已启用)
为了了解功能使用情况、发现并修复问题、改进产品,本软件通过 PostHog 收集匿名的使用数据。这些数据不包含你的视频内容、字幕/转写文本、文件名内容或 API 密钥。
| 类别 | 具体内容 | 用途 |
|---|---|---|
| 设备与环境 | 操作系统类型、CPU 架构、应用版本、系统语言 | 适配与问题排查 |
| 使用行为 | 应用启动、页面访问、导入素材、导出切片、保存配置等操作事件 | 衡量功能使用与转化 |
| 运行结果 | 处理成功/失败、失败所处环节与错误码 | 提升稳定性 |
| 匿名标识 | 随机生成的设备标识符(存于本机,不关联真实身份) | 区分独立设备、计算留存 |
政策同时给出了三点补充说明:
- 匿名性:使用随机生成的设备标识符,不创建可识别你身份的用户画像;
- 数据接收方:PostHog Inc.,数据存储于其美国区域服务器(见本文第五章「数据存储、保留与跨境」);
- 本地缓冲:事件在本机批量缓冲后发送,网络异常不影响软件正常使用。
2.2 你主动提供的信息
- 第三方平台账号/Cookie:若你使用 B 站、YouTube 等平台的下载或上传功能,相关登录凭据(Cookie 等)仅保存在你本机,用于完成你发起的操作,我们不收集、不上传。
这一条在源码中有两处佐证:backend/models/bilibili.py 中 B 站账号模型的 cookies 字段注释明确为「加密存储的cookies」;backend/utils/crypto.py 提供基于 Fernet 的 encrypt_data / decrypt_data 工具,加密密钥取自环境变量 ENCRYPTION_KEY,未设置时生成临时密钥并给出告警。B 站 / YouTube 的下载与上传均以「你发起的操作」为前提,Cookie 仅用于完成该操作。
2.3 我们不收集的信息
政策明确列举了以下绝不收集的内容:
- 你的视频/音频原始内容
- 字幕、转写文本内容
- 第三方 API 密钥明文
- 姓名、手机号、邮箱、地理位置、身份证件等个人身份信息
三、匿名统计的工程实现(源码级)
隐私政策中的「匿名使用统计」对应仓库内一套完整的埋点体系,详见 docs/ANALYTICS.md。该文档将埋点原则概括为 「匿名 · 可关 · 本地缓冲」:不采集 PII、视频内容、字幕文本、API key 明文。以下从源码拆解其实现。
3.1 PostHog 初始化与隐私默认值
frontend/src/analytics/posthog.ts 是埋点入口,其 initAnalytics() 的初始化配置逐条落实了隐私承诺:
| 配置项 | 值 | 隐私含义 |
|---|---|---|
persistence |
localStorage |
桌面端从 file:// 或自定义协议加载,cookie 不可靠,统一用 localStorage 持久化匿名 ID |
person_profiles |
identified_only |
未登录前不创建 person profile,保持匿名;仅登录后通过 identify 关联 |
autocapture |
true |
自动捕获页面点击/输入,配合手动关键事件构建漏斗 |
disable_session_recording |
true |
隐私优先:默认不录屏 |
capture_pageview |
false |
HashRouter 下手动上报 pageview(见 trackPageview) |
opt_out_capturing_by_default |
!isAnalyticsEnabled() |
尊重用户在本机的关闭偏好,默认按开关状态决定是否采集 |
此外,PostHog key 与 host 均通过构建环境变量注入:
const POSTHOG_KEY = import.meta.env.VITE_PUBLIC_POSTHOG_KEY as string | undefined
const POSTHOG_HOST =
(import.meta.env.VITE_PUBLIC_POSTHOG_HOST as string | undefined) ??
'https://us.i.posthog.com'
对应环境变量声明见 frontend/src/vite-env.d.ts:VITE_PUBLIC_POSTHOG_KEY 与 VITE_PUBLIC_POSTHOG_HOST 均为可选。未配置 key 时 initAnalytics() 直接返回,不做任何网络请求——这与政策中「匿名使用统计(当前已启用)」的前提是「构建/运行环境已配置 PostHog key」,缺省时埋点全程 no-op 的工程事实一致。
3.2 关键业务事件字典
frontend/src/analytics/events.ts 统一管理事件名与载荷类型,避免裸字符串散落各处,并保证所有 capture 都通过 trackEvent(未初始化 / 已关闭时自动 no-op):
| 事件名 | 触发场景 | 载荷(仅含匿名元数据) |
|---|---|---|
video_imported |
导入素材(上传/选择视频开始一个项目) | source(upload/url/local)、fileType、durationSec、sizeBytes |
clips_exported |
出片:成功生成切片 | clipCount、durationSec、withSubtitles、exportType(clip/collection/project) |
processing_failed |
关键流程失败(导入/转写/切片/导出任一环节) | stage(import/transcribe/analyze/clip/export/other)、message、code |
api_key_configured |
设置/更新 LLM API key | provider、hasKey——注释明确「不要传 key 明文,仅标记是否填写」 |
可以看到,埋点载荷中连文件名、字幕文本都不包含,API key 事件只记录「是否已填写」的布尔值,这正是政策「运行结果」「匿名性」条款的工程落地。
3.3 生命周期事件与全局属性
frontend/src/analytics/lifecycle.ts 负责应用生命周期埋点与全局属性(super properties)注册:
- 全局属性:
app_version(来自 TaurigetVersion())、os、arch、app_locale,在trackLaunch()中通过posthog.register()注册,此后每条事件自动携带,方便按「版本 / 系统 / 架构」切片排查问题; - 生命周期事件:
app_installed:本设备首次启动(装机量代理指标),属性version, os, arch;app_opened:每次启动,PostHog 据此自动计算 DAU / 留存,属性version, session_number;app_updated:版本号较上次变化时上报,属性from_version, to_version。
操作系统与 CPU 架构均通过 navigator.userAgent 粗略解析(macOS / Windows / Linux、arm64 / x64),全程不读取任何文件或系统级敏感信息。
3.4 数据流向与本地缓冲
事件的完整链路为:用户操作 → events.ts/lifecycle.ts 的 track 函数 → posthog.capture() → posthog-js 在内存中批量缓冲 → 网络空闲时上报至 US 区 PostHog。
posthog-js 默认在内存中批量缓冲事件,因此「网络异常不影响软件正常使用」——即使断网或退出代理,主流程(导入、转写、切片、导出)也不会被埋点阻塞,这与政策 2.1 节「本地缓冲」的说明完全一致。
3.5 开关配置与关闭行为
frontend/src/analytics/posthog.ts 实现了开关的核心逻辑:
- 偏好存储键为
autoclip.analytics.optOut(true= 已关闭采集),持久化在 localStorage,重启后依然生效; isAnalyticsEnabled()判断「是否配置了 key 且用户未关闭」;setAnalyticsEnabled(enabled)在写回 localStorage 的同时调用posthog.opt_in_capturing()/posthog.opt_out_capturing(),实现立即停止上报,无需重启。
设置页的 UI 入口见 frontend/src/pages/SettingsPage.tsx:应用设置中提供「匿名使用统计」开关,提示文案为「只采集功能使用、出片成功 / 失败等匿名事件,不含视频内容、字幕文本或 API 密钥。关闭后应用内反馈将改用表单」。
四、我们如何使用信息
政策规定,上述匿名数据仅用于三个目的:
- 统计功能使用与产品漏斗(如导入→出片转化率);
- 发现并修复缺陷、提升稳定性与性能;
- 评估改版效果、规划产品方向。
对应地,docs/ANALYTICS.md 给出了完整的指标框架:北极星指标为「周成功出片用户数」(数据来源 clips_exported),并围绕获取(app_installed)、激活(导入→出片转化率漏斗)、留存(D1/D7/D30、周活,由 app_opened 自动计算)、参与(人均出片数、功能渗透率)、变现就绪(模型分布、配 key 率、失败率)五个层级组织。核心漏斗为:
下载 .dmg → app_installed → video_imported → clips_exported(★激活) → 回访(留存)
政策同时强调:这些数据不会用于广告投放,也不会出售任何信息。
五、你的选择与权利
5.1 关闭使用统计
你可在 设置 → 应用设置 → 隐私与数据 中随时关闭「匿名使用统计」。关闭后软件将立即停止上报任何使用数据,该设置在重启后依然有效(其实现原理见 3.5 节:localStorage 持久化偏好 + opt_out_capturing() 即时生效)。
5.2 你的法定权利
根据《个人信息保护法》,在适用范围内你有权:
- 知情、查阅、复制;
- 更正、补充;
- 删除;
- 撤回同意(即关闭统计开关);
- 注销(账号功能上线后适用)。
如需行使上述权利或提出投诉,可通过文末联系方式联系。
六、数据存储与保留
政策对两类数据分别规定了存储与保留方式:
- 本地数据(项目、视频、字幕、配置、密钥):存储于你本机,由你完全掌控;卸载软件或删除项目即清除;
- 匿名统计数据:存储于 PostHog,保留期限遵循我们设定的数据保留策略(默认不超过 12 个月),到期自动清理或匿名化。
「密钥加密存储」「Cookie 加密存储」等本地数据安全机制见第一章与第八章的源码说明。
七、数据跨境
匿名使用统计数据由 PostHog 存储于美国区域服务器(https://us.i.posthog.com),可能涉及个人信息向中华人民共和国境外提供。政策声明已尽力将传输数据限定为不可识别身份的匿名数据,并标注了法律审阅项:
〔法律审阅项:跨境提供的合规路径(单独同意 / 标准合同 / 安全评估)需依《个人信息保护法》第三章确认〕
这一项同时出现在文末「需法律审阅的条款」清单中,优先级为「高」,是正式发布前必须由法务确认的关键点。
八、第三方服务
政策以表格形式列出涉及的第三方服务及其数据边界:
| 服务 | 提供方 | 用途 | 数据边界 |
|---|---|---|---|
| 产品分析 | PostHog Inc. | 匿名使用统计 | 数据存储于其美国区域服务器,隐私规则以其公开的隐私政策为准 |
| 第三方 AI 模型(你自行配置) | 通义千问 / OpenAI / Google 等 | 由你直接调用,密钥本地保存 | 见各服务方政策 |
| 视频平台(你自行使用) | B 站 / YouTube 等 | 你发起的下载/上传 | 见各平台政策 |
政策特别说明:你在本软件中直接调用第三方 AI 服务时,相关数据流向及隐私规则适用该服务方的隐私政策,我们不在其中转发或留存。也就是说,AutoClip 的角色是「本地客户端」,它不充当任何第三方 AI 服务的代理或中转。
九、安全措施
政策承诺采取合理的技术与管理措施保护数据安全,包括:
- 传输加密(HTTPS):与第三方服务(PostHog、AI 模型、视频平台)的通信均走加密通道;
- 最小化收集:只采集 2.1 节表格所列匿名字段,埋点载荷不含内容类数据;
- 匿名化处理:未登录前不创建 person profile,用随机设备标识符而非身份信息;
- 密钥不离开本机:这一条在工程上由 backend/utils/api_key_manager.py 的 Fernet 加密存储保证(密钥写入
keys.enc密文文件,主密码来自环境变量);B 站 Cookie 同样通过 backend/utils/crypto.py 加密后落库(见 backend/models/bilibili.py)。
政策同时给出实事求是的提醒:互联网传输无法保证绝对安全。
十、儿童隐私
本软件面向成年专业用户,不面向 14 周岁以下儿童,我们不会主动收集儿童个人信息。在合规检查表中,COPPA / 儿童保护一项的状态为「✅ 不适用」。
十一、规划中的功能(当前尚未启用)
以下功能在产品规划中,目前均未上线、未收集任何相关数据。正式启用前将更新本政策、明确告知,并在涉及个人信息时单独征得你的同意:
- 账号体系:未来可选注册/登录以同步配置、使用额度等。届时将收集必要的账号信息;
- 云端 LLM 代理:未来若你选择使用我们托管的模型代理,则字幕/转写文本会经由我们的代理服务器转发以完成 AI 处理。该功能为可选,未启用前文本不离开本机;
- 付费与计量:未来可能引入充值、订阅等,将通过合规支付渠道处理交易信息。
值得注意:账号功能一旦上线,埋点体系中的身份模型将随之升级——frontend/src/analytics/posthog.ts 已预先实现 identifyUser(distinctId, properties)(登录后关联身份)与 resetUser()(登出时重置匿名身份),对应 docs/ANALYTICS.md 中「Phase 1 账号上线后」的身份规划。届时隐私政策需同步更新并触发重新同意。
十二、政策更新
当数据处理方式发生变化时,我们会更新本政策并修改「最近更新」日期;重大变更将通过应用内提示等方式告知你。当前版本生效日期与最近更新均为 2026 年 6 月 3 日,且文首明确标注「本文为模板草案,发布前请经法律顾问审阅」——这意味着下述合规落地工作完成前,该政策尚处于草案状态。
十三、联系我们
如对本隐私政策或个人信息处理有任何疑问、意见或投诉,请联系:
- 邮箱:christine95zhouye@gmail.com
- 官网:详见项目发布信息中公开的官方介绍页面
十四、合规落地:检查表、法律审阅项与实施清单
隐私政策全文保留了三份面向发布前的工程/法务工具表,是理解本项目隐私合规推进状态的关键。
14.1 合规检查表(Compliance Checklist)
| 法规 | 状态 | 说明 |
|---|---|---|
| 《个人信息保护法》(PIPL) | ⚠️ 部分 | 当前为匿名数据,跨境与单独同意路径待法务确认 |
| 《数据安全法》/《网络安全法》 | ✅ 基本符合 | 本地优先、最小化收集 |
| GDPR(如面向欧盟用户) | ⚠️ 待评估 | 目前 PostHog 用 US 区;若拓展欧盟需评估法律依据与 EU 区 |
| CCPA(如面向加州用户) | ⚠️ 待评估 | 海外发行前评估 |
| COPPA / 儿童保护 | ✅ 不适用 | 不面向儿童 |
14.2 需法律审阅的条款(Clauses Requiring Legal Review)
| 条款 | 原因 | 优先级 |
|---|---|---|
| 第六条 数据跨境(PostHog US) | PIPL 跨境提供需明确合规路径(单独同意/标准合同/安全评估) | 高 |
| 「匿名」定性 | 设备标识符 + 行为数据是否构成可识别个人信息,影响是否需单独同意 | 高 |
| 第五条 数据保留期限 | 需填写并核实具体保留时长 | 中 |
| 第十条 规划功能(云代理处理用户文本) | 上线前需重写为正式条款并单独同意 | 中(启用前) |
| 海外发行(GDPR/CCPA) | 拓展海外市场前补充对应章节 | 低(按 Roadmap Phase 3) |
14.3 落地清单(Implementation Checklist)
政策草案中保留了逐项打勾的落地清单,可直观看到当前推进进度:
- [x] 填写联系邮箱、官网/仓库地址、数据保留期限
- [ ] 法务审阅跨境与「单独同意」路径
- [ ] 应用内首次启动展示隐私政策入口 / 同意提示
- [ ] 官网发布同一份政策并保持版本一致
- [ ] 设置页「隐私与数据」开关旁加本政策链接
- [ ] PostHog 后台设置数据保留策略,与第五条一致
- [ ] 账号 / 云代理 / 付费上线前,更新本政策并触发重新同意
从清单可见:隐私政策的技术基础(埋点匿名化、开关、密钥加密、本地优先)已基本就绪并打勾,剩余未完成项集中在法务审阅、应用内展示入口与官网发布等发布前动作上。技术侧实现与政策侧声明可以对照着看——例如「设置页开关」对应 frontend/src/pages/SettingsPage.tsx 的「匿名使用统计」行,「PostHog 数据保留策略」对应政策第五条「默认不超过 12 个月」的承诺,而「应用内首次启动展示隐私政策入口」则是发布前需要补齐的最后一块拼图。
结语:从隐私政策到工程实现的双向印证
AutoClip 的隐私政策并非一份孤立的合规文档,而是与仓库代码一一对应的「契约」:政策承诺「匿名」对应 frontend/src/analytics/posthog.ts 的 person_profiles: 'identified_only' 与 disable_session_recording;承诺「可关」对应 localStorage 持久化的 opt-out 开关;承诺「密钥不出本机」对应 backend/utils/api_key_manager.py 的 Fernet 加密落盘;承诺「本地优先」对应 backend/services/whisper_runtime.py 的本机转写运行时。对于希望审计本项目数据流、复用它作为自建产品隐私架构参考的开发者,建议沿 docs/ANALYTICS.md → frontend/src/analytics/ → backend/utils/crypto.py → backend/utils/api_key_manager.py 这条链路通读,即可完整还原「声明 → 实现 → 合规」的全貌。英文版本政策见 docs/PRIVACY.en.md。