AutoClip 隐私设计深度解析:本地优先架构下的数据收集、匿名统计与合规实践

原创2026-09-22 19:02:42670 阅读
文章标签:人工智能AI 应用大模型音视频短视频后端前端桌面应用

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(来自 Tauri getVersion())、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 密钥。关闭后应用内反馈将改用表单」。

四、我们如何使用信息

政策规定,上述匿名数据仅用于三个目的:

  1. 统计功能使用与产品漏斗(如导入→出片转化率);
  2. 发现并修复缺陷、提升稳定性与性能;
  3. 评估改版效果、规划产品方向。

对应地,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 日,且文首明确标注「本文为模板草案,发布前请经法律顾问审阅」——这意味着下述合规落地工作完成前,该政策尚处于草案状态。

十三、联系我们

如对本隐私政策或个人信息处理有任何疑问、意见或投诉,请联系:

十四、合规落地:检查表、法律审阅项与实施清单

隐私政策全文保留了三份面向发布前的工程/法务工具表,是理解本项目隐私合规推进状态的关键。

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。

登录后查看全文
autoclip