审计
Slopographic 的工作原理
这些应用在你的浏览器中运行。本页列出它们使用的浏览器功能、它们可能发出的每一个网络请求,以及保存在你设备上的内容,方便你自己核实每一项说法。本页的每一条陈述都已对照公开代码仓库中的源代码进行核对。
简要版本
- 你的文件留在你的设备上。这些应用没有接收文件的服务器,也没有任何代码会上传你打开或保存的文件。唯一的例外是:你允许 AI 按钮把一份副本发送到你自己连接的 AI 服务。
- 你在磁盘上选择的文件,通过浏览器的 File System Access API 在你选定的文件夹中读写。参见 浏览器 API。
- 数据保存在此设备上浏览器自己的存储中(IndexedDB 和 localStorage)。参见 保存的内容。
- 部分请求会离开本站,但仅限于 每一个对外请求 中列出的情况:你确认的下载、你连接的云端备份、你用自己的密钥连接的 AI 服务、你开启的汇率,以及你接受的分析或广告。
- AI 按钮可使用你设备上的模型、你自己电脑上的服务器(例如 Ollama 或 LM Studio),或你自己的 Claude、ChatGPT 或 Gemini 等服务密钥。使用密钥时,你提出的问题会从浏览器直接发送到该服务商。参见 AI 按钮。
- 首页每次访问时都会加载 Google Analytics 代码,分析功能设为拒绝。其他页面只有在你接受分析后才会加载。只有在你接受广告后才会加载广告。
通俗地说
我的文件去了哪里?
哪里也不去。当你打开照片、PDF 或电子表格时,应用会在此浏览器标签页中读取它。没有上传步骤,也没有可以接收文件的 Slopographic 服务器。你保存的内容会进入你自己的磁盘,或此设备上此浏览器的存储中。只有当你连接自己的密钥 AI 服务并允许时,才会有副本发送到该服务(参见 AI 按钮)。
为什么应用有时会下载一些东西?
部分功能需要一个大多数人从不使用的大文件:AI 模型(用于移除背景、识别文字或转录语音)、视频引擎(用于转换视频),或用于其他书写系统的字体。这些文件只在你使用该功能时才会获取,并且会在应用告诉你它是什么、有多大之后才开始。这些文件会保存在浏览器中,因此只需下载一次。你自己的文件从不包含在该请求中。
离线也能用吗?
可以,首次访问之后即可。网站自身的文件由浏览器保存,因此应用无需连接网络即可打开并工作。只有你尚未下载的内容(模型或字体)才需要网络。
需要安装什么吗?
不需要。在手机、平板或电脑上的浏览器中打开应用即可开始使用。首次访问后,它在没有网络时也能继续工作。想在主屏幕上放一个图标?在 iPhone 或 iPad 上,点按“分享”,然后选择“添加到主屏幕”。在 Android 上,打开浏览器菜单,点按“添加到主屏幕”。在电脑上,点击地址栏中的安装图标。你无需 App Store 或 Google Play,你的文件也始终保留在你的设备上。
AI 按钮会发送什么,发往哪里?
这取决于你选择的模型。设备上的模型(需要 WebGPU,且只下载一次)在此标签页内作答,你提出的任何问题都不会离开设备。Ollama、LM Studio 及类似服务器运行在你自己的电脑上,或你在网络中设置的一台电脑上。使用你自己的 Claude、ChatGPT、Gemini、OpenRouter 或 Groq 等服务密钥时,你的消息会从浏览器直接发送到该服务商,中间没有 Slopographic 服务器,并适用其条款和价格。只有在面板询问并且你允许后,文件副本或你作品的图片才会被发送(你可以针对一次请求、一次访问或始终允许,并可在 AI 权限中撤销)。由 AI 生成或修改的图片(生成图片、用 AI 编辑)需要你连接的图像服务,例如使用你自己密钥的 OpenAI、Gemini 或 OpenRouter:浏览器本身无法绘制这些图片。设备上的模型和你自己电脑上的模型不收取费用;Gemini、Groq 和 Mistral 提供免费套餐,OpenRouter 提供免费模型(面板会标注“免费”)。密钥会保留在此标签页中直到你关闭它,只有当你勾选“在此设备上记住”时,才会保存在此浏览器中。对于 OpenRouter,你也可以点按“使用 OpenRouter 登录”,而不必粘贴密钥:你的浏览器会前往 openrouter.ai,你在那里允许访问,返回时本页会直接向 OpenRouter 为此浏览器请求一个密钥。登录过程直接在你的浏览器与 OpenRouter 之间进行,不经过 Slopographic 的服务器。该密钥从你自己的 OpenRouter 额度中扣费,保存方式与粘贴的密钥完全相同;你可以在 openrouter.ai/settings/keys 设置上限或撤销它,“忘记密钥”则会将其从此浏览器中移除。
AI 代理可以使用这些应用吗?
在支持 WebMCP 的浏览器中可以:浏览器中的助手,或通过浏览器扩展连接到你电脑的 AI 代理,都可以运行应用的命令、File convert 转换和工作流,并打开、保存或下载文件。它通过 ID 引用你的文件;工作在此标签页中运行,应用不上传任何内容,但代理能看到工具返回的结果。任何会删除或替换你作品的操作都会先询问你。WebMCP 仍是早期草案:Chrome 以试用版提供(版本 149 至 156)并需通过标志开启,Edge 需通过标志开启,Firefox 和 Safari 尚不支持。你可以在“设置”中关闭它,或在“帮助”、“AI 代理”中关闭。
我能自己核实吗?
可以。源代码是公开的,下方各节列出了应用使用的每一项浏览器功能和它们可能发出的每一个请求,并附有负责该功能的文件。你也可以打开浏览器的开发者工具,进入“网络”标签页观察:打开和保存你的文件不会发送任何内容。
从 Claude Code 和其他 AI 应用中使用 Slopographic
即将推出:你电脑上的 AI 应用,例如 Claude Code、Codex、Cursor、VS Code 或 Claude Desktop,可以使用你在浏览器中打开的 Slopographic 应用:它的真实命令、转换和工作流,你的文件输入,结果则以文件形式输出到你的电脑上。它通过 Slopographic MCP 服务器运行,这是 AI 应用在你电脑上启动的一个小程序。除 AI 应用本身外,无需账户,也无需安装其他任何东西。
- Claude Code:输入
/plugin marketplace add slopographic/claude-plugin,然后输入/plugin install slopographic@slopographic。只需做一次。 - 输入
/slopographic:slop-connect(如果愿意,可加上应用名称,例如photoslop)。Claude Code 会在你的浏览器中打开 Slopographic,并显示一个简短的代码。 - Chrome 会询问一次,是否允许此网站使用此设备上的应用和服务。请选择允许:这是页面与你电脑上的 Claude Code 通信的方式。页面只与你自己的电脑(127.0.0.1)通信,不与你的网络通信。
- 在页面中输入代码。随后页面的角落会显示“Claude Code 已连接 · 断开连接”。点击“断开连接”或关闭标签页即可结束连接。
每个标签页单独配对,且代码只能使用一次。没有它,你电脑上的其他任何程序都无法使用该页面。会删除或替换你作品的操作仍会在页面中询问你,与 AI 面板中一样。任何 Slopographic 页面都可以从命令面板连接:按 Ctrl+K(Mac 上为 ⌘K),然后选择“连接 AI 应用…”。
其他 AI 应用(Codex、Gemini CLI、Cursor、VS Code、Windsurf、Claude Desktop)的设置会在脚本运行时显示在此处。
ChatGPT 对话只能访问互联网上的服务器,因此目前无法使用此本地服务器。ChatGPT 桌面应用中的 Codex 可以使用。
浏览器 API,以及每个 API 的规范
文件路径是每个 API 的主要使用位置。要查找其余位置,请在代码仓库中搜索 API 名称。
| 浏览器 API | 用途 | 代码位置 | 规范 |
|---|---|---|---|
File System Access:window.showDirectoryPicker、FileSystemDirectoryHandle、createWritable | Slop Drive 中的本地磁盘、云端同步的备份文件夹、图库文件夹导入(只读),以及从磁盘加载 AI 模型文件夹。仅限 Chrome 和 Edge。只有在文件关闭时写入才会替换文件。 | drive/js/core/prov-dir.js, drive/js/ui/prov-drives.js, shared/sync/providers/local.js, gallery/js/io/source.js, shared/ai/webllm.js | wicg.github.io/file-system-access · MDN |
| IndexedDB | Slop Drive 文件、文件夹句柄、业务记录、字体和 AI 模型存储、加密的登录令牌。完整列表见保存的内容。 | shared/hub.js, drive/js/core/drives-store.js, shared/data/store.js, shared/sync/tokens.js, shared/library/store.js | w3.org/TR/IndexedDB · MDN |
| localStorage | 少量设置:你的同意选择、云端同步设置、各应用的设置、Drive 视图偏好。 | shared/consent/state.js, shared/sync/config.js, shared/profile/profile.js, drive/js/core/util.js | WHATWG HTML, Web Storage · MDN |
| sessionStorage | 仅在云端登录重定向进行期间保存的登录状态。标签页关闭时清除。 | shared/sync/sync.js | WHATWG HTML, Web Storage |
| Origin Private File System | 未使用。代码中没有 navigator.storage.getDirectory 调用。 | 无 | WHATWG File System |
| Service Workers | 离线使用。每个应用页面加载后注册。它只响应同源的 GET 请求。 | service-worker.js, shared/pwa.js | w3.org/TR/service-workers · MDN |
| Cache Storage | 网站自身文件的已保存副本、抠图模型文件,以及你下载后的 AI 聊天模型文件。 | service-worker.js, shared/cutout/loader.js, shared/ai/webllm.js | W3C Service Workers, Cache objects · MDN |
| Web App Manifest | 让浏览器可以将本网站安装为应用。声明名称、图标和起始页。 | manifest.webmanifest | w3.org/TR/appmanifest · MDN |
Storage Manager:navigator.storage.persist()、estimate() | 在安装后或以独立模式运行时,请求浏览器保留本网站的存储。Slop Storage 会先询问你,再询问浏览器。用于显示存储空间的占用情况。 | shared/pwa.js, shared/storage/storage.js | WHATWG Storage · MDN |
| Web Workers | 将繁重的工作移出页面运行:图像抠图、放大、AI 工具推理、PDF 生成。 | shared/cutout/cutout.js, upscale/js/engine/engine.js, aitools/common.js, pdf/js/io/build.js | WHATWG HTML, Workers · MDN |
| WebAssembly | 为 AI 工具、放大、图片转 3D、人脸检测和抠图运行随附的 ONNX Runtime Web,单线程运行。聊天应用的 WebLLM 库同样基于 WebAssembly。 | aitools/workers/ort.js, upscale/js/engine/worker.js, img3d/js/model/depth.js, shared/faces/index.js, shared/ai/webllm.js | WebAssembly Core spec · MDN |
| WebGPU | 聊天应用会检查你的电脑能运行什么,抠图工作线程会请求 GPU 适配器。在 GPU 上运行聊天模型,用于 Slop AI 以及每个应用中的 AI 面板。 | shared/ai/sysinfo.js, shared/cutout/worker.js, shared/ai/webllm.js | w3.org/TR/webgpu · MDN |
| WebGL 2 | 3D 预览,以及 SlopCut 中的颜色分级。 | 3d/js/render/stage.js, drive/js/core/render3d.js, slopcut/js/render/grade.js | Khronos WebGL 2.0 spec · MDN |
| Canvas 2D 和 OffscreenCanvas | 几乎每个应用中的绘制、图像编辑和导出。 | 约 130 个文件调用了 getContext('2d'),例如 photoslop/js/io/save.js | WHATWG HTML, Canvas · MDN |
| File 和 Blob,拖放 | 打开你选择或拖放到页面上的文件。除非你保存或分享,文件绝不会离开页面。 | shared/drop/, shared/preview/chrome.js | W3C File API · MDN |
Web Crypto:crypto.subtle | 在保存每个下载文件之前进行 SHA-256 校验,并使用 AES-GCM 加密登录令牌。 | shared/cutout/loader.js, shared/library/store.js, shared/sync/tokens.js | w3.org/TR/WebCryptoAPI · MDN |
| 通知 | 用于提醒的浏览器通知,仅在你按下按钮允许后才会显示。 | reminders/js/app.js, shared/reminders/engine.js | WHATWG Notifications · MDN |
| BroadcastChannel | 本网站各个已打开标签页之间的消息(频道 slopographic)。仅在浏览器内部传递。 | shared/hub.js | WHATWG HTML, Broadcasting · MDN |
Web Share:navigator.share() | 系统分享面板,仅在你按下“分享”时出现。之后由系统把文件发送到你选择的应用。 | shared/preview/chrome.js, ai/js/ui/speccard.js | w3.org/TR/web-share · MDN |
WebMCP:document.modelContext.registerTool() | 在浏览器有该 API 且“允许 AI 代理使用此应用”设置开启时,为浏览器中的 AI 代理提供应用的操作作为工具(其命令、文件操作、按 ID 引用的文件)。工具在页面中运行。源试用令牌位于每个页面的 head 中。 | shared/agent/webmcp.js, shared/agent/workspace.js, shared/agent/boot.js | W3C Web Machine Learning CG draft · Chrome |
| WebSocket | 到你电脑上 AI 应用(Slopographic MCP 服务器)的连接,仅在你选择“连接 AI 应用…”后建立。它只连接 ws://127.0.0.1,即仅本机。 | shared/agent/bridge.js | WHATWG WebSockets |
| Fetch | 应用中的每一个网络请求。完整列表见对外请求。 | 约 30 个文件中的约 35 处 fetch( 调用(其中少数是注释) | WHATWG Fetch · MDN |
此设备上保存的内容
以下所有内容都保存在此设备上的此浏览器中。这里的任何内容都不会发送到服务器。每个网站都有自己的存储,因此同一应用在另一个浏览器中有自己的副本。
| 名称 | 类型 | 保存的内容 | 设置位置 |
|---|---|---|---|
slop-drive | IndexedDB | Slop Drive 的文件和文件夹,包括文件内容。 | shared/hub.js |
slop-drive-folders | IndexedDB | 已命名的本地磁盘:每个文件夹句柄及其名称。移除磁盘只会忘记该句柄。 | drive/js/core/drives-store.js |
slop-sync, slop-sync-local | IndexedDB | 加密的云端登录令牌(在不可提取密钥下使用 AES-GCM)。所选备份文件夹的句柄。 | shared/sync/tokens.js, shared/sync/providers/local.js |
slop-data | IndexedDB | 业务记录:客户、产品、库存、发票、付款和账簿分录(shared/data/schema.js)。 | shared/data/store.js |
slop-library | IndexedDB | 从“获取更多”安装的字体,以及你添加的字体文件。 | shared/library/store.js |
slop-aitools, slop-ai | IndexedDB | 你安装的 AI 工具模型,以及 AI 聊天应用中的对话。 | aitools/models.js, ai/js/core/store.js |
slop-session | IndexedDB | 每个应用当前打开的视图和未保存的草稿,使再次访问时可从上次中断处继续。 | shared/session/session.js |
slop-consent | localStorage | 你对分析、广告和汇率的选择。在你选择之前保持关闭。 | shared/consent/state.js |
slop-sync | localStorage | 云端同步设置:你的 OAuth 客户端 ID 和上次同步时间。令牌不保存在此处。 | shared/sync/config.js |
slop-ai-keys | IndexedDB | 你的 AI 密钥,仅当你勾选“在此设备上记住”时保存。否则密钥只保留在此标签页中(sessionStorage),关闭后即消失。不包含在备份中。 | shared/ai/cloud/keys.js |
slop-ai.cloud, slop-ai.imagegen, slop-ai.permissions | localStorage | 你选择的 AI 服务和模型、你的支出上限、图片设置,以及你给予的 AI 权限。从不保存密钥。 | shared/ai/cloud/keys.js, shared/ai/imagegen/core.js, shared/ai/permissions.js |
slop-ai.signin | sessionStorage | 在你使用 OpenRouter 登录期间:证明登录始于此标签页的一次性 PKCE 验证器和 state。只使用一次,关闭标签页后即消失,从不保存密钥。 | shared/ai/cloud/signin.js |
slop.agents | localStorage | 当你关闭“允许 AI 代理使用此应用”时为“off”。该设置开启时不保存任何内容。 | shared/agent/boot.js |
slop.bridge | sessionStorage | 当此标签页与你电脑上的 AI 应用配对期间:端口和配对令牌,以便刷新后保持连接。断开连接或关闭标签页后即消失。 | shared/agent/bridge.js |
slop-profile | localStorage | 你从默认值更改过的各应用设置。 | shared/profile/profile.js |
slop-drive.prefs, slop-drive.theme | localStorage | Slop Drive 的视图偏好和主题。 | drive/js/core/util.js |
slopographic-v38 | Cache Storage | 网站自身文件的已保存副本,使网站可以离线工作。 | service-worker.js |
slop-cutout-v1 | Cache Storage | 抠图的模型文件,在核对其 SHA-256 之后保存。 | shared/cutout/loader.js |
Cookie:网站代码从不写入 Cookie(代码仓库中没有 document.cookie 调用)。你的同意选择保存在 localStorage 中,而不是 Cookie。Google 的分析和广告脚本在运行时可能会设置它们自己的 Cookie。Cookie 和分析一节说明了它们何时运行。
对外请求:请求可能去往的每一个地方
下面的列表对该代码仓库而言是完整的:它来自对每一个 fetch(、XMLHttpRequest、脚本和图片地址,以及代码中每一个外部 URL 的搜索。除了分析和广告脚本(仅按下文所述加载)之外,应用不加载任何第三方脚本、字体或样式表。没有第三方字体或 iframe。
| 目标 | 所属应用或部分 | 原因 | 发生时机 |
|---|---|---|---|
www.googletagmanager.com(Google Analytics,ID G-HW6FWQVFK3) | 首页(index.html);其他页面通过 shared/consent/consent-mode.js | 页面浏览量统计 | 首页:每次访问时都会加载,分析设为拒绝,直到你接受。其他页面:仅在你接受分析后加载。 |
pagead2.googlesyndication.com(AdSense) | 带有广告位的页面(shared/ads/ads.js) | 广告 | 仅在你接受广告后。由 shared/consent/consent-mode.js 中唯一的加载器加载。 |
huggingface.co,及其存储主机 hf.co 和 xethub.hf.co | AI 聊天(shared/ai/webllm.js、ai/js/core/engine.js);AI 工具和 OCR 应用(aitools/model-registry.js、aitools/models.js) | 模型文件:OCR(PP-OCRv4)、标签和聊天模型 | 在你按下下载,或在“获取更多”中安装模型,并确认其大小和许可之后。AI 工具会校验每个文件的 SHA-256,且文件必须来自 Hugging Face 主机或 slopographic/cdn 仓库。 |
cdn.jsdelivr.net(jsDelivr,仅限固定发布版本的 /gh/slopographic/cdn@) | 来自 slopographic/cdn 仓库的每一个文件(shared/cdn/assets.js):获取更多的资源包、语音和 OCR 模型、HEIC、相机 RAW、3D 和视频引擎 | 下方仓库的更快速、已缓存副本;超过 20 MB 的文件来自 raw.githubusercontent.com | 与下一行相同的时机。如果 jsDelivr 无响应或返回错误的字节,则会从 raw.githubusercontent.com 获取同一文件,并以相同方式校验。 |
raw.githubusercontent.com | AI 聊天(shared/ai/webllm.js,GPU 内核);获取更多的资源包(shared/library/packs.json) | 聊天模型的内核;来自 github.com/google/fonts 的字体文件(OFL);用于书写阿拉伯文、中文或印地文等其他文字的语言字体(Noto,OFL);用于 Slop Upscale 的 Real-ESRGAN 4 倍模型,用于图片转 3D 的深度模型,以及用于 Slop Transcribe 和 AI 工具的语音模型(Whisper、KB-Whisper、NB-Whisper;aitools/speech-models.js),均来自 slopographic/cdn 仓库 | 当你在“获取更多”或“语言和模型”对话框中按下下载并确认,或加载聊天模型时。当你用需要某种文字的书写系统输入文字时(例如在 Slop PDF 中),语言字体也会下载:应用会先询问,除非你选择自动下载语言字体(shared/fonts/jit.js)。每个文件在保存前都会对照其 SHA-256 校验。 |
accounts.google.com, oauth2.googleapis.com, www.googleapis.com | 云端同步到你自己的 Google Drive(shared/sync/providers/gdrive.js、pkce.js、config.js) | 登录,然后在可选的文件夹中备份和恢复一个备份文件。使用 drive.file 权限范围,它只能访问本应用创建的文件或你选择的文件。 | 仅当你使用自己的 OAuth 客户端 ID 连接,并按下备份或同步按钮时。 |
www.dropbox.com, api.dropboxapi.com, content.dropboxapi.com | 云端同步到 Dropbox(shared/sync/providers/dropbox.js) | 与 Google Drive 相同,适用于 Dropbox | 仅当你连接并按下备份或同步按钮时。 |
data-api.ecb.europa.eu | 汇率(shared/data/rates-ecb.js,从“设置”中打开,由账簿和计算器读取) | 来自欧洲中央银行的每日欧元参考汇率 | 仅当汇率类别已开启并且你按下“更新”时。只有在你同时勾选时,打开时的更新才会运行。 |
| 从其他网站拖入的图片的地址 | PhotoSlop(photoslop/js/app/tabs.js) | 在新标签页中打开拖入的图片 | 仅当你把其他页面上的图片拖入 PhotoSlop 时。 |
slopographic.com(网站本身) | 每个页面、首页的标志、Service Worker | 网站自身的文件 | 每次访问时。该来源不会请求其他任何内容。 |
你用自己的密钥连接的 AI 服务,例如 api.anthropic.com、api.openai.com、generativelanguage.googleapis.com、openrouter.ai 或 api.groq.com,或你为 Ollama、LM Studio 或其他服务器输入的地址 | AI 面板(shared/ai/cloud/,服务列表位于 shared/ai/cloud/catalog/);AI 图片(shared/ai/imagegen/) | 你的消息、应用的工具及其结果,以及仅在你允许后发送的文件或图片副本;对于 AI 图片,为提示词,编辑时还包括图片(最大 1536 px) | 仅在你添加自己的密钥或服务器地址并发送请求之后。设备上的模型不发送任何内容。 |
openrouter.ai/auth(你前往的页面)和 openrouter.ai/api/v1/auth/keys | AI 面板中的“使用 OpenRouter 登录”(shared/ai/cloud/signin.js) | 发往登录页面的内容:本页地址(用于返回),一个 PKCE 挑战值和一个随机 state。发往密钥地址的内容:OpenRouter 给出的一次性代码及其 PKCE 验证器;OpenRouter 随后为此浏览器返回一个密钥。直接在你的浏览器与 OpenRouter 之间进行,不经过 Slopographic 的服务器。 | 仅当你按下“使用 OpenRouter 登录”时。 |
127.0.0.1(你自己的电脑) | 连接 AI 应用(shared/agent/bridge.js) | 页面与你的 AI 应用启动的 Slopographic MCP 服务器通信:应用的工具、它们的结果,以及你要求发送或保存的文件 | 仅当你选择“连接 AI 应用…”并输入 AI 应用显示的代码之后。Chrome 会先询问。 |
| 仅为链接:Patreon、YouTube 和 Vimeo | 捐赠链接(shared/consent/donate.js),笔记中的视频链接(notes/js/video.js) | 点击时在新标签页中打开本站 | 仅在你点击时。笔记中的视频显示为链接,而不是嵌入播放器或缩略图。 |
两项看似使用网络但实际并非如此:tools/vendor-codemirror.mjs 在开发者手动运行以更新随附代码时,会从 cdn.jsdelivr.net 获取软件包。应用从不加载该 CDN。邮件查看器(eml/js/frame.js)通过内容安全策略阻止邮件中的远程图片和脚本,因此打开邮件不会加载远程图片或脚本。
Cookie 和分析
- 由网站代码保存:在 localStorage(
slop-consent)中保存的同意选择,在你选择之前分析、广告和汇率均为关闭。你可以随时在浏览器中清除存储。 - 网站代码不保存:没有 Cookie,也没有账户。代码仓库从不写入 Cookie。
- Google Analytics:在首页,标签加载时
analytics_storage设为拒绝。只有当你接受分析时才会开启。在其他页面,只有在你接受后才会加载。 - Google 自己的脚本在运行时可能会设置它们自己的 Cookie。这由 Google 决定,而不是由 Slopographic 的代码决定。下面的审计步骤会显示浏览器实际保存了什么。
- 广告:AdSense 只有在你接受广告后才会加载。拒绝广告会让广告位保持空白。
离线工作
首次访问之后,网站自身的文件会由 Service Worker 保存在 Cache Storage 中(service-worker.js,其文件列表位于 sw-precache.js)。页面先通过网络检查,然后从缓存中读取,再显示离线页面。你的文件不在 Service Worker 缓存中:它们位于你选择的文件夹中,或 IndexedDB 中。在断网时,应用仍可继续工作。下载内容(上面列出的模型和字体包)首次需要网络。
如何自行核实
- 网络标签页,页面加载后。打开应用,按 F12(Mac 上为 Cmd+Option+I),然后打开“网络”标签页。勾选“保留日志”,然后刷新。查看“域”一列。普通访问时,你应该只看到
slopographic.com,首页上另加 Google 的分析域名。 - 网络标签页,离线。在“网络”标签页中,打开节流菜单并选择“离线”。刷新,然后打开一个文件,编辑并保存。应用应该仍能工作。需要下载的内容会有相应提示。
- 应用标签页,存储。在 Chrome 或 Edge 中,打开“应用”标签页。在“存储”下查看本地存储、会话存储、IndexedDB、Cookie、Cache Storage 和 Service Worker。将你看到的内容与本页中的表格进行比对。
- 接受或拒绝,然后比对。在同意横条中拒绝分析和广告,刷新,然后再次检查“网络”标签页。然后接受它们,看看会出现哪些请求。
- 阅读源代码。代码公开在 GitHub 上的 slopographic 代码仓库中。搜索
fetch(、indexedDB.open、localStorage或showDirectoryPicker即可确认本页中的任何一行。同意代码位于shared/consent/,云端同步位于shared/sync/,下载列表位于shared/library/和aitools/。
本地文件夹(File System Access API)需要 Chrome 或 Edge。Firefox 和 Safari 不提供此功能,应用在适用的地方会说明。