“隐私优先”不是 ToolGarden 做完工具后再贴上的标签,而是默认的数据路径:只要浏览器能够可靠地完成任务,文本或文件就留在用户设备上,由浏览器直接生成结果。
这对日常工作很重要。JSON 可能包含客户记录,截图可能暴露内部后台,ZIP 可能装着源代码,PDF 可能是合同或身份证明。把这些文件上传到未知的转换服务器,会额外产生一份副本和一次信任决策,而许多小任务根本不需要付出这个代价。
网站负责交付应用,浏览器负责执行转换;工具里的输入不会被发送到处理 API。
这里的“隐私优先”具体指什么
ToolGarden 把“页面资源请求”和“工具输入处理”视为两条不同的数据流。网站仍然需要加载 HTML、JavaScript、CSS、字体、WebAssembly、Worker,有些功能还会下载模型文件;页面统计或广告也可能发出各自已披露的请求。但这些请求不等于上传你在工具中选择的 JSON、图片、压缩包、文档或媒体文件。
在受支持的流程中,输入保留在浏览器内存或浏览器管理的本地存储中,由 JavaScript 与 Web API 处理,结果以文本、预览、Blob 或本地下载的形式交还。服务器不接收输入,因此也不需要为这些输入建立任务队列、临时存储桶、转换日志或保留期限。
每个工具页都会显示的四项承诺
- ✓ 在你的浏览器本地运行
- ✓ 你的文件不会上传
- ✓ 不经过服务器处理
- ✓ 无需注册账号
这四句话会显示在每个工具页上,用来概括处理边界。每个工作区下方的工具正文还会继续说明实际使用的输入 API、解析器或依赖库、输出方式、支持格式与限制,让隐私声明能够对应到具体实现,而不是停留在通用口号。
不同工具是怎样在本地实现的
| 输入类型 | 本地实现 | 留在设备上的内容 |
|---|---|---|
| ZIP 压缩包 | fflate 在浏览器 JavaScript 中读取、压缩和解压条目。 | 文件名与文件内容 |
| 图片 | File、Blob、ImageBitmap、Canvas、OffscreenCanvas、Web Worker、可用时的 WebCodecs,以及本地 WASM 编解码器。 | 原图像素、预览、编辑过程和导出结果 |
| JSON 与结构化文本 | 浏览器 JavaScript 配合纯函数解析器,完成格式化、校验、修复、Diff、JSONPath,以及 YAML、XML、CSV 转换。 | 粘贴的数据、配置、日志和结果 |
| Base64 与文本编码 | TextEncoder、TextDecoder、Blob、FileReader、浏览器 Base64 能力;哈希或加密场景使用 Web Crypto。 | 原文、编码值和所选文件 |
| PDF 与文档 | pdf-lib、PDF.js、Canvas、fflate 与格式专用浏览器库完成受支持的合并、拆分、渲染、提取与导出。 | 文档字节与渲染页面 |
| 音频与视频 | Web Audio、媒体元素、Worker、FFmpeg WebAssembly,以及受支持的本地语音或分离模型。 | 媒体采样和生成结果 |
| 本地 AI 工具 | ONNX Runtime Web、Transformers.js、WebAssembly 或 WebGPU 配合下载到设备的模型运行推理。 | 图片、音频、中间张量和结果 |
ZIP:使用 fflate,而不是上传解压服务
ZIP 压缩和解压使用轻量 JavaScript 压缩库 fflate。浏览器读取每个 File,创建或解析压缩包条目,最后生成 Blob 供用户下载。文件名和内容都在当前标签页中处理,源代码包、资料文件夹或照片集合无需经过远程解压接口。
代价是内存占用。浏览器标签页的内存有限,压缩操作可能同时保留输入、解压数据和输出。超大压缩包、加密格式、损坏文件或少见压缩算法,更适合交给可信的桌面软件。
图片:Canvas、Web API、Worker 与本地编解码器
图片工具通过浏览器 API 解码文件,把像素绘制到 Canvas 或 OffscreenCanvas,执行变换后导出新的 Blob。Worker 可以把耗时操作移出界面线程;如果浏览器不能原生编码目标格式,本地 WebAssembly 编解码器可以补足能力,而不必把图片发往服务器。
Canvas 重新导出通常会移除大部分 EXIF 信息,这有助于减少 GPS 位置泄露,但也可能清除版权或工作流元数据。元数据重要时应检查输出,并在确认结果前保留未修改的原文件。
JSON:刻意保持本地的浏览器 JavaScript
JSON 格式化不需要云服务。ToolGarden 使用 JavaScript 解析器和纯函数工具完成格式化、压缩、修复、校验、对比、查询与结构化数据转换。React 页面只管理输入和展示;解析与转换逻辑位于可复用工具层,并返回明确的成功或错误结果。
这对 API 响应、配置文件、日志和 JWT 载荷尤其有用。本地处理消除了一次不必要的网络传输,但分享结果前仍应移除密钥等敏感信息,同时记住“解码令牌”不等于“解密令牌”。
Base64:本地编码,但不是加密
TextEncoder 和 TextDecoder 负责 Unicode 文本与字节之间的转换,Blob、FileReader 与浏览器 Base64 能力处理文件和 Data URL。这些操作是确定性的,可以完全在标签页内完成,不需要远程编码器。
Base64 只改变数据表示形式。拿到编码值的人通常都能还原内容,因此它不能被当作隐私或安全措施。需要保密时,应使用合适的加密与密钥管理,而不是编码工具。
PDF 与文档:在本地解析、渲染、转换和打包
PDF 工具通过 File API 读取所选文件。PDF.js 负责解析和渲染页面;pdf-lib 处理合并、拆分、页面提取、排序、水印和加密等操作;Canvas 用于生成页面图片和预览。Office 格式本质上是 ZIP 包,因此受支持的文档流程可以使用 fflate 配合 XML 与格式专用库处理,最后返回 PDF、DOCX 或其他 Blob。
输入字节、页面内容、渲染 Canvas 与生成文档都保留在标签页中。复杂 Office 排版、签名、表单、批注、无障碍结构与归档要求仍需要仔细检查输出。
音频与视频:Web Audio 和 FFmpeg WebAssembly
媒体工具使用 File 与 Blob URL 在本地播放,通过 Web Audio 解码并执行信号处理,再用 FFmpeg WebAssembly 完成受支持的转换、剪辑、提取或压缩任务。语音识别和音轨分离会把模型资源下载到浏览器,而所选录音或媒体文件在推理期间仍留在设备上。
大型媒体文件会占用较多内存与 CPU,模型或 FFmpeg 首次加载体积也可能较大。因此页面会显示进度和浏览器限制,而不会静默切换到远程处理任务。
文本、二维码与文件合并:确定性的浏览器工具库
字数统计、文本 Diff、Markdown 转换、字幕解析、URL 构建、时间戳、UUID、颜色转换与二维码生成,都通过 JavaScript 处理字符串或类型化数组。文件合并工具使用 File API 读取每个输入,按格式组合行、页面、幻灯片、XML 部件、图片或文本,最后创建可下载 Blob,不需要账号或服务器任务。
每个工具页都会说明自己的解析器和输出限制。CSV 合并与 DOCX 包合并虽然共享同一条本地数据路径,但正确性风险并不相同。
重型任务:WebAssembly、Worker 与设备端模型
有些任务超出浏览器内置能力。PDF 解析、AVIF 编码、音频转换、语音识别、图片去背景等功能,可以使用 WebAssembly、Web Worker、WebGPU 或本地机器学习模型。首次使用时浏览器可能下载运行时或模型,随后在设备上处理用户数据。
模型下载属于网络活动,但其中应当是应用资源,而不是用户输入。ToolGarden 把这一区别视为产品契约的一部分,并明确说明浏览器兼容性、内存、文件大小和模型质量带来的限制。
怎样验证“不上传”声明
- 使用无敏感信息的测试文件,不要直接拿生产数据验证。
- 打开浏览器开发者工具,进入 Network(网络)面板。
- 清空已有请求,运行工具,检查新出现的 POST、PUT、WebSocket 或体积异常的请求。
- 区分脚本、WASM、Worker、模型等应用资源,与包含测试文件内容的请求体。
- 产品发生较大更新,或切换到处理模式不同的工具时,重新检查一次。
限制与诚实的边界
浏览器本地处理降低了暴露面,但不会让所有流程自动安全。正确域名、HTTPS、浏览器扩展、设备安全、下载结果、剪贴板历史和本地备份仍然重要。即使网页工具不上传数据,受严格监管或极高敏感度的材料仍可能必须在获批的离线环境中处理。
- 大文件可能超出浏览器内存,速度也可能慢于桌面软件。
- 特殊格式或加密格式可能不受支持。
- 复杂文档排版和色彩工作流可能损失保真度。
- 首次使用可能需要下载编解码器、运行时或模型。
- 统计与广告属于独立的网站数据流,具体说明见隐私政策。
一句话总结这项策略
只要某项实用转换能够在浏览器中可靠运行,ToolGarden 就把它留在浏览器里,说明所用技术和能力边界,并避免在服务器端创建用户输入的副本。