隐私政策
最后更新: 2026年10月
权威版本:本隐私政策具有约束力的权威版本为英文版。请参阅英文隐私政策。以下摘要仅供参考。
数据控制者
Creatiwi AI
波兰共和国
联系方式:[email protected]
本地处理
Maskeno 以本地处理为先。个人身份信息(PII)的检测与脱敏(编辑)在您的设备上运行,使用 Microsoft Presidio 的模式与校验和识别器、nym 多语言分类器以及 OPF 人名与地址模型,另有仅用于波兰语的 GLiNER2 模型,这些模型通过 ONNX Runtime 运行。任何检测步骤都不会把您的文档发送到服务器。扫描页面和图像的文字识别(OCR)同样只在本地运行:使用应用内置的 Tesseract(默认)或本机上的 Ollama。不存在云端 OCR,原始文档绝不会离开您的设备。
但本应用程序并非零网络应用,检测也并不完美:检测器会漏掉一些内容,而脱敏后的文本并未被匿名化。在把脱敏文本发送到任何地方之前,请先通读一遍。
哪些内容会离开您的设备
运行本应用程序需要一些网络请求。我们如实列出这些请求,而不是声称数据"绝不"离开您的设备:
- 试用:注册时,系统会将假名机器 ID(您网络硬件地址的哈希值,或一个随机 ID)、操作系统平台和应用版本发送到我们的试用服务器(Cloudflare Worker);状态检查发送机器 ID;使用情况报告发送机器 ID 以及项目数和页数。这不以分析同意为条件。许可证也不会停止这些请求:有效的许可证解除试用限制,但应用仍会查询试用状态并上报使用情况。
- OCR 语言数据:当您以某种语言运行 OCR、而该语言的语言文件不在应用的语言数据缓存中时(首次,以及缓存被清空之后),应用会从 tesseract.js 语言数据 CDN(jsDelivr)下载该语言的 Tesseract 语言文件(例如波兰语和英语)。应用把缓存保存在操作系统的临时文件夹中,系统或清理工具可能会将其清空。这是一个普通的下载请求,不含文档内容、机器 ID 或许可证密钥。如需让 OCR 完全离线运行,请在启动应用的环境中,将环境变量
TESSDATA_PATH指向存放 gzip 压缩语言文件的文件夹,文件名为<lang>.traineddata.gz(波兰语文档为pol.traineddata.gz和eng.traineddata.gz)。未压缩的.traineddata文件同样可用,前提是该文件夹中应用所需的每种语言都是未压缩文件,且没有任何.gz文件;请勿在同一文件夹中混用两种形式。对于缺少文件的语言,应用不会回退到下载。 - 许可:如果您输入许可证密钥,密钥和机器 ID 会发送到 Polar.sh 进行激活,并约每 7 天重新验证一次。激活时还会发送操作系统平台和应用版本。
- 检测模型下载:当某个预设所需的模型尚未在您的设备上时,会下载相应文件。secure、legal 和 medical 预设需要 nym 模型(约 376 MB)。legal 和 medical 还需要 OPF 模型(约 917 MB),secure 对于非波兰语文本也需要它。对于波兰语文本,legal 和 medical 还需要波兰语 GLiNER2 模型(约 395 MB)。三者都来自我们自己的 Cloudflare R2 存储 models.audior.app;如果无法连接该主机、该主机返回错误或提供了不同的字节,nym 和 OPF 模型会回退到 Hugging Face,GLiNER2 模型没有回退。每个文件在下载时都会对照固定的大小和 SHA-256 哈希进行校验。不发送任何文档数据,但如果设置了环境变量
HF_TOKEN,它会在回退下载时作为 bearer 令牌发送给 Hugging Face。developer 预设只使用模式识别器,不下载任何内容。 - Ask AI 模型列表与 API 密钥检查:当 Ask AI 的模型选择器没有缓存的列表(列表缓存一小时)或您手动刷新时,应用会从 OpenRouter 获取模型列表,如果您保存了 OpenRouter API 密钥,则会附带该密钥。在设置中测试 OpenRouter 密钥会将该密钥发送到 OpenRouter。不发送文档数据。如果您不配置 OpenRouter,就不会发生这些请求。
- Ollama:应用只与本机上的 Ollama 通信。由于 OCR 会看到未脱敏的原始文档,应用对 Ollama 只接受回环地址(localhost、127.x.x.x 或 ::1),并拒绝任何其他地址。应用在保存时检查该地址,每次启动时删除已保存的非回环地址,并在每次运行 OCR 之前再次检查。这些请求包括状态、版本和模型列表检查,模型的下载与删除,使用 Ollama 运行 OCR 时的页面图像,以及使用 Ollama 运行 Ask AI 时的提示词和脱敏文本。每当打开设置或 Ask AI 面板时,都会自动进行状态检查,即使您从未使用 Ollama,也无法关闭。所有这些请求都发往该回环地址。
- OCR:没有任何内容离开您的设备。OCR 仅在本地运行:应用内置的 Tesseract(默认)或本机上的 Ollama。不存在云端 OCR,页面图像绝不会发送给云服务提供商。
- Ask AI 与提示词包(可选):您选择的提示词加上脱敏后的项目文本,会发送到使用您自己 API 密钥的 OpenRouter、本机上的 Ollama、通过带有该文本的链接打开的 chatgpt.com,或您粘贴所复制提示词的任何地方。下一节说明这些文本包含什么。
- 崩溃报告与使用分析(选择加入):默认关闭。仅在您于同意对话框或设置中同意后,Sentry 才会收到崩溃报告(错误信息和堆栈跟踪,以及在多次启动间保持不变的随机安装 ID),Aptabase 才会收到使用事件。我们不会有意附带任何文档内容。在主进程中,错误的文本(消息、堆栈、面包屑、标签)会先经过严格的清理器,路径、电子邮件地址、IBAN、长数字和引号内的文本,以及所有不属于应用自身消息用语的单词,都会被替换为下划线;应用窗口内的崩溃报告只清理文件路径,因此那里的其他文本可能会被发送。清理器是安全网,而不是保证。使用事件的名称和文本值在发送前会被校验并缩短。撤回同意会停止新的使用事件和新的主进程崩溃报告;已排队的报告仍可能被发送,应用窗口内的崩溃报告在您重启应用之前仍保持启用。
- 反馈(可选):提交反馈表单时,我们的团队会通过 Slack webhook 收到您在表单中的填写内容和选项(部分文本字段会被截短,识别出的敏感字符串会被替换)、提交时间戳、应用版本、操作系统平台和版本、已配置的 OCR 提供商名称,以及是否存在许可证文件。对于错误报告,"包含日志"复选框默认勾选。表单会在发送前显示日志行,显示的文本就是发送的文本:只包含由会清理日志内容的版本写入的警告和错误条目,最多 20 条、2,900 个字符。每一行都会经过严格清理器,路径、电子邮件地址、IBAN、长数字和引号内的文本,以及所有不属于应用自身消息用语的单词,都会被替换。应用把日志条目写成带有数字和代码的固定消息,而不是自由文本。这是一道防护,而不是保证:文档中恰好也是应用自身用语的单词可能通过。您在表单中输入的文本也会同样处理。取消勾选则不发送任何日志行。如果应用没有配置 webhook 地址,则不会发送任何内容。
- 更新:应用在每次启动约 10 秒后以及您点击"检查更新"时,从 GitHub Releases 检查更新,并自动下载。请求包含平台和一个随机更新 ID,不含应用版本,但下载更新时可能会暴露您所运行的版本。所有发布版本(包括 Windows 便携版)都会这样做,且没有关闭它的设置;打包的开发版本已禁用发布检查。
每个离开您设备的请求,都会向接收它的服务器暴露您的 IP 地址(或您的 VPN 或代理的地址)。
机器 ID 是一个假名设备指纹,而非您的姓名或电子邮件,用于执行试用限制并将许可证绑定到设备。
Ask AI 会向 AI 提供商发送什么
Ask AI 面板发送的是提示词加上脱敏后的文本,而不是一份可以放心发送的"已清理"文本:
- 您拒绝的片段保持可见,除非另一个您未拒绝的片段覆盖了它。
- 检测器未找到的 PII 会原样发送。
- 占位符(例如
<PRIVATE_PERSON_1>)是假名,而不是匿名化。类别相同且规范化后文本相同的片段共用一个占位符,部分屈折变化形式与其来源共用占位符;合并片段的各部分和您手动添加的片段则获得各自的编号。重复出现的占位符会向提供商显示各次提及是如何分组的。这种分组并不能可靠地对应真实身份或数量,但仍会暗示文档中大约有多少不同的人。 - 占位符周围的所有内容(角色、日期、地点、事件以及未被识别为 PII 的细节)都按原样发送。
当评估风险较高时,通过 OpenRouter 发送、复制提示词和打开 ChatGPT 链接会先要求您确认,通过本机上的 Ollama 运行则不会询问。确认后高风险本身不会阻止发送,但在检测被标记为不完整或不可用时,Ask AI 不可用。发送前请先阅读脱敏后的文本。可能到达云服务提供商的内容,只有您选择通过 Ask AI 发送的脱敏文本;发往 OpenRouter 的请求使用您输入的 API 密钥,直接从您的设备发出,不经过 Maskeno 服务器。
内置 OCR 会为它读取的每个扫描页面评分。如果某页被评为较差或无法识别,Ask AI 和脱敏文本的导出会请您确认已查看该页,确认之前主进程会拒绝导出;您的确认只对该页当时的文本有效,页面重新读取后即失效。这一评分是有局限的安全网:它不涵盖用 Ollama 读取的页面(没有置信度评分)、无需 OCR 的文档和较早的项目,评分良好也不能证明页面上的一切都已读取,因为被页面分析丢弃的文本不会被计入。
数据存储在您的设备上
- 项目数据库:已加密(SQLite3 Multiple Ciphers,ChaCha20-Poly1305,而非 SQLCipher)。密钥保存在数据库旁的
db.key文件中,并由 Electron safeStorage 保护:Windows 上使用 DPAPI(在您的 Windows 账户下运行的任何程序都能解密),macOS 上使用钥匙串,Linux 上使用密钥服务。如果 safeStorage 不可用,密钥会以明文写入,仅记录一条警告。 - 已下载的模型文件和 OCR 语言数据:这些是公开下载的文件,不含文档内容。应用不会加密它们,"重置所有数据"也不会删除它们。检测模型保存在 transformers.js 库的默认缓存文件夹中,即应用文件内、该库自身包文件夹里的
.cache文件夹;应用没有设置其他位置。OCR 语言文件(pol.traineddata、eng.traineddata等)保存在操作系统临时文件夹内名为maskeno-tessdata的文件夹中,系统或清理工具可能会将其清空;之后在下次需要时,应用会再次下载,除非设置了TESSDATA_PATH。设置了TESSDATA_PATH时,应用还会把从该文件夹读取的文件的副本保存在maskeno-tessdata内的一个子文件夹中,其名称为src-后接十二个十六进制字符。 - API 密钥、读取质量与日志:设置只保存您的 OpenRouter 密钥。早期版本为应用已不再使用的提供商(ElevenLabs、Resemble、Gemini、OpenAI 和 Anthropic)保存的密钥,会在此版本首次启动时从设置文件中删除一次;如果删除失败,会在下次启动时重试。对于内置 OCR 读取的每个扫描页面,数据库还会保存读取质量摘要(评级、平均置信度、单词数、存疑单词的字符范围,不含文本)以及您确认的时间。应用日志由固定的事件列表写出(带有数字、引用和代码的固定消息)。应用的设计是不写入文件名、路径、文档文本,以及在可能处理文档的操作中不写入错误消息,对它无法控制的文本会先经过清理器。这是有测试支撑的设计规则,而不是保证;旧版本写入的条目可能包含更多内容。主文件夹中的崩溃日志对错误只记录类名、代码和应用内部的位置,不记录消息,同时记录安装 ID。
- API 密钥与许可证密钥:使用同一 safeStorage 机制。如果不可用,API 密钥以明文存储(设置中会显示警告),许可证密钥仅做 base64 编码,这不是加密。正常请求会把您保存的密钥直接发送给所选提供商,不经过 Maskeno 服务器。
- 未加密的文件:页面图像、导入的源文件副本、应用日志、设置文件(其中各个密钥已加密,文件本身未加密)、许可证文件的元数据、机器 ID 和更新 ID 文件、试用状态文件(可读文本,有防篡改保护,未加密)、SQLite 共享内存索引文件,以及主目录中的崩溃日志、启动计时日志和启用启动调试时的调试日志。
网站分析
本网站加载 Plausible Analytics 脚本。其收集的内容请参阅 Plausible 的数据政策。
数据保留与删除
- 删除项目会移除其数据库行和页面图像文件夹,但项目的旧副本会保留在加密备份中,直到被新备份替换。应用复制到导入文件夹的文件不会被删除。
- 设置中的"重置所有数据"会删除数据库及其预写日志和共享内存文件、备份、设置文件(包括已保存的 API 密钥)、语音样本和许可证文件。它会保留页面图像、导入的文件、日志、
db.key、机器 ID 和更新 ID 文件、任何Maskeno.db.corrupted-*恢复副本及其附属文件(它们仍可能包含项目数据)、已下载的模型文件和 OCR 语言数据、主目录中的日志文件以及试用状态文件。试用状态文件特意保存在用户数据文件夹之外,以便重新安装不会重置试用。如需清除这些内容,请自行删除。 - 试用服务器存储您的机器 ID、试用使用次数、操作系统平台和应用版本(注册时发送)以及记录时间。服务器代码还会把您的 IP 地址用作速率限制键,在最后一次计数请求后 60 秒过期;这只涵盖服务器自身的代码,不包括托管提供商可能保留的日志。应用目前不会显示机器 ID,如需请求删除,请发送邮件至 [email protected]。
- 许可证数据由 Polar.sh 根据其隐私政策处理。
您在 GDPR 下的权利
作为欧盟的数据主体,您享有访问、更正、删除、数据可携带、反对以及撤回同意的权利。上文所述的数据流包括试用记录、短期的 IP 速率限制条目、您通过反馈表单发送的内容、您选择加入的崩溃和使用报告、网站分析,以及 Polar.sh 持有的许可数据。请通过 [email protected] 联系我们。
联系我们
- 电子邮件:[email protected]
- GitHub:提交 Issue