From 101368dea08b20f4b46da50d76f1bcc11981ffc0 Mon Sep 17 00:00:00 2001 From: EtienneLescot Date: Mon, 19 Oct 2026 00:21:47 +0200 Subject: [PATCH] fix: count installs driven through openscreen mcp as active The anonymous daily ping only ran from the GUI startup path, so an install used only by an agent through `openscreen mcp` never counted. The MCP server now sends the same ping once it is listening, then every 6 hours like the app. It shares the GUI's state file in userData, so an install used through both on one UTC day counts once, under whichever surface pinged first, and it honours the same opt-outs (tray toggle, DO_NOT_TRACK, CI, dev builds). It writes nothing to stdout, which is the MCP protocol stream. Each event now carries `surface`: "app" or "mcp". The other CLI commands stay silent: they run in scripts and CI more often than for a person. The FAQ and privacy page list the new field in every locale. --- electron/cli/cliMain.test.ts | 109 ++++++++++++++++++ electron/cli/cliMain.ts | 15 +++ electron/main.ts | 1 + electron/usage-ping.test.ts | 9 +- electron/usage-ping.ts | 4 + website/docs/faq.md | 2 +- .../current/faq.md | 2 +- .../privacy.mdx | 3 +- .../current/faq.md | 2 +- .../privacy.mdx | 3 +- .../current/faq.md | 2 +- .../privacy.mdx | 3 +- .../current/faq.md | 2 +- .../privacy.mdx | 3 +- .../current/faq.md | 2 +- .../privacy.mdx | 3 +- .../current/faq.md | 2 +- .../privacy.mdx | 3 +- .../current/faq.md | 2 +- .../privacy.mdx | 3 +- website/src/pages/privacy.mdx | 3 +- 21 files changed, 161 insertions(+), 17 deletions(-) create mode 100644 electron/cli/cliMain.test.ts diff --git a/electron/cli/cliMain.test.ts b/electron/cli/cliMain.test.ts new file mode 100644 index 000000000..85ef7e352 --- /dev/null +++ b/electron/cli/cliMain.test.ts @@ -0,0 +1,109 @@ +// `openscreen mcp` sends the GUI's anonymous usage ping: an install driven only by an agent +// counts as active. runCli runs for real here; only Electron and the heavy services around +// the MCP server are stubbed. + +import { mkdtempSync, rmSync } from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { sendUsagePing, setUsagePingEnabled } from "../usage-ping"; +import { runCli } from "./cliMain"; + +const mocks = vi.hoisted(() => ({ userData: "", serve: vi.fn(async () => undefined) })); + +vi.mock("electron", () => ({ + app: { + getPath: () => mocks.userData, + getVersion: () => "2.1.0", + exit: vi.fn(), + on: vi.fn(), + whenReady: () => Promise.resolve(), + commandLine: { appendSwitch: vi.fn() }, + }, + BrowserWindow: class {}, + ipcMain: { handle: vi.fn() }, + Menu: { setApplicationMenu: vi.fn(), buildFromTemplate: vi.fn() }, + session: { + defaultSession: { + setPermissionCheckHandler: vi.fn(), + setPermissionRequestHandler: vi.fn(), + setDisplayMediaRequestHandler: vi.fn(), + }, + }, + systemPreferences: {}, +})); +vi.mock("../install-channel", () => ({ getInstallChannel: () => "nsis" })); +vi.mock("../ipc/handlers", () => ({ + getSelectedDesktopSource: () => null, + registerIpcHandlers: () => ({ agentServices: {} }), +})); +vi.mock("../mcp/hidden-video", () => ({ openVideoInHiddenWindow: vi.fn() })); +vi.mock("../mcp/stdio-server", () => ({ serveMcpOverStdio: mocks.serve })); +vi.mock("../stt", () => ({ registerSttIpc: vi.fn(), shutdownStt: vi.fn() })); +vi.mock("../windows", () => ({ createRunnerWindow: vi.fn() })); +vi.mock("./runnerHost", () => ({ createRunnerHost: () => ({}) })); +vi.mock("./sessionData", () => ({ isolateCliSessionData: vi.fn() })); + +const fetchMock = vi.fn(async (_url: string, _init: RequestInit) => ({ ok: true })); +const savedConsole = { ...console }; +let stdoutWrite: ReturnType; + +beforeEach(() => { + mocks.userData = mkdtempSync(path.join(os.tmpdir(), "cli-usage-ping-")); + mocks.serve.mockClear(); + fetchMock.mockClear(); + vi.stubGlobal("fetch", fetchMock); + vi.stubEnv("DO_NOT_TRACK", ""); + vi.stubEnv("CI", ""); + // The darwin branch touches the dock and menu, which this test is not about. + vi.spyOn(process, "platform", "get").mockReturnValue("linux"); + // runCli's fatal-error handlers would outlive the test and exit the worker. + vi.spyOn(process, "on").mockReturnValue(process); + stdoutWrite = vi.spyOn(process.stdout, "write"); +}); + +afterEach(() => { + vi.unstubAllGlobals(); + vi.unstubAllEnvs(); + vi.restoreAllMocks(); + Object.assign(console, savedConsole); + rmSync(mocks.userData, { recursive: true, force: true }); +}); + +/** Runs `openscreen mcp` up to the point its server is listening and the ping went out. */ +async function runMcp() { + runCli({ kind: "mcp" }); + await vi.waitFor(() => expect(mocks.serve).toHaveBeenCalled()); + await new Promise((resolve) => setTimeout(resolve, 0)); +} + +describe("openscreen mcp usage ping", () => { + it("pings once, as the mcp surface, and writes nothing to stdout", async () => { + await runMcp(); + expect(fetchMock).toHaveBeenCalledTimes(1); + const body = JSON.parse(String(fetchMock.mock.calls[0][1].body)); + expect(body.properties).toMatchObject({ + version: "2.1.0", + channel: "nsis", + surface: "mcp", + }); + expect(stdoutWrite).not.toHaveBeenCalled(); + }); + + it("honours the tray toggle and DO_NOT_TRACK", async () => { + setUsagePingEnabled(mocks.userData, false); + await runMcp(); + setUsagePingEnabled(mocks.userData, true); + vi.stubEnv("DO_NOT_TRACK", "1"); + await runMcp(); + expect(fetchMock).not.toHaveBeenCalled(); + }); + + it("counts a day the app already counted only once", async () => { + const facts = { version: "2.1.0", os: "linux", arch: "x64", channel: "nsis" } as const; + await sendUsagePing(mocks.userData, { ...facts, surface: "app" }); + fetchMock.mockClear(); + await runMcp(); + expect(fetchMock).not.toHaveBeenCalled(); + }); +}); diff --git a/electron/cli/cliMain.ts b/electron/cli/cliMain.ts index fc1750968..410ba9745 100644 --- a/electron/cli/cliMain.ts +++ b/electron/cli/cliMain.ts @@ -9,10 +9,12 @@ import { app, BrowserWindow, ipcMain, Menu, session, systemPreferences } from "e import type { CliProgressEvent, CliSourcesResult } from "../../src/lib/cliContracts"; import { renameWithRetry } from "../atomic-rename"; import { isDiagnosticModeEnabled } from "../diagnostics/main-log-buffer"; +import { getInstallChannel } from "../install-channel"; import { getSelectedDesktopSource, registerIpcHandlers } from "../ipc/handlers"; import { openVideoInHiddenWindow } from "../mcp/hidden-video"; import { serveMcpOverStdio } from "../mcp/stdio-server"; import { registerSttIpc, shutdownStt } from "../stt"; +import { sendUsagePing, USAGE_PING_INTERVAL_MS } from "../usage-ping"; import { createRunnerWindow } from "../windows"; import { CLI_USAGE, type CliCommand } from "./args"; import { openGuiFromCli } from "./openGui"; @@ -409,6 +411,19 @@ export function runCli(command: CliCommand): void { onClose: () => void shutdownStt().finally(() => app.exit(0)), }); milestone("mcp server listening on stdio"); + // An install driven only by an agent is an active install too. Same ping, state + // file and opt-outs as the GUI's, and it writes nothing: stdout is the protocol. + // The other commands stay silent: they are scripts and CI more often than people. + const pingUsage = () => + void sendUsagePing(userDataDir, { + version: app.getVersion(), + os: process.platform, + arch: process.arch, + channel: getInstallChannel(), + surface: "mcp", + }); + pingUsage(); + setInterval(pingUsage, USAGE_PING_INTERVAL_MS).unref(); return; } diff --git a/electron/main.ts b/electron/main.ts index 5876d266c..43249d65a 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -689,6 +689,7 @@ function runUsagePing() { os: process.platform, arch: process.arch, channel: getInstallChannel(), + surface: "app", }); } diff --git a/electron/usage-ping.test.ts b/electron/usage-ping.test.ts index a892c495d..9daa1b900 100644 --- a/electron/usage-ping.test.ts +++ b/electron/usage-ping.test.ts @@ -26,7 +26,13 @@ function tmp(): string { } const fresh: UsagePingState = { enabled: true, day: null, week: null, month: null }; -const facts: UsagePingFacts = { version: "2.0.0", os: "win32", arch: "x64", channel: "store" }; +const facts: UsagePingFacts = { + version: "2.0.0", + os: "win32", + arch: "x64", + channel: "store", + surface: "app", +}; // Wednesday 14 October 2026. const wednesday = new Date("2026-10-14T09:00:00Z"); @@ -96,6 +102,7 @@ describe("sendUsagePing", () => { os: "win32", arch: "x64", channel: "store", + surface: "app", first_this_week: true, first_this_month: true, }); diff --git a/electron/usage-ping.ts b/electron/usage-ping.ts index 738eeddaa..9f231a942 100644 --- a/electron/usage-ping.ts +++ b/electron/usage-ping.ts @@ -34,6 +34,9 @@ export interface UsagePingFacts { os: NodeJS.Platform; arch: string; channel: InstallChannel; + /** What the install was used through: the app's window, or `openscreen mcp` for an agent. + * Both share one state file, so a day counts once, under whichever pinged first. */ + surface: "app" | "mcp"; } const DEFAULT_STATE: UsagePingState = { enabled: true, day: null, week: null, month: null }; @@ -139,6 +142,7 @@ export async function sendUsagePing( os: facts.os, arch: facts.arch, channel: facts.channel, + surface: facts.surface, first_this_week: plan.firstThisWeek, first_this_month: plan.firstThisMonth, }, diff --git a/website/docs/faq.md b/website/docs/faq.md index 69f15d276..51bc639d3 100644 --- a/website/docs/faq.md +++ b/website/docs/faq.md @@ -36,7 +36,7 @@ OpenScreen is a free, MIT-licensed screen recorder and video editor for Windows, - **github.com, once per language.** On a machine with a GPU, the first English or French transcription also downloads the model that re-times each word: about 110 MB for English, 350 MB for French. - **github.com and api.github.com.** Builds that update themselves check for a new release every 24 hours, and when you ask. By default they only tell you one is available. - **fonts.googleapis.com, only for a font added in 1.x.** A custom annotation font added in an earlier version is still fetched at launch, though 2.x no longer draws it. -- **PostHog, once a day.** An anonymous count of active installs, sent to PostHog's EU servers. It holds the app version, the operating system, the processor architecture, how the app was installed, and whether it is the first count of the week and of the month. That is all: no installation identifier (each count gets a new random ID), no IP address kept, nothing about your recordings. Untick **Send Anonymous Usage Count** in the tray menu to turn it off, or set `DO_NOT_TRACK=1`. +- **PostHog, once a day.** An anonymous count of active installs, sent to PostHog's EU servers. It holds the app version, the operating system, the processor architecture, how the app was installed, whether it was used directly or through its MCP server by an AI agent, and whether it is the first count of the week and of the month. That is all: no installation identifier (each count gets a new random ID), no IP address kept, nothing about your recordings. Untick **Send Anonymous Usage Count** in the tray menu to turn it off, or set `DO_NOT_TRACK=1`. - **Your AI provider, only if you connect one.** Chat editing sends your messages and the project data it reads, such as the timeline and transcript. Caption translation sends the caption text. Both stay off until you connect a provider. See [AI editing](./ai-editing.md). ## Does OpenScreen collect analytics or crash reports? diff --git a/website/i18n/de/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/de/docusaurus-plugin-content-docs/current/faq.md index 382c8c02e..d59ccc053 100644 --- a/website/i18n/de/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/de/docusaurus-plugin-content-docs/current/faq.md @@ -36,7 +36,7 @@ OpenScreen ist ein kostenloser Bildschirmrekorder und Videoeditor unter MIT-Lize - **github.com, einmal pro Sprache.** Auf einem Rechner mit GPU lädt die erste englische oder französische Transkription zusätzlich das Modell herunter, das jedes Wort neu zeitlich ausrichtet: etwa 110 MB für Englisch, 350 MB für Französisch. - **github.com und api.github.com.** Builds, die sich selbst aktualisieren, suchen alle 24 Stunden und auf deine Anfrage nach einer neuen Version. Standardmäßig melden sie nur, dass eine verfügbar ist. - **fonts.googleapis.com, nur für eine in 1.x hinzugefügte Schrift.** Eine eigene Schrift für Annotationen, die in einer früheren Version hinzugefügt wurde, wird beim Start weiterhin geladen, obwohl 2.x sie nicht mehr zeichnet. -- **PostHog, einmal täglich.** Eine anonyme Zählung aktiver Installationen, gesendet an die EU-Server von PostHog. Sie enthält die App-Version, das Betriebssystem, die Prozessorarchitektur, die Art der Installation und ob es die erste Zählung der Woche und des Monats ist. Mehr nicht: keine Installationskennung (jede Zählung erhält eine neue Zufalls-ID), keine gespeicherte IP-Adresse, nichts über deine Aufnahmen. Entferne im Menü des Symbols im Infobereich das Häkchen bei **Anonyme Nutzungszählung senden**, um sie abzuschalten, oder setze `DO_NOT_TRACK=1`. +- **PostHog, einmal täglich.** Eine anonyme Zählung aktiver Installationen, gesendet an die EU-Server von PostHog. Sie enthält die App-Version, das Betriebssystem, die Prozessorarchitektur, die Art der Installation, ob die App direkt oder über ihren MCP-Server von einem KI-Agenten genutzt wurde, und ob es die erste Zählung der Woche und des Monats ist. Mehr nicht: keine Installationskennung (jede Zählung erhält eine neue Zufalls-ID), keine gespeicherte IP-Adresse, nichts über deine Aufnahmen. Entferne im Menü des Symbols im Infobereich das Häkchen bei **Anonyme Nutzungszählung senden**, um sie abzuschalten, oder setze `DO_NOT_TRACK=1`. - **Dein KI-Anbieter, nur wenn du einen verbindest.** Die Chat-Bearbeitung sendet deine Nachrichten und die Projektdaten, die sie liest, etwa Zeitleiste und Transkript. Die Untertitelübersetzung sendet den Untertiteltext. Beides bleibt aus, bis du einen Anbieter verbindest. Siehe [KI-Bearbeitung](./ai-editing.md). ## Sammelt OpenScreen Analysedaten oder Absturzberichte? {#does-openscreen-collect-analytics-or-crash-reports} diff --git a/website/i18n/de/docusaurus-plugin-content-pages/privacy.mdx b/website/i18n/de/docusaurus-plugin-content-pages/privacy.mdx index 0594ac73f..28497af91 100644 --- a/website/i18n/de/docusaurus-plugin-content-pages/privacy.mdx +++ b/website/i18n/de/docusaurus-plugin-content-pages/privacy.mdx @@ -5,7 +5,7 @@ description: "Was die Desktop-App, die Website, der MCP-Server und das Agent-Plu # Datenschutzerklärung -Zuletzt aktualisiert: 18. Oktober 2026. +Zuletzt aktualisiert: 19. Oktober 2026. OpenScreen ist ein kostenloser Open-Source-Bildschirmrekorder und Videoeditor. Es hat kein Konto und keine eigenen Server: Deine Aufnahmen, Projekte und Transkripte werden auf deinem Computer gespeichert, und keine Funktion lädt eine Aufnahme hoch. Diese Seite listet alles auf, was deinen Rechner tatsächlich verlässt, von der Desktop-App, dieser Website, dem MCP-Server und dem Agent-Plugin, einschließlich der Projektdaten, die die KI-Funktionen an den Anbieter senden, den du wählst. @@ -21,6 +21,7 @@ Höchstens einmal täglich meldet die App an PostHog, auf dessen EU-Servern, das - die App-Version, das Betriebssystem und die Prozessorarchitektur; - wie die App installiert wurde (Installer, Microsoft Store, AppImage, Flatpak und so weiter); +- ob die App direkt oder über ihren MCP-Server von einem KI-Agenten genutzt wurde; - ob es die erste Zählung der Installation in der Woche und im Monat ist. Sonst enthält sie nichts: keine Installationskennung (jede Zählung erhält eine neue Zufalls-ID), keinen Namen, keine Dateinamen, nichts über deine Aufnahmen. Die Standortbestimmung ist abgeschaltet, und das PostHog-Projekt ist so eingestellt, dass IP-Adressen verworfen werden. Der Zweck ist zu wissen, wie viele Menschen OpenScreen nutzen und auf welchen Systemen; das ist das berechtigte Interesse des Projekts. diff --git a/website/i18n/es/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/es/docusaurus-plugin-content-docs/current/faq.md index c81054fac..8f395734d 100644 --- a/website/i18n/es/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/es/docusaurus-plugin-content-docs/current/faq.md @@ -36,7 +36,7 @@ OpenScreen es un grabador de pantalla y editor de video gratis, con licencia MIT - **github.com, una vez por idioma.** En un equipo con GPU, la primera transcripción en inglés o en francés también descarga el modelo que vuelve a sincronizar cada palabra: unos 110 MB para el inglés, 350 MB para el francés. - **github.com y api.github.com.** Las compilaciones que se actualizan solas buscan una nueva versión cada 24 horas, y cuando tú lo pides. De forma predeterminada, solo te avisan de que hay una disponible. - **fonts.googleapis.com, solo para una fuente añadida en 1.x.** Una fuente personalizada para anotaciones añadida en una versión anterior se sigue descargando al iniciar, aunque la 2.x ya no la dibuja. -- **PostHog, una vez al día.** Un recuento anónimo de instalaciones activas, enviado a los servidores de PostHog en la UE. Contiene la versión de la app, el sistema operativo, la arquitectura del procesador, cómo se instaló la app y si es el primer recuento de la semana y del mes. Nada más: ningún identificador de instalación (cada recuento recibe un ID aleatorio nuevo), ninguna dirección IP conservada, nada sobre tus grabaciones. Desmarca **Enviar recuento de uso anónimo** en el menú de la bandeja para desactivarlo, o define `DO_NOT_TRACK=1`. +- **PostHog, una vez al día.** Un recuento anónimo de instalaciones activas, enviado a los servidores de PostHog en la UE. Contiene la versión de la app, el sistema operativo, la arquitectura del procesador, cómo se instaló la app, si se usó directamente o a través de su servidor MCP por un agente de IA, y si es el primer recuento de la semana y del mes. Nada más: ningún identificador de instalación (cada recuento recibe un ID aleatorio nuevo), ninguna dirección IP conservada, nada sobre tus grabaciones. Desmarca **Enviar recuento de uso anónimo** en el menú de la bandeja para desactivarlo, o define `DO_NOT_TRACK=1`. - **Tu proveedor de IA, solo si conectas uno.** La edición por chat envía tus mensajes y los datos del proyecto que lee, como la línea de tiempo y la transcripción. La traducción de subtítulos envía el texto de los subtítulos. Ambas permanecen desactivadas hasta que conectas un proveedor. Consulta [Edición con IA](./ai-editing.md). ## ¿OpenScreen recopila analíticas o informes de fallos? {#does-openscreen-collect-analytics-or-crash-reports} diff --git a/website/i18n/es/docusaurus-plugin-content-pages/privacy.mdx b/website/i18n/es/docusaurus-plugin-content-pages/privacy.mdx index 45da23242..cce5927c4 100644 --- a/website/i18n/es/docusaurus-plugin-content-pages/privacy.mdx +++ b/website/i18n/es/docusaurus-plugin-content-pages/privacy.mdx @@ -5,7 +5,7 @@ description: "Qué envían fuera de tu equipo la app de escritorio, el sitio web # Política de privacidad -Última actualización: 18 de octubre de 2026. +Última actualización: 19 de octubre de 2026. OpenScreen es un grabador de pantalla y editor de vídeo gratuito y de código abierto. No tiene cuenta ni servidores propios: tus grabaciones, proyectos y transcripciones se guardan en tu equipo, y ninguna función sube una grabación. Esta página enumera todo lo que sí sale de tu equipo, desde la app de escritorio, este sitio web, el servidor MCP y el plugin para agentes, incluidos los datos del proyecto que las funciones de IA envían al proveedor que elijas. @@ -21,6 +21,7 @@ Como mucho una vez al día, la app informa a PostHog, en sus servidores de la UE - la versión de la app, el sistema operativo y la arquitectura del procesador; - cómo se instaló la app (instalador, Microsoft Store, AppImage, Flatpak, etc.); +- si la app se usó directamente o a través de su servidor MCP por un agente de IA; - si es el primer recuento de la instalación en la semana y en el mes. No contiene nada más: ningún identificador de instalación (cada recuento recibe un ID aleatorio nuevo), ningún nombre, ningún nombre de archivo, nada sobre tus grabaciones. La geolocalización está desactivada, y el proyecto de PostHog está configurado para descartar las direcciones IP. La finalidad es saber cuántas personas usan OpenScreen y en qué sistemas, lo que constituye el interés legítimo del proyecto. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/fr/docusaurus-plugin-content-docs/current/faq.md index 9f52109ae..db6bce75a 100644 --- a/website/i18n/fr/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/faq.md @@ -36,7 +36,7 @@ OpenScreen est un enregistreur d'écran et éditeur vidéo gratuit, sous licence - **github.com, une fois par langue.** Sur une machine dotée d'un GPU, la première transcription en anglais ou en français télécharge aussi le modèle qui recale chaque mot dans le temps : environ 110 Mo pour l'anglais, 350 Mo pour le français. - **github.com et api.github.com.** Les versions qui se mettent à jour d'elles-mêmes vérifient la présence d'une nouvelle version toutes les 24 heures, et quand vous le demandez. Par défaut, elles se contentent de vous signaler qu'une version est disponible. - **fonts.googleapis.com, seulement pour une police ajoutée en 1.x.** Une police d'annotation personnalisée ajoutée dans une version précédente est encore téléchargée au lancement, bien que la 2.x ne l'affiche plus. -- **PostHog, une fois par jour.** Un comptage anonyme des installations actives, envoyé aux serveurs de PostHog dans l'UE. Il contient la version de l'application, le système d'exploitation, l'architecture du processeur, le mode d'installation de l'application, et s'il s'agit du premier comptage de la semaine et du mois. C'est tout : aucun identifiant d'installation (chaque comptage reçoit un nouvel identifiant aléatoire), aucune adresse IP conservée, rien sur vos enregistrements. Décochez **Envoyer le comptage d'utilisation anonyme** dans le menu de l'icône de la zone de notification pour le désactiver, ou définissez `DO_NOT_TRACK=1`. +- **PostHog, une fois par jour.** Un comptage anonyme des installations actives, envoyé aux serveurs de PostHog dans l'UE. Il contient la version de l'application, le système d'exploitation, l'architecture du processeur, le mode d'installation de l'application, si elle a servi directement ou à un agent IA via son serveur MCP, et s'il s'agit du premier comptage de la semaine et du mois. C'est tout : aucun identifiant d'installation (chaque comptage reçoit un nouvel identifiant aléatoire), aucune adresse IP conservée, rien sur vos enregistrements. Décochez **Envoyer le comptage d'utilisation anonyme** dans le menu de l'icône de la zone de notification pour le désactiver, ou définissez `DO_NOT_TRACK=1`. - **Votre fournisseur d'IA, seulement si vous en connectez un.** Le montage par chat envoie vos messages et les données du projet qu'il lit, comme la timeline et la transcription. La traduction des sous-titres envoie le texte des sous-titres. Les deux restent désactivés tant que vous n'avez pas connecté de fournisseur. Voir [Montage par IA](./ai-editing.md). ## OpenScreen collecte-t-il des statistiques d'usage ou des rapports de plantage ? {#does-openscreen-collect-analytics-or-crash-reports} diff --git a/website/i18n/fr/docusaurus-plugin-content-pages/privacy.mdx b/website/i18n/fr/docusaurus-plugin-content-pages/privacy.mdx index 0a260f5b0..d782ad531 100644 --- a/website/i18n/fr/docusaurus-plugin-content-pages/privacy.mdx +++ b/website/i18n/fr/docusaurus-plugin-content-pages/privacy.mdx @@ -5,7 +5,7 @@ description: "Ce que l'application de bureau, le site web, le serveur MCP et le # Politique de confidentialité -Dernière mise à jour : 18 octobre 2026. +Dernière mise à jour : 19 octobre 2026. OpenScreen est un enregistreur d'écran et éditeur vidéo gratuit et open source. Il n'a ni compte ni serveur à lui : vos enregistrements, projets et transcriptions sont stockés sur votre ordinateur, et aucune fonction ne met un enregistrement en ligne. Cette page liste tout ce qui quitte bel et bien votre machine, depuis l'application de bureau, ce site web, le serveur MCP et le plugin pour agents, y compris les données de projet que les fonctions d'IA envoient au fournisseur que vous choisissez. @@ -21,6 +21,7 @@ Une fois par jour au plus, l'application signale à PostHog, sur ses serveurs da - la version de l'application, le système d'exploitation et l'architecture du processeur ; - le mode d'installation de l'application (programme d'installation, Microsoft Store, AppImage, Flatpak, etc.) ; +- si l'application a servi directement ou à un agent IA via son serveur MCP ; - s'il s'agit du premier comptage de la semaine et du mois pour cette installation. Il ne contient rien d'autre : aucun identifiant d'installation (chaque comptage reçoit un nouvel identifiant aléatoire), aucun nom, aucun nom de fichier, rien sur vos enregistrements. La géolocalisation est désactivée, et le projet PostHog est configuré pour ne pas conserver les adresses IP. L'objectif est de savoir combien de personnes utilisent OpenScreen, et sur quels systèmes, ce qui relève de l'intérêt légitime du projet. diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/ja/docusaurus-plugin-content-docs/current/faq.md index 00e64b3a6..d4ec9496f 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/faq.md @@ -36,7 +36,7 @@ OpenScreen は、Windows、macOS、Linux に対応した、MIT ライセンス - **github.com(言語ごとに一度だけ)。** GPU を搭載したマシンでは、英語またはフランス語の最初の文字起こしで、各単語のタイミングを付け直すモデルもダウンロードします。英語は約 110 MB、フランス語は約 350 MB です。 - **github.com と api.github.com。** 自動でアップデートするビルドは、24 時間ごとと、ユーザーが求めたときに、新しいリリースを確認します。既定では、新しいリリースがあることを知らせるだけです。 - **fonts.googleapis.com(1.x で追加したフォントのみ)。** 以前のバージョンで追加したカスタムの注釈フォントは、2.x では描画されませんが、起動時に引き続き読み込まれます。 -- **PostHog(1 日 1 回)。** アクティブなインストール数の匿名カウントで、PostHog の EU サーバーに送信されます。内容は、アプリのバージョン、OS、プロセッサのアーキテクチャ、アプリのインストール方法、そしてその週とその月で最初のカウントかどうかです。それ以外は何もありません。インストールを識別する ID はなく(カウントごとに新しいランダム ID が付きます)、IP アドレスは保持されず、録画に関する情報も一切含みません。無効にするには、トレイメニューの**匿名の利用カウントを送信**のチェックを外すか、`DO_NOT_TRACK=1` を設定します。 +- **PostHog(1 日 1 回)。** アクティブなインストール数の匿名カウントで、PostHog の EU サーバーに送信されます。内容は、アプリのバージョン、OS、プロセッサのアーキテクチャ、アプリのインストール方法、アプリが直接使われたか AI エージェントが MCP サーバー経由で使ったか、そしてその週とその月で最初のカウントかどうかです。それ以外は何もありません。インストールを識別する ID はなく(カウントごとに新しいランダム ID が付きます)、IP アドレスは保持されず、録画に関する情報も一切含みません。無効にするには、トレイメニューの**匿名の利用カウントを送信**のチェックを外すか、`DO_NOT_TRACK=1` を設定します。 - **AI プロバイダー(接続した場合のみ)。** チャット編集では、あなたのメッセージと、エージェントが読み取るプロジェクトのデータ(タイムラインや文字起こしなど)が送信されます。字幕の翻訳では、字幕のテキストが送信されます。どちらも、プロバイダーを接続するまではオフです。[AI 編集](./ai-editing.md)を参照してください。 ## OpenScreen は利用状況の分析データやクラッシュレポートを収集しますか? {#does-openscreen-collect-analytics-or-crash-reports} diff --git a/website/i18n/ja/docusaurus-plugin-content-pages/privacy.mdx b/website/i18n/ja/docusaurus-plugin-content-pages/privacy.mdx index 62f683905..88cd1f5c2 100644 --- a/website/i18n/ja/docusaurus-plugin-content-pages/privacy.mdx +++ b/website/i18n/ja/docusaurus-plugin-content-pages/privacy.mdx @@ -5,7 +5,7 @@ description: "OpenScreen のデスクトップアプリ、Web サイト、MCP # プライバシーポリシー -最終更新日:2026年10月18日 +最終更新日:2026年10月19日 OpenScreen は、無料でオープンソースの画面録画・動画編集ソフトです。アカウントも独自のサーバーもありません。録画、プロジェクト、文字起こしはお使いのパソコンに保存され、録画をアップロードする機能はありません。このページでは、デスクトップアプリ、この Web サイト、MCP サーバー、エージェントプラグインから、お使いのマシンの外に出るものをすべて記載します。AI 機能が、あなたの選んだプロバイダーに送信するプロジェクトのデータも含みます。 @@ -21,6 +21,7 @@ OpenScreen の保守者は Etienne Lescot で、ここに記載するデータ - アプリのバージョン、OS、プロセッサのアーキテクチャ - アプリのインストール方法(インストーラー、Microsoft Store、AppImage、Flatpak など) +- アプリが直接使われたか、AI エージェントが MCP サーバー経由で使ったか - そのインストールにとって、その週とその月で最初のカウントかどうか それ以外は何も含みません。インストールを識別する ID はなく(カウントごとに新しいランダム ID が付きます)、名前も、ファイル名も、録画に関する情報も一切含みません。位置情報の取得はオフで、PostHog のプロジェクトは IP アドレスを破棄するよう設定されています。目的は、OpenScreen を何人が、どのシステムで使っているかを知ることで、これはプロジェクトの正当な利益にあたります。 diff --git a/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/faq.md index 14765a81d..551df1e65 100644 --- a/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/faq.md @@ -36,7 +36,7 @@ O OpenScreen é um gravador de tela e editor de vídeo gratuito, com licença MI - **github.com, uma vez por idioma.** Em uma máquina com GPU, a primeira transcrição em inglês ou em francês também baixa o modelo que reajusta o tempo de cada palavra: cerca de 110 MB para o inglês, 350 MB para o francês. - **github.com e api.github.com.** Os builds que se atualizam sozinhos procuram uma nova versão a cada 24 horas e quando você pede. Por padrão, eles só avisam que há uma disponível. - **fonts.googleapis.com, só para uma fonte adicionada na 1.x.** Uma fonte personalizada de anotação adicionada numa versão anterior ainda é baixada na inicialização, embora a 2.x não a desenhe mais. -- **PostHog, uma vez por dia.** Uma contagem anônima de instalações ativas, enviada aos servidores do PostHog na UE. Ela contém a versão do app, o sistema operacional, a arquitetura do processador, como o app foi instalado e se é a primeira contagem da semana e do mês. Só isso: nenhum identificador de instalação (cada contagem recebe um ID aleatório novo), nenhum endereço IP guardado, nada sobre suas gravações. Desmarque **Enviar contagem de uso anônima** no menu da bandeja para desativá-la, ou defina `DO_NOT_TRACK=1`. +- **PostHog, uma vez por dia.** Uma contagem anônima de instalações ativas, enviada aos servidores do PostHog na UE. Ela contém a versão do app, o sistema operacional, a arquitetura do processador, como o app foi instalado, se foi usado diretamente ou pelo seu servidor MCP por um agente de IA, e se é a primeira contagem da semana e do mês. Só isso: nenhum identificador de instalação (cada contagem recebe um ID aleatório novo), nenhum endereço IP guardado, nada sobre suas gravações. Desmarque **Enviar contagem de uso anônima** no menu da bandeja para desativá-la, ou defina `DO_NOT_TRACK=1`. - **Seu provedor de IA, somente se você conectar um.** A edição por chat envia suas mensagens e os dados do projeto que ela lê, como a linha do tempo e a transcrição. A tradução de legendas envia o texto das legendas. As duas ficam desativadas até você conectar um provedor. Veja [Edição com IA](./ai-editing.md). ## O OpenScreen coleta dados de uso ou relatórios de falha? {#does-openscreen-collect-analytics-or-crash-reports} diff --git a/website/i18n/pt-BR/docusaurus-plugin-content-pages/privacy.mdx b/website/i18n/pt-BR/docusaurus-plugin-content-pages/privacy.mdx index a9b86f83c..a41ccae3c 100644 --- a/website/i18n/pt-BR/docusaurus-plugin-content-pages/privacy.mdx +++ b/website/i18n/pt-BR/docusaurus-plugin-content-pages/privacy.mdx @@ -5,7 +5,7 @@ description: "O que o app para desktop, o site, o servidor MCP e o plugin para a # Política de privacidade -Última atualização: 18 de outubro de 2026. +Última atualização: 19 de outubro de 2026. O OpenScreen é um gravador de tela e editor de vídeo grátis e de código aberto. Ele não tem conta nem servidores próprios: suas gravações, projetos e transcrições ficam guardados no seu computador, e nenhum recurso faz upload de uma gravação. Esta página lista tudo o que sai da sua máquina, a partir do app para desktop, deste site, do servidor MCP e do plugin para agentes, incluindo os dados do projeto que os recursos de IA enviam ao provedor que você escolher. @@ -21,6 +21,7 @@ No máximo uma vez por dia, o app informa ao PostHog, em seus servidores na UE, - a versão do app, o sistema operacional e a arquitetura do processador; - como o app foi instalado (instalador, Microsoft Store, AppImage, Flatpak etc.); +- se o app foi usado diretamente ou pelo seu servidor MCP por um agente de IA; - se é a primeira contagem da instalação na semana e no mês. Ela não contém mais nada: nenhum identificador de instalação (cada contagem recebe um ID aleatório novo), nenhum nome, nenhum nome de arquivo, nada sobre suas gravações. A geolocalização está desativada, e o projeto no PostHog está configurado para descartar os endereços IP. A finalidade é saber quantas pessoas usam o OpenScreen, e em quais sistemas, o que é um interesse legítimo do projeto. diff --git a/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/faq.md index 88bad0f25..dd37c9bcb 100644 --- a/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/faq.md @@ -36,7 +36,7 @@ OpenScreen 是一款免费的录屏与视频剪辑软件,采用 MIT 许可证 - **github.com,每种语言一次**。在带 GPU 的电脑上,第一次进行英语或法语转录时,还会下载为每个词重新计时的模型:英语约 110 MB,法语约 350 MB。 - **github.com 和 api.github.com**。能够自动更新的版本每 24 小时检查一次新版本,你手动检查时也会连接。默认情况下,它们只会通知你有新版本可用。 - **fonts.googleapis.com,仅限 1.x 中添加的字体**。在早期版本中添加的自定义标注字体仍会在启动时加载,尽管 2.x 已不再绘制它。 -- **PostHog,每天一次**。活跃安装数的匿名计数,发送到 PostHog 位于欧盟的服务器。它包含应用版本、操作系统、处理器架构、应用的安装方式,以及这是否为当周和当月的首次计数。仅此而已:没有安装标识符(每次计数都使用新的随机 ID),不保留 IP 地址,不涉及你的录制内容。要关闭它,请在托盘菜单中取消勾选**发送匿名使用计数**,或设置 `DO_NOT_TRACK=1`。 +- **PostHog,每天一次**。活跃安装数的匿名计数,发送到 PostHog 位于欧盟的服务器。它包含应用版本、操作系统、处理器架构、应用的安装方式、应用是被直接使用还是由 AI 智能体通过其 MCP 服务器使用,以及这是否为当周和当月的首次计数。仅此而已:没有安装标识符(每次计数都使用新的随机 ID),不保留 IP 地址,不涉及你的录制内容。要关闭它,请在托盘菜单中取消勾选**发送匿名使用计数**,或设置 `DO_NOT_TRACK=1`。 - **你的 AI 提供方,仅在你连接之后**。聊天编辑会发送你的消息以及它读取的项目数据,例如时间轴和转录文本。字幕翻译会发送字幕文本。在你连接提供方之前,这两项功能都处于关闭状态。请参阅 [AI 编辑](./ai-editing.md)。 ## OpenScreen 会收集分析数据或崩溃报告吗? {#does-openscreen-collect-analytics-or-crash-reports} diff --git a/website/i18n/zh-CN/docusaurus-plugin-content-pages/privacy.mdx b/website/i18n/zh-CN/docusaurus-plugin-content-pages/privacy.mdx index 5c8ae2f4b..0b14183ee 100644 --- a/website/i18n/zh-CN/docusaurus-plugin-content-pages/privacy.mdx +++ b/website/i18n/zh-CN/docusaurus-plugin-content-pages/privacy.mdx @@ -5,7 +5,7 @@ description: "OpenScreen 的桌面应用、网站、MCP 服务器和智能体插 # 隐私政策 -最后更新:2026 年 10 月 18 日。 +最后更新:2026 年 10 月 19 日。 OpenScreen 是一款免费、开源的录屏与视频剪辑软件。它没有账号,也没有自己的服务器:你的录制内容、项目和转录文本都存储在你的电脑上,没有任何功能会上传录制内容。本页列出了所有会离开你电脑的数据,涵盖桌面应用、本网站、MCP 服务器和智能体插件,包括 AI 功能发送给你所选提供方的项目数据。 @@ -21,6 +21,7 @@ OpenScreen 由 Etienne Lescot 维护,他是本页所述数据的数据控制 - 应用版本、操作系统和处理器架构; - 应用的安装方式(安装程序、Microsoft Store、AppImage、Flatpak 等); +- 应用是被直接使用,还是由 AI 智能体通过其 MCP 服务器使用; - 这是否为该安装当周和当月的首次计数。 除此之外不包含任何内容:没有安装标识符(每次计数都使用新的随机 ID),没有姓名,没有文件名,不涉及你的录制内容。位置查询已关闭,PostHog 项目也设置为丢弃 IP 地址。其目的是了解有多少人在使用 OpenScreen,以及在哪些系统上使用,这属于本项目的正当利益。 diff --git a/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/faq.md index 84f159da5..b774f201c 100644 --- a/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/faq.md @@ -36,7 +36,7 @@ OpenScreen 是一款採用 MIT 授權的免費螢幕錄影與影片剪輯軟體 - **github.com,每種語言一次。** 在有 GPU 的電腦上,第一次進行英文或法文轉錄時,還會下載為每個字詞重新對時的模型:英文約 110 MB,法文約 350 MB。 - **github.com 與 api.github.com。** 會自行更新的版本每 24 小時檢查一次新版本,你手動要求時也會檢查。預設只會通知你有新版本可用。 - **fonts.googleapis.com,僅限 1.x 中加入的字體。** 在先前版本中加入的自訂標註字體仍會在啟動時載入,儘管 2.x 已不再繪製它。 -- **PostHog,每天一次。** 活躍安裝數的匿名計數,會送到 PostHog 位於歐盟的伺服器。內容包括應用程式版本、作業系統、處理器架構、應用程式的安裝方式,以及這是否為當週與當月的第一次計數。僅此而已:沒有安裝識別碼(每次計數都使用新的隨機 ID),不保留 IP 位址,也不含任何與你錄影有關的資訊。若要關閉,請在系統匣選單中取消勾選**傳送匿名使用計數**,或設定 `DO_NOT_TRACK=1`。 +- **PostHog,每天一次。** 活躍安裝數的匿名計數,會送到 PostHog 位於歐盟的伺服器。內容包括應用程式版本、作業系統、處理器架構、應用程式的安裝方式、應用程式是直接使用還是由 AI 代理透過其 MCP 伺服器使用,以及這是否為當週與當月的第一次計數。僅此而已:沒有安裝識別碼(每次計數都使用新的隨機 ID),不保留 IP 位址,也不含任何與你錄影有關的資訊。若要關閉,請在系統匣選單中取消勾選**傳送匿名使用計數**,或設定 `DO_NOT_TRACK=1`。 - **你的 AI 提供者,僅在你連接時。** 聊天剪輯會送出你的訊息,以及它讀取的專案資料,例如時間軸與逐字稿。字幕翻譯會送出字幕文字。在你連接提供者之前,這兩項功能都保持關閉。請參閱 [AI 剪輯](./ai-editing.md)。 ## OpenScreen 會收集分析資料或當機報告嗎? {#does-openscreen-collect-analytics-or-crash-reports} diff --git a/website/i18n/zh-TW/docusaurus-plugin-content-pages/privacy.mdx b/website/i18n/zh-TW/docusaurus-plugin-content-pages/privacy.mdx index a9112cae6..65bd27c19 100644 --- a/website/i18n/zh-TW/docusaurus-plugin-content-pages/privacy.mdx +++ b/website/i18n/zh-TW/docusaurus-plugin-content-pages/privacy.mdx @@ -5,7 +5,7 @@ description: "OpenScreen 的桌面應用程式、網站、MCP 伺服器與代理 # 隱私權政策 -最後更新:2026 年 10 月 18 日。 +最後更新:2026 年 10 月 19 日。 OpenScreen 是免費、開放原始碼的螢幕錄影與影片剪輯軟體。它沒有帳號,也沒有自己的伺服器:你的錄影、專案與逐字稿都儲存在你的電腦上,沒有任何功能會上傳錄影。本頁列出所有確實會離開你電腦的資料,包括來自桌面應用程式、本網站、MCP 伺服器與代理程式外掛的資料,也包括 AI 功能傳送給你所選提供者的專案資料。 @@ -21,6 +21,7 @@ OpenScreen 由 Etienne Lescot 維護,他是本頁所述資料的資料控管 - 應用程式版本、作業系統與處理器架構; - 應用程式的安裝方式(安裝程式、Microsoft Store、AppImage、Flatpak 等); +- 應用程式是直接使用,還是由 AI 代理透過其 MCP 伺服器使用; - 這是否為該安裝當週與當月的第一次計數。 除此之外不包含任何內容:沒有安裝識別碼(每次計數都使用新的隨機 ID),沒有姓名,沒有檔案名稱,也不含任何與你錄影有關的資訊。位置查詢已關閉,PostHog 專案也設定為捨棄 IP 位址。目的是了解有多少人在使用 OpenScreen、使用哪些系統,這屬於本專案的正當利益。 diff --git a/website/src/pages/privacy.mdx b/website/src/pages/privacy.mdx index 16bedabd1..09b0ae9b3 100644 --- a/website/src/pages/privacy.mdx +++ b/website/src/pages/privacy.mdx @@ -5,7 +5,7 @@ description: "What OpenScreen's desktop app, website, MCP server and agent plugi # Privacy policy -Last updated: 18 October 2026. +Last updated: 19 October 2026. OpenScreen is a free, open-source screen recorder and video editor. It has no account and no servers of its own: your recordings, projects and transcripts are stored on your computer, and no feature uploads a recording. This page lists everything that does leave your machine, from the desktop app, this website, the MCP server and the agent plugin, including the project data that AI features send to the provider you choose. @@ -21,6 +21,7 @@ Once a day at most, the app tells PostHog, on its EU servers, that one installat - the app version, the operating system and the processor architecture; - how the app was installed (installer, Microsoft Store, AppImage, Flatpak and so on); +- whether the app was used directly or through its MCP server by an AI agent; - whether it is the installation's first count of the week and of the month. It holds nothing else: no installation identifier (each count gets a new random ID), no name, no file names, nothing about your recordings. Location lookup is off, and the PostHog project is set to discard IP addresses. The purpose is to know how many people use OpenScreen, on which systems, which is the project's legitimate interest.