diff --git a/components/settings/DataSection.tsx b/components/settings/DataSection.tsx index 123a8582..b33a6552 100644 --- a/components/settings/DataSection.tsx +++ b/components/settings/DataSection.tsx @@ -10,6 +10,7 @@ import { buildSettingsExportEnvelope, parseSettingsImportEnvelope, } from '../../services/settingsExchange'; +import { normalizePersistedSettings } from '../../services/storage/idbProjectStore'; import { isTauriRuntime, openTauriDataDirectory } from '../../services/tauriRuntime'; import { Button } from '../ui/Button'; import { Card, CardContent, CardHeader } from '../ui/Card'; @@ -104,7 +105,10 @@ export const DataSection: FC = () => { const parsed = JSON.parse(String(reader.result ?? '')); const partial = parseSettingsImportEnvelope(parsed); if (!partial) return; - dispatch(settingsActions.setSettings({ ...settings, ...partial })); + // QNBS-v3: route through the same sanitizer as IDB rehydration — a raw import spreads arbitrary fields into Redux otherwise, which autosave would then persist unchanged (e.g. a legacy openRouter.apiKey straight into plaintext desktop settings.json). + dispatch( + settingsActions.setSettings(normalizePersistedSettings({ ...settings, ...partial })), + ); } catch { /* invalid file */ } diff --git a/docs/IDB-ENCRYPTION.md b/docs/IDB-ENCRYPTION.md index 667685b5..ebc4232b 100644 --- a/docs/IDB-ENCRYPTION.md +++ b/docs/IDB-ENCRYPTION.md @@ -8,7 +8,7 @@ ## Overview -WorldScript Studio stores project data in IndexedDB. API keys use a separate encrypted-secret mechanism in `dbService.ts`. Optional IDB at-rest encryption uses a passphrase-derived AES-256-GCM key for the primary project, settings, snapshot, image, Codex, RAG, and binder-asset persistence paths. Other persistence surfaces must be inventoried and integrated through the same policy before a blanket “all IndexedDB data” claim is valid. +WorldScript Studio stores project data in IndexedDB. API keys use a separate encrypted-secret mechanism, routed through `storageService` to `services/storage/idbKeyStore.ts` (random, non-extractable AES-GCM key — see the Tauri Desktop Layer section below for the full call path). Optional IDB at-rest encryption uses a passphrase-derived AES-256-GCM key for the primary project, settings, snapshot, image, Codex, RAG, and binder-asset persistence paths. Other persistence surfaces must be inventoried and integrated through the same policy before a blanket “all IndexedDB data” claim is valid. The encryption service is gated behind `featureFlags.enableIdbAtRestEncryption` (on by default since v1.23 — manage in Settings → Privacy → "Encrypt project data at rest"): - `IdbUnlockModal` — prompts for passphrase on cold start when flag is on; rate-limiting: 3 failures → 5 s lockout, 6 failures → 30 s lockout @@ -165,7 +165,7 @@ Every protected store writer runs inside `withProtectedWriteAdmission()` (shared On the Tauri desktop build, primary project, settings, snapshot, image, Codex, RAG, and binder-asset data is persisted by the filesystem-backed store (`services/fs/*Store.ts`), not IndexedDB. That store writes plaintext (LZ-string compressed only, no encryption) regardless of `enableIdbAtRestEncryption`. Enabling the setting on desktop still shows `IdbUnlockModal`/`PassphraseModal` (the passphrase sentinel lives in the WebView's own IndexedDB, which persists on desktop too), but that unlock flow gates nothing on the filesystem side today — only the UI, not the actual manuscript files under `$APPDATA`, is shared with the web build. Character and world image reads use `storageService`, so they now follow the same selected backend as image uploads; this removes the prior desktop filesystem/IndexedDB split-persistence availability bug. See `README.md`'s "Encryption — which mechanism protects what" table for the authoritative per-mechanism breakdown. Extending real at-rest protection to the desktop filesystem store is a tracked, open gap — not yet implemented. -**API keys (resolved 2026-08-14):** all provider API keys, including Gemini, now route through `storageService` directly to the IndexedDB key store (`services/storage/idbKeyStore.ts`, random non-extractable AES-GCM key) on every platform, desktop included. The Tauri filesystem adapter's `saveApiKey`/`getApiKey` (`services/fs/settingsFsStore.ts`) is now a defense-in-depth backstop rather than the active path: `saveApiKey` throws if ever called, and `getApiKey` discards any pre-existing legacy key file — whether from the pre-2026-07-29 unsalted-SHA-256 scheme or the since-hardened but still filesystem-reconstructible PBKDF2 scheme — and returns `null`, surfacing a one-time re-entry notification. `encryptText`/`decryptText` in `fsCore.ts` are no longer called anywhere in the codebase for API keys and remain only as shared crypto plumbing pending [PR #356](https://github.com/qnbs/WorldScript-Studio/pull/356)'s project-data encryption work. This also resolves the earlier Gemini split-persistence bug: `components/ApiKeySection.tsx` and `services/geminiService.ts` now both route through `storageService`, closing the gap tracked in [#358](https://github.com/qnbs/WorldScript-Studio/issues/358) (that issue can be closed as fixed). +**API keys (resolved 2026-08-14):** all provider API keys, including Gemini, now route through `storageService` directly to the IndexedDB key store (`services/storage/idbKeyStore.ts`, random non-extractable AES-GCM key) on every platform, desktop included. The Tauri filesystem adapter's `saveApiKey`/`getApiKey` (`services/fs/settingsFsStore.ts`) is now a defense-in-depth backstop rather than the active path: `saveApiKey` throws if ever called, and `getApiKey` silently removes any pre-existing legacy key file — whether from the pre-2026-07-29 unsalted-SHA-256 scheme or the since-hardened but still filesystem-reconstructible PBKDF2 scheme — and returns `null`. A user-facing "API Key Reset Required" notification fires only if that removal itself fails (a permissions/IO error surfacing through the catch path); the common case (file found and removed cleanly) is silent, since a re-prompt for a never-populated key is indistinguishable from normal first-use. `encryptText`/`decryptText` in `fsCore.ts` are no longer called anywhere in the codebase for API keys and remain only as shared crypto plumbing pending [PR #356](https://github.com/qnbs/WorldScript-Studio/pull/356)'s project-data encryption work. This also resolves the earlier Gemini split-persistence bug tracked in [#358](https://github.com/qnbs/WorldScript-Studio/issues/358): `components/ApiKeySection.tsx` and `services/geminiService.ts` now both route through `storageService`. The repository does **not** currently use `tauri-plugin-stronghold`, an OS keychain, or a transparent desktop-only passphrase store. diff --git a/docs/cef/TAURI-COUPLING-INVENTORY.md b/docs/cef/TAURI-COUPLING-INVENTORY.md index 07455278..d5f18b2f 100644 --- a/docs/cef/TAURI-COUPLING-INVENTORY.md +++ b/docs/cef/TAURI-COUPLING-INVENTORY.md @@ -10,9 +10,12 @@ # Real @tauri-apps/* imports (static or dynamic) rg -l "from ['\"]@tauri-apps|import\(['\"]@tauri-apps" -g '*.ts' -g '*.tsx' -g '!*.test.ts' -g '!*.test.tsx' -g '!tests/**' . -# Files that only check the Tauri-presence globals, with no direct API import -rg -l "__TAURI_INTERNALS__|__TAURI__" -g '*.ts' -g '*.tsx' -g '!*.test.ts' -g '!*.test.tsx' -g '!tests/**' . -# ...then diffed against the first list +# Files that only check Tauri presence, with no direct API import — TWO detection methods, both +# required (the first pass only covered the raw-global check and undercounted; corrected 2026-08-18): +rg -l "isTauriRuntime\(\)" -g '*.ts' -g '*.tsx' -g '!*.test.ts' -g '!*.test.tsx' -g '!tests/**' . # the helper function +rg -l "__TAURI_INTERNALS__|__TAURI__|__TAURI_METADATA__" -g '*.ts' -g '*.tsx' -g '!*.test.ts' -g '!*.test.tsx' -g '!tests/**' . # raw globals (e.g. register-sw.ts) +# ...both diffed against the first list; comment-only matches (e.g. a docstring mentioning +# isTauriRuntime()) manually excluded after inspection. ``` Per-file API breakdown was extracted with `rg -oE "@tauri-apps/[a-zA-Z0-9/_-]*"` on each matched file. Full structured result: [`tauri-coupling-inventory.json`](tauri-coupling-inventory.json). @@ -25,7 +28,7 @@ Tauri coupling is **real but not centralized**. `services/tauriRuntime.ts` — t |---|---|---| | Direct `@tauri-apps/*` API imports | 16 | see table below | | Build-time externalization only | 1 | `vite.config.ts` | -| Detection-only (`isTauriRuntime()`/`__TAURI__`, no direct API import) | 5 | `components/settings/AiProviderCard.tsx`, `register-sw.ts`, `services/ai/localAiDeviceProfiler.ts`, `services/aiProviderService.ts`, `services/storageService.ts` | +| Detection-only (`isTauriRuntime()`/`__TAURI__`, no direct API import) | 13 | `components/settings/AiProviderCard.tsx`, `components/settings/DataSection.tsx`, `components/settings/DesktopSection.tsx`, `components/settings/FeatureFlagsSection.tsx`, `components/settings/GeneralSections.tsx`, `hooks/useNativeNotifications.ts`, `register-sw.ts`, `services/ai/localAiDeviceProfiler.ts`, `services/aiProviderService.ts`, `services/appBootstrap.ts`, `services/factoryResetService.ts`, `services/ollamaService.ts`, `services/storageService.ts` | | Ambient type declarations | 1 | `types/tauri-plugins.d.ts` | ## Direct API coupling by category @@ -57,6 +60,9 @@ src-tauri/ ├── fuzz/Cargo.toml (filename-sanitization fuzz harness) ├── osv-scanner.toml ├── src/ +│ ├── commands/ +│ │ ├── mod.rs +│ │ └── task_supervisor.rs (defines worldscript_task_supervisor_ping/submit — registered in lib.rs; active native task-dispatch surface used by services/tauriTaskBridge.ts) │ ├── lib.rs │ ├── lora.rs │ ├── main.rs @@ -65,7 +71,7 @@ src-tauri/ └── icons/ (11 image assets, no coupling) ``` -4 Rust source files. This is the entire native surface being migrated — small relative to the JS/TS coupling above, but it is where `WS-CEF-*` Rust work (§66 workstream catalogue) eventually lands. +6 Rust source files (corrected 2026-08-18 — the `commands/` module was omitted from the first pass). This is the entire native surface being migrated — small relative to the JS/TS coupling above, but it is where `WS-CEF-*` Rust work (§66 workstream catalogue) eventually lands. ## `package.json` diff --git a/docs/cef/tauri-coupling-inventory.json b/docs/cef/tauri-coupling-inventory.json index a726e9d5..3079b7b7 100644 --- a/docs/cef/tauri-coupling-inventory.json +++ b/docs/cef/tauri-coupling-inventory.json @@ -124,27 +124,67 @@ "detectionOnly": [ { "file": "components/settings/AiProviderCard.tsx", - "detects": "__TAURI_INTERNALS__/__TAURI__ or isTauriRuntime()", + "detects": "isTauriRuntime()", "note": "no direct @tauri-apps import" }, + { + "file": "components/settings/DataSection.tsx", + "detects": "isTauriRuntime()", + "note": "no direct @tauri-apps import; added 2026-08-18 correction" + }, + { + "file": "components/settings/DesktopSection.tsx", + "detects": "isTauriRuntime()", + "note": "no direct @tauri-apps import; added 2026-08-18 correction" + }, + { + "file": "components/settings/FeatureFlagsSection.tsx", + "detects": "isTauriRuntime()", + "note": "no direct @tauri-apps import; added 2026-08-18 correction" + }, + { + "file": "components/settings/GeneralSections.tsx", + "detects": "isTauriRuntime()", + "note": "no direct @tauri-apps import; added 2026-08-18 correction" + }, + { + "file": "hooks/useNativeNotifications.ts", + "detects": "isTauriRuntime()", + "note": "no direct @tauri-apps import; added 2026-08-18 correction" + }, { "file": "register-sw.ts", - "detects": "__TAURI_INTERNALS__/__TAURI__ or isTauriRuntime()", + "detects": "__TAURI_INTERNALS__/__TAURI__/__TAURI_METADATA__ (raw globals, not the isTauriRuntime() helper)", "note": "no direct @tauri-apps import" }, { "file": "services/ai/localAiDeviceProfiler.ts", - "detects": "__TAURI_INTERNALS__/__TAURI__ or isTauriRuntime()", + "detects": "isTauriRuntime()", "note": "no direct @tauri-apps import" }, { "file": "services/aiProviderService.ts", - "detects": "__TAURI_INTERNALS__/__TAURI__ or isTauriRuntime()", + "detects": "isTauriRuntime()", "note": "no direct @tauri-apps import" }, + { + "file": "services/appBootstrap.ts", + "detects": "isTauriRuntime()", + "note": "no direct @tauri-apps import; added 2026-08-18 correction" + }, + { + "file": "services/factoryResetService.ts", + "detects": "isTauriRuntime()", + "note": "no direct @tauri-apps import; added 2026-08-18 correction" + }, + { + "file": "services/ollamaService.ts", + "detects": "isTauriRuntime()", + "note": "no direct @tauri-apps import; added 2026-08-18 correction" + }, { "file": "services/storageService.ts", - "detects": "__TAURI_INTERNALS__/__TAURI__ or isTauriRuntime()", + "detects": "isTauriRuntime()", "note": "no direct @tauri-apps import" } ], @@ -169,13 +209,15 @@ "Entitlements.plist", "fuzz/Cargo.toml", "osv-scanner.toml", + "src/commands/mod.rs", + "src/commands/task_supervisor.rs", "src/lib.rs", "src/lora.rs", "src/main.rs", "src/pandoc.rs", "tauri.conf.json" ], - "note": "icons/ (11 image files) omitted from this list — asset-only, no coupling" + "note": "icons/ (11 image files) omitted from this list — asset-only, no coupling. commands/mod.rs and commands/task_supervisor.rs added 2026-08-18 correction (omitted from first pass; task_supervisor.rs defines worldscript_task_supervisor_ping/submit, registered in lib.rs; used by services/tauriTaskBridge.ts)" }, "packageJsonScripts": { "existing": ["tauri", "tauri:dev", "tauri:build", "dev:tauri"], diff --git a/features/project/thunks/characterThunks.ts b/features/project/thunks/characterThunks.ts index e4458232..2ed8e5b9 100644 --- a/features/project/thunks/characterThunks.ts +++ b/features/project/thunks/characterThunks.ts @@ -91,12 +91,22 @@ export const uploadCharacterImageThunk = createAsyncThunk( async ({ characterId, file }: { characterId: string; file: File }) => { return new Promise<{ characterId: string }>((resolve, reject) => { const reader = new FileReader(); - reader.onloadend = async () => { + // QNBS-v3: onload/onerror/onabort (not onloadend) plus Promise.catch(reject) so every terminal FileReader/saveImage outcome settles this Promise instead of leaving it pending. + reader.onload = () => { + const result = reader.result; + if (typeof result !== 'string') { + reject(new Error('FileReader did not produce a string result')); + return; + } // QNBS-v3: retain the data-URL MIME type so uploaded JPEG/WebP images survive filesystem round-trips. - await storageService.saveImage(characterId, reader.result as string); - resolve({ characterId }); + storageService + .saveImage(characterId, result) + .then(() => resolve({ characterId })) + .catch(reject); }; - reader.onerror = reject; + reader.onerror = () => + reject(reader.error ?? new Error('FileReader failed to read the file')); + reader.onabort = () => reject(new Error('FileReader aborted')); reader.readAsDataURL(file); }); }, diff --git a/features/project/thunks/worldThunks.ts b/features/project/thunks/worldThunks.ts index ec4e49ae..f02915fe 100644 --- a/features/project/thunks/worldThunks.ts +++ b/features/project/thunks/worldThunks.ts @@ -84,12 +84,22 @@ export const uploadWorldImageThunk = createAsyncThunk( async ({ worldId, file }: { worldId: string; file: File }) => { return new Promise<{ worldId: string }>((resolve, reject) => { const reader = new FileReader(); - reader.onloadend = async () => { + // QNBS-v3: onload/onerror/onabort (not onloadend) plus Promise.catch(reject) so every terminal FileReader/saveImage outcome settles this Promise instead of leaving it pending. + reader.onload = () => { + const result = reader.result; + if (typeof result !== 'string') { + reject(new Error('FileReader did not produce a string result')); + return; + } // QNBS-v3: retain the data-URL MIME type so uploaded JPEG/WebP images survive filesystem round-trips. - await storageService.saveImage(worldId, reader.result as string); - resolve({ worldId }); + storageService + .saveImage(worldId, result) + .then(() => resolve({ worldId })) + .catch(reject); }; - reader.onerror = reject; + reader.onerror = () => + reject(reader.error ?? new Error('FileReader failed to read the file')); + reader.onabort = () => reject(new Error('FileReader aborted')); reader.readAsDataURL(file); }); }, diff --git a/features/settings/settingsSlice.ts b/features/settings/settingsSlice.ts index fe0d5a2f..c57525af 100644 --- a/features/settings/settingsSlice.ts +++ b/features/settings/settingsSlice.ts @@ -34,9 +34,9 @@ const getSystemThemePreference = (): Theme => { return 'dark'; }; +// QNBS-v3: no apiKey default here — OpenRouterSettings dropped that field (see types.ts), the real key lives only in the dedicated per-provider key store. export const DEFAULT_OPENROUTER_SETTINGS: OpenRouterSettings = { enabled: false, - apiKey: '', // QNBS-v3: DeepSeek R1 free tier — strong reasoning + no cost, ideal default (zero friction). preferredModel: 'deepseek/deepseek-r1:free', }; diff --git a/locales/de/help.json b/locales/de/help.json index 6fec8021..7eeb4fb9 100644 --- a/locales/de/help.json +++ b/locales/de/help.json @@ -3,7 +3,7 @@ "help.advanced.adaptiveAi.title": "Adaptive KI, GPU & Eco-Modus", "help.advanced.cloudSync.content": "Die optionale Ende-zu-Ende-verschlüsselte Synchronisierung hält deine Bibliothek über mehrere Geräte hinweg aktuell – mit einem Cloudflare-R2-Backend. Aktiviere „Cloud-Sync“ unter Einstellungen → Early-Access-Funktionen und richte sie unter Einstellungen → Verbindungen ein. Projektdaten werden vor dem Hochladen lokal mit AES-256-GCM verschlüsselt, und deine KI-API-Schlüssel werden nie in die Cloud gesendet. Die Synchronisierung ist komplett optional; ohne sie bleibt WorldScript eine vollständig offline-first arbeitende App.", "help.advanced.cloudSync.title": "Cloud-Synchronisierung", - "help.advanced.encryption.content": "Schütze primäre Projektdaten, Snapshots und unterstützte Einstellungen auf deinem Gerät mit AES-256-GCM-Verschlüsselung, abgeleitet aus einer Passphrase (PBKDF2, 600.000 Iterationen). Aktiviere sie unter Einstellungen → Datenschutz & Sicherheit → „Projektdaten im Ruhezustand verschlüsseln“. Beim nächsten Start fragt ein Entsperr-Dialog nach deiner Passphrase; geschützte Lese- und Schreibvorgänge bleiben im gesperrten Zustand blockiert, statt auf Klartext zurückzufallen. Während das datenbankübergreifende Migrationsprotokoll fertiggestellt wird, können Verschlüsselung und Passphrase nicht geändert oder deaktiviert werden, damit bestehende Chiffretexte wiederherstellbar bleiben. Deine Passphrase verlässt das Gerät nie und kann nicht wiederhergestellt werden – exportiere ein verschlüsseltes Bibliotheks-Backup, bevor du experimentierst.", + "help.advanced.encryption.content": "Schütze primäre Projektdaten, Snapshots und unterstützte Einstellungen auf deinem Gerät mit AES-256-GCM-Verschlüsselung, abgeleitet aus einer Passphrase (PBKDF2, 600.000 Iterationen). Aktiviere sie unter Einstellungen → Datenschutz & Sicherheit → „Projektdaten im Ruhezustand verschlüsseln“. Beim nächsten Start fragt ein Entsperr-Dialog nach deiner Passphrase; geschützte Lese- und Schreibvorgänge bleiben im gesperrten Zustand blockiert, statt auf Klartext zurückzufallen. Verschlüsselung deaktivieren oder Passphrase ändern ist unter Einstellungen → Datenschutz verfügbar, abgesichert durch einen vollständigen, journalgeführten Neuverschlüsselungsvorgang, sodass bestehende Chiffretexte bei einer unterbrochenen Rotation wiederherstellbar bleiben. Dies schützt den Browser/PWA-IndexedDB-Speicherpfad; auf dem Tauri-Desktop-Build werden Projektdaten als Klartextdateien gespeichert und sind von dieser Einstellung noch nicht erfasst. Deine Passphrase verlässt das Gerät nie und kann nicht wiederhergestellt werden – exportiere ein verschlüsseltes Bibliotheks-Backup, bevor du experimentierst.", "help.advanced.encryption.title": "Verschlüsselung im Ruhezustand", "help.advanced.languages.content": "WorldScript Studio bietet 19 Oberflächensprachen. Fünf sind Produktions-Stufe (Deutsch, Englisch, Spanisch, Französisch, Italienisch) — vollständig geprüft. Weitere sind Nahe-Produktion (Japanisch, Chinesisch, Portugiesisch, Griechisch) oder Beta (Finnisch, Schwedisch, Ungarisch, Isländisch, Baskisch, Koreanisch, Russisch sowie die Rechts-nach-links-Sprachen Arabisch, Hebräisch und Persisch). Die Status-Stufe erscheint neben jeder Sprache unter Einstellungen → Allgemein und in der Sprachauswahl des Willkommensportals; ein Qualitäts-Dashboard fasst die Abdeckung je Sprache zusammen. Wechsle die Sprache dort oder über die Befehlspalette. Die Auswahl von Arabisch, Hebräisch oder Persisch stellt die gesamte Oberfläche auf RTL um und lädt selbst gehostete Noto-Sans-Arabic/Hebrew-Schriften (mit Noto Naskh Arabic für den Manuskript-Editor). Dein Manuskripttext folgt stets seiner eigenen Schreibrichtung, sodass du lateinische und RTL-Passagen frei mischen kannst. Beta- und RTL-Übersetzungen sind von der Community verbesserbar; Hilfeartikel fallen auf Englisch zurück, wo eine Sprache sie noch nicht übersetzt hat.", "help.advanced.languages.title": "Sprachen, Status-Stufen & RTL", @@ -25,7 +25,7 @@ "help.aiStudio.overview.title": "Übersicht über das KI-Schreibstudio", "help.aiStudio.plotAi.content": "

Plot-Board-KI: Nächsten Beat vorschlagen

Die Funktion Nächsten Beat vorschlagen nutzt Manuskript und Gliederung als Kontext, um die nächste Szenenkarte im Plot Board vorzuschlagen – ideal, wenn man weiß, dass ein Kapitel „irgendetwas“ braucht, aber unklar ist, was.

", "help.aiStudio.plotAi.title": "Plot-Board-KI-Beats", - "help.aiStudio.providers.content": "

KI-Anbieter & API-Schlüssel

WorldScript Studio verbindet sich mit neun KI-Backends. Konfiguriere sie unter Einstellungen → KI-Modelle und Einstellungen → Erweiterte KI. Alle API-Schlüssel werden mit AES-256-GCM (PBKDF2, 600.000 Iterationen, SHA-256) verschlüsselt, bevor sie in IndexedDB gespeichert werden – sie werden nie an einen WorldScript-Server übertragen.

Cloud-Anbieter

Lokale / Self-Hosted-Anbieter

Hybrid-Fallback-Kette

Unter Einstellungen → Erweiterte KI → Hybrid-Fallback-Kette legst du eine geordnete Anbieterliste fest. Wenn der primäre Anbieter ein Rate-Limit oder einen Netzwerkfehler zurückgibt, versucht WorldScript es automatisch mit dem nächsten in der Kette. Beispiel: erst Gemini, dann OpenAI, dann Ollama auf dem Desktop.

Kreativitätseinstellung

Der Kreativitäts-Regler (0–1) entspricht dem KI-Temperaturparameter. Nutze 0,2–0,4 für sachliche Aufgaben (Zusammenfassungen, Konsistenzprüfungen), 0,5–0,7 für ausgewogene Prosafortsetzung und 0,8–1,0 für Brainstorming und hochkreative Generierung.

", + "help.aiStudio.providers.content": "

KI-Anbieter & API-Schlüssel

WorldScript Studio verbindet sich mit neun KI-Backends. Konfiguriere sie unter Einstellungen → KI-Modelle und Einstellungen → Erweiterte KI. Browser/PWA-API-Schlüssel sind mit AES-256-GCM in IndexedDB geschützt; der Schutz von Desktop-API-Schlüsseln folgt dem Desktop-Speicher-Lebenszyklus und ist unter Einstellungen → Datenschutz & Sicherheit dokumentiert. API-Schlüssel werden nie an einen WorldScript-Server übertragen. (Ausnahme: Claude im Web/PWA-Build – dort werden Anfragen über WorldScripts eigenen zustandslosen Serverless-Proxy weitergeleitet, ohne Protokollierung auf Anwendungsebene – Anfrage-Logs der Hosting-Plattform liegen außerhalb dieser Garantie, da Anthropic direkte Browser-Anfragen blockiert; auf dem Desktop wird Anthropic wie jeder andere Anbieter direkt aufgerufen.)

Cloud-Anbieter

Lokale / Self-Hosted-Anbieter

Hybrid-Fallback-Kette

Unter Einstellungen → Erweiterte KI → Hybrid-Fallback-Kette legst du eine geordnete Anbieterliste fest. Wenn der primäre Anbieter ein Rate-Limit oder einen Netzwerkfehler zurückgibt, versucht WorldScript es automatisch mit dem nächsten in der Kette. Beispiel: erst Gemini, dann OpenAI, dann Ollama auf dem Desktop.

Kreativitätseinstellung

Der Kreativitäts-Regler (0–1) entspricht dem KI-Temperaturparameter. Nutze 0,2–0,4 für sachliche Aufgaben (Zusammenfassungen, Konsistenzprüfungen), 0,5–0,7 für ausgewogene Prosafortsetzung und 0,8–1,0 für Brainstorming und hochkreative Generierung.

", "help.aiStudio.providers.title": "KI-Anbieter & Schlüssel", "help.aiStudio.ragContext.content": "

Lokale Retrieval-Augmented Prompts

Wenn RAG-Kontext im KI-Werkzeuge-Panel aktiv ist, holt WorldScript relevante Manuskriptabschnitte, bevor das Modell aufgerufen wird. Der Hybrid-Modus mischt semantische Embeddings (~60 %), lexikalische Treffer (~30 %) und Aktualität (~10 %).

  1. Index unter Einstellungen → Erweiterte KI → Lokalen Suchindex neu aufbauen erstellen (lokales Embedding-Modell erforderlich).
  2. KI-Schreibstudio öffnen, RAG-Kontext aktivieren, dann Weiterschreiben, Brainstorm oder Kritik nutzen.
  3. Das Chunk-Badge zeigt injizierte Passagen; Plot-Board-Vorschläge nutzen dieselbe Pipeline.

Ihr Manuskript bleibt im Browser; nur der zusammengesetzte Prompt geht an den gewählten KI-Anbieter.

", "help.aiStudio.ragContext.title": "RAG-Kontext für KI-Generierung", @@ -65,25 +65,25 @@ "help.docs.featureFlags.title": "Feature-Flags", "help.docs.lazyLoading.content": "

Lazy Loading & Bundle-Architektur

WorldScript Studio ist auf schnellen Erstladevorgang ausgelegt. Alle 14 Hauptansichten und schwere Bibliotheken werden erst bei Bedarf geladen.

", "help.docs.lazyLoading.title": "Lazy Loading", - "help.docs.privacySecurity.content": "

Datenschutz- und Sicherheitsmodell

WorldScript Studio ist lokal konzipiert: Deine Geschichte verlässt dein Gerät nie, außer wenn du ausdrücklich eine Anfrage an einen Cloud-KI-Anbieter sendest.

", + "help.docs.privacySecurity.content": "

Datenschutz- und Sicherheitsmodell

WorldScript Studio ist lokal konzipiert: Deine Geschichte verlässt dein Gerät nie, außer wenn du ausdrücklich eine Anfrage an einen Cloud-KI-Anbieter sendest.

", "help.docs.privacySecurity.title": "Datenschutz & Sicherheit", "help.docs.pwaDesktop.content": "

PWA & Desktop-Paketierung

WorldScript Studio wird als Progressive Web App (PWA) und als native Desktop-App (Tauri) ausgeliefert. Beide Optionen halten Daten lokal – kein Konto erforderlich.

PWA (Browser)

Tauri-Desktop-App

", "help.docs.pwaDesktop.title": "PWA & Desktop", "help.docs.ragPipeline.content": "

RAG- & Prompt-Zusammenstellung

Die RAG-Pipeline reichert jede KI-Anfrage mit relevanten Passagen aus dem Manuskript an – damit das Modell die Geschichte kennt, bevor es die nächste Zeile schreibt.

", "help.docs.ragPipeline.title": "RAG-Pipeline", - "help.docs.tauriDesktop.content": "

Tauri-Desktop-App

Die WorldScript-Studio-Desktop-App verpackt dieselbe React-Codebasis in eine native Tauri-v2-Shell (Rust). Sie fügt Fähigkeiten hinzu, die Browser nicht bieten können, während deine Daten vollständig lokal bleiben.

Was die Desktop-App bietet

Installer & Distribution

Der Tauri-CI-Workflow erstellt plattformspezifische Installer bei jedem getaggten Release (v*): .dmg für macOS (code-signed), .msi / .exe für Windows (code-signed), .AppImage und .deb für Linux. Installer sind an GitHub Releases angehängt und werden vom Auto-Updater-Endpunkt referenziert.

Datenspeicherort

Auf dem Desktop liegen Daten im Tauri-App-Datenverzeichnis – typischerweise %APPDATA%\\WorldScript Studio unter Windows, ~/Library/Application Support/WorldScript Studio unter macOS und ~/.local/share/worldscript-studio unter Linux. Dieses Verzeichnis kann für ein vollständiges manuelles Backup sicher kopiert werden.

", + "help.docs.tauriDesktop.content": "

Tauri-Desktop-App

Die WorldScript-Studio-Desktop-App verpackt dieselbe React-Codebasis in eine native Tauri-v2-Shell (Rust). Sie fügt Fähigkeiten hinzu, die Browser nicht bieten können, während deine Daten vollständig lokal bleiben.

Was die Desktop-App bietet

Installer & Distribution

Der Tauri-CI-Workflow erstellt plattformspezifische Installer bei jedem getaggten Release (v*): .dmg für macOS (code-signed), .msi / .exe für Windows (code-signed), .AppImage und .deb für Linux. Installer sind an GitHub Releases angehängt und werden vom Auto-Updater-Endpunkt referenziert.

Datenspeicherort

Auf dem Desktop liegen Daten im Tauri-App-Datenverzeichnis – typischerweise %APPDATA%\\WorldScript Studio unter Windows, ~/Library/Application Support/WorldScript Studio unter macOS und ~/.local/share/worldscript-studio unter Linux. Dieses Verzeichnis kann für ein vollständiges manuelles Backup sicher kopiert werden.

", "help.docs.tauriDesktop.title": "Tauri-Desktop-App", - "help.faq.api.content": "

Benötige ich einen API-Schlüssel?

Nur für Cloud-KI-Anbieter. Du kannst WorldScript für das gesamte Schreiben, das Plot-Board, die Charaktere, die Versionskontrolle und den Export ohne API-Schlüssel verwenden. Für KI-Funktionen bei lokalen Anbietern ist ebenfalls kein Schlüssel erforderlich.

Cloud-Anbieter (erfordern einen API-Schlüssel)

Lokale Anbieter (kein API-Schlüssel erforderlich)

Schlüsselsicherheit

Jeder API-Schlüssel wird mit AES-256-GCM (PBKDF2, 600.000 SHA-256-Iterationen) verschlüsselt, bevor er in IndexedDB gespeichert wird. Der Klartextschlüssel wird nie auf die Festplatte geschrieben, nie in localStorage gespeichert und nie an einen WorldScript-Server gesendet. Du kannst Schlüssel für mehrere Anbieter gleichzeitig hinterlegen und ohne erneute Eingabe zwischen ihnen wechseln.

", + "help.faq.api.content": "

Benötige ich einen API-Schlüssel?

Nur für Cloud-KI-Anbieter. Du kannst WorldScript für das gesamte Schreiben, das Plot-Board, die Charaktere, die Versionskontrolle und den Export ohne API-Schlüssel verwenden. Für KI-Funktionen bei lokalen Anbietern ist ebenfalls kein Schlüssel erforderlich.

Cloud-Anbieter (erfordern einen API-Schlüssel)

Lokale Anbieter (kein API-Schlüssel erforderlich)

Schlüsselsicherheit

Browser/PWA-API-Schlüssel sind mit AES-256-GCM in IndexedDB geschützt (zufälliger, nicht extrahierbarer Schlüssel – keine Passphrase, nichts abzuleiten). Der Schutz von Desktop-API-Schlüsseln folgt dem Desktop-Speicher-Lebenszyklus, Details zum Browser-Speicher gelten also nicht automatisch für Desktop-Dateien. API-Schlüssel werden nie an einen WorldScript-Server gesendet. (Ausnahme: Claude im Web/PWA-Build – dort werden Anfragen über WorldScripts eigenen zustandslosen Serverless-Proxy weitergeleitet, ohne Protokollierung auf Anwendungsebene – Anfrage-Logs der Hosting-Plattform liegen außerhalb dieser Garantie, da Anthropic direkte Browser-Anfragen blockiert; auf dem Desktop wird Anthropic wie jeder andere Anbieter direkt aufgerufen.) Du kannst Schlüssel für mehrere Anbieter gleichzeitig hinterlegen und ohne erneute Eingabe zwischen ihnen wechseln.

", "help.faq.api.title": "Benötige ich einen API-Schlüssel?", "help.faq.offline.content": "

Offline arbeiten

WorldScript Studio ist Local-First. Fast alles funktioniert ohne Internetverbindung, sobald die App geladen ist.

", "help.faq.offline.title": "Offline arbeiten?", - "help.faq.privacy.content": "

Deine Geschichte bleibt auf deinem Gerät

Ja, vollständig. WorldScript Studio ist lokal ausgerichtet – es gibt kein WorldScript-Konto, keinen Cloud-Server und kein Unternehmen, das auf deine Manuskripte zugreifen kann. Alle Daten liegen in IndexedDB und OPFS deines Browsers, einem Speicher, den nur dein Gerät lesen kann.

Was lokal bleibt (standardmäßig alles)

Was dein Gerät verlässt (nur wenn du es wählst)

Vollständig offline gehen

Wechsle zu einem lokalen KI-Anbieter – WebLLM im Browser oder Ollama in der Desktop-App – oder deaktiviere die KI-Funktionen ganz. Im vollständig Offline-Modus werden nirgendwo Daten übertragen. Schreiben, Versionskontrolle, Export und alle Einstellungen funktionieren ohne Netzwerkverbindung.

", + "help.faq.privacy.content": "

Deine Geschichte bleibt auf deinem Gerät

Ja, vollständig. WorldScript Studio ist lokal ausgerichtet – es gibt kein WorldScript-Konto, keinen Cloud-Server und kein Unternehmen, das auf deine Manuskripte zugreifen kann. Alle Daten bleiben auf deinem Gerät: in IndexedDB und OPFS deines Browsers (Browser/PWA) oder in lokalen Dateien im Datenverzeichnis der Desktop-App (Tauri) – in jedem Fall auf deinem Gerät statt auf einem Server (Desktop-Dateien sind Klartext — lokale Geräte-/Betriebssystemrechte, nicht Verschlüsselung, entscheiden dort, wer sie lesen kann).

Was lokal bleibt (standardmäßig alles)

Was dein Gerät verlässt (nur wenn du es wählst)

Vollständig offline gehen

Wechsle zu einem lokalen KI-Anbieter – WebLLM im Browser oder Ollama in der Desktop-App – oder deaktiviere die KI-Funktionen ganz. Im vollständig Offline-Modus werden nirgendwo Daten übertragen. Schreiben, Versionskontrolle, Export und alle Einstellungen funktionieren ohne Netzwerkverbindung.

", "help.faq.privacy.title": "Ist meine Geschichte privat?", "help.faq.providers.content": "

Welchen KI-Anbieter wählen?

WorldScript unterstützt mehrere KI-Anbieter. Hier ist eine schnelle Entscheidungshilfe.

", "help.faq.providers.title": "Welchen KI-Anbieter wählen?", - "help.faq.saving.content": "

Dein gesamtes Projekt, einschließlich aller Texte und KI-generierten Bilder, wird automatisch und kontinuierlich im lokalen Speicher deines Webbrowsers (einer Datenbank namens IndexedDB) gespeichert. Das bedeutet, dass deine Arbeit auf deinem Computer zwischen Sitzungen erhalten bleibt. Eine „Speichern…“-Anzeige erscheint in der Kopfzeile, wenn Änderungen geschrieben werden, gefolgt von „Alle Änderungen gespeichert“.

Es gibt kein Cloud-Konto oder serverseitige Speicherung. Das gewährleistet vollständige Privatsphäre, bedeutet aber auch, dass du selbst für Sicherungen verantwortlich bist – nutze dazu die Funktion „Sicherung exportieren“ in den Einstellungen.

", + "help.faq.saving.content": "

Dein gesamtes Projekt, einschließlich aller Texte und KI-generierten Bilder, wird automatisch und kontinuierlich gespeichert — im Browser/PWA-Build im lokalen Speicher deines Webbrowsers (einer Datenbank namens IndexedDB), im Tauri-Desktop-Build als lokale Dateien im Datenverzeichnis der App. So oder so bleibt deine Arbeit auf deinem Computer zwischen Sitzungen erhalten. Eine „Speichern…“-Anzeige erscheint in der Kopfzeile, wenn Änderungen geschrieben werden, gefolgt von „Alle Änderungen gespeichert“.

Es gibt kein Cloud-Konto oder serverseitige Speicherung. Das gewährleistet vollständige Privatsphäre, bedeutet aber auch, dass du selbst für Sicherungen verantwortlich bist – nutze dazu die Funktion „Sicherung exportieren“ in den Einstellungen.

", "help.faq.saving.title": "Wie werden meine Projektdaten gespeichert?", - "help.gettingStarted.desktop.content": "

Wo soll WorldScript Studio ausgeführt werden?

WorldScript Studio läuft in drei Umgebungen. Deine Manuskripte, Charaktere und Einstellungen bleiben immer auf deinem Gerät – wähle die Option, die am besten zu deinem Workflow passt.

Browser (keine Installation erforderlich)

Öffne WorldScript in jedem modernen Browser (Chrome, Edge, Firefox, Safari). Daten werden in der IndexedDB deines Browsers gespeichert – einer persistenten Sandbox-Datenbank, die nicht durch normale Cache-Bereinigungen gelöscht wird. Schreiben, bearbeiten, exportieren und Versionen verwalten – alles vollständig offline, sobald die App-Shell gecacht ist.

PWA (Installation über Browser)

Installiere WorldScript als Progressive Web App für ein dediziertes Fenster ohne Browser-Chrome. Klicke in Chrome oder Edge auf das ⊕-Symbol in der Adressleiste oder gehe zu Einstellungen → Allgemein → Als App installieren. Auf iPhone oder iPad: Teilen → Zum Startbildschirm hinzufügen.

Desktop-App (Tauri)

Die optionale Tauri-v2-Desktop-App verpackt WorldScript in eine native Rust-Shell und bietet Funktionen, die Browser nicht liefern können.

Datenschutz in allen Umgebungen

API-Schlüssel werden vor der Speicherung mit AES-256-GCM verschlüsselt und nie an einen WorldScript-Server übertragen. Manuskripte verlassen dein Gerät nur, wenn du eine bestimmte Passage explizit an einen Cloud-KI-Anbieter sendest.

", + "help.gettingStarted.desktop.content": "

Wo soll WorldScript Studio ausgeführt werden?

WorldScript Studio läuft in drei Umgebungen. Deine Manuskripte, Charaktere und Einstellungen bleiben immer auf deinem Gerät – wähle die Option, die am besten zu deinem Workflow passt.

Browser (keine Installation erforderlich)

Öffne WorldScript in jedem modernen Browser (Chrome, Edge, Firefox, Safari). Daten werden in der IndexedDB deines Browsers gespeichert – einer persistenten Sandbox-Datenbank, die nicht durch normale Cache-Bereinigungen gelöscht wird. Schreiben, bearbeiten, exportieren und Versionen verwalten – alles vollständig offline, sobald die App-Shell gecacht ist.

PWA (Installation über Browser)

Installiere WorldScript als Progressive Web App für ein dediziertes Fenster ohne Browser-Chrome. Klicke in Chrome oder Edge auf das ⊕-Symbol in der Adressleiste oder gehe zu Einstellungen → Allgemein → Als App installieren. Auf iPhone oder iPad: Teilen → Zum Startbildschirm hinzufügen.

Desktop-App (Tauri)

Die optionale Tauri-v2-Desktop-App verpackt WorldScript in eine native Rust-Shell und bietet Funktionen, die Browser nicht liefern können.

Datenschutz in allen Umgebungen

Browser/PWA-API-Schlüssel sind mit AES-256-GCM in IndexedDB geschützt; der Desktop-Schutz folgt dem Desktop-Speicher-Lebenszyklus. API-Schlüssel werden nie an einen WorldScript-Server übertragen. (Ausnahme: Claude im Web/PWA-Build – dort werden Anfragen über WorldScripts eigenen zustandslosen Serverless-Proxy weitergeleitet, ohne Protokollierung auf Anwendungsebene – Anfrage-Logs der Hosting-Plattform liegen außerhalb dieser Garantie, da Anthropic direkte Browser-Anfragen blockiert; auf dem Desktop wird Anthropic wie jeder andere Anbieter direkt aufgerufen.) Manuskripte verlassen dein Gerät nur, wenn du eine bestimmte Passage explizit an einen Cloud-KI-Anbieter sendest.

", "help.gettingStarted.desktop.title": "Desktop-App (Tauri) & PWA", "help.gettingStarted.firstProject.content": "

Wähle deinen Weg

Das Willkommensportal bietet dir drei leistungsstarke Möglichkeiten, um anzufangen:

  1. Mit einer Vorlage starten: Ideal für strukturiertes Erzählen. Gehe zur Ansicht Vorlagen, wähle eine Struktur wie die „Drei-Akte-Struktur“ und nutze die Funktion „Mit KI personalisieren“, um basierend auf deiner Story-Idee individuelle Anregungen für jeden Abschnitt zu erhalten.
  2. Mit KI generieren: Wenn du ein Konzept, aber keine Struktur hast, nutze den Gliederungsgenerator. Gib dein Genre und eine Story-Idee ein, und er erstellt eine vollständige, bearbeitbare Handlungsgliederung, die du auf dein Manuskript anwenden kannst.
  3. Leer beginnen: Für alle, die eine komplett offene Leinwand bevorzugen: Diese Option erstellt ein neues Projekt mit einem leeren ersten Kapitel, sofort schreibbereit.
", "help.gettingStarted.firstProject.title": "Ihr erstes Projekt starten", diff --git a/locales/el/help.json b/locales/el/help.json index ace79c0b..3623d31a 100644 --- a/locales/el/help.json +++ b/locales/el/help.json @@ -71,7 +71,7 @@ "help.docs.pwaDesktop.title": "Συσκευασία PWA & επιτραπέζιου υπολογιστή", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & άμεση συναρμολόγηση", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Εφαρμογή επιφάνειας εργασίας Tauri", "help.faq.api.content": "

Χρειάζομαι κλειδί API;

Μόνο για παρόχους τεχνητής νοημοσύνης στο cloud. Μπορείτε να χρησιμοποιήσετε το WorldScript για όλη τη γραφή, τον πίνακα Plot, χαρακτήρες, έλεγχο έκδοσης και εξαγωγή χωρίς κανένα κλειδί API. Οι λειτουργίες τεχνητής νοημοσύνης με τοπικούς παρόχους επίσης δεν χρειάζονται κλειδί.

Οι πάροχοι cloud (απαιτούν κλειδί API)

Τοπικοί πάροχοι (δεν απαιτείται κλειδί API)

Ασφάλεια κλειδιού

Κάθε κλειδί API είναι κρυπτογραφημένο με AES-256-GCM (PBKDF2, 600.000 επαναλήψεις SHA-256 πριν αποθηκευτούν xD. Το κλειδί απλού κειμένου δεν γράφεται ποτέ στο δίσκο, δεν αποθηκεύεται ποτέ στο localStorage και δεν αποστέλλεται ποτέ σε κανένα διακομιστή WorldScript. Μπορείτε να αποθηκεύσετε κλειδιά για πολλούς παρόχους ταυτόχρονα και να κάνετε εναλλαγή μεταξύ τους χωρίς να τους εισαγάγετε ξανά.

", "help.faq.api.title": "Χρειάζομαι κλειδί API;", diff --git a/locales/en/help.json b/locales/en/help.json index d413805e..68db2952 100644 --- a/locales/en/help.json +++ b/locales/en/help.json @@ -3,7 +3,7 @@ "help.advanced.adaptiveAi.title": "Adaptive AI, GPU & Eco Mode", "help.advanced.cloudSync.content": "Optional end-to-end encrypted sync keeps your library in step across devices using a Cloudflare R2 backend. Enable “Cloud sync” under Settings → Early Access Features and configure it under Settings → Connections. Project data is encrypted locally with AES-256-GCM before upload, and your AI API keys are never sent to the cloud. Sync is entirely opt-in; with it off, WorldScript remains a fully offline-first app.", "help.advanced.cloudSync.title": "Cloud Sync", - "help.advanced.encryption.content": "Protect primary project data, snapshots, and supported settings stored on your device with AES-256-GCM encryption derived from a passphrase (PBKDF2, 600,000 iterations). Enable it under Settings → Privacy & Security → “Encrypt project data at rest”. On the next launch an unlock dialog asks for your passphrase; protected reads and writes remain blocked while locked rather than falling back to plaintext. While the cross-store migration protocol is being completed, changing or disabling encryption is unavailable so existing ciphertext remains recoverable. Your passphrase never leaves the device and cannot be recovered — export an encrypted library backup before you experiment.", + "help.advanced.encryption.content": "Protect primary project data, snapshots, and supported settings stored on your device with AES-256-GCM encryption derived from a passphrase (PBKDF2, 600,000 iterations). Enable it under Settings → Privacy & Security → “Encrypt project data at rest”. On the next launch an unlock dialog asks for your passphrase; protected reads and writes remain blocked while locked rather than falling back to plaintext. Disabling encryption or rotating your passphrase is available from Settings → Privacy, backed by a full journaled re-encryption pass so existing ciphertext stays recoverable if a rotation is interrupted. This protects the Browser/PWA IndexedDB storage path; on the Tauri desktop build, project data is stored as plaintext files and is not yet covered by this setting. Your passphrase never leaves the device and cannot be recovered — export an encrypted library backup before you experiment.", "help.advanced.encryption.title": "At-Rest Encryption", "help.advanced.languages.content": "WorldScript Studio ships 19 interface languages. Five are Production tier (German, English, Spanish, French, Italian) — fully reviewed. Others are Near-Production (Japanese, Chinese, Portuguese, Greek) or Beta (Finnish, Swedish, Hungarian, Icelandic, Basque, Korean, Russian, plus the right-to-left languages Arabic, Hebrew and Persian). The status tier appears next to each language in Settings → General and the Welcome Portal language picker, and a quality dashboard summarizes per-locale coverage. Switch language there or via the Command Palette. Selecting Arabic, Hebrew or Persian flips the whole interface to RTL and loads self-hosted Noto Sans Arabic/Hebrew fonts (with Noto Naskh Arabic for the manuscript editor). Your manuscript text always follows its own script direction, so you can mix Latin and RTL passages freely. Beta and RTL translations are community-improvable; help articles fall back to English where a locale has not yet translated them.", "help.advanced.languages.title": "Languages, status tiers & RTL", @@ -25,7 +25,7 @@ "help.aiStudio.overview.title": "Overview of the AI Writing Studio", "help.aiStudio.plotAi.content": "

Plot Board AI: Suggest Next Beat

The Suggest next beat feature uses your manuscript and outline as context to propose the next scene card for the Plot Board. It is designed for moments when you know a chapter needs \"something\" but are unsure what.

", "help.aiStudio.plotAi.title": "Plot Board AI beats", - "help.aiStudio.providers.content": "

AI Providers & API Keys

WorldScript Studio connects to nine AI backends. Configure them under Settings → AI Models and Settings → Advanced AI. Browser/PWA API keys are AES-256-GCM protected in IndexedDB; desktop API-key protection follows the desktop storage lifecycle and is documented in Settings → Privacy & Security. API keys are never transmitted to any WorldScript server.

Cloud Providers

Local / Self-Hosted Providers

Hybrid Fallback Chain

Under Settings → Advanced AI → Hybrid fallback chain, define an ordered list of providers. If the primary provider returns a rate-limit or network error, WorldScript automatically retries with the next provider in the chain. This creates a resilient setup — for example: try Gemini first, fall back to OpenAI, fall back to Ollama on desktop.

Creativity Setting

The Creativity slider (0–1) maps to the AI temperature parameter. Use 0.2–0.4 for factual tasks (summaries, consistency checks), 0.5–0.7 for balanced prose continuation, and 0.8–1.0 for brainstorming and highly creative generation.

", + "help.aiStudio.providers.content": "

AI Providers & API Keys

WorldScript Studio connects to nine AI backends. Configure them under Settings → AI Models and Settings → Advanced AI. Browser/PWA API keys are AES-256-GCM protected in IndexedDB; desktop API-key protection follows the desktop storage lifecycle and is documented in Settings → Privacy & Security. API keys are never transmitted to any WorldScript server. (Claude on the web/PWA build is the one exception: it relays through WorldScript's own stateless serverless proxy, never logged at the application level — hosting-platform request logs are outside this guarantee, since Anthropic blocks direct browser requests — desktop calls Anthropic directly, like every other provider.)

Cloud Providers

Local / Self-Hosted Providers

Hybrid Fallback Chain

Under Settings → Advanced AI → Hybrid fallback chain, define an ordered list of providers. If the primary provider returns a rate-limit or network error, WorldScript automatically retries with the next provider in the chain. This creates a resilient setup — for example: try Gemini first, fall back to OpenAI, fall back to Ollama on desktop.

Creativity Setting

The Creativity slider (0–1) maps to the AI temperature parameter. Use 0.2–0.4 for factual tasks (summaries, consistency checks), 0.5–0.7 for balanced prose continuation, and 0.8–1.0 for brainstorming and highly creative generation.

", "help.aiStudio.providers.title": "AI providers & keys", "help.aiStudio.ragContext.content": "

Retrieval-augmented prompts (local)

When RAG context is enabled in the AI Tools panel, WorldScript retrieves relevant manuscript chunks before calling the model. Hybrid mode blends semantic embeddings (~60%), lexical overlap (~30%), and recency (~10%).

  1. Build the index under Settings → Advanced AI → Rebuild local search index (requires the local embedding model on capable devices).
  2. Open the AI Writing Studio, enable RAG context, and run Continue, Brainstorm, or Critic.
  3. The chunk badge shows how many passages were injected; Plot Board beat suggestions use the same pipeline.

Your manuscript text stays in the browser; only the assembled prompt is sent to your chosen AI provider.

", "help.aiStudio.ragContext.title": "RAG context for AI generation", @@ -65,7 +65,7 @@ "help.docs.featureFlags.title": "Feature flag system", "help.docs.lazyLoading.content": "

Lazy Loading & Bundle Architecture

WorldScript Studio is engineered for a fast initial load. All 14 major views and several heavy libraries are loaded on-demand, only when first needed.

", "help.docs.lazyLoading.title": "Lazy loading & bundles", - "help.docs.privacySecurity.content": "

Privacy & Security Model

WorldScript Studio is designed local-first: your story never leaves your device unless you explicitly send a prompt to a cloud AI provider.

", + "help.docs.privacySecurity.content": "

Privacy & Security Model

WorldScript Studio is designed local-first: your story never leaves your device unless you explicitly send a prompt to a cloud AI provider.

", "help.docs.privacySecurity.title": "Privacy & security model", "help.docs.pwaDesktop.content": "

PWA & Desktop Packaging

WorldScript Studio ships as both a Progressive Web App (PWA) and a native desktop app (Tauri). Both options keep your data local — no account required.

PWA (browser)

Tauri desktop app

", "help.docs.pwaDesktop.title": "PWA & desktop packaging", @@ -73,17 +73,17 @@ "help.docs.ragPipeline.title": "RAG & prompt assembly", "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", - "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Browser/PWA API keys are AES-256-GCM protected in IndexedDB. Desktop API-key protection follows the desktop storage lifecycle, so browser persistence details do not describe desktop files. API keys are never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", + "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Browser/PWA API keys are AES-256-GCM protected in IndexedDB. Desktop API-key protection follows the desktop storage lifecycle, so browser persistence details do not describe desktop files. API keys are never sent to any WorldScript server. (Claude on the web/PWA build is the one exception: it relays through WorldScript's own stateless serverless proxy, never logged at the application level — hosting-platform request logs are outside this guarantee, since Anthropic blocks direct browser requests — desktop calls Anthropic directly, like every other provider.) You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", "help.faq.offline.content": "

Working Offline

WorldScript Studio is local-first. Almost everything works without an internet connection once the app is loaded.

", "help.faq.offline.title": "Can I work offline?", - "help.faq.privacy.content": "

Your Story Stays On Your Device

Yes, completely. WorldScript Studio is local-first by design — there is no WorldScript account, no cloud server, and no company that can access your manuscripts. All data lives in your browser's IndexedDB and OPFS, storage that only your device can read.

What stays local (everything, by default)

What leaves your device (only when you choose)

Go fully offline

Switch to a local AI provider — WebLLM in the browser or Ollama on the desktop app — or disable AI features entirely. In fully offline mode, zero data is transmitted anywhere. Writing, version control, export, and all settings work without any network connection.

", + "help.faq.privacy.content": "

Your Story Stays On Your Device

Yes, completely. WorldScript Studio is local-first by design — there is no WorldScript account, no cloud server, and no company that can access your manuscripts. All data stays on your device: in your browser's IndexedDB and OPFS on the Browser/PWA build, or in local files under the app's data directory on the Tauri desktop build — either way, staying on your device rather than a server (desktop files are plaintext, so local device/OS access controls — not encryption — are what actually restrict who can read them there).

What stays local (everything, by default)

What leaves your device (only when you choose)

Go fully offline

Switch to a local AI provider — WebLLM in the browser or Ollama on the desktop app — or disable AI features entirely. In fully offline mode, zero data is transmitted anywhere. Writing, version control, export, and all settings work without any network connection.

", "help.faq.privacy.title": "Is my story private?", "help.faq.providers.content": "

Which AI Provider Should I Use?

WorldScript supports multiple AI providers. Here is a quick guide to help you choose.

", "help.faq.providers.title": "Which AI provider should I use?", - "help.faq.saving.content": "

Your entire project, including all text and AI-generated images, is saved automatically and continuously in your web browser's local storage (a database called IndexedDB). This means your work is persisted on your computer between sessions. A 'Saving...' indicator appears in the header when changes are being written, followed by 'All changes saved'.

There is no cloud account or server-side storage. This ensures complete privacy but also means you are responsible for creating backups using the 'Export Backup' feature in Settings.

", + "help.faq.saving.content": "

Your entire project, including all text and AI-generated images, is saved automatically and continuously — in your web browser's local storage (a database called IndexedDB) on the Browser/PWA build, or in local files under the app's data directory on the Tauri desktop build. Either way, your work is persisted on your computer between sessions. A 'Saving...' indicator appears in the header when changes are being written, followed by 'All changes saved'.

There is no cloud account or server-side storage. This ensures complete privacy but also means you are responsible for creating backups using the 'Export Backup' feature in Settings.

", "help.faq.saving.title": "How is my project data saved?", - "help.gettingStarted.desktop.content": "

Where to Run WorldScript Studio

WorldScript Studio runs in three environments. Your manuscripts, characters, and settings always stay on your device regardless of which you use — choose the option that best fits your workflow.

Browser (No Install Required)

Open WorldScript in any modern browser (Chrome, Edge, Firefox, Safari). Data is stored in your browser's IndexedDB — a persistent, sandboxed database that is not cleared by normal browser cache clears. Write, edit, export, and manage versions fully offline once the app shell is cached.

PWA (Install from Browser)

Install WorldScript as a Progressive Web App for a dedicated window without browser chrome. In Chrome or Edge, click the ⊕ icon in the address bar, or go to Settings → General → Install as App. On iPhone or iPad, use Share → Add to Home Screen.

Desktop App (Tauri)

The optional Tauri v2 desktop app wraps WorldScript in a native Rust shell and adds capabilities that browsers cannot provide.

Privacy in All Environments

Browser/PWA API keys are AES-256-GCM protected in IndexedDB; desktop protection follows the desktop storage lifecycle. API keys are never transmitted to any WorldScript server. Manuscripts only leave your device when you explicitly send a specific passage to a cloud AI provider.

", + "help.gettingStarted.desktop.content": "

Where to Run WorldScript Studio

WorldScript Studio runs in three environments. Your manuscripts, characters, and settings always stay on your device regardless of which you use — choose the option that best fits your workflow.

Browser (No Install Required)

Open WorldScript in any modern browser (Chrome, Edge, Firefox, Safari). Data is stored in your browser's IndexedDB — a persistent, sandboxed database that is not cleared by normal browser cache clears. Write, edit, export, and manage versions fully offline once the app shell is cached.

PWA (Install from Browser)

Install WorldScript as a Progressive Web App for a dedicated window without browser chrome. In Chrome or Edge, click the ⊕ icon in the address bar, or go to Settings → General → Install as App. On iPhone or iPad, use Share → Add to Home Screen.

Desktop App (Tauri)

The optional Tauri v2 desktop app wraps WorldScript in a native Rust shell and adds capabilities that browsers cannot provide.

Privacy in All Environments

Browser/PWA API keys are AES-256-GCM protected in IndexedDB; desktop protection follows the desktop storage lifecycle. API keys are never transmitted to any WorldScript server. (Claude on the web/PWA build is the one exception: it relays through WorldScript's own stateless serverless proxy, never logged at the application level — hosting-platform request logs are outside this guarantee, since Anthropic blocks direct browser requests — desktop calls Anthropic directly, like every other provider.) Manuscripts only leave your device when you explicitly send a specific passage to a cloud AI provider.

", "help.gettingStarted.desktop.title": "Desktop app (Tauri) & PWA", "help.gettingStarted.firstProject.content": "

Choose Your Path

The Welcome Portal gives you three powerful ways to begin:

  1. Start with a Template: This is great for structured storytelling. Go to the Templates view, choose a structure like the 'Three-Act Structure,' and use the 'Personalize with AI' feature to get custom prompts for each section based on your story idea.
  2. Generate with AI: If you have a concept but no structure, use the Outline Generator. Just provide your genre and a story idea, and it will create a full, editable plot outline that you can apply to your manuscript.
  3. Start Blank: For those who prefer a completely open canvas, this option creates a new project with an empty first chapter, ready for you to start writing immediately.
", "help.gettingStarted.firstProject.title": "Starting Your First Project", diff --git a/locales/es/help.json b/locales/es/help.json index 4bef2404..c2f969c4 100644 --- a/locales/es/help.json +++ b/locales/es/help.json @@ -3,7 +3,7 @@ "help.advanced.adaptiveAi.title": "IA adaptativa, GPU y modo Eco", "help.advanced.cloudSync.content": "La sincronización opcional cifrada de extremo a extremo mantiene tu biblioteca al día en todos tus dispositivos mediante un backend de Cloudflare R2. Activa «Sincronización en la nube» en Ajustes → Funciones de acceso anticipado y configúrala en Ajustes → Conexiones. Los datos del proyecto se cifran localmente con AES-256-GCM antes de subirse, y tus claves de API de IA nunca se envían a la nube. La sincronización es totalmente opcional; sin ella, WorldScript sigue siendo una app totalmente «offline-first».", "help.advanced.cloudSync.title": "Sincronización en la nube", - "help.advanced.encryption.content": "Protege los datos principales del proyecto, las instantáneas y los ajustes compatibles almacenados en tu dispositivo con cifrado AES-256-GCM derivado de una frase de contraseña (PBKDF2, 600 000 iteraciones). Actívalo en Ajustes → Privacidad y seguridad → «Cifrar los datos del proyecto en reposo». En el siguiente inicio, una ventana de desbloqueo pide tu frase de contraseña; las lecturas y escrituras protegidas permanecen bloqueadas mientras está bloqueado en lugar de volver a texto sin cifrar. Mientras se completa el protocolo de migración entre almacenes, no se puede cambiar ni desactivar el cifrado para que los textos cifrados existentes sigan siendo recuperables. Tu frase de contraseña nunca sale del dispositivo y no se puede recuperar: exporta una copia de seguridad cifrada de la biblioteca antes de experimentar.", + "help.advanced.encryption.content": "Protege los datos principales del proyecto, las instantáneas y los ajustes compatibles almacenados en tu dispositivo con cifrado AES-256-GCM derivado de una frase de contraseña (PBKDF2, 600 000 iteraciones). Actívalo en Ajustes → Privacidad y seguridad → «Cifrar los datos del proyecto en reposo». En el siguiente inicio, una ventana de desbloqueo pide tu frase de contraseña; las lecturas y escrituras protegidas permanecen bloqueadas mientras está bloqueado en lugar de volver a texto sin cifrar. Desactivar el cifrado o cambiar la frase de contraseña está disponible en Ajustes → Privacidad, respaldado por un proceso de recifrado completo con registro, de modo que los textos cifrados existentes sigan siendo recuperables si una rotación se interrumpe. Esto protege la vía de almacenamiento IndexedDB de Navegador/PWA; en la compilación de escritorio Tauri, los datos del proyecto se guardan como archivos de texto sin cifrar y todavía no están cubiertos por este ajuste. Tu frase de contraseña nunca sale del dispositivo y no se puede recuperar: exporta una copia de seguridad cifrada de la biblioteca antes de experimentar.", "help.advanced.encryption.title": "Cifrado en reposo", "help.advanced.languages.content": "WorldScript Studio incluye 19 idiomas de interfaz. Cinco son de nivel Producción (alemán, inglés, español, francés, italiano), totalmente revisados. Otros son Casi-Producción (japonés, chino, portugués, griego) o Beta (finés, sueco, húngaro, islandés, vasco, coreano, ruso, además de los idiomas de derecha a izquierda árabe, hebreo y persa). El nivel de estado aparece junto a cada idioma en Ajustes → General y en el selector de idioma del Portal de Bienvenida, y un panel de calidad resume la cobertura por idioma. Cambia de idioma ahí o mediante la Paleta de Comandos. Seleccionar árabe, hebreo o persa cambia toda la interfaz a RTL y carga fuentes Noto Sans Arabic/Hebrew autoalojadas (con Noto Naskh Arabic para el editor de manuscrito). El texto de tu manuscrito siempre sigue su propia dirección de escritura, así que puedes mezclar pasajes latinos y RTL libremente. Las traducciones Beta y RTL son mejorables por la comunidad; los artículos de ayuda recurren al inglés cuando un idioma aún no los ha traducido.", "help.advanced.languages.title": "Idiomas, niveles de estado y RTL", @@ -65,7 +65,7 @@ "help.docs.featureFlags.title": "Sistema de banderas de funciones", "help.docs.lazyLoading.content": "

Carga diferida y arquitectura de bundles

WorldScript Studio está diseñado para una carga inicial rápida. Las 14 vistas principales y varias bibliotecas pesadas se cargan bajo demanda, solo cuando se necesitan por primera vez.

", "help.docs.lazyLoading.title": "Carga diferida y bundles", - "help.docs.privacySecurity.content": "

Modelo de privacidad y seguridad

WorldScript Studio está diseñado localmente: su historia nunca sale de su dispositivo a menos que envíe explícitamente un mensaje a un proveedor de inteligencia artificial en la nube.

", + "help.docs.privacySecurity.content": "

Modelo de privacidad y seguridad

WorldScript Studio está diseñado localmente: su historia nunca sale de su dispositivo a menos que envíe explícitamente un mensaje a un proveedor de inteligencia artificial en la nube.

", "help.docs.privacySecurity.title": "Modelo de privacidad y seguridad", "help.docs.pwaDesktop.content": "

Empaquetado PWA y escritorio

WorldScript Studio se distribuye como Progressive Web App (PWA) y como aplicación de escritorio nativa (Tauri). Ambas opciones mantienen tus datos en local — sin cuenta requerida.

PWA (navegador)

App de escritorio Tauri

", "help.docs.pwaDesktop.title": "Empaquetado PWA y escritorio", @@ -73,17 +73,17 @@ "help.docs.ragPipeline.title": "RAG y ensamblado de prompts", "help.docs.tauriDesktop.content": "

Aplicación de escritorio Tauri

La aplicación de escritorio WorldScript Studio empaqueta la misma base de código React en un shell Tauri v2 nativo (Rust). Añade capacidades que los navegadores no pueden ofrecer, mientras mantiene tus datos completamente locales.

Qué aporta la aplicación de escritorio

Instaladores y distribución

El workflow CI de Tauri crea instaladores específicos de plataforma en cada release etiquetada (v*): .dmg para macOS (firmado), .msi / .exe para Windows (firmado), .AppImage y .deb para Linux.

Ubicación de datos

En escritorio, los datos se ubican en el directorio de datos de la app Tauri — típicamente %APPDATA%\\WorldScript Studio en Windows, ~/Library/Application Support/WorldScript Studio en macOS y ~/.local/share/worldscript-studio en Linux.

", "help.docs.tauriDesktop.title": "App de escritorio Tauri", - "help.faq.api.content": "

¿Necesito una clave API?

Solo para proveedores de IA en la nube. Puede utilizar WorldScript para toda la escritura, el tablero de trazado, los personajes, el control de versiones y la exportación sin ninguna clave API. Las funciones de IA con proveedores locales tampoco necesitan clave.

Proveedores de nube (requieren una clave API)

Proveedores locales (no se requiere clave API)

Seguridad de claves

Cada clave API se cifra con AES-256-GCM (PBKDF2, 600 000 iteraciones SHA-256) antes de almacenarse en IndexedDB. La clave de texto sin formato nunca se escribe en el disco, nunca se almacena en el almacenamiento local y nunca se envía a ningún servidor de WorldScript. Puede almacenar claves para varios proveedores simultáneamente y cambiar entre ellos sin tener que volver a ingresarlas.

", + "help.faq.api.content": "

¿Necesito una clave API?

Solo para proveedores de IA en la nube. Puede utilizar WorldScript para toda la escritura, el tablero de trazado, los personajes, el control de versiones y la exportación sin ninguna clave API. Las funciones de IA con proveedores locales tampoco necesitan clave.

Proveedores de nube (requieren una clave API)

Proveedores locales (no se requiere clave API)

Seguridad de claves

Las claves API del navegador/PWA están protegidas con AES-256-GCM en IndexedDB (clave aleatoria no extraíble; no hay contraseña ni nada que derivar). La protección de las claves API de escritorio sigue el ciclo de vida del almacenamiento de escritorio, por lo que los detalles del almacenamiento del navegador no describen los archivos de escritorio. Las claves API nunca se envían a ningún servidor de WorldScript. (Excepción: Claude en la compilación web/PWA — ahí las solicitudes se retransmiten a través del proxy serverless propio y sin estado de WorldScript, sin registro alguno a nivel de aplicación (los registros de solicitudes de la plataforma de alojamiento quedan fuera de esta garantía), porque Anthropic bloquea las solicitudes directas del navegador; en el escritorio, Anthropic se llama directamente, como cualquier otro proveedor.) Puede almacenar claves para varios proveedores simultáneamente y cambiar entre ellos sin tener que volver a ingresarlas.

", "help.faq.api.title": "¿Necesito una clave API?", "help.faq.offline.content": "

Trabajar sin conexión

WorldScript Studio es local primero. Casi todo funciona sin conexión a internet una vez que la app está cargada.

", "help.faq.offline.title": "¿Puedo trabajar sin conexión?", - "help.faq.privacy.content": "

Tu historia permanece en tu dispositivo

Sí, completamente. WorldScript Studio es local por diseño: no hay una cuenta de WorldScript, ni un servidor en la nube, ni ninguna empresa que pueda acceder a tus manuscritos. Todos los datos residen en IndexedDB y OPFS de su navegador, un almacenamiento que solo su dispositivo puede leer.

Lo que permanece local (todo, de forma predeterminada)

Lo que sale de su dispositivo (solo cuando usted elige)

Desconéctese por completo

Cambie a un proveedor de IA local (WebLLM en el navegador o Ollama en la aplicación de escritorio) o deshabilite las funciones de IA por completo. En modo completamente fuera de línea, no se transmiten datos a ninguna parte. La escritura, el control de versiones, la exportación y todas las configuraciones funcionan sin ninguna conexión de red.

", + "help.faq.privacy.content": "

Tu historia permanece en tu dispositivo

Sí, completamente. WorldScript Studio es local por diseño: no hay una cuenta de WorldScript, ni un servidor en la nube, ni ninguna empresa que pueda acceder a tus manuscritos. Todos los datos permanecen en tu dispositivo: en IndexedDB y OPFS de tu navegador (navegador/PWA), o en archivos locales en el directorio de datos de la app de escritorio (Tauri) — en cualquier caso, en tu dispositivo y no en un servidor (los archivos de escritorio son texto plano, así que son los permisos locales del sistema, no el cifrado, los que realmente restringen quién puede leerlos allí).

Lo que permanece local (todo, de forma predeterminada)

Lo que sale de su dispositivo (solo cuando usted elige)

Desconéctese por completo

Cambie a un proveedor de IA local (WebLLM en el navegador o Ollama en la aplicación de escritorio) o deshabilite las funciones de IA por completo. En modo completamente fuera de línea, no se transmiten datos a ninguna parte. La escritura, el control de versiones, la exportación y todas las configuraciones funcionan sin ninguna conexión de red.

", "help.faq.privacy.title": "¿Es privada mi historia?", "help.faq.providers.content": "

¿Qué proveedor de IA elegir?

WorldScript es compatible con varios proveedores de IA. Aquí tienes una guía rápida para elegir.

", "help.faq.providers.title": "¿Qué proveedor de IA debo usar?", - "help.faq.saving.content": "

Todo tu proyecto, incluidos todos los textos e imágenes generadas por IA, se guarda automática y continuamente en el almacenamiento local de tu navegador (una base de datos llamada IndexedDB). Esto significa que tu trabajo se conserva en tu computadora entre sesiones. Un indicador 'Guardando...' aparece en el encabezado cuando se están escribiendo los cambios, seguido de 'Todos los cambios guardados'.

No hay cuenta en la nube ni almacenamiento en el servidor. Esto garantiza privacidad completa, pero también significa que eres responsable de crear copias de seguridad usando la función 'Exportar copia de seguridad' en Configuración.

", + "help.faq.saving.content": "

Todo tu proyecto, incluidos todos los textos e imágenes generadas por IA, se guarda automática y continuamente: en la compilación Navegador/PWA, en el almacenamiento local de tu navegador (una base de datos llamada IndexedDB); en la compilación de escritorio Tauri, como archivos locales en el directorio de datos de la app. En cualquier caso, tu trabajo se conserva en tu computadora entre sesiones. Un indicador 'Guardando...' aparece en el encabezado cuando se están escribiendo los cambios, seguido de 'Todos los cambios guardados'.

No hay cuenta en la nube ni almacenamiento en el servidor. Esto garantiza privacidad completa, pero también significa que eres responsable de crear copias de seguridad usando la función 'Exportar copia de seguridad' en Configuración.

", "help.faq.saving.title": "¿Cómo se guardan los datos de mi proyecto?", - "help.gettingStarted.desktop.content": "

Dónde ejecutar WorldScript Studio

WorldScript Studio se ejecuta en tres entornos. Tus manuscritos, personajes y configuraciones siempre permanecen en tu dispositivo independientemente de cuál utilices: elige la opción que mejor se adapte a tu flujo de trabajo.

Navegador (no requiere instalación)

Abre WorldScript en cualquier navegador moderno (Chrome, Edge, Firefox, Safari). Los datos se almacenan en IndexedDB de su navegador, una base de datos persistente y protegida que no se borra mediante el borrado normal de la memoria caché del navegador. Escriba, edite, exporte y administre versiones completamente fuera de línea una vez que el shell de la aplicación esté almacenado en caché.

PWA (instalar desde el navegador)

Instale WorldScript como una aplicación web progresiva para una ventana dedicada sin el navegador Chrome. En Chrome o Edge, haga clic en el icono ⊕ en la barra de direcciones o vaya a Configuración → General → Instalar como aplicación. En iPhone o iPad, use Compartir → Agregar a la pantalla de inicio.

Aplicación de escritorio (Tauri)

La aplicación de escritorio opcional Tauri v2 envuelve WorldScript en un shell Rust nativo y agrega capacidades que los navegadores no pueden proporcionar.

Privacidad en todos Entornos

Las claves API se cifran con AES-256-GCM antes del almacenamiento y nunca se transmiten a ningún servidor WorldScript. Los manuscritos solo salen de su dispositivo cuando envía explícitamente un pasaje específico a un proveedor de inteligencia artificial en la nube.

", + "help.gettingStarted.desktop.content": "

Dónde ejecutar WorldScript Studio

WorldScript Studio se ejecuta en tres entornos. Tus manuscritos, personajes y configuraciones siempre permanecen en tu dispositivo independientemente de cuál utilices: elige la opción que mejor se adapte a tu flujo de trabajo.

Navegador (no requiere instalación)

Abre WorldScript en cualquier navegador moderno (Chrome, Edge, Firefox, Safari). Los datos se almacenan en IndexedDB de su navegador, una base de datos persistente y protegida que no se borra mediante el borrado normal de la memoria caché del navegador. Escriba, edite, exporte y administre versiones completamente fuera de línea una vez que el shell de la aplicación esté almacenado en caché.

PWA (instalar desde el navegador)

Instale WorldScript como una aplicación web progresiva para una ventana dedicada sin el navegador Chrome. En Chrome o Edge, haga clic en el icono ⊕ en la barra de direcciones o vaya a Configuración → General → Instalar como aplicación. En iPhone o iPad, use Compartir → Agregar a la pantalla de inicio.

Aplicación de escritorio (Tauri)

La aplicación de escritorio opcional Tauri v2 envuelve WorldScript en un shell Rust nativo y agrega capacidades que los navegadores no pueden proporcionar.

Privacidad en todos Entornos

Las claves API del navegador/PWA están protegidas con AES-256-GCM en IndexedDB; la protección en escritorio sigue el ciclo de vida del almacenamiento de escritorio. Las claves API nunca se transmiten a ningún servidor WorldScript. (Excepción: Claude en la compilación web/PWA — ahí las solicitudes se retransmiten a través del proxy serverless propio y sin estado de WorldScript, sin registro alguno a nivel de aplicación (los registros de solicitudes de la plataforma de alojamiento quedan fuera de esta garantía), porque Anthropic bloquea las solicitudes directas del navegador; en el escritorio, Anthropic se llama directamente, como cualquier otro proveedor.) Los manuscritos solo salen de su dispositivo cuando envía explícitamente un pasaje específico a un proveedor de inteligencia artificial en la nube.

", "help.gettingStarted.desktop.title": "App de escritorio (Tauri) y PWA", "help.gettingStarted.firstProject.content": "

Elige tu Camino

El Portal de Bienvenida te ofrece tres poderosas formas de comenzar:

  1. Empezar con una Plantilla: Ideal para la narración estructurada. Ve a la vista de Plantillas, elige una estructura como la 'Estructura de Tres Actos' y usa la función 'Personalizar con IA' para obtener indicaciones personalizadas para cada sección basadas en tu idea de historia.
  2. Generar con IA: Si tienes un concepto pero no una estructura, usa el Generador de Esquemas. Solo proporciona tu género y una idea de historia, y creará un esquema de trama completo y editable que puedes aplicar a tu manuscrito.
  3. Empezar en Blanco: Para quienes prefieren un lienzo completamente abierto, esta opción crea un nuevo proyecto con un primer capítulo vacío, listo para comenzar a escribir de inmediato.
", "help.gettingStarted.firstProject.title": "Iniciando tu Primer Proyecto", diff --git a/locales/eu/help.json b/locales/eu/help.json index 6237e812..284fe962 100644 --- a/locales/eu/help.json +++ b/locales/eu/help.json @@ -71,7 +71,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/locales/fa/help.json b/locales/fa/help.json index 77829750..bfb5608c 100644 --- a/locales/fa/help.json +++ b/locales/fa/help.json @@ -71,7 +71,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/locales/fi/help.json b/locales/fi/help.json index 6237e812..284fe962 100644 --- a/locales/fi/help.json +++ b/locales/fi/help.json @@ -71,7 +71,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/locales/fr/help.json b/locales/fr/help.json index 5a040fe5..760692a2 100644 --- a/locales/fr/help.json +++ b/locales/fr/help.json @@ -3,7 +3,7 @@ "help.advanced.adaptiveAi.title": "IA adaptative, GPU et mode Éco", "help.advanced.cloudSync.content": "La synchronisation chiffrée de bout en bout, optionnelle, maintient votre bibliothèque à jour sur tous vos appareils via un backend Cloudflare R2. Activez « Synchronisation cloud » dans Paramètres → Fonctionnalités en accès anticipé et configurez-la dans Paramètres → Connexions. Les données du projet sont chiffrées localement en AES-256-GCM avant l’envoi, et vos clés d’API IA ne sont jamais transmises au cloud. La synchronisation est entièrement optionnelle ; sans elle, WorldScript reste une application entièrement « offline-first ».", "help.advanced.cloudSync.title": "Synchronisation cloud", - "help.advanced.encryption.content": "Protégez les données principales du projet, les instantanés et les paramètres pris en charge stockés sur votre appareil avec un chiffrement AES-256-GCM dérivé d’une phrase secrète (PBKDF2, 600 000 itérations). Activez-le dans Paramètres → Confidentialité et sécurité → « Chiffrer les données du projet au repos ». Au prochain lancement, une fenêtre de déverrouillage demande votre phrase secrète ; les lectures et écritures protégées restent bloquées lorsque la bibliothèque est verrouillée au lieu de revenir au texte en clair. Pendant la finalisation du protocole de migration entre magasins, le chiffrement ne peut pas être modifié ou désactivé afin que les textes chiffrés existants restent récupérables. Votre phrase secrète ne quitte jamais l’appareil et ne peut pas être récupérée — exportez une sauvegarde de bibliothèque chiffrée avant d’expérimenter.", + "help.advanced.encryption.content": "Protégez les données principales du projet, les instantanés et les paramètres pris en charge stockés sur votre appareil avec un chiffrement AES-256-GCM dérivé d’une phrase secrète (PBKDF2, 600 000 itérations). Activez-le dans Paramètres → Confidentialité et sécurité → « Chiffrer les données du projet au repos ». Au prochain lancement, une fenêtre de déverrouillage demande votre phrase secrète ; les lectures et écritures protégées restent bloquées lorsque la bibliothèque est verrouillée au lieu de revenir au texte en clair. La désactivation du chiffrement ou le changement de phrase secrète est disponible dans Paramètres → Confidentialité, garanti par un processus de rechiffrement complet et journalisé afin que les textes chiffrés existants restent récupérables si une rotation est interrompue. Cela protège le stockage IndexedDB du navigateur/PWA ; sur la version bureau Tauri, les données du projet sont stockées en clair et ne sont pas encore couvertes par ce paramètre. Votre phrase secrète ne quitte jamais l’appareil et ne peut pas être récupérée — exportez une sauvegarde de bibliothèque chiffrée avant d’expérimenter.", "help.advanced.encryption.title": "Chiffrement au repos", "help.advanced.languages.content": "WorldScript Studio propose 19 langues d'interface. Cinq sont de niveau Production (allemand, anglais, espagnol, français, italien), entièrement relues. D'autres sont Quasi-Production (japonais, chinois, portugais, grec) ou Bêta (finnois, suédois, hongrois, islandais, basque, coréen, russe, ainsi que les langues de droite à gauche arabe, hébreu et persan). Le niveau de statut apparaît à côté de chaque langue dans Paramètres → Général et dans le sélecteur de langue du Portail d'accueil, et un tableau de bord qualité résume la couverture par langue. Changez de langue à cet endroit ou via la Palette de commandes. Choisir l'arabe, l'hébreu ou le persan bascule toute l'interface en RTL et charge des polices Noto Sans Arabic/Hebrew auto-hébergées (avec Noto Naskh Arabic pour l'éditeur de manuscrit). Le texte de votre manuscrit suit toujours sa propre direction d'écriture, vous pouvez donc mélanger librement des passages latins et RTL. Les traductions Bêta et RTL sont améliorables par la communauté ; les articles d'aide reviennent à l'anglais lorsqu'une langue ne les a pas encore traduits.", "help.advanced.languages.title": "Langues, niveaux de statut et RTL", @@ -65,7 +65,7 @@ "help.docs.featureFlags.title": "Système de drapeaux", "help.docs.lazyLoading.content": "

Chargement différé et architecture des bundles

WorldScript Studio est conçu pour un chargement initial rapide. Les 14 vues principales et plusieurs bibliothèques lourdes sont chargées à la demande, uniquement quand elles sont nécessaires.

", "help.docs.lazyLoading.title": "Chargement différé et bundles", - "help.docs.privacySecurity.content": "

Modèle de confidentialité et de sécurité

WorldScript Studio est conçu d'abord localement : votre histoire ne quitte jamais votre appareil à moins que vous n'envoyiez explicitement une invite à un fournisseur d'IA cloud.

", + "help.docs.privacySecurity.content": "

Modèle de confidentialité et de sécurité

WorldScript Studio est conçu d'abord localement : votre histoire ne quitte jamais votre appareil à moins que vous n'envoyiez explicitement une invite à un fournisseur d'IA cloud.

", "help.docs.privacySecurity.title": "Modèle confidentialité et sécurité", "help.docs.pwaDesktop.content": "

Empaquetage PWA et bureau

WorldScript Studio est disponible en Progressive Web App (PWA) et en application de bureau native (Tauri). Les deux options gardent vos données localement — sans compte requis.

PWA (navigateur)

Application bureau Tauri

", "help.docs.pwaDesktop.title": "Empaquetage PWA et bureau", @@ -73,17 +73,17 @@ "help.docs.ragPipeline.title": "RAG et assemblage de prompts", "help.docs.tauriDesktop.content": "

Application bureau Tauri

L'application bureau WorldScript Studio encapsule la même base de code React dans un shell Tauri v2 natif (Rust). Elle ajoute des capacités que les navigateurs ne peuvent pas offrir, tout en conservant vos données entièrement locales.

Ce que l'application bureau apporte

Installateurs et distribution

Le workflow CI Tauri crée des installateurs spécifiques à chaque plateforme sur chaque release taguée (v*) : .dmg pour macOS (signé), .msi / .exe pour Windows (signé), .AppImage et .deb pour Linux.

Emplacement des données

Sur bureau, les données se trouvent dans le répertoire de données Tauri — généralement %APPDATA%\\WorldScript Studio sous Windows, ~/Library/Application Support/WorldScript Studio sous macOS et ~/.local/share/worldscript-studio sous Linux. Ce répertoire peut être copié en toute sécurité pour une sauvegarde manuelle complète.

", "help.docs.tauriDesktop.title": "Application bureau Tauri", - "help.faq.api.content": "

Ai-je besoin d'une clé API ?

Uniquement pour les fournisseurs d'IA cloud. Vous pouvez utiliser WorldScript pour toute l'écriture, le tableau de tracé, les personnages, le contrôle de version et l'exportation sans aucune clé API. Les fonctionnalités d'IA avec des fournisseurs locaux ne nécessitent pas non plus de clé.

Fournisseurs de cloud (nécessitent une clé API)

Fournisseurs locaux (aucune clé API requise)

Sécurité des clés

Chaque clé API est cryptée avec AES-256-GCM (PBKDF2, 600 000 itérations SHA-256) avant d'être stockée dans IndexedDB. La clé en texte brut n'est jamais écrite sur le disque, jamais stockée dans localStorage et jamais envoyée à un serveur WorldScript. Vous pouvez stocker les clés de plusieurs fournisseurs simultanément et basculer entre eux sans les saisir à nouveau.

", + "help.faq.api.content": "

Ai-je besoin d'une clé API ?

Uniquement pour les fournisseurs d'IA cloud. Vous pouvez utiliser WorldScript pour toute l'écriture, le tableau de tracé, les personnages, le contrôle de version et l'exportation sans aucune clé API. Les fonctionnalités d'IA avec des fournisseurs locaux ne nécessitent pas non plus de clé.

Fournisseurs de cloud (nécessitent une clé API)

Fournisseurs locaux (aucune clé API requise)

Sécurité des clés

Les clés API du navigateur/PWA sont protégées par AES-256-GCM dans IndexedDB (clé aléatoire non extractible ; pas de mot de passe, rien à dériver). La protection des clés API de bureau suit le cycle de vie du stockage de bureau, les détails du stockage navigateur ne décrivent donc pas les fichiers de bureau. Les clés API ne sont jamais envoyées à un serveur WorldScript. (Exception : Claude sur la version web/PWA — les requêtes y sont relayées via le proxy serverless propre et sans état de WorldScript, jamais journalisé au niveau applicatif (les journaux de requêtes de la plateforme d'hébergement échappent à cette garantie), car Anthropic bloque les requêtes directes du navigateur ; sur le bureau, Anthropic est appelé directement, comme tout autre fournisseur.) Vous pouvez stocker les clés de plusieurs fournisseurs simultanément et basculer entre eux sans les saisir à nouveau.

", "help.faq.api.title": "Ai-je besoin d'une clé API ?", "help.faq.offline.content": "

Travailler hors ligne

WorldScript Studio est conçu pour fonctionner en local. Presque tout fonctionne sans connexion internet une fois l'application chargée.

", "help.faq.offline.title": "Puis-je travailler hors ligne ?", - "help.faq.privacy.content": "

Votre histoire reste sur votre appareil

Oui, complètement. WorldScript Studio est d'abord local par conception : il n'y a pas de compte WorldScript, pas de serveur cloud et aucune entreprise ne peut accéder à vos manuscrits. Toutes les données se trouvent dans IndexedDB et OPFS de votre navigateur, stockage que seul votre appareil peut lire.

Ce qui reste local (tout, par défaut)

Ce qui quitte votre appareil (uniquement lorsque vous le souhaitez)

Allez complètement hors ligne

Passez à un fournisseur d'IA local – WebLLM dans le navigateur ou Ollama sur l'application de bureau – ou désactivez complètement les fonctionnalités d'IA. En mode entièrement hors ligne, aucune donnée n'est transmise n'importe où. L'écriture, le contrôle de version, l'exportation et tous les paramètres fonctionnent sans aucune connexion réseau.

", + "help.faq.privacy.content": "

Votre histoire reste sur votre appareil

Oui, complètement. WorldScript Studio est d'abord local par conception : il n'y a pas de compte WorldScript, pas de serveur cloud et aucune entreprise ne peut accéder à vos manuscrits. Toutes les données restent sur votre appareil : dans IndexedDB et OPFS de votre navigateur (navigateur/PWA), ou dans des fichiers locaux du répertoire de données de l'application de bureau (Tauri) — dans tous les cas, sur votre appareil plutôt que sur un serveur (les fichiers de bureau sont en clair, ce sont donc les permissions locales du système, et non le chiffrement, qui déterminent qui peut les lire).

Ce qui reste local (tout, par défaut)

Ce qui quitte votre appareil (uniquement lorsque vous le souhaitez)

Allez complètement hors ligne

Passez à un fournisseur d'IA local – WebLLM dans le navigateur ou Ollama sur l'application de bureau – ou désactivez complètement les fonctionnalités d'IA. En mode entièrement hors ligne, aucune donnée n'est transmise n'importe où. L'écriture, le contrôle de version, l'exportation et tous les paramètres fonctionnent sans aucune connexion réseau.

", "help.faq.privacy.title": "Mon histoire est-elle privée ?", "help.faq.providers.content": "

Quel fournisseur IA choisir ?

WorldScript prend en charge plusieurs fournisseurs IA. Voici un guide rapide pour choisir.

", "help.faq.providers.title": "Quel fournisseur IA choisir ?", - "help.faq.saving.content": "

L'ensemble de votre projet, y compris tous les textes et images générées par IA, est sauvegardé automatiquement et en continu dans le stockage local de votre navigateur (une base de données appelée IndexedDB). Cela signifie que votre travail est conservé sur votre ordinateur entre les sessions. Un indicateur 'Sauvegarde...' apparaît dans l'en-tête lors de l'écriture des modifications, suivi de 'Toutes les modifications sauvegardées'.

Il n'y a pas de compte cloud ni de stockage côté serveur. Cela garantit une confidentialité totale, mais signifie également que vous êtes responsable de créer des sauvegardes avec la fonction 'Exporter la sauvegarde' dans les Paramètres.

", + "help.faq.saving.content": "

L'ensemble de votre projet, y compris tous les textes et images générées par IA, est sauvegardé automatiquement et en continu — sur la version Navigateur/PWA, dans le stockage local de votre navigateur (une base de données appelée IndexedDB) ; sur la version bureau Tauri, sous forme de fichiers locaux dans le répertoire de données de l'application. Dans tous les cas, votre travail est conservé sur votre ordinateur entre les sessions. Un indicateur 'Sauvegarde...' apparaît dans l'en-tête lors de l'écriture des modifications, suivi de 'Toutes les modifications sauvegardées'.

Il n'y a pas de compte cloud ni de stockage côté serveur. Cela garantit une confidentialité totale, mais signifie également que vous êtes responsable de créer des sauvegardes avec la fonction 'Exporter la sauvegarde' dans les Paramètres.

", "help.faq.saving.title": "Comment les données de mon projet sont-elles sauvegardées ?", - "help.gettingStarted.desktop.content": "

Où exécuter WorldScript Studio

WorldScript Studio s'exécute dans trois environnements. Vos manuscrits, personnages et paramètres restent toujours sur votre appareil, quel que soit celui que vous utilisez : choisissez l'option qui correspond le mieux à votre flux de travail.

Navigateur (aucune installation requise)

Ouvrez WorldScript dans n'importe quel navigateur moderne (Chrome, Edge, Firefox, Safari). Les données sont stockées dans IndexedDB de votre navigateur, une base de données persistante en mode bac à sable qui n'est pas effacée par les effacements normaux du cache du navigateur. Écrivez, modifiez, exportez et gérez les versions entièrement hors ligne une fois le shell de l'application mis en cache.

PWA (installation à partir du navigateur)

Installez WorldScript en tant qu'application Web progressive pour une fenêtre dédiée sans chrome de navigateur. Dans Chrome ou Edge, cliquez sur l'icône ⊕ dans la barre d'adresse ou accédez à Paramètres → Général → Installer en tant qu'application. Sur iPhone ou iPad, utilisez Partager → Ajouter à l'écran d'accueil.

Application de bureau (Tauri)

L'application de bureau Tauri v2 en option enveloppe WorldScript dans un shell Rust natif et ajoute des fonctionnalités que les navigateurs ne peuvent pas fournir.

Confidentialité dans tous les environnements

Les clés API sont cryptées avec AES-256-GCM avant stockage et ne sont jamais transmis à un serveur WorldScript. Les manuscrits ne quittent votre appareil que lorsque vous envoyez explicitement un passage spécifique à un fournisseur d'IA cloud.

", + "help.gettingStarted.desktop.content": "

Où exécuter WorldScript Studio

WorldScript Studio s'exécute dans trois environnements. Vos manuscrits, personnages et paramètres restent toujours sur votre appareil, quel que soit celui que vous utilisez : choisissez l'option qui correspond le mieux à votre flux de travail.

Navigateur (aucune installation requise)

Ouvrez WorldScript dans n'importe quel navigateur moderne (Chrome, Edge, Firefox, Safari). Les données sont stockées dans IndexedDB de votre navigateur, une base de données persistante en mode bac à sable qui n'est pas effacée par les effacements normaux du cache du navigateur. Écrivez, modifiez, exportez et gérez les versions entièrement hors ligne une fois le shell de l'application mis en cache.

PWA (installation à partir du navigateur)

Installez WorldScript en tant qu'application Web progressive pour une fenêtre dédiée sans chrome de navigateur. Dans Chrome ou Edge, cliquez sur l'icône ⊕ dans la barre d'adresse ou accédez à Paramètres → Général → Installer en tant qu'application. Sur iPhone ou iPad, utilisez Partager → Ajouter à l'écran d'accueil.

Application de bureau (Tauri)

L'application de bureau Tauri v2 en option enveloppe WorldScript dans un shell Rust natif et ajoute des fonctionnalités que les navigateurs ne peuvent pas fournir.

Confidentialité dans tous les environnements

Les clés API du navigateur/PWA sont protégées par AES-256-GCM dans IndexedDB ; la protection sur bureau suit le cycle de vie du stockage de bureau. Les clés API ne sont jamais transmises à un serveur WorldScript. (Exception : Claude sur la version web/PWA — les requêtes y sont relayées via le proxy serverless propre et sans état de WorldScript, jamais journalisé au niveau applicatif (les journaux de requêtes de la plateforme d'hébergement échappent à cette garantie), car Anthropic bloque les requêtes directes du navigateur ; sur le bureau, Anthropic est appelé directement, comme tout autre fournisseur.) Les manuscrits ne quittent votre appareil que lorsque vous envoyez explicitement un passage spécifique à un fournisseur d'IA cloud.

", "help.gettingStarted.desktop.title": "Application bureau (Tauri) et PWA", "help.gettingStarted.firstProject.content": "

Choisissez Votre Voie

Le Portail d'Accueil vous offre trois façons puissantes de commencer :

  1. Commencer avec un Modèle : Idéal pour la narration structurée. Allez dans la vue Modèles, choisissez une structure comme la 'Structure en Trois Actes' et utilisez la fonction 'Personnaliser avec l'IA' pour obtenir des invites personnalisées pour chaque section basées sur votre idée d'histoire.
  2. Générer avec l'IA : Si vous avez un concept mais pas de structure, utilisez le Générateur de Plan. Fournissez simplement votre genre et une idée d'histoire, et il créera un plan de trame complet et modifiable que vous pourrez appliquer à votre manuscrit.
  3. Commencer Vierge : Pour ceux qui préfèrent un canevas entièrement ouvert, cette option crée un nouveau projet avec un premier chapitre vide, prêt à écrire immédiatement.
", "help.gettingStarted.firstProject.title": "Démarrer Votre Premier Projet", diff --git a/locales/hu/help.json b/locales/hu/help.json index 6237e812..284fe962 100644 --- a/locales/hu/help.json +++ b/locales/hu/help.json @@ -71,7 +71,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/locales/is/help.json b/locales/is/help.json index 6237e812..284fe962 100644 --- a/locales/is/help.json +++ b/locales/is/help.json @@ -71,7 +71,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/locales/it/help.json b/locales/it/help.json index 0216aa87..7ab33413 100644 --- a/locales/it/help.json +++ b/locales/it/help.json @@ -3,7 +3,7 @@ "help.advanced.adaptiveAi.title": "IA adattiva, GPU e modalità Eco", "help.advanced.cloudSync.content": "La sincronizzazione opzionale crittografata end-to-end mantiene allineata la tua libreria su più dispositivi tramite un backend Cloudflare R2. Attiva «Sincronizzazione cloud» in Impostazioni → Funzioni ad accesso anticipato e configurala in Impostazioni → Connessioni. I dati del progetto vengono crittografati localmente con AES-256-GCM prima del caricamento e le tue chiavi API dell’IA non vengono mai inviate al cloud. La sincronizzazione è del tutto facoltativa; senza di essa WorldScript resta un’app completamente offline-first.", "help.advanced.cloudSync.title": "Sincronizzazione cloud", - "help.advanced.encryption.content": "Proteggi i dati principali del progetto, gli snapshot e le impostazioni supportate memorizzati sul dispositivo con la crittografia AES-256-GCM derivata da una passphrase (PBKDF2, 600.000 iterazioni). Attivala in Impostazioni → Privacy e sicurezza → «Crittografa i dati del progetto a riposo». Al successivo avvio una finestra di sblocco chiede la passphrase; letture e scritture protette rimangono bloccate quando la libreria è bloccata anziché tornare al testo in chiaro. Durante il completamento del protocollo di migrazione tra archivi, la crittografia non può essere cambiata o disattivata affinché i testi cifrati esistenti restino recuperabili. La tua passphrase non lascia mai il dispositivo e non può essere recuperata: esporta un backup della libreria crittografato prima di sperimentare.", + "help.advanced.encryption.content": "Proteggi i dati principali del progetto, gli snapshot e le impostazioni supportate memorizzati sul dispositivo con la crittografia AES-256-GCM derivata da una passphrase (PBKDF2, 600.000 iterazioni). Attivala in Impostazioni → Privacy e sicurezza → «Crittografa i dati del progetto a riposo». Al successivo avvio una finestra di sblocco chiede la passphrase; letture e scritture protette rimangono bloccate quando la libreria è bloccata anziché tornare al testo in chiaro. Disattivare la crittografia o cambiare la passphrase è disponibile in Impostazioni → Privacy, supportato da un processo di ricrittografia completo e tracciato in modo che i testi cifrati esistenti restino recuperabili se una rotazione viene interrotta. Questo protegge il percorso di archiviazione IndexedDB di Browser/PWA; nella build desktop Tauri, i dati del progetto sono memorizzati come file in chiaro e non sono ancora coperti da questa impostazione. La tua passphrase non lascia mai il dispositivo e non può essere recuperata: esporta un backup della libreria crittografato prima di sperimentare.", "help.advanced.encryption.title": "Crittografia a riposo", "help.advanced.languages.content": "WorldScript Studio offre 19 lingue dell'interfaccia. Cinque sono di livello Produzione (tedesco, inglese, spagnolo, francese, italiano), completamente revisionate. Altre sono Quasi-Produzione (giapponese, cinese, portoghese, greco) o Beta (finlandese, svedese, ungherese, islandese, basco, coreano, russo, oltre alle lingue da destra a sinistra arabo, ebraico e persiano). Il livello di stato appare accanto a ogni lingua in Impostazioni → Generali e nel selettore di lingua del Portale di benvenuto, e un pannello qualità riassume la copertura per lingua. Cambia lingua lì o tramite la Palette dei comandi. Selezionando arabo, ebraico o persiano l'intera interfaccia passa a RTL e carica i font Noto Sans Arabic/Hebrew self-hosted (con Noto Naskh Arabic per l'editor del manoscritto). Il testo del tuo manoscritto segue sempre la propria direzione di scrittura, quindi puoi mischiare liberamente passaggi latini e RTL. Le traduzioni Beta e RTL sono migliorabili dalla community; gli articoli della guida ricadono sull'inglese dove una lingua non li ha ancora tradotti.", "help.advanced.languages.title": "Lingue, livelli di stato e RTL", @@ -65,7 +65,7 @@ "help.docs.featureFlags.title": "Sistema feature flag", "help.docs.lazyLoading.content": "

Lazy loading e architettura bundle

WorldScript Studio usa il lazy loading aggressivo per mantenere piccolo il bundle iniziale e garantire un avvio rapido anche su connessioni lente.

", "help.docs.lazyLoading.title": "Lazy loading e bundle", - "help.docs.privacySecurity.content": "

Modello di privacy e sicurezza

WorldScript Studio è progettato innanzitutto a livello locale: la tua storia non lascia mai il tuo dispositivo a meno che tu non invii esplicitamente una richiesta a un fornitore di intelligenza artificiale cloud.

", + "help.docs.privacySecurity.content": "

Modello di privacy e sicurezza

WorldScript Studio è progettato innanzitutto a livello locale: la tua storia non lascia mai il tuo dispositivo a meno che tu non invii esplicitamente una richiesta a un fornitore di intelligenza artificiale cloud.

", "help.docs.privacySecurity.title": "Modello privacy e sicurezza", "help.docs.pwaDesktop.content": "

PWA e pacchetto desktop

WorldScript Studio è disponibile come Progressive Web App installabile nel browser e come app desktop nativa tramite Tauri.

PWA (browser)

App desktop Tauri

", "help.docs.pwaDesktop.title": "Pacchetto PWA e desktop", @@ -73,17 +73,17 @@ "help.docs.ragPipeline.title": "RAG e assemblaggio prompt", "help.docs.tauriDesktop.content": "

App desktop Tauri

L'app desktop WorldScript Studio impacchetta la stessa codebase React in uno shell Tauri v2 nativo (Rust). Aggiunge capacità che i browser non possono offrire, mantenendo i tuoi dati completamente locali.

Cosa offre l'app desktop

Installer e distribuzione

Il workflow CI Tauri crea installer specifici per piattaforma ad ogni release taggato (v*): .dmg per macOS (firmato), .msi / .exe per Windows (firmato), .AppImage e .deb per Linux.

Posizione dei dati

Su desktop, i dati si trovano nella directory dati dell'app Tauri — tipicamente %APPDATA%\\WorldScript Studio su Windows, ~/Library/Application Support/WorldScript Studio su macOS e ~/.local/share/worldscript-studio su Linux.

", "help.docs.tauriDesktop.title": "App desktop Tauri", - "help.faq.api.content": "

Ho bisogno di una chiave API?

Solo per i fornitori di AI cloud. Puoi utilizzare WorldScript per tutta la scrittura, la Plot Board, i personaggi, il controllo della versione e l'esportazione senza alcuna chiave API. Anche le funzionalità AI con fornitori locali non necessitano di chiave.

Fornitori cloud (richiede una chiave API)

Fornitori locali (non è richiesta alcuna chiave API)

Sicurezza della chiave

Ogni chiave API viene crittografata con AES-256-GCM (PBKDF2, 600.000 iterazioni SHA-256) prima di essere archiviata in IndexedDB. La chiave in testo normale non viene mai scritta su disco, mai archiviata in localStorage e mai inviata a nessun server WorldScript. Puoi memorizzare chiavi per più fornitori contemporaneamente e passare da uno all'altro senza reinserirli.

", + "help.faq.api.content": "

Ho bisogno di una chiave API?

Solo per i fornitori di AI cloud. Puoi utilizzare WorldScript per tutta la scrittura, la Plot Board, i personaggi, il controllo della versione e l'esportazione senza alcuna chiave API. Anche le funzionalità AI con fornitori locali non necessitano di chiave.

Fornitori cloud (richiede una chiave API)

Fornitori locali (non è richiesta alcuna chiave API)

Sicurezza della chiave

Le chiavi API di browser/PWA sono protette con AES-256-GCM in IndexedDB (chiave casuale non estraibile; nessuna passphrase, nulla da derivare). La protezione delle chiavi API desktop segue il ciclo di vita dell'archiviazione desktop, quindi i dettagli dell'archiviazione del browser non descrivono i file desktop. Le chiavi API non vengono mai inviate a nessun server WorldScript. (Eccezione: Claude nella build web/PWA — le richieste vengono inoltrate tramite il proxy serverless proprio e stateless di WorldScript, mai registrato a livello applicativo (i log delle richieste della piattaforma di hosting restano fuori da questa garanzia), poiché Anthropic blocca le richieste dirette dal browser; su desktop, Anthropic viene chiamato direttamente, come qualsiasi altro provider.) Puoi memorizzare chiavi per più fornitori contemporaneamente e passare da uno all'altro senza reinserirli.

", "help.faq.api.title": "Ho bisogno di una chiave API?", "help.faq.offline.content": "

Lavorare offline

WorldScript Studio è progettato per essere locale. Quasi tutto funziona senza connessione a internet una volta caricata l'app.

", "help.faq.offline.title": "Posso lavorare offline?", - "help.faq.privacy.content": "

La tua storia rimane sul tuo dispositivo

Sì, completamente. WorldScript Studio è progettato localmente: non esiste un account WorldScript, nessun server cloud e nessuna azienda che possa accedere ai tuoi manoscritti. Tutti i dati risiedono nell'IndexedDB e nell'OPFS del tuo browser, un archivio che solo il tuo dispositivo può leggere.

Ciò che rimane locale (tutto, per impostazione predefinita)

Cosa lascia il tuo dispositivo (solo quando lo scegli tu)

Vai completamente offline

Passa a un provider IA locale (WebLLM nel browser o Ollama nell'app desktop) o disattiva completamente le funzionalità IA. In modalità completamente offline, zero dati vengono trasmessi ovunque. La scrittura, il controllo della versione, l'esportazione e tutte le impostazioni funzionano senza alcuna connessione di rete.

", + "help.faq.privacy.content": "

La tua storia rimane sul tuo dispositivo

Sì, completamente. WorldScript Studio è progettato localmente: non esiste un account WorldScript, nessun server cloud e nessuna azienda che possa accedere ai tuoi manoscritti. Tutti i dati restano sul tuo dispositivo: nell'IndexedDB e nell'OPFS del tuo browser (browser/PWA), oppure in file locali nella directory dati dell'app desktop (Tauri) — in ogni caso, sul tuo dispositivo anziché su un server (i file desktop sono in chiaro, quindi sono i permessi locali del sistema operativo, non la crittografia, a determinare chi può leggerli).

Ciò che rimane locale (tutto, per impostazione predefinita)

Cosa lascia il tuo dispositivo (solo quando lo scegli tu)

Vai completamente offline

Passa a un provider IA locale (WebLLM nel browser o Ollama nell'app desktop) o disattiva completamente le funzionalità IA. In modalità completamente offline, zero dati vengono trasmessi ovunque. La scrittura, il controllo della versione, l'esportazione e tutte le impostazioni funzionano senza alcuna connessione di rete.

", "help.faq.privacy.title": "La mia storia è privata?", "help.faq.providers.content": "

Quale provider IA scegliere?

WorldScript supporta più provider IA. Ecco una guida rapida per scegliere.

", "help.faq.providers.title": "Quale provider IA usare?", - "help.faq.saving.content": "

L'intero progetto, inclusi tutti i testi e le immagini generate dall'IA, viene salvato automaticamente e continuamente nell'archiviazione locale del tuo browser (un database chiamato IndexedDB). Ciò significa che il tuo lavoro viene conservato sul tuo computer tra le sessioni. Un indicatore 'Salvataggio...' appare nell'intestazione quando le modifiche vengono scritte, seguito da 'Tutte le modifiche salvate'.

Non esiste un account cloud né archiviazione lato server. Questo garantisce la completa privacy, ma significa anche che sei responsabile della creazione di backup utilizzando la funzione 'Esporta backup' nelle Impostazioni.

", + "help.faq.saving.content": "

L'intero progetto, inclusi tutti i testi e le immagini generate dall'IA, viene salvato automaticamente e continuamente: nella build Browser/PWA, nell'archiviazione locale del tuo browser (un database chiamato IndexedDB); nella build desktop Tauri, come file locali nella directory dati dell'app. In entrambi i casi, il tuo lavoro viene conservato sul tuo computer tra le sessioni. Un indicatore 'Salvataggio...' appare nell'intestazione quando le modifiche vengono scritte, seguito da 'Tutte le modifiche salvate'.

Non esiste un account cloud né archiviazione lato server. Questo garantisce la completa privacy, ma significa anche che sei responsabile della creazione di backup utilizzando la funzione 'Esporta backup' nelle Impostazioni.

", "help.faq.saving.title": "Come vengono salvati i dati del mio progetto?", - "help.gettingStarted.desktop.content": "

Dove eseguire WorldScript Studio

WorldScript Studio funziona in tre ambienti. I tuoi manoscritti, i personaggi e le impostazioni rimangono sempre sul tuo dispositivo, indipendentemente da quello che utilizzi: scegli l'opzione che meglio si adatta al tuo flusso di lavoro.

Browser (nessuna installazione richiesta)

Apri WorldScript in qualsiasi browser moderno (Chrome, Edge, Firefox, Safari). I dati vengono archiviati nell'IndexedDB del tuo browser, un database persistente e sandbox che non viene cancellato dalla normale pulizia della cache del browser. Scrivi, modifica, esporta e gestisci le versioni completamente offline una volta memorizzata nella cache la shell dell'app.

PWA (installazione dal browser)

Installa WorldScript come app Web progressiva per una finestra dedicata senza Chrome del browser. In Chrome o Edge, fai clic sull'icona ⊕ nella barra degli indirizzi oppure vai su Impostazioni → Generali → Installa come app. Su iPhone o iPad, utilizza Condividi → Aggiungi alla schermata iniziale.

App desktop (Tauri)

L'app desktop Tauri v2 opzionale racchiude WorldScript in una shell Rust nativa e aggiunge funzionalità che i browser non possono fornire.

Privacy in tutti gli ambienti

Le chiavi API sono crittografate con AES-256-GCM prima dell'archiviazione e non vengono mai trasmessi ad alcun server di WorldScript. I manoscritti lasciano il tuo dispositivo solo quando invii esplicitamente un passaggio specifico a un fornitore di intelligenza artificiale cloud.

", + "help.gettingStarted.desktop.content": "

Dove eseguire WorldScript Studio

WorldScript Studio funziona in tre ambienti. I tuoi manoscritti, i personaggi e le impostazioni rimangono sempre sul tuo dispositivo, indipendentemente da quello che utilizzi: scegli l'opzione che meglio si adatta al tuo flusso di lavoro.

Browser (nessuna installazione richiesta)

Apri WorldScript in qualsiasi browser moderno (Chrome, Edge, Firefox, Safari). I dati vengono archiviati nell'IndexedDB del tuo browser, un database persistente e sandbox che non viene cancellato dalla normale pulizia della cache del browser. Scrivi, modifica, esporta e gestisci le versioni completamente offline una volta memorizzata nella cache la shell dell'app.

PWA (installazione dal browser)

Installa WorldScript come app Web progressiva per una finestra dedicata senza Chrome del browser. In Chrome o Edge, fai clic sull'icona ⊕ nella barra degli indirizzi oppure vai su Impostazioni → Generali → Installa come app. Su iPhone o iPad, utilizza Condividi → Aggiungi alla schermata iniziale.

App desktop (Tauri)

L'app desktop Tauri v2 opzionale racchiude WorldScript in una shell Rust nativa e aggiunge funzionalità che i browser non possono fornire.

Privacy in tutti gli ambienti

Le chiavi API di browser/PWA sono protette con AES-256-GCM in IndexedDB; la protezione su desktop segue il ciclo di vita dell'archiviazione desktop. Le chiavi API non vengono mai trasmesse ad alcun server di WorldScript. (Eccezione: Claude nella build web/PWA — le richieste vengono inoltrate tramite il proxy serverless proprio e stateless di WorldScript, mai registrato a livello applicativo (i log delle richieste della piattaforma di hosting restano fuori da questa garanzia), poiché Anthropic blocca le richieste dirette dal browser; su desktop, Anthropic viene chiamato direttamente, come qualsiasi altro provider.) I manoscritti lasciano il tuo dispositivo solo quando invii esplicitamente un passaggio specifico a un fornitore di intelligenza artificiale cloud.

", "help.gettingStarted.desktop.title": "App desktop (Tauri) e PWA", "help.gettingStarted.firstProject.content": "

Scegli il Tuo Percorso

Il Portale di Benvenuto ti offre tre potenti modi per iniziare:

  1. Inizia con un Modello: Ottimo per la narrazione strutturata. Vai alla vista Modelli, scegli una struttura come la 'Struttura in Tre Atti' e usa la funzione 'Personalizza con l'IA' per ottenere suggerimenti personalizzati per ogni sezione basati sulla tua idea di storia.
  2. Genera con l'IA: Se hai un concetto ma nessuna struttura, usa il Generatore di Schema. Fornisci semplicemente il tuo genere e un'idea di storia, e creerà uno schema di trama completo e modificabile che puoi applicare al tuo manoscritto.
  3. Inizia Vuoto: Per chi preferisce una tela completamente aperta, questa opzione crea un nuovo progetto con un primo capitolo vuoto, pronto per iniziare a scrivere immediatamente.
", "help.gettingStarted.firstProject.title": "Avviare il Tuo Primo Progetto", diff --git a/locales/ja/help.json b/locales/ja/help.json index 6ce72740..d55927d5 100644 --- a/locales/ja/help.json +++ b/locales/ja/help.json @@ -71,7 +71,7 @@ "help.docs.pwaDesktop.title": "PWA およびデスクトップ パッケージング", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "ラグと迅速な組み立て", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri デスクトップ アプリ", "help.faq.api.content": "

API キーは必要ですか?

クラウド AI プロバイダーのみ。 WorldScript は、API キーなしで、すべての書き込み、プロット ボード、キャラクター、バージョン管理、エクスポートに使用できます。ローカル プロバイダの AI 機能にもキーは必要ありません。

クラウド プロバイダ (API キーが必要)

ローカル プロバイダー (API キーは必要ありません)

キーのセキュリティ

すべての API キーは、IndexedDB に保存される前に、AES-256-GCM (PBKDF2、600,000 SHA-256 反復) で暗号化されます。プレーンテキスト キーは、ディスクに書き込まれたり、localStorage に保存されたり、WorldScript サーバーに送信されたりすることはありません。複数のプロバイダのキーを同時に保存し、再入力せずにそれらを切り替えることができます。

", "help.faq.api.title": "API キーは必要ですか?", diff --git a/locales/ko/help.json b/locales/ko/help.json index 77829750..bfb5608c 100644 --- a/locales/ko/help.json +++ b/locales/ko/help.json @@ -71,7 +71,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/locales/pt/help.json b/locales/pt/help.json index 64cd9a72..6a06c1de 100644 --- a/locales/pt/help.json +++ b/locales/pt/help.json @@ -71,7 +71,7 @@ "help.docs.pwaDesktop.title": "PWA e empacotamento de desktop", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every IA request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG e montagem imediata", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Aplicativo de desktop Tauri", "help.faq.api.content": "

Preciso de uma chave de API?

Somente para provedores de IA em nuvem. Você pode usar o WorldScript para toda a escrita, quadro de plotagem, personagens, controle de versão e exportação sem qualquer chave de API. Os recursos de IA com provedores locais também não precisam de chave.

Provedores de nuvem (exigem uma chave de API)

Provedores locais (sem necessidade de chave de API)

Segurança de chave

Cada chave de API é criptografada com AES-256-GCM (PBKDF2, 600.000 iterações SHA-256) antes de ser armazenada no IndexedDB. A chave de texto simples nunca é gravada em disco, nunca é armazenada em localStorage e nunca é enviada para nenhum servidor WorldScript. Você pode armazenar chaves de vários provedores simultaneamente e alternar entre eles sem digitá-las novamente.

", "help.faq.api.title": "Preciso de uma chave de API?", diff --git a/locales/ru/help.json b/locales/ru/help.json index 77829750..bfb5608c 100644 --- a/locales/ru/help.json +++ b/locales/ru/help.json @@ -71,7 +71,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/locales/sv/help.json b/locales/sv/help.json index 77829750..bfb5608c 100644 --- a/locales/sv/help.json +++ b/locales/sv/help.json @@ -71,7 +71,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/locales/zh/help.json b/locales/zh/help.json index 3562585b..68250665 100644 --- a/locales/zh/help.json +++ b/locales/zh/help.json @@ -71,7 +71,7 @@ "help.docs.pwaDesktop.title": "PWA 和桌面打包", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG 和快速组装", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri 桌面应用程序", "help.faq.api.content": "

我需要 API 密钥吗?

仅适用于云 AI 提供商。您可以使用 WorldScript 进行所有写作、绘图板、角色、版本控制和导出,无需任何 API 密钥。本地提供商的 AI 功能也不需要密钥。

云提供商(需要 API 密钥)

本地提供商(无需 API 密钥)

密钥安全

每个 API 密钥在存储到 IndexedDB 之前都使用 AES-256-GCM(PBKDF2,600,000 SHA-256 迭代)加密。明文密钥永远不会写入磁盘,永远不会存储在 localStorage 中,也永远不会发送到任何 WorldScript 服务器。您可以同时存储多个提供商的密钥并在它们之间切换,而无需重新输入它们。

", "help.faq.api.title": "我需要 API 密钥吗?", diff --git a/public/locales/de/bundle.json b/public/locales/de/bundle.json index abb356ef..02cf3086 100644 --- a/public/locales/de/bundle.json +++ b/public/locales/de/bundle.json @@ -1110,7 +1110,7 @@ "help.advanced.adaptiveAi.title": "Adaptive KI, GPU & Eco-Modus", "help.advanced.cloudSync.content": "Die optionale Ende-zu-Ende-verschlüsselte Synchronisierung hält deine Bibliothek über mehrere Geräte hinweg aktuell – mit einem Cloudflare-R2-Backend. Aktiviere „Cloud-Sync“ unter Einstellungen → Early-Access-Funktionen und richte sie unter Einstellungen → Verbindungen ein. Projektdaten werden vor dem Hochladen lokal mit AES-256-GCM verschlüsselt, und deine KI-API-Schlüssel werden nie in die Cloud gesendet. Die Synchronisierung ist komplett optional; ohne sie bleibt WorldScript eine vollständig offline-first arbeitende App.", "help.advanced.cloudSync.title": "Cloud-Synchronisierung", - "help.advanced.encryption.content": "Schütze primäre Projektdaten, Snapshots und unterstützte Einstellungen auf deinem Gerät mit AES-256-GCM-Verschlüsselung, abgeleitet aus einer Passphrase (PBKDF2, 600.000 Iterationen). Aktiviere sie unter Einstellungen → Datenschutz & Sicherheit → „Projektdaten im Ruhezustand verschlüsseln“. Beim nächsten Start fragt ein Entsperr-Dialog nach deiner Passphrase; geschützte Lese- und Schreibvorgänge bleiben im gesperrten Zustand blockiert, statt auf Klartext zurückzufallen. Während das datenbankübergreifende Migrationsprotokoll fertiggestellt wird, können Verschlüsselung und Passphrase nicht geändert oder deaktiviert werden, damit bestehende Chiffretexte wiederherstellbar bleiben. Deine Passphrase verlässt das Gerät nie und kann nicht wiederhergestellt werden – exportiere ein verschlüsseltes Bibliotheks-Backup, bevor du experimentierst.", + "help.advanced.encryption.content": "Schütze primäre Projektdaten, Snapshots und unterstützte Einstellungen auf deinem Gerät mit AES-256-GCM-Verschlüsselung, abgeleitet aus einer Passphrase (PBKDF2, 600.000 Iterationen). Aktiviere sie unter Einstellungen → Datenschutz & Sicherheit → „Projektdaten im Ruhezustand verschlüsseln“. Beim nächsten Start fragt ein Entsperr-Dialog nach deiner Passphrase; geschützte Lese- und Schreibvorgänge bleiben im gesperrten Zustand blockiert, statt auf Klartext zurückzufallen. Verschlüsselung deaktivieren oder Passphrase ändern ist unter Einstellungen → Datenschutz verfügbar, abgesichert durch einen vollständigen, journalgeführten Neuverschlüsselungsvorgang, sodass bestehende Chiffretexte bei einer unterbrochenen Rotation wiederherstellbar bleiben. Dies schützt den Browser/PWA-IndexedDB-Speicherpfad; auf dem Tauri-Desktop-Build werden Projektdaten als Klartextdateien gespeichert und sind von dieser Einstellung noch nicht erfasst. Deine Passphrase verlässt das Gerät nie und kann nicht wiederhergestellt werden – exportiere ein verschlüsseltes Bibliotheks-Backup, bevor du experimentierst.", "help.advanced.encryption.title": "Verschlüsselung im Ruhezustand", "help.advanced.languages.content": "WorldScript Studio bietet 19 Oberflächensprachen. Fünf sind Produktions-Stufe (Deutsch, Englisch, Spanisch, Französisch, Italienisch) — vollständig geprüft. Weitere sind Nahe-Produktion (Japanisch, Chinesisch, Portugiesisch, Griechisch) oder Beta (Finnisch, Schwedisch, Ungarisch, Isländisch, Baskisch, Koreanisch, Russisch sowie die Rechts-nach-links-Sprachen Arabisch, Hebräisch und Persisch). Die Status-Stufe erscheint neben jeder Sprache unter Einstellungen → Allgemein und in der Sprachauswahl des Willkommensportals; ein Qualitäts-Dashboard fasst die Abdeckung je Sprache zusammen. Wechsle die Sprache dort oder über die Befehlspalette. Die Auswahl von Arabisch, Hebräisch oder Persisch stellt die gesamte Oberfläche auf RTL um und lädt selbst gehostete Noto-Sans-Arabic/Hebrew-Schriften (mit Noto Naskh Arabic für den Manuskript-Editor). Dein Manuskripttext folgt stets seiner eigenen Schreibrichtung, sodass du lateinische und RTL-Passagen frei mischen kannst. Beta- und RTL-Übersetzungen sind von der Community verbesserbar; Hilfeartikel fallen auf Englisch zurück, wo eine Sprache sie noch nicht übersetzt hat.", "help.advanced.languages.title": "Sprachen, Status-Stufen & RTL", @@ -1132,7 +1132,7 @@ "help.aiStudio.overview.title": "Übersicht über das KI-Schreibstudio", "help.aiStudio.plotAi.content": "

Plot-Board-KI: Nächsten Beat vorschlagen

Die Funktion Nächsten Beat vorschlagen nutzt Manuskript und Gliederung als Kontext, um die nächste Szenenkarte im Plot Board vorzuschlagen – ideal, wenn man weiß, dass ein Kapitel „irgendetwas“ braucht, aber unklar ist, was.

", "help.aiStudio.plotAi.title": "Plot-Board-KI-Beats", - "help.aiStudio.providers.content": "

KI-Anbieter & API-Schlüssel

WorldScript Studio verbindet sich mit neun KI-Backends. Konfiguriere sie unter Einstellungen → KI-Modelle und Einstellungen → Erweiterte KI. Alle API-Schlüssel werden mit AES-256-GCM (PBKDF2, 600.000 Iterationen, SHA-256) verschlüsselt, bevor sie in IndexedDB gespeichert werden – sie werden nie an einen WorldScript-Server übertragen.

Cloud-Anbieter

Lokale / Self-Hosted-Anbieter

Hybrid-Fallback-Kette

Unter Einstellungen → Erweiterte KI → Hybrid-Fallback-Kette legst du eine geordnete Anbieterliste fest. Wenn der primäre Anbieter ein Rate-Limit oder einen Netzwerkfehler zurückgibt, versucht WorldScript es automatisch mit dem nächsten in der Kette. Beispiel: erst Gemini, dann OpenAI, dann Ollama auf dem Desktop.

Kreativitätseinstellung

Der Kreativitäts-Regler (0–1) entspricht dem KI-Temperaturparameter. Nutze 0,2–0,4 für sachliche Aufgaben (Zusammenfassungen, Konsistenzprüfungen), 0,5–0,7 für ausgewogene Prosafortsetzung und 0,8–1,0 für Brainstorming und hochkreative Generierung.

", + "help.aiStudio.providers.content": "

KI-Anbieter & API-Schlüssel

WorldScript Studio verbindet sich mit neun KI-Backends. Konfiguriere sie unter Einstellungen → KI-Modelle und Einstellungen → Erweiterte KI. Browser/PWA-API-Schlüssel sind mit AES-256-GCM in IndexedDB geschützt; der Schutz von Desktop-API-Schlüsseln folgt dem Desktop-Speicher-Lebenszyklus und ist unter Einstellungen → Datenschutz & Sicherheit dokumentiert. API-Schlüssel werden nie an einen WorldScript-Server übertragen. (Ausnahme: Claude im Web/PWA-Build – dort werden Anfragen über WorldScripts eigenen zustandslosen Serverless-Proxy weitergeleitet, ohne Protokollierung auf Anwendungsebene – Anfrage-Logs der Hosting-Plattform liegen außerhalb dieser Garantie, da Anthropic direkte Browser-Anfragen blockiert; auf dem Desktop wird Anthropic wie jeder andere Anbieter direkt aufgerufen.)

Cloud-Anbieter

Lokale / Self-Hosted-Anbieter

Hybrid-Fallback-Kette

Unter Einstellungen → Erweiterte KI → Hybrid-Fallback-Kette legst du eine geordnete Anbieterliste fest. Wenn der primäre Anbieter ein Rate-Limit oder einen Netzwerkfehler zurückgibt, versucht WorldScript es automatisch mit dem nächsten in der Kette. Beispiel: erst Gemini, dann OpenAI, dann Ollama auf dem Desktop.

Kreativitätseinstellung

Der Kreativitäts-Regler (0–1) entspricht dem KI-Temperaturparameter. Nutze 0,2–0,4 für sachliche Aufgaben (Zusammenfassungen, Konsistenzprüfungen), 0,5–0,7 für ausgewogene Prosafortsetzung und 0,8–1,0 für Brainstorming und hochkreative Generierung.

", "help.aiStudio.providers.title": "KI-Anbieter & Schlüssel", "help.aiStudio.ragContext.content": "

Lokale Retrieval-Augmented Prompts

Wenn RAG-Kontext im KI-Werkzeuge-Panel aktiv ist, holt WorldScript relevante Manuskriptabschnitte, bevor das Modell aufgerufen wird. Der Hybrid-Modus mischt semantische Embeddings (~60 %), lexikalische Treffer (~30 %) und Aktualität (~10 %).

  1. Index unter Einstellungen → Erweiterte KI → Lokalen Suchindex neu aufbauen erstellen (lokales Embedding-Modell erforderlich).
  2. KI-Schreibstudio öffnen, RAG-Kontext aktivieren, dann Weiterschreiben, Brainstorm oder Kritik nutzen.
  3. Das Chunk-Badge zeigt injizierte Passagen; Plot-Board-Vorschläge nutzen dieselbe Pipeline.

Ihr Manuskript bleibt im Browser; nur der zusammengesetzte Prompt geht an den gewählten KI-Anbieter.

", "help.aiStudio.ragContext.title": "RAG-Kontext für KI-Generierung", @@ -1172,25 +1172,25 @@ "help.docs.featureFlags.title": "Feature-Flags", "help.docs.lazyLoading.content": "

Lazy Loading & Bundle-Architektur

WorldScript Studio ist auf schnellen Erstladevorgang ausgelegt. Alle 14 Hauptansichten und schwere Bibliotheken werden erst bei Bedarf geladen.

", "help.docs.lazyLoading.title": "Lazy Loading", - "help.docs.privacySecurity.content": "

Datenschutz- und Sicherheitsmodell

WorldScript Studio ist lokal konzipiert: Deine Geschichte verlässt dein Gerät nie, außer wenn du ausdrücklich eine Anfrage an einen Cloud-KI-Anbieter sendest.

", + "help.docs.privacySecurity.content": "

Datenschutz- und Sicherheitsmodell

WorldScript Studio ist lokal konzipiert: Deine Geschichte verlässt dein Gerät nie, außer wenn du ausdrücklich eine Anfrage an einen Cloud-KI-Anbieter sendest.

", "help.docs.privacySecurity.title": "Datenschutz & Sicherheit", "help.docs.pwaDesktop.content": "

PWA & Desktop-Paketierung

WorldScript Studio wird als Progressive Web App (PWA) und als native Desktop-App (Tauri) ausgeliefert. Beide Optionen halten Daten lokal – kein Konto erforderlich.

PWA (Browser)

Tauri-Desktop-App

", "help.docs.pwaDesktop.title": "PWA & Desktop", "help.docs.ragPipeline.content": "

RAG- & Prompt-Zusammenstellung

Die RAG-Pipeline reichert jede KI-Anfrage mit relevanten Passagen aus dem Manuskript an – damit das Modell die Geschichte kennt, bevor es die nächste Zeile schreibt.

", "help.docs.ragPipeline.title": "RAG-Pipeline", - "help.docs.tauriDesktop.content": "

Tauri-Desktop-App

Die WorldScript-Studio-Desktop-App verpackt dieselbe React-Codebasis in eine native Tauri-v2-Shell (Rust). Sie fügt Fähigkeiten hinzu, die Browser nicht bieten können, während deine Daten vollständig lokal bleiben.

Was die Desktop-App bietet

Installer & Distribution

Der Tauri-CI-Workflow erstellt plattformspezifische Installer bei jedem getaggten Release (v*): .dmg für macOS (code-signed), .msi / .exe für Windows (code-signed), .AppImage und .deb für Linux. Installer sind an GitHub Releases angehängt und werden vom Auto-Updater-Endpunkt referenziert.

Datenspeicherort

Auf dem Desktop liegen Daten im Tauri-App-Datenverzeichnis – typischerweise %APPDATA%\\WorldScript Studio unter Windows, ~/Library/Application Support/WorldScript Studio unter macOS und ~/.local/share/worldscript-studio unter Linux. Dieses Verzeichnis kann für ein vollständiges manuelles Backup sicher kopiert werden.

", + "help.docs.tauriDesktop.content": "

Tauri-Desktop-App

Die WorldScript-Studio-Desktop-App verpackt dieselbe React-Codebasis in eine native Tauri-v2-Shell (Rust). Sie fügt Fähigkeiten hinzu, die Browser nicht bieten können, während deine Daten vollständig lokal bleiben.

Was die Desktop-App bietet

Installer & Distribution

Der Tauri-CI-Workflow erstellt plattformspezifische Installer bei jedem getaggten Release (v*): .dmg für macOS (code-signed), .msi / .exe für Windows (code-signed), .AppImage und .deb für Linux. Installer sind an GitHub Releases angehängt und werden vom Auto-Updater-Endpunkt referenziert.

Datenspeicherort

Auf dem Desktop liegen Daten im Tauri-App-Datenverzeichnis – typischerweise %APPDATA%\\WorldScript Studio unter Windows, ~/Library/Application Support/WorldScript Studio unter macOS und ~/.local/share/worldscript-studio unter Linux. Dieses Verzeichnis kann für ein vollständiges manuelles Backup sicher kopiert werden.

", "help.docs.tauriDesktop.title": "Tauri-Desktop-App", - "help.faq.api.content": "

Benötige ich einen API-Schlüssel?

Nur für Cloud-KI-Anbieter. Du kannst WorldScript für das gesamte Schreiben, das Plot-Board, die Charaktere, die Versionskontrolle und den Export ohne API-Schlüssel verwenden. Für KI-Funktionen bei lokalen Anbietern ist ebenfalls kein Schlüssel erforderlich.

Cloud-Anbieter (erfordern einen API-Schlüssel)

Lokale Anbieter (kein API-Schlüssel erforderlich)

Schlüsselsicherheit

Jeder API-Schlüssel wird mit AES-256-GCM (PBKDF2, 600.000 SHA-256-Iterationen) verschlüsselt, bevor er in IndexedDB gespeichert wird. Der Klartextschlüssel wird nie auf die Festplatte geschrieben, nie in localStorage gespeichert und nie an einen WorldScript-Server gesendet. Du kannst Schlüssel für mehrere Anbieter gleichzeitig hinterlegen und ohne erneute Eingabe zwischen ihnen wechseln.

", + "help.faq.api.content": "

Benötige ich einen API-Schlüssel?

Nur für Cloud-KI-Anbieter. Du kannst WorldScript für das gesamte Schreiben, das Plot-Board, die Charaktere, die Versionskontrolle und den Export ohne API-Schlüssel verwenden. Für KI-Funktionen bei lokalen Anbietern ist ebenfalls kein Schlüssel erforderlich.

Cloud-Anbieter (erfordern einen API-Schlüssel)

Lokale Anbieter (kein API-Schlüssel erforderlich)

Schlüsselsicherheit

Browser/PWA-API-Schlüssel sind mit AES-256-GCM in IndexedDB geschützt (zufälliger, nicht extrahierbarer Schlüssel – keine Passphrase, nichts abzuleiten). Der Schutz von Desktop-API-Schlüsseln folgt dem Desktop-Speicher-Lebenszyklus, Details zum Browser-Speicher gelten also nicht automatisch für Desktop-Dateien. API-Schlüssel werden nie an einen WorldScript-Server gesendet. (Ausnahme: Claude im Web/PWA-Build – dort werden Anfragen über WorldScripts eigenen zustandslosen Serverless-Proxy weitergeleitet, ohne Protokollierung auf Anwendungsebene – Anfrage-Logs der Hosting-Plattform liegen außerhalb dieser Garantie, da Anthropic direkte Browser-Anfragen blockiert; auf dem Desktop wird Anthropic wie jeder andere Anbieter direkt aufgerufen.) Du kannst Schlüssel für mehrere Anbieter gleichzeitig hinterlegen und ohne erneute Eingabe zwischen ihnen wechseln.

", "help.faq.api.title": "Benötige ich einen API-Schlüssel?", "help.faq.offline.content": "

Offline arbeiten

WorldScript Studio ist Local-First. Fast alles funktioniert ohne Internetverbindung, sobald die App geladen ist.

", "help.faq.offline.title": "Offline arbeiten?", - "help.faq.privacy.content": "

Deine Geschichte bleibt auf deinem Gerät

Ja, vollständig. WorldScript Studio ist lokal ausgerichtet – es gibt kein WorldScript-Konto, keinen Cloud-Server und kein Unternehmen, das auf deine Manuskripte zugreifen kann. Alle Daten liegen in IndexedDB und OPFS deines Browsers, einem Speicher, den nur dein Gerät lesen kann.

Was lokal bleibt (standardmäßig alles)

Was dein Gerät verlässt (nur wenn du es wählst)

Vollständig offline gehen

Wechsle zu einem lokalen KI-Anbieter – WebLLM im Browser oder Ollama in der Desktop-App – oder deaktiviere die KI-Funktionen ganz. Im vollständig Offline-Modus werden nirgendwo Daten übertragen. Schreiben, Versionskontrolle, Export und alle Einstellungen funktionieren ohne Netzwerkverbindung.

", + "help.faq.privacy.content": "

Deine Geschichte bleibt auf deinem Gerät

Ja, vollständig. WorldScript Studio ist lokal ausgerichtet – es gibt kein WorldScript-Konto, keinen Cloud-Server und kein Unternehmen, das auf deine Manuskripte zugreifen kann. Alle Daten bleiben auf deinem Gerät: in IndexedDB und OPFS deines Browsers (Browser/PWA) oder in lokalen Dateien im Datenverzeichnis der Desktop-App (Tauri) – in jedem Fall auf deinem Gerät statt auf einem Server (Desktop-Dateien sind Klartext — lokale Geräte-/Betriebssystemrechte, nicht Verschlüsselung, entscheiden dort, wer sie lesen kann).

Was lokal bleibt (standardmäßig alles)

Was dein Gerät verlässt (nur wenn du es wählst)

Vollständig offline gehen

Wechsle zu einem lokalen KI-Anbieter – WebLLM im Browser oder Ollama in der Desktop-App – oder deaktiviere die KI-Funktionen ganz. Im vollständig Offline-Modus werden nirgendwo Daten übertragen. Schreiben, Versionskontrolle, Export und alle Einstellungen funktionieren ohne Netzwerkverbindung.

", "help.faq.privacy.title": "Ist meine Geschichte privat?", "help.faq.providers.content": "

Welchen KI-Anbieter wählen?

WorldScript unterstützt mehrere KI-Anbieter. Hier ist eine schnelle Entscheidungshilfe.

", "help.faq.providers.title": "Welchen KI-Anbieter wählen?", - "help.faq.saving.content": "

Dein gesamtes Projekt, einschließlich aller Texte und KI-generierten Bilder, wird automatisch und kontinuierlich im lokalen Speicher deines Webbrowsers (einer Datenbank namens IndexedDB) gespeichert. Das bedeutet, dass deine Arbeit auf deinem Computer zwischen Sitzungen erhalten bleibt. Eine „Speichern…“-Anzeige erscheint in der Kopfzeile, wenn Änderungen geschrieben werden, gefolgt von „Alle Änderungen gespeichert“.

Es gibt kein Cloud-Konto oder serverseitige Speicherung. Das gewährleistet vollständige Privatsphäre, bedeutet aber auch, dass du selbst für Sicherungen verantwortlich bist – nutze dazu die Funktion „Sicherung exportieren“ in den Einstellungen.

", + "help.faq.saving.content": "

Dein gesamtes Projekt, einschließlich aller Texte und KI-generierten Bilder, wird automatisch und kontinuierlich gespeichert — im Browser/PWA-Build im lokalen Speicher deines Webbrowsers (einer Datenbank namens IndexedDB), im Tauri-Desktop-Build als lokale Dateien im Datenverzeichnis der App. So oder so bleibt deine Arbeit auf deinem Computer zwischen Sitzungen erhalten. Eine „Speichern…“-Anzeige erscheint in der Kopfzeile, wenn Änderungen geschrieben werden, gefolgt von „Alle Änderungen gespeichert“.

Es gibt kein Cloud-Konto oder serverseitige Speicherung. Das gewährleistet vollständige Privatsphäre, bedeutet aber auch, dass du selbst für Sicherungen verantwortlich bist – nutze dazu die Funktion „Sicherung exportieren“ in den Einstellungen.

", "help.faq.saving.title": "Wie werden meine Projektdaten gespeichert?", - "help.gettingStarted.desktop.content": "

Wo soll WorldScript Studio ausgeführt werden?

WorldScript Studio läuft in drei Umgebungen. Deine Manuskripte, Charaktere und Einstellungen bleiben immer auf deinem Gerät – wähle die Option, die am besten zu deinem Workflow passt.

Browser (keine Installation erforderlich)

Öffne WorldScript in jedem modernen Browser (Chrome, Edge, Firefox, Safari). Daten werden in der IndexedDB deines Browsers gespeichert – einer persistenten Sandbox-Datenbank, die nicht durch normale Cache-Bereinigungen gelöscht wird. Schreiben, bearbeiten, exportieren und Versionen verwalten – alles vollständig offline, sobald die App-Shell gecacht ist.

PWA (Installation über Browser)

Installiere WorldScript als Progressive Web App für ein dediziertes Fenster ohne Browser-Chrome. Klicke in Chrome oder Edge auf das ⊕-Symbol in der Adressleiste oder gehe zu Einstellungen → Allgemein → Als App installieren. Auf iPhone oder iPad: Teilen → Zum Startbildschirm hinzufügen.

Desktop-App (Tauri)

Die optionale Tauri-v2-Desktop-App verpackt WorldScript in eine native Rust-Shell und bietet Funktionen, die Browser nicht liefern können.

Datenschutz in allen Umgebungen

API-Schlüssel werden vor der Speicherung mit AES-256-GCM verschlüsselt und nie an einen WorldScript-Server übertragen. Manuskripte verlassen dein Gerät nur, wenn du eine bestimmte Passage explizit an einen Cloud-KI-Anbieter sendest.

", + "help.gettingStarted.desktop.content": "

Wo soll WorldScript Studio ausgeführt werden?

WorldScript Studio läuft in drei Umgebungen. Deine Manuskripte, Charaktere und Einstellungen bleiben immer auf deinem Gerät – wähle die Option, die am besten zu deinem Workflow passt.

Browser (keine Installation erforderlich)

Öffne WorldScript in jedem modernen Browser (Chrome, Edge, Firefox, Safari). Daten werden in der IndexedDB deines Browsers gespeichert – einer persistenten Sandbox-Datenbank, die nicht durch normale Cache-Bereinigungen gelöscht wird. Schreiben, bearbeiten, exportieren und Versionen verwalten – alles vollständig offline, sobald die App-Shell gecacht ist.

PWA (Installation über Browser)

Installiere WorldScript als Progressive Web App für ein dediziertes Fenster ohne Browser-Chrome. Klicke in Chrome oder Edge auf das ⊕-Symbol in der Adressleiste oder gehe zu Einstellungen → Allgemein → Als App installieren. Auf iPhone oder iPad: Teilen → Zum Startbildschirm hinzufügen.

Desktop-App (Tauri)

Die optionale Tauri-v2-Desktop-App verpackt WorldScript in eine native Rust-Shell und bietet Funktionen, die Browser nicht liefern können.

Datenschutz in allen Umgebungen

Browser/PWA-API-Schlüssel sind mit AES-256-GCM in IndexedDB geschützt; der Desktop-Schutz folgt dem Desktop-Speicher-Lebenszyklus. API-Schlüssel werden nie an einen WorldScript-Server übertragen. (Ausnahme: Claude im Web/PWA-Build – dort werden Anfragen über WorldScripts eigenen zustandslosen Serverless-Proxy weitergeleitet, ohne Protokollierung auf Anwendungsebene – Anfrage-Logs der Hosting-Plattform liegen außerhalb dieser Garantie, da Anthropic direkte Browser-Anfragen blockiert; auf dem Desktop wird Anthropic wie jeder andere Anbieter direkt aufgerufen.) Manuskripte verlassen dein Gerät nur, wenn du eine bestimmte Passage explizit an einen Cloud-KI-Anbieter sendest.

", "help.gettingStarted.desktop.title": "Desktop-App (Tauri) & PWA", "help.gettingStarted.firstProject.content": "

Wähle deinen Weg

Das Willkommensportal bietet dir drei leistungsstarke Möglichkeiten, um anzufangen:

  1. Mit einer Vorlage starten: Ideal für strukturiertes Erzählen. Gehe zur Ansicht Vorlagen, wähle eine Struktur wie die „Drei-Akte-Struktur“ und nutze die Funktion „Mit KI personalisieren“, um basierend auf deiner Story-Idee individuelle Anregungen für jeden Abschnitt zu erhalten.
  2. Mit KI generieren: Wenn du ein Konzept, aber keine Struktur hast, nutze den Gliederungsgenerator. Gib dein Genre und eine Story-Idee ein, und er erstellt eine vollständige, bearbeitbare Handlungsgliederung, die du auf dein Manuskript anwenden kannst.
  3. Leer beginnen: Für alle, die eine komplett offene Leinwand bevorzugen: Diese Option erstellt ein neues Projekt mit einem leeren ersten Kapitel, sofort schreibbereit.
", "help.gettingStarted.firstProject.title": "Ihr erstes Projekt starten", diff --git a/public/locales/el/bundle.json b/public/locales/el/bundle.json index 90138806..ddc97bf9 100644 --- a/public/locales/el/bundle.json +++ b/public/locales/el/bundle.json @@ -1178,7 +1178,7 @@ "help.docs.pwaDesktop.title": "Συσκευασία PWA & επιτραπέζιου υπολογιστή", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & άμεση συναρμολόγηση", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Εφαρμογή επιφάνειας εργασίας Tauri", "help.faq.api.content": "

Χρειάζομαι κλειδί API;

Μόνο για παρόχους τεχνητής νοημοσύνης στο cloud. Μπορείτε να χρησιμοποιήσετε το WorldScript για όλη τη γραφή, τον πίνακα Plot, χαρακτήρες, έλεγχο έκδοσης και εξαγωγή χωρίς κανένα κλειδί API. Οι λειτουργίες τεχνητής νοημοσύνης με τοπικούς παρόχους επίσης δεν χρειάζονται κλειδί.

Οι πάροχοι cloud (απαιτούν κλειδί API)

Τοπικοί πάροχοι (δεν απαιτείται κλειδί API)

Ασφάλεια κλειδιού

Κάθε κλειδί API είναι κρυπτογραφημένο με AES-256-GCM (PBKDF2, 600.000 επαναλήψεις SHA-256 πριν αποθηκευτούν xD. Το κλειδί απλού κειμένου δεν γράφεται ποτέ στο δίσκο, δεν αποθηκεύεται ποτέ στο localStorage και δεν αποστέλλεται ποτέ σε κανένα διακομιστή WorldScript. Μπορείτε να αποθηκεύσετε κλειδιά για πολλούς παρόχους ταυτόχρονα και να κάνετε εναλλαγή μεταξύ τους χωρίς να τους εισαγάγετε ξανά.

", "help.faq.api.title": "Χρειάζομαι κλειδί API;", diff --git a/public/locales/en/bundle.json b/public/locales/en/bundle.json index e3bb600c..a4dd63ac 100644 --- a/public/locales/en/bundle.json +++ b/public/locales/en/bundle.json @@ -1110,7 +1110,7 @@ "help.advanced.adaptiveAi.title": "Adaptive AI, GPU & Eco Mode", "help.advanced.cloudSync.content": "Optional end-to-end encrypted sync keeps your library in step across devices using a Cloudflare R2 backend. Enable “Cloud sync” under Settings → Early Access Features and configure it under Settings → Connections. Project data is encrypted locally with AES-256-GCM before upload, and your AI API keys are never sent to the cloud. Sync is entirely opt-in; with it off, WorldScript remains a fully offline-first app.", "help.advanced.cloudSync.title": "Cloud Sync", - "help.advanced.encryption.content": "Protect primary project data, snapshots, and supported settings stored on your device with AES-256-GCM encryption derived from a passphrase (PBKDF2, 600,000 iterations). Enable it under Settings → Privacy & Security → “Encrypt project data at rest”. On the next launch an unlock dialog asks for your passphrase; protected reads and writes remain blocked while locked rather than falling back to plaintext. While the cross-store migration protocol is being completed, changing or disabling encryption is unavailable so existing ciphertext remains recoverable. Your passphrase never leaves the device and cannot be recovered — export an encrypted library backup before you experiment.", + "help.advanced.encryption.content": "Protect primary project data, snapshots, and supported settings stored on your device with AES-256-GCM encryption derived from a passphrase (PBKDF2, 600,000 iterations). Enable it under Settings → Privacy & Security → “Encrypt project data at rest”. On the next launch an unlock dialog asks for your passphrase; protected reads and writes remain blocked while locked rather than falling back to plaintext. Disabling encryption or rotating your passphrase is available from Settings → Privacy, backed by a full journaled re-encryption pass so existing ciphertext stays recoverable if a rotation is interrupted. This protects the Browser/PWA IndexedDB storage path; on the Tauri desktop build, project data is stored as plaintext files and is not yet covered by this setting. Your passphrase never leaves the device and cannot be recovered — export an encrypted library backup before you experiment.", "help.advanced.encryption.title": "At-Rest Encryption", "help.advanced.languages.content": "WorldScript Studio ships 19 interface languages. Five are Production tier (German, English, Spanish, French, Italian) — fully reviewed. Others are Near-Production (Japanese, Chinese, Portuguese, Greek) or Beta (Finnish, Swedish, Hungarian, Icelandic, Basque, Korean, Russian, plus the right-to-left languages Arabic, Hebrew and Persian). The status tier appears next to each language in Settings → General and the Welcome Portal language picker, and a quality dashboard summarizes per-locale coverage. Switch language there or via the Command Palette. Selecting Arabic, Hebrew or Persian flips the whole interface to RTL and loads self-hosted Noto Sans Arabic/Hebrew fonts (with Noto Naskh Arabic for the manuscript editor). Your manuscript text always follows its own script direction, so you can mix Latin and RTL passages freely. Beta and RTL translations are community-improvable; help articles fall back to English where a locale has not yet translated them.", "help.advanced.languages.title": "Languages, status tiers & RTL", @@ -1132,7 +1132,7 @@ "help.aiStudio.overview.title": "Overview of the AI Writing Studio", "help.aiStudio.plotAi.content": "

Plot Board AI: Suggest Next Beat

The Suggest next beat feature uses your manuscript and outline as context to propose the next scene card for the Plot Board. It is designed for moments when you know a chapter needs \"something\" but are unsure what.

", "help.aiStudio.plotAi.title": "Plot Board AI beats", - "help.aiStudio.providers.content": "

AI Providers & API Keys

WorldScript Studio connects to nine AI backends. Configure them under Settings → AI Models and Settings → Advanced AI. Browser/PWA API keys are AES-256-GCM protected in IndexedDB; desktop API-key protection follows the desktop storage lifecycle and is documented in Settings → Privacy & Security. API keys are never transmitted to any WorldScript server.

Cloud Providers

Local / Self-Hosted Providers

Hybrid Fallback Chain

Under Settings → Advanced AI → Hybrid fallback chain, define an ordered list of providers. If the primary provider returns a rate-limit or network error, WorldScript automatically retries with the next provider in the chain. This creates a resilient setup — for example: try Gemini first, fall back to OpenAI, fall back to Ollama on desktop.

Creativity Setting

The Creativity slider (0–1) maps to the AI temperature parameter. Use 0.2–0.4 for factual tasks (summaries, consistency checks), 0.5–0.7 for balanced prose continuation, and 0.8–1.0 for brainstorming and highly creative generation.

", + "help.aiStudio.providers.content": "

AI Providers & API Keys

WorldScript Studio connects to nine AI backends. Configure them under Settings → AI Models and Settings → Advanced AI. Browser/PWA API keys are AES-256-GCM protected in IndexedDB; desktop API-key protection follows the desktop storage lifecycle and is documented in Settings → Privacy & Security. API keys are never transmitted to any WorldScript server. (Claude on the web/PWA build is the one exception: it relays through WorldScript's own stateless serverless proxy, never logged at the application level — hosting-platform request logs are outside this guarantee, since Anthropic blocks direct browser requests — desktop calls Anthropic directly, like every other provider.)

Cloud Providers

Local / Self-Hosted Providers

Hybrid Fallback Chain

Under Settings → Advanced AI → Hybrid fallback chain, define an ordered list of providers. If the primary provider returns a rate-limit or network error, WorldScript automatically retries with the next provider in the chain. This creates a resilient setup — for example: try Gemini first, fall back to OpenAI, fall back to Ollama on desktop.

Creativity Setting

The Creativity slider (0–1) maps to the AI temperature parameter. Use 0.2–0.4 for factual tasks (summaries, consistency checks), 0.5–0.7 for balanced prose continuation, and 0.8–1.0 for brainstorming and highly creative generation.

", "help.aiStudio.providers.title": "AI providers & keys", "help.aiStudio.ragContext.content": "

Retrieval-augmented prompts (local)

When RAG context is enabled in the AI Tools panel, WorldScript retrieves relevant manuscript chunks before calling the model. Hybrid mode blends semantic embeddings (~60%), lexical overlap (~30%), and recency (~10%).

  1. Build the index under Settings → Advanced AI → Rebuild local search index (requires the local embedding model on capable devices).
  2. Open the AI Writing Studio, enable RAG context, and run Continue, Brainstorm, or Critic.
  3. The chunk badge shows how many passages were injected; Plot Board beat suggestions use the same pipeline.

Your manuscript text stays in the browser; only the assembled prompt is sent to your chosen AI provider.

", "help.aiStudio.ragContext.title": "RAG context for AI generation", @@ -1172,7 +1172,7 @@ "help.docs.featureFlags.title": "Feature flag system", "help.docs.lazyLoading.content": "

Lazy Loading & Bundle Architecture

WorldScript Studio is engineered for a fast initial load. All 14 major views and several heavy libraries are loaded on-demand, only when first needed.

", "help.docs.lazyLoading.title": "Lazy loading & bundles", - "help.docs.privacySecurity.content": "

Privacy & Security Model

WorldScript Studio is designed local-first: your story never leaves your device unless you explicitly send a prompt to a cloud AI provider.

", + "help.docs.privacySecurity.content": "

Privacy & Security Model

WorldScript Studio is designed local-first: your story never leaves your device unless you explicitly send a prompt to a cloud AI provider.

", "help.docs.privacySecurity.title": "Privacy & security model", "help.docs.pwaDesktop.content": "

PWA & Desktop Packaging

WorldScript Studio ships as both a Progressive Web App (PWA) and a native desktop app (Tauri). Both options keep your data local — no account required.

PWA (browser)

Tauri desktop app

", "help.docs.pwaDesktop.title": "PWA & desktop packaging", @@ -1180,17 +1180,17 @@ "help.docs.ragPipeline.title": "RAG & prompt assembly", "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", - "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Browser/PWA API keys are AES-256-GCM protected in IndexedDB. Desktop API-key protection follows the desktop storage lifecycle, so browser persistence details do not describe desktop files. API keys are never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", + "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Browser/PWA API keys are AES-256-GCM protected in IndexedDB. Desktop API-key protection follows the desktop storage lifecycle, so browser persistence details do not describe desktop files. API keys are never sent to any WorldScript server. (Claude on the web/PWA build is the one exception: it relays through WorldScript's own stateless serverless proxy, never logged at the application level — hosting-platform request logs are outside this guarantee, since Anthropic blocks direct browser requests — desktop calls Anthropic directly, like every other provider.) You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", "help.faq.offline.content": "

Working Offline

WorldScript Studio is local-first. Almost everything works without an internet connection once the app is loaded.

", "help.faq.offline.title": "Can I work offline?", - "help.faq.privacy.content": "

Your Story Stays On Your Device

Yes, completely. WorldScript Studio is local-first by design — there is no WorldScript account, no cloud server, and no company that can access your manuscripts. All data lives in your browser's IndexedDB and OPFS, storage that only your device can read.

What stays local (everything, by default)

What leaves your device (only when you choose)

Go fully offline

Switch to a local AI provider — WebLLM in the browser or Ollama on the desktop app — or disable AI features entirely. In fully offline mode, zero data is transmitted anywhere. Writing, version control, export, and all settings work without any network connection.

", + "help.faq.privacy.content": "

Your Story Stays On Your Device

Yes, completely. WorldScript Studio is local-first by design — there is no WorldScript account, no cloud server, and no company that can access your manuscripts. All data stays on your device: in your browser's IndexedDB and OPFS on the Browser/PWA build, or in local files under the app's data directory on the Tauri desktop build — either way, staying on your device rather than a server (desktop files are plaintext, so local device/OS access controls — not encryption — are what actually restrict who can read them there).

What stays local (everything, by default)

What leaves your device (only when you choose)

Go fully offline

Switch to a local AI provider — WebLLM in the browser or Ollama on the desktop app — or disable AI features entirely. In fully offline mode, zero data is transmitted anywhere. Writing, version control, export, and all settings work without any network connection.

", "help.faq.privacy.title": "Is my story private?", "help.faq.providers.content": "

Which AI Provider Should I Use?

WorldScript supports multiple AI providers. Here is a quick guide to help you choose.

", "help.faq.providers.title": "Which AI provider should I use?", - "help.faq.saving.content": "

Your entire project, including all text and AI-generated images, is saved automatically and continuously in your web browser's local storage (a database called IndexedDB). This means your work is persisted on your computer between sessions. A 'Saving...' indicator appears in the header when changes are being written, followed by 'All changes saved'.

There is no cloud account or server-side storage. This ensures complete privacy but also means you are responsible for creating backups using the 'Export Backup' feature in Settings.

", + "help.faq.saving.content": "

Your entire project, including all text and AI-generated images, is saved automatically and continuously — in your web browser's local storage (a database called IndexedDB) on the Browser/PWA build, or in local files under the app's data directory on the Tauri desktop build. Either way, your work is persisted on your computer between sessions. A 'Saving...' indicator appears in the header when changes are being written, followed by 'All changes saved'.

There is no cloud account or server-side storage. This ensures complete privacy but also means you are responsible for creating backups using the 'Export Backup' feature in Settings.

", "help.faq.saving.title": "How is my project data saved?", - "help.gettingStarted.desktop.content": "

Where to Run WorldScript Studio

WorldScript Studio runs in three environments. Your manuscripts, characters, and settings always stay on your device regardless of which you use — choose the option that best fits your workflow.

Browser (No Install Required)

Open WorldScript in any modern browser (Chrome, Edge, Firefox, Safari). Data is stored in your browser's IndexedDB — a persistent, sandboxed database that is not cleared by normal browser cache clears. Write, edit, export, and manage versions fully offline once the app shell is cached.

PWA (Install from Browser)

Install WorldScript as a Progressive Web App for a dedicated window without browser chrome. In Chrome or Edge, click the ⊕ icon in the address bar, or go to Settings → General → Install as App. On iPhone or iPad, use Share → Add to Home Screen.

Desktop App (Tauri)

The optional Tauri v2 desktop app wraps WorldScript in a native Rust shell and adds capabilities that browsers cannot provide.

Privacy in All Environments

Browser/PWA API keys are AES-256-GCM protected in IndexedDB; desktop protection follows the desktop storage lifecycle. API keys are never transmitted to any WorldScript server. Manuscripts only leave your device when you explicitly send a specific passage to a cloud AI provider.

", + "help.gettingStarted.desktop.content": "

Where to Run WorldScript Studio

WorldScript Studio runs in three environments. Your manuscripts, characters, and settings always stay on your device regardless of which you use — choose the option that best fits your workflow.

Browser (No Install Required)

Open WorldScript in any modern browser (Chrome, Edge, Firefox, Safari). Data is stored in your browser's IndexedDB — a persistent, sandboxed database that is not cleared by normal browser cache clears. Write, edit, export, and manage versions fully offline once the app shell is cached.

PWA (Install from Browser)

Install WorldScript as a Progressive Web App for a dedicated window without browser chrome. In Chrome or Edge, click the ⊕ icon in the address bar, or go to Settings → General → Install as App. On iPhone or iPad, use Share → Add to Home Screen.

Desktop App (Tauri)

The optional Tauri v2 desktop app wraps WorldScript in a native Rust shell and adds capabilities that browsers cannot provide.

Privacy in All Environments

Browser/PWA API keys are AES-256-GCM protected in IndexedDB; desktop protection follows the desktop storage lifecycle. API keys are never transmitted to any WorldScript server. (Claude on the web/PWA build is the one exception: it relays through WorldScript's own stateless serverless proxy, never logged at the application level — hosting-platform request logs are outside this guarantee, since Anthropic blocks direct browser requests — desktop calls Anthropic directly, like every other provider.) Manuscripts only leave your device when you explicitly send a specific passage to a cloud AI provider.

", "help.gettingStarted.desktop.title": "Desktop app (Tauri) & PWA", "help.gettingStarted.firstProject.content": "

Choose Your Path

The Welcome Portal gives you three powerful ways to begin:

  1. Start with a Template: This is great for structured storytelling. Go to the Templates view, choose a structure like the 'Three-Act Structure,' and use the 'Personalize with AI' feature to get custom prompts for each section based on your story idea.
  2. Generate with AI: If you have a concept but no structure, use the Outline Generator. Just provide your genre and a story idea, and it will create a full, editable plot outline that you can apply to your manuscript.
  3. Start Blank: For those who prefer a completely open canvas, this option creates a new project with an empty first chapter, ready for you to start writing immediately.
", "help.gettingStarted.firstProject.title": "Starting Your First Project", diff --git a/public/locales/es/bundle.json b/public/locales/es/bundle.json index 94124345..87221c7c 100644 --- a/public/locales/es/bundle.json +++ b/public/locales/es/bundle.json @@ -1110,7 +1110,7 @@ "help.advanced.adaptiveAi.title": "IA adaptativa, GPU y modo Eco", "help.advanced.cloudSync.content": "La sincronización opcional cifrada de extremo a extremo mantiene tu biblioteca al día en todos tus dispositivos mediante un backend de Cloudflare R2. Activa «Sincronización en la nube» en Ajustes → Funciones de acceso anticipado y configúrala en Ajustes → Conexiones. Los datos del proyecto se cifran localmente con AES-256-GCM antes de subirse, y tus claves de API de IA nunca se envían a la nube. La sincronización es totalmente opcional; sin ella, WorldScript sigue siendo una app totalmente «offline-first».", "help.advanced.cloudSync.title": "Sincronización en la nube", - "help.advanced.encryption.content": "Protege los datos principales del proyecto, las instantáneas y los ajustes compatibles almacenados en tu dispositivo con cifrado AES-256-GCM derivado de una frase de contraseña (PBKDF2, 600 000 iteraciones). Actívalo en Ajustes → Privacidad y seguridad → «Cifrar los datos del proyecto en reposo». En el siguiente inicio, una ventana de desbloqueo pide tu frase de contraseña; las lecturas y escrituras protegidas permanecen bloqueadas mientras está bloqueado en lugar de volver a texto sin cifrar. Mientras se completa el protocolo de migración entre almacenes, no se puede cambiar ni desactivar el cifrado para que los textos cifrados existentes sigan siendo recuperables. Tu frase de contraseña nunca sale del dispositivo y no se puede recuperar: exporta una copia de seguridad cifrada de la biblioteca antes de experimentar.", + "help.advanced.encryption.content": "Protege los datos principales del proyecto, las instantáneas y los ajustes compatibles almacenados en tu dispositivo con cifrado AES-256-GCM derivado de una frase de contraseña (PBKDF2, 600 000 iteraciones). Actívalo en Ajustes → Privacidad y seguridad → «Cifrar los datos del proyecto en reposo». En el siguiente inicio, una ventana de desbloqueo pide tu frase de contraseña; las lecturas y escrituras protegidas permanecen bloqueadas mientras está bloqueado en lugar de volver a texto sin cifrar. Desactivar el cifrado o cambiar la frase de contraseña está disponible en Ajustes → Privacidad, respaldado por un proceso de recifrado completo con registro, de modo que los textos cifrados existentes sigan siendo recuperables si una rotación se interrumpe. Esto protege la vía de almacenamiento IndexedDB de Navegador/PWA; en la compilación de escritorio Tauri, los datos del proyecto se guardan como archivos de texto sin cifrar y todavía no están cubiertos por este ajuste. Tu frase de contraseña nunca sale del dispositivo y no se puede recuperar: exporta una copia de seguridad cifrada de la biblioteca antes de experimentar.", "help.advanced.encryption.title": "Cifrado en reposo", "help.advanced.languages.content": "WorldScript Studio incluye 19 idiomas de interfaz. Cinco son de nivel Producción (alemán, inglés, español, francés, italiano), totalmente revisados. Otros son Casi-Producción (japonés, chino, portugués, griego) o Beta (finés, sueco, húngaro, islandés, vasco, coreano, ruso, además de los idiomas de derecha a izquierda árabe, hebreo y persa). El nivel de estado aparece junto a cada idioma en Ajustes → General y en el selector de idioma del Portal de Bienvenida, y un panel de calidad resume la cobertura por idioma. Cambia de idioma ahí o mediante la Paleta de Comandos. Seleccionar árabe, hebreo o persa cambia toda la interfaz a RTL y carga fuentes Noto Sans Arabic/Hebrew autoalojadas (con Noto Naskh Arabic para el editor de manuscrito). El texto de tu manuscrito siempre sigue su propia dirección de escritura, así que puedes mezclar pasajes latinos y RTL libremente. Las traducciones Beta y RTL son mejorables por la comunidad; los artículos de ayuda recurren al inglés cuando un idioma aún no los ha traducido.", "help.advanced.languages.title": "Idiomas, niveles de estado y RTL", @@ -1172,7 +1172,7 @@ "help.docs.featureFlags.title": "Sistema de banderas de funciones", "help.docs.lazyLoading.content": "

Carga diferida y arquitectura de bundles

WorldScript Studio está diseñado para una carga inicial rápida. Las 14 vistas principales y varias bibliotecas pesadas se cargan bajo demanda, solo cuando se necesitan por primera vez.

", "help.docs.lazyLoading.title": "Carga diferida y bundles", - "help.docs.privacySecurity.content": "

Modelo de privacidad y seguridad

WorldScript Studio está diseñado localmente: su historia nunca sale de su dispositivo a menos que envíe explícitamente un mensaje a un proveedor de inteligencia artificial en la nube.

", + "help.docs.privacySecurity.content": "

Modelo de privacidad y seguridad

WorldScript Studio está diseñado localmente: su historia nunca sale de su dispositivo a menos que envíe explícitamente un mensaje a un proveedor de inteligencia artificial en la nube.

", "help.docs.privacySecurity.title": "Modelo de privacidad y seguridad", "help.docs.pwaDesktop.content": "

Empaquetado PWA y escritorio

WorldScript Studio se distribuye como Progressive Web App (PWA) y como aplicación de escritorio nativa (Tauri). Ambas opciones mantienen tus datos en local — sin cuenta requerida.

PWA (navegador)

App de escritorio Tauri

", "help.docs.pwaDesktop.title": "Empaquetado PWA y escritorio", @@ -1180,17 +1180,17 @@ "help.docs.ragPipeline.title": "RAG y ensamblado de prompts", "help.docs.tauriDesktop.content": "

Aplicación de escritorio Tauri

La aplicación de escritorio WorldScript Studio empaqueta la misma base de código React en un shell Tauri v2 nativo (Rust). Añade capacidades que los navegadores no pueden ofrecer, mientras mantiene tus datos completamente locales.

Qué aporta la aplicación de escritorio

Instaladores y distribución

El workflow CI de Tauri crea instaladores específicos de plataforma en cada release etiquetada (v*): .dmg para macOS (firmado), .msi / .exe para Windows (firmado), .AppImage y .deb para Linux.

Ubicación de datos

En escritorio, los datos se ubican en el directorio de datos de la app Tauri — típicamente %APPDATA%\\WorldScript Studio en Windows, ~/Library/Application Support/WorldScript Studio en macOS y ~/.local/share/worldscript-studio en Linux.

", "help.docs.tauriDesktop.title": "App de escritorio Tauri", - "help.faq.api.content": "

¿Necesito una clave API?

Solo para proveedores de IA en la nube. Puede utilizar WorldScript para toda la escritura, el tablero de trazado, los personajes, el control de versiones y la exportación sin ninguna clave API. Las funciones de IA con proveedores locales tampoco necesitan clave.

Proveedores de nube (requieren una clave API)

Proveedores locales (no se requiere clave API)

Seguridad de claves

Cada clave API se cifra con AES-256-GCM (PBKDF2, 600 000 iteraciones SHA-256) antes de almacenarse en IndexedDB. La clave de texto sin formato nunca se escribe en el disco, nunca se almacena en el almacenamiento local y nunca se envía a ningún servidor de WorldScript. Puede almacenar claves para varios proveedores simultáneamente y cambiar entre ellos sin tener que volver a ingresarlas.

", + "help.faq.api.content": "

¿Necesito una clave API?

Solo para proveedores de IA en la nube. Puede utilizar WorldScript para toda la escritura, el tablero de trazado, los personajes, el control de versiones y la exportación sin ninguna clave API. Las funciones de IA con proveedores locales tampoco necesitan clave.

Proveedores de nube (requieren una clave API)

Proveedores locales (no se requiere clave API)

Seguridad de claves

Las claves API del navegador/PWA están protegidas con AES-256-GCM en IndexedDB (clave aleatoria no extraíble; no hay contraseña ni nada que derivar). La protección de las claves API de escritorio sigue el ciclo de vida del almacenamiento de escritorio, por lo que los detalles del almacenamiento del navegador no describen los archivos de escritorio. Las claves API nunca se envían a ningún servidor de WorldScript. (Excepción: Claude en la compilación web/PWA — ahí las solicitudes se retransmiten a través del proxy serverless propio y sin estado de WorldScript, sin registro alguno a nivel de aplicación (los registros de solicitudes de la plataforma de alojamiento quedan fuera de esta garantía), porque Anthropic bloquea las solicitudes directas del navegador; en el escritorio, Anthropic se llama directamente, como cualquier otro proveedor.) Puede almacenar claves para varios proveedores simultáneamente y cambiar entre ellos sin tener que volver a ingresarlas.

", "help.faq.api.title": "¿Necesito una clave API?", "help.faq.offline.content": "

Trabajar sin conexión

WorldScript Studio es local primero. Casi todo funciona sin conexión a internet una vez que la app está cargada.

", "help.faq.offline.title": "¿Puedo trabajar sin conexión?", - "help.faq.privacy.content": "

Tu historia permanece en tu dispositivo

Sí, completamente. WorldScript Studio es local por diseño: no hay una cuenta de WorldScript, ni un servidor en la nube, ni ninguna empresa que pueda acceder a tus manuscritos. Todos los datos residen en IndexedDB y OPFS de su navegador, un almacenamiento que solo su dispositivo puede leer.

Lo que permanece local (todo, de forma predeterminada)

Lo que sale de su dispositivo (solo cuando usted elige)

Desconéctese por completo

Cambie a un proveedor de IA local (WebLLM en el navegador o Ollama en la aplicación de escritorio) o deshabilite las funciones de IA por completo. En modo completamente fuera de línea, no se transmiten datos a ninguna parte. La escritura, el control de versiones, la exportación y todas las configuraciones funcionan sin ninguna conexión de red.

", + "help.faq.privacy.content": "

Tu historia permanece en tu dispositivo

Sí, completamente. WorldScript Studio es local por diseño: no hay una cuenta de WorldScript, ni un servidor en la nube, ni ninguna empresa que pueda acceder a tus manuscritos. Todos los datos permanecen en tu dispositivo: en IndexedDB y OPFS de tu navegador (navegador/PWA), o en archivos locales en el directorio de datos de la app de escritorio (Tauri) — en cualquier caso, en tu dispositivo y no en un servidor (los archivos de escritorio son texto plano, así que son los permisos locales del sistema, no el cifrado, los que realmente restringen quién puede leerlos allí).

Lo que permanece local (todo, de forma predeterminada)

Lo que sale de su dispositivo (solo cuando usted elige)

Desconéctese por completo

Cambie a un proveedor de IA local (WebLLM en el navegador o Ollama en la aplicación de escritorio) o deshabilite las funciones de IA por completo. En modo completamente fuera de línea, no se transmiten datos a ninguna parte. La escritura, el control de versiones, la exportación y todas las configuraciones funcionan sin ninguna conexión de red.

", "help.faq.privacy.title": "¿Es privada mi historia?", "help.faq.providers.content": "

¿Qué proveedor de IA elegir?

WorldScript es compatible con varios proveedores de IA. Aquí tienes una guía rápida para elegir.

", "help.faq.providers.title": "¿Qué proveedor de IA debo usar?", - "help.faq.saving.content": "

Todo tu proyecto, incluidos todos los textos e imágenes generadas por IA, se guarda automática y continuamente en el almacenamiento local de tu navegador (una base de datos llamada IndexedDB). Esto significa que tu trabajo se conserva en tu computadora entre sesiones. Un indicador 'Guardando...' aparece en el encabezado cuando se están escribiendo los cambios, seguido de 'Todos los cambios guardados'.

No hay cuenta en la nube ni almacenamiento en el servidor. Esto garantiza privacidad completa, pero también significa que eres responsable de crear copias de seguridad usando la función 'Exportar copia de seguridad' en Configuración.

", + "help.faq.saving.content": "

Todo tu proyecto, incluidos todos los textos e imágenes generadas por IA, se guarda automática y continuamente: en la compilación Navegador/PWA, en el almacenamiento local de tu navegador (una base de datos llamada IndexedDB); en la compilación de escritorio Tauri, como archivos locales en el directorio de datos de la app. En cualquier caso, tu trabajo se conserva en tu computadora entre sesiones. Un indicador 'Guardando...' aparece en el encabezado cuando se están escribiendo los cambios, seguido de 'Todos los cambios guardados'.

No hay cuenta en la nube ni almacenamiento en el servidor. Esto garantiza privacidad completa, pero también significa que eres responsable de crear copias de seguridad usando la función 'Exportar copia de seguridad' en Configuración.

", "help.faq.saving.title": "¿Cómo se guardan los datos de mi proyecto?", - "help.gettingStarted.desktop.content": "

Dónde ejecutar WorldScript Studio

WorldScript Studio se ejecuta en tres entornos. Tus manuscritos, personajes y configuraciones siempre permanecen en tu dispositivo independientemente de cuál utilices: elige la opción que mejor se adapte a tu flujo de trabajo.

Navegador (no requiere instalación)

Abre WorldScript en cualquier navegador moderno (Chrome, Edge, Firefox, Safari). Los datos se almacenan en IndexedDB de su navegador, una base de datos persistente y protegida que no se borra mediante el borrado normal de la memoria caché del navegador. Escriba, edite, exporte y administre versiones completamente fuera de línea una vez que el shell de la aplicación esté almacenado en caché.

PWA (instalar desde el navegador)

Instale WorldScript como una aplicación web progresiva para una ventana dedicada sin el navegador Chrome. En Chrome o Edge, haga clic en el icono ⊕ en la barra de direcciones o vaya a Configuración → General → Instalar como aplicación. En iPhone o iPad, use Compartir → Agregar a la pantalla de inicio.

Aplicación de escritorio (Tauri)

La aplicación de escritorio opcional Tauri v2 envuelve WorldScript en un shell Rust nativo y agrega capacidades que los navegadores no pueden proporcionar.

Privacidad en todos Entornos

Las claves API se cifran con AES-256-GCM antes del almacenamiento y nunca se transmiten a ningún servidor WorldScript. Los manuscritos solo salen de su dispositivo cuando envía explícitamente un pasaje específico a un proveedor de inteligencia artificial en la nube.

", + "help.gettingStarted.desktop.content": "

Dónde ejecutar WorldScript Studio

WorldScript Studio se ejecuta en tres entornos. Tus manuscritos, personajes y configuraciones siempre permanecen en tu dispositivo independientemente de cuál utilices: elige la opción que mejor se adapte a tu flujo de trabajo.

Navegador (no requiere instalación)

Abre WorldScript en cualquier navegador moderno (Chrome, Edge, Firefox, Safari). Los datos se almacenan en IndexedDB de su navegador, una base de datos persistente y protegida que no se borra mediante el borrado normal de la memoria caché del navegador. Escriba, edite, exporte y administre versiones completamente fuera de línea una vez que el shell de la aplicación esté almacenado en caché.

PWA (instalar desde el navegador)

Instale WorldScript como una aplicación web progresiva para una ventana dedicada sin el navegador Chrome. En Chrome o Edge, haga clic en el icono ⊕ en la barra de direcciones o vaya a Configuración → General → Instalar como aplicación. En iPhone o iPad, use Compartir → Agregar a la pantalla de inicio.

Aplicación de escritorio (Tauri)

La aplicación de escritorio opcional Tauri v2 envuelve WorldScript en un shell Rust nativo y agrega capacidades que los navegadores no pueden proporcionar.

Privacidad en todos Entornos

Las claves API del navegador/PWA están protegidas con AES-256-GCM en IndexedDB; la protección en escritorio sigue el ciclo de vida del almacenamiento de escritorio. Las claves API nunca se transmiten a ningún servidor WorldScript. (Excepción: Claude en la compilación web/PWA — ahí las solicitudes se retransmiten a través del proxy serverless propio y sin estado de WorldScript, sin registro alguno a nivel de aplicación (los registros de solicitudes de la plataforma de alojamiento quedan fuera de esta garantía), porque Anthropic bloquea las solicitudes directas del navegador; en el escritorio, Anthropic se llama directamente, como cualquier otro proveedor.) Los manuscritos solo salen de su dispositivo cuando envía explícitamente un pasaje específico a un proveedor de inteligencia artificial en la nube.

", "help.gettingStarted.desktop.title": "App de escritorio (Tauri) y PWA", "help.gettingStarted.firstProject.content": "

Elige tu Camino

El Portal de Bienvenida te ofrece tres poderosas formas de comenzar:

  1. Empezar con una Plantilla: Ideal para la narración estructurada. Ve a la vista de Plantillas, elige una estructura como la 'Estructura de Tres Actos' y usa la función 'Personalizar con IA' para obtener indicaciones personalizadas para cada sección basadas en tu idea de historia.
  2. Generar con IA: Si tienes un concepto pero no una estructura, usa el Generador de Esquemas. Solo proporciona tu género y una idea de historia, y creará un esquema de trama completo y editable que puedes aplicar a tu manuscrito.
  3. Empezar en Blanco: Para quienes prefieren un lienzo completamente abierto, esta opción crea un nuevo proyecto con un primer capítulo vacío, listo para comenzar a escribir de inmediato.
", "help.gettingStarted.firstProject.title": "Iniciando tu Primer Proyecto", diff --git a/public/locales/eu/bundle.json b/public/locales/eu/bundle.json index c1e8333a..876c965b 100644 --- a/public/locales/eu/bundle.json +++ b/public/locales/eu/bundle.json @@ -1178,7 +1178,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/public/locales/fa/bundle.json b/public/locales/fa/bundle.json index f8946c16..b4172f1c 100644 --- a/public/locales/fa/bundle.json +++ b/public/locales/fa/bundle.json @@ -1178,7 +1178,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/public/locales/fi/bundle.json b/public/locales/fi/bundle.json index ae4d5d82..4a38a1e9 100644 --- a/public/locales/fi/bundle.json +++ b/public/locales/fi/bundle.json @@ -1178,7 +1178,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/public/locales/fr/bundle.json b/public/locales/fr/bundle.json index d67a851c..1884a067 100644 --- a/public/locales/fr/bundle.json +++ b/public/locales/fr/bundle.json @@ -1110,7 +1110,7 @@ "help.advanced.adaptiveAi.title": "IA adaptative, GPU et mode Éco", "help.advanced.cloudSync.content": "La synchronisation chiffrée de bout en bout, optionnelle, maintient votre bibliothèque à jour sur tous vos appareils via un backend Cloudflare R2. Activez « Synchronisation cloud » dans Paramètres → Fonctionnalités en accès anticipé et configurez-la dans Paramètres → Connexions. Les données du projet sont chiffrées localement en AES-256-GCM avant l’envoi, et vos clés d’API IA ne sont jamais transmises au cloud. La synchronisation est entièrement optionnelle ; sans elle, WorldScript reste une application entièrement « offline-first ».", "help.advanced.cloudSync.title": "Synchronisation cloud", - "help.advanced.encryption.content": "Protégez les données principales du projet, les instantanés et les paramètres pris en charge stockés sur votre appareil avec un chiffrement AES-256-GCM dérivé d’une phrase secrète (PBKDF2, 600 000 itérations). Activez-le dans Paramètres → Confidentialité et sécurité → « Chiffrer les données du projet au repos ». Au prochain lancement, une fenêtre de déverrouillage demande votre phrase secrète ; les lectures et écritures protégées restent bloquées lorsque la bibliothèque est verrouillée au lieu de revenir au texte en clair. Pendant la finalisation du protocole de migration entre magasins, le chiffrement ne peut pas être modifié ou désactivé afin que les textes chiffrés existants restent récupérables. Votre phrase secrète ne quitte jamais l’appareil et ne peut pas être récupérée — exportez une sauvegarde de bibliothèque chiffrée avant d’expérimenter.", + "help.advanced.encryption.content": "Protégez les données principales du projet, les instantanés et les paramètres pris en charge stockés sur votre appareil avec un chiffrement AES-256-GCM dérivé d’une phrase secrète (PBKDF2, 600 000 itérations). Activez-le dans Paramètres → Confidentialité et sécurité → « Chiffrer les données du projet au repos ». Au prochain lancement, une fenêtre de déverrouillage demande votre phrase secrète ; les lectures et écritures protégées restent bloquées lorsque la bibliothèque est verrouillée au lieu de revenir au texte en clair. La désactivation du chiffrement ou le changement de phrase secrète est disponible dans Paramètres → Confidentialité, garanti par un processus de rechiffrement complet et journalisé afin que les textes chiffrés existants restent récupérables si une rotation est interrompue. Cela protège le stockage IndexedDB du navigateur/PWA ; sur la version bureau Tauri, les données du projet sont stockées en clair et ne sont pas encore couvertes par ce paramètre. Votre phrase secrète ne quitte jamais l’appareil et ne peut pas être récupérée — exportez une sauvegarde de bibliothèque chiffrée avant d’expérimenter.", "help.advanced.encryption.title": "Chiffrement au repos", "help.advanced.languages.content": "WorldScript Studio propose 19 langues d'interface. Cinq sont de niveau Production (allemand, anglais, espagnol, français, italien), entièrement relues. D'autres sont Quasi-Production (japonais, chinois, portugais, grec) ou Bêta (finnois, suédois, hongrois, islandais, basque, coréen, russe, ainsi que les langues de droite à gauche arabe, hébreu et persan). Le niveau de statut apparaît à côté de chaque langue dans Paramètres → Général et dans le sélecteur de langue du Portail d'accueil, et un tableau de bord qualité résume la couverture par langue. Changez de langue à cet endroit ou via la Palette de commandes. Choisir l'arabe, l'hébreu ou le persan bascule toute l'interface en RTL et charge des polices Noto Sans Arabic/Hebrew auto-hébergées (avec Noto Naskh Arabic pour l'éditeur de manuscrit). Le texte de votre manuscrit suit toujours sa propre direction d'écriture, vous pouvez donc mélanger librement des passages latins et RTL. Les traductions Bêta et RTL sont améliorables par la communauté ; les articles d'aide reviennent à l'anglais lorsqu'une langue ne les a pas encore traduits.", "help.advanced.languages.title": "Langues, niveaux de statut et RTL", @@ -1172,7 +1172,7 @@ "help.docs.featureFlags.title": "Système de drapeaux", "help.docs.lazyLoading.content": "

Chargement différé et architecture des bundles

WorldScript Studio est conçu pour un chargement initial rapide. Les 14 vues principales et plusieurs bibliothèques lourdes sont chargées à la demande, uniquement quand elles sont nécessaires.

", "help.docs.lazyLoading.title": "Chargement différé et bundles", - "help.docs.privacySecurity.content": "

Modèle de confidentialité et de sécurité

WorldScript Studio est conçu d'abord localement : votre histoire ne quitte jamais votre appareil à moins que vous n'envoyiez explicitement une invite à un fournisseur d'IA cloud.

", + "help.docs.privacySecurity.content": "

Modèle de confidentialité et de sécurité

WorldScript Studio est conçu d'abord localement : votre histoire ne quitte jamais votre appareil à moins que vous n'envoyiez explicitement une invite à un fournisseur d'IA cloud.

", "help.docs.privacySecurity.title": "Modèle confidentialité et sécurité", "help.docs.pwaDesktop.content": "

Empaquetage PWA et bureau

WorldScript Studio est disponible en Progressive Web App (PWA) et en application de bureau native (Tauri). Les deux options gardent vos données localement — sans compte requis.

PWA (navigateur)

Application bureau Tauri

", "help.docs.pwaDesktop.title": "Empaquetage PWA et bureau", @@ -1180,17 +1180,17 @@ "help.docs.ragPipeline.title": "RAG et assemblage de prompts", "help.docs.tauriDesktop.content": "

Application bureau Tauri

L'application bureau WorldScript Studio encapsule la même base de code React dans un shell Tauri v2 natif (Rust). Elle ajoute des capacités que les navigateurs ne peuvent pas offrir, tout en conservant vos données entièrement locales.

Ce que l'application bureau apporte

Installateurs et distribution

Le workflow CI Tauri crée des installateurs spécifiques à chaque plateforme sur chaque release taguée (v*) : .dmg pour macOS (signé), .msi / .exe pour Windows (signé), .AppImage et .deb pour Linux.

Emplacement des données

Sur bureau, les données se trouvent dans le répertoire de données Tauri — généralement %APPDATA%\\WorldScript Studio sous Windows, ~/Library/Application Support/WorldScript Studio sous macOS et ~/.local/share/worldscript-studio sous Linux. Ce répertoire peut être copié en toute sécurité pour une sauvegarde manuelle complète.

", "help.docs.tauriDesktop.title": "Application bureau Tauri", - "help.faq.api.content": "

Ai-je besoin d'une clé API ?

Uniquement pour les fournisseurs d'IA cloud. Vous pouvez utiliser WorldScript pour toute l'écriture, le tableau de tracé, les personnages, le contrôle de version et l'exportation sans aucune clé API. Les fonctionnalités d'IA avec des fournisseurs locaux ne nécessitent pas non plus de clé.

Fournisseurs de cloud (nécessitent une clé API)

Fournisseurs locaux (aucune clé API requise)

Sécurité des clés

Chaque clé API est cryptée avec AES-256-GCM (PBKDF2, 600 000 itérations SHA-256) avant d'être stockée dans IndexedDB. La clé en texte brut n'est jamais écrite sur le disque, jamais stockée dans localStorage et jamais envoyée à un serveur WorldScript. Vous pouvez stocker les clés de plusieurs fournisseurs simultanément et basculer entre eux sans les saisir à nouveau.

", + "help.faq.api.content": "

Ai-je besoin d'une clé API ?

Uniquement pour les fournisseurs d'IA cloud. Vous pouvez utiliser WorldScript pour toute l'écriture, le tableau de tracé, les personnages, le contrôle de version et l'exportation sans aucune clé API. Les fonctionnalités d'IA avec des fournisseurs locaux ne nécessitent pas non plus de clé.

Fournisseurs de cloud (nécessitent une clé API)

Fournisseurs locaux (aucune clé API requise)

Sécurité des clés

Les clés API du navigateur/PWA sont protégées par AES-256-GCM dans IndexedDB (clé aléatoire non extractible ; pas de mot de passe, rien à dériver). La protection des clés API de bureau suit le cycle de vie du stockage de bureau, les détails du stockage navigateur ne décrivent donc pas les fichiers de bureau. Les clés API ne sont jamais envoyées à un serveur WorldScript. (Exception : Claude sur la version web/PWA — les requêtes y sont relayées via le proxy serverless propre et sans état de WorldScript, jamais journalisé au niveau applicatif (les journaux de requêtes de la plateforme d'hébergement échappent à cette garantie), car Anthropic bloque les requêtes directes du navigateur ; sur le bureau, Anthropic est appelé directement, comme tout autre fournisseur.) Vous pouvez stocker les clés de plusieurs fournisseurs simultanément et basculer entre eux sans les saisir à nouveau.

", "help.faq.api.title": "Ai-je besoin d'une clé API ?", "help.faq.offline.content": "

Travailler hors ligne

WorldScript Studio est conçu pour fonctionner en local. Presque tout fonctionne sans connexion internet une fois l'application chargée.

", "help.faq.offline.title": "Puis-je travailler hors ligne ?", - "help.faq.privacy.content": "

Votre histoire reste sur votre appareil

Oui, complètement. WorldScript Studio est d'abord local par conception : il n'y a pas de compte WorldScript, pas de serveur cloud et aucune entreprise ne peut accéder à vos manuscrits. Toutes les données se trouvent dans IndexedDB et OPFS de votre navigateur, stockage que seul votre appareil peut lire.

Ce qui reste local (tout, par défaut)

Ce qui quitte votre appareil (uniquement lorsque vous le souhaitez)

Allez complètement hors ligne

Passez à un fournisseur d'IA local – WebLLM dans le navigateur ou Ollama sur l'application de bureau – ou désactivez complètement les fonctionnalités d'IA. En mode entièrement hors ligne, aucune donnée n'est transmise n'importe où. L'écriture, le contrôle de version, l'exportation et tous les paramètres fonctionnent sans aucune connexion réseau.

", + "help.faq.privacy.content": "

Votre histoire reste sur votre appareil

Oui, complètement. WorldScript Studio est d'abord local par conception : il n'y a pas de compte WorldScript, pas de serveur cloud et aucune entreprise ne peut accéder à vos manuscrits. Toutes les données restent sur votre appareil : dans IndexedDB et OPFS de votre navigateur (navigateur/PWA), ou dans des fichiers locaux du répertoire de données de l'application de bureau (Tauri) — dans tous les cas, sur votre appareil plutôt que sur un serveur (les fichiers de bureau sont en clair, ce sont donc les permissions locales du système, et non le chiffrement, qui déterminent qui peut les lire).

Ce qui reste local (tout, par défaut)

Ce qui quitte votre appareil (uniquement lorsque vous le souhaitez)

Allez complètement hors ligne

Passez à un fournisseur d'IA local – WebLLM dans le navigateur ou Ollama sur l'application de bureau – ou désactivez complètement les fonctionnalités d'IA. En mode entièrement hors ligne, aucune donnée n'est transmise n'importe où. L'écriture, le contrôle de version, l'exportation et tous les paramètres fonctionnent sans aucune connexion réseau.

", "help.faq.privacy.title": "Mon histoire est-elle privée ?", "help.faq.providers.content": "

Quel fournisseur IA choisir ?

WorldScript prend en charge plusieurs fournisseurs IA. Voici un guide rapide pour choisir.

", "help.faq.providers.title": "Quel fournisseur IA choisir ?", - "help.faq.saving.content": "

L'ensemble de votre projet, y compris tous les textes et images générées par IA, est sauvegardé automatiquement et en continu dans le stockage local de votre navigateur (une base de données appelée IndexedDB). Cela signifie que votre travail est conservé sur votre ordinateur entre les sessions. Un indicateur 'Sauvegarde...' apparaît dans l'en-tête lors de l'écriture des modifications, suivi de 'Toutes les modifications sauvegardées'.

Il n'y a pas de compte cloud ni de stockage côté serveur. Cela garantit une confidentialité totale, mais signifie également que vous êtes responsable de créer des sauvegardes avec la fonction 'Exporter la sauvegarde' dans les Paramètres.

", + "help.faq.saving.content": "

L'ensemble de votre projet, y compris tous les textes et images générées par IA, est sauvegardé automatiquement et en continu — sur la version Navigateur/PWA, dans le stockage local de votre navigateur (une base de données appelée IndexedDB) ; sur la version bureau Tauri, sous forme de fichiers locaux dans le répertoire de données de l'application. Dans tous les cas, votre travail est conservé sur votre ordinateur entre les sessions. Un indicateur 'Sauvegarde...' apparaît dans l'en-tête lors de l'écriture des modifications, suivi de 'Toutes les modifications sauvegardées'.

Il n'y a pas de compte cloud ni de stockage côté serveur. Cela garantit une confidentialité totale, mais signifie également que vous êtes responsable de créer des sauvegardes avec la fonction 'Exporter la sauvegarde' dans les Paramètres.

", "help.faq.saving.title": "Comment les données de mon projet sont-elles sauvegardées ?", - "help.gettingStarted.desktop.content": "

Où exécuter WorldScript Studio

WorldScript Studio s'exécute dans trois environnements. Vos manuscrits, personnages et paramètres restent toujours sur votre appareil, quel que soit celui que vous utilisez : choisissez l'option qui correspond le mieux à votre flux de travail.

Navigateur (aucune installation requise)

Ouvrez WorldScript dans n'importe quel navigateur moderne (Chrome, Edge, Firefox, Safari). Les données sont stockées dans IndexedDB de votre navigateur, une base de données persistante en mode bac à sable qui n'est pas effacée par les effacements normaux du cache du navigateur. Écrivez, modifiez, exportez et gérez les versions entièrement hors ligne une fois le shell de l'application mis en cache.

PWA (installation à partir du navigateur)

Installez WorldScript en tant qu'application Web progressive pour une fenêtre dédiée sans chrome de navigateur. Dans Chrome ou Edge, cliquez sur l'icône ⊕ dans la barre d'adresse ou accédez à Paramètres → Général → Installer en tant qu'application. Sur iPhone ou iPad, utilisez Partager → Ajouter à l'écran d'accueil.

Application de bureau (Tauri)

L'application de bureau Tauri v2 en option enveloppe WorldScript dans un shell Rust natif et ajoute des fonctionnalités que les navigateurs ne peuvent pas fournir.

Confidentialité dans tous les environnements

Les clés API sont cryptées avec AES-256-GCM avant stockage et ne sont jamais transmis à un serveur WorldScript. Les manuscrits ne quittent votre appareil que lorsque vous envoyez explicitement un passage spécifique à un fournisseur d'IA cloud.

", + "help.gettingStarted.desktop.content": "

Où exécuter WorldScript Studio

WorldScript Studio s'exécute dans trois environnements. Vos manuscrits, personnages et paramètres restent toujours sur votre appareil, quel que soit celui que vous utilisez : choisissez l'option qui correspond le mieux à votre flux de travail.

Navigateur (aucune installation requise)

Ouvrez WorldScript dans n'importe quel navigateur moderne (Chrome, Edge, Firefox, Safari). Les données sont stockées dans IndexedDB de votre navigateur, une base de données persistante en mode bac à sable qui n'est pas effacée par les effacements normaux du cache du navigateur. Écrivez, modifiez, exportez et gérez les versions entièrement hors ligne une fois le shell de l'application mis en cache.

PWA (installation à partir du navigateur)

Installez WorldScript en tant qu'application Web progressive pour une fenêtre dédiée sans chrome de navigateur. Dans Chrome ou Edge, cliquez sur l'icône ⊕ dans la barre d'adresse ou accédez à Paramètres → Général → Installer en tant qu'application. Sur iPhone ou iPad, utilisez Partager → Ajouter à l'écran d'accueil.

Application de bureau (Tauri)

L'application de bureau Tauri v2 en option enveloppe WorldScript dans un shell Rust natif et ajoute des fonctionnalités que les navigateurs ne peuvent pas fournir.

Confidentialité dans tous les environnements

Les clés API du navigateur/PWA sont protégées par AES-256-GCM dans IndexedDB ; la protection sur bureau suit le cycle de vie du stockage de bureau. Les clés API ne sont jamais transmises à un serveur WorldScript. (Exception : Claude sur la version web/PWA — les requêtes y sont relayées via le proxy serverless propre et sans état de WorldScript, jamais journalisé au niveau applicatif (les journaux de requêtes de la plateforme d'hébergement échappent à cette garantie), car Anthropic bloque les requêtes directes du navigateur ; sur le bureau, Anthropic est appelé directement, comme tout autre fournisseur.) Les manuscrits ne quittent votre appareil que lorsque vous envoyez explicitement un passage spécifique à un fournisseur d'IA cloud.

", "help.gettingStarted.desktop.title": "Application bureau (Tauri) et PWA", "help.gettingStarted.firstProject.content": "

Choisissez Votre Voie

Le Portail d'Accueil vous offre trois façons puissantes de commencer :

  1. Commencer avec un Modèle : Idéal pour la narration structurée. Allez dans la vue Modèles, choisissez une structure comme la 'Structure en Trois Actes' et utilisez la fonction 'Personnaliser avec l'IA' pour obtenir des invites personnalisées pour chaque section basées sur votre idée d'histoire.
  2. Générer avec l'IA : Si vous avez un concept mais pas de structure, utilisez le Générateur de Plan. Fournissez simplement votre genre et une idée d'histoire, et il créera un plan de trame complet et modifiable que vous pourrez appliquer à votre manuscrit.
  3. Commencer Vierge : Pour ceux qui préfèrent un canevas entièrement ouvert, cette option crée un nouveau projet avec un premier chapitre vide, prêt à écrire immédiatement.
", "help.gettingStarted.firstProject.title": "Démarrer Votre Premier Projet", diff --git a/public/locales/hu/bundle.json b/public/locales/hu/bundle.json index 7537379f..7378c6d4 100644 --- a/public/locales/hu/bundle.json +++ b/public/locales/hu/bundle.json @@ -1178,7 +1178,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/public/locales/is/bundle.json b/public/locales/is/bundle.json index 503a9a6d..e8ffce59 100644 --- a/public/locales/is/bundle.json +++ b/public/locales/is/bundle.json @@ -1178,7 +1178,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/public/locales/it/bundle.json b/public/locales/it/bundle.json index 79057a91..3f154614 100644 --- a/public/locales/it/bundle.json +++ b/public/locales/it/bundle.json @@ -1110,7 +1110,7 @@ "help.advanced.adaptiveAi.title": "IA adattiva, GPU e modalità Eco", "help.advanced.cloudSync.content": "La sincronizzazione opzionale crittografata end-to-end mantiene allineata la tua libreria su più dispositivi tramite un backend Cloudflare R2. Attiva «Sincronizzazione cloud» in Impostazioni → Funzioni ad accesso anticipato e configurala in Impostazioni → Connessioni. I dati del progetto vengono crittografati localmente con AES-256-GCM prima del caricamento e le tue chiavi API dell’IA non vengono mai inviate al cloud. La sincronizzazione è del tutto facoltativa; senza di essa WorldScript resta un’app completamente offline-first.", "help.advanced.cloudSync.title": "Sincronizzazione cloud", - "help.advanced.encryption.content": "Proteggi i dati principali del progetto, gli snapshot e le impostazioni supportate memorizzati sul dispositivo con la crittografia AES-256-GCM derivata da una passphrase (PBKDF2, 600.000 iterazioni). Attivala in Impostazioni → Privacy e sicurezza → «Crittografa i dati del progetto a riposo». Al successivo avvio una finestra di sblocco chiede la passphrase; letture e scritture protette rimangono bloccate quando la libreria è bloccata anziché tornare al testo in chiaro. Durante il completamento del protocollo di migrazione tra archivi, la crittografia non può essere cambiata o disattivata affinché i testi cifrati esistenti restino recuperabili. La tua passphrase non lascia mai il dispositivo e non può essere recuperata: esporta un backup della libreria crittografato prima di sperimentare.", + "help.advanced.encryption.content": "Proteggi i dati principali del progetto, gli snapshot e le impostazioni supportate memorizzati sul dispositivo con la crittografia AES-256-GCM derivata da una passphrase (PBKDF2, 600.000 iterazioni). Attivala in Impostazioni → Privacy e sicurezza → «Crittografa i dati del progetto a riposo». Al successivo avvio una finestra di sblocco chiede la passphrase; letture e scritture protette rimangono bloccate quando la libreria è bloccata anziché tornare al testo in chiaro. Disattivare la crittografia o cambiare la passphrase è disponibile in Impostazioni → Privacy, supportato da un processo di ricrittografia completo e tracciato in modo che i testi cifrati esistenti restino recuperabili se una rotazione viene interrotta. Questo protegge il percorso di archiviazione IndexedDB di Browser/PWA; nella build desktop Tauri, i dati del progetto sono memorizzati come file in chiaro e non sono ancora coperti da questa impostazione. La tua passphrase non lascia mai il dispositivo e non può essere recuperata: esporta un backup della libreria crittografato prima di sperimentare.", "help.advanced.encryption.title": "Crittografia a riposo", "help.advanced.languages.content": "WorldScript Studio offre 19 lingue dell'interfaccia. Cinque sono di livello Produzione (tedesco, inglese, spagnolo, francese, italiano), completamente revisionate. Altre sono Quasi-Produzione (giapponese, cinese, portoghese, greco) o Beta (finlandese, svedese, ungherese, islandese, basco, coreano, russo, oltre alle lingue da destra a sinistra arabo, ebraico e persiano). Il livello di stato appare accanto a ogni lingua in Impostazioni → Generali e nel selettore di lingua del Portale di benvenuto, e un pannello qualità riassume la copertura per lingua. Cambia lingua lì o tramite la Palette dei comandi. Selezionando arabo, ebraico o persiano l'intera interfaccia passa a RTL e carica i font Noto Sans Arabic/Hebrew self-hosted (con Noto Naskh Arabic per l'editor del manoscritto). Il testo del tuo manoscritto segue sempre la propria direzione di scrittura, quindi puoi mischiare liberamente passaggi latini e RTL. Le traduzioni Beta e RTL sono migliorabili dalla community; gli articoli della guida ricadono sull'inglese dove una lingua non li ha ancora tradotti.", "help.advanced.languages.title": "Lingue, livelli di stato e RTL", @@ -1172,7 +1172,7 @@ "help.docs.featureFlags.title": "Sistema feature flag", "help.docs.lazyLoading.content": "

Lazy loading e architettura bundle

WorldScript Studio usa il lazy loading aggressivo per mantenere piccolo il bundle iniziale e garantire un avvio rapido anche su connessioni lente.

", "help.docs.lazyLoading.title": "Lazy loading e bundle", - "help.docs.privacySecurity.content": "

Modello di privacy e sicurezza

WorldScript Studio è progettato innanzitutto a livello locale: la tua storia non lascia mai il tuo dispositivo a meno che tu non invii esplicitamente una richiesta a un fornitore di intelligenza artificiale cloud.

", + "help.docs.privacySecurity.content": "

Modello di privacy e sicurezza

WorldScript Studio è progettato innanzitutto a livello locale: la tua storia non lascia mai il tuo dispositivo a meno che tu non invii esplicitamente una richiesta a un fornitore di intelligenza artificiale cloud.

", "help.docs.privacySecurity.title": "Modello privacy e sicurezza", "help.docs.pwaDesktop.content": "

PWA e pacchetto desktop

WorldScript Studio è disponibile come Progressive Web App installabile nel browser e come app desktop nativa tramite Tauri.

PWA (browser)

App desktop Tauri

", "help.docs.pwaDesktop.title": "Pacchetto PWA e desktop", @@ -1180,17 +1180,17 @@ "help.docs.ragPipeline.title": "RAG e assemblaggio prompt", "help.docs.tauriDesktop.content": "

App desktop Tauri

L'app desktop WorldScript Studio impacchetta la stessa codebase React in uno shell Tauri v2 nativo (Rust). Aggiunge capacità che i browser non possono offrire, mantenendo i tuoi dati completamente locali.

Cosa offre l'app desktop

Installer e distribuzione

Il workflow CI Tauri crea installer specifici per piattaforma ad ogni release taggato (v*): .dmg per macOS (firmato), .msi / .exe per Windows (firmato), .AppImage e .deb per Linux.

Posizione dei dati

Su desktop, i dati si trovano nella directory dati dell'app Tauri — tipicamente %APPDATA%\\WorldScript Studio su Windows, ~/Library/Application Support/WorldScript Studio su macOS e ~/.local/share/worldscript-studio su Linux.

", "help.docs.tauriDesktop.title": "App desktop Tauri", - "help.faq.api.content": "

Ho bisogno di una chiave API?

Solo per i fornitori di AI cloud. Puoi utilizzare WorldScript per tutta la scrittura, la Plot Board, i personaggi, il controllo della versione e l'esportazione senza alcuna chiave API. Anche le funzionalità AI con fornitori locali non necessitano di chiave.

Fornitori cloud (richiede una chiave API)

Fornitori locali (non è richiesta alcuna chiave API)

Sicurezza della chiave

Ogni chiave API viene crittografata con AES-256-GCM (PBKDF2, 600.000 iterazioni SHA-256) prima di essere archiviata in IndexedDB. La chiave in testo normale non viene mai scritta su disco, mai archiviata in localStorage e mai inviata a nessun server WorldScript. Puoi memorizzare chiavi per più fornitori contemporaneamente e passare da uno all'altro senza reinserirli.

", + "help.faq.api.content": "

Ho bisogno di una chiave API?

Solo per i fornitori di AI cloud. Puoi utilizzare WorldScript per tutta la scrittura, la Plot Board, i personaggi, il controllo della versione e l'esportazione senza alcuna chiave API. Anche le funzionalità AI con fornitori locali non necessitano di chiave.

Fornitori cloud (richiede una chiave API)

Fornitori locali (non è richiesta alcuna chiave API)

Sicurezza della chiave

Le chiavi API di browser/PWA sono protette con AES-256-GCM in IndexedDB (chiave casuale non estraibile; nessuna passphrase, nulla da derivare). La protezione delle chiavi API desktop segue il ciclo di vita dell'archiviazione desktop, quindi i dettagli dell'archiviazione del browser non descrivono i file desktop. Le chiavi API non vengono mai inviate a nessun server WorldScript. (Eccezione: Claude nella build web/PWA — le richieste vengono inoltrate tramite il proxy serverless proprio e stateless di WorldScript, mai registrato a livello applicativo (i log delle richieste della piattaforma di hosting restano fuori da questa garanzia), poiché Anthropic blocca le richieste dirette dal browser; su desktop, Anthropic viene chiamato direttamente, come qualsiasi altro provider.) Puoi memorizzare chiavi per più fornitori contemporaneamente e passare da uno all'altro senza reinserirli.

", "help.faq.api.title": "Ho bisogno di una chiave API?", "help.faq.offline.content": "

Lavorare offline

WorldScript Studio è progettato per essere locale. Quasi tutto funziona senza connessione a internet una volta caricata l'app.

", "help.faq.offline.title": "Posso lavorare offline?", - "help.faq.privacy.content": "

La tua storia rimane sul tuo dispositivo

Sì, completamente. WorldScript Studio è progettato localmente: non esiste un account WorldScript, nessun server cloud e nessuna azienda che possa accedere ai tuoi manoscritti. Tutti i dati risiedono nell'IndexedDB e nell'OPFS del tuo browser, un archivio che solo il tuo dispositivo può leggere.

Ciò che rimane locale (tutto, per impostazione predefinita)

Cosa lascia il tuo dispositivo (solo quando lo scegli tu)

Vai completamente offline

Passa a un provider IA locale (WebLLM nel browser o Ollama nell'app desktop) o disattiva completamente le funzionalità IA. In modalità completamente offline, zero dati vengono trasmessi ovunque. La scrittura, il controllo della versione, l'esportazione e tutte le impostazioni funzionano senza alcuna connessione di rete.

", + "help.faq.privacy.content": "

La tua storia rimane sul tuo dispositivo

Sì, completamente. WorldScript Studio è progettato localmente: non esiste un account WorldScript, nessun server cloud e nessuna azienda che possa accedere ai tuoi manoscritti. Tutti i dati restano sul tuo dispositivo: nell'IndexedDB e nell'OPFS del tuo browser (browser/PWA), oppure in file locali nella directory dati dell'app desktop (Tauri) — in ogni caso, sul tuo dispositivo anziché su un server (i file desktop sono in chiaro, quindi sono i permessi locali del sistema operativo, non la crittografia, a determinare chi può leggerli).

Ciò che rimane locale (tutto, per impostazione predefinita)

Cosa lascia il tuo dispositivo (solo quando lo scegli tu)

Vai completamente offline

Passa a un provider IA locale (WebLLM nel browser o Ollama nell'app desktop) o disattiva completamente le funzionalità IA. In modalità completamente offline, zero dati vengono trasmessi ovunque. La scrittura, il controllo della versione, l'esportazione e tutte le impostazioni funzionano senza alcuna connessione di rete.

", "help.faq.privacy.title": "La mia storia è privata?", "help.faq.providers.content": "

Quale provider IA scegliere?

WorldScript supporta più provider IA. Ecco una guida rapida per scegliere.

", "help.faq.providers.title": "Quale provider IA usare?", - "help.faq.saving.content": "

L'intero progetto, inclusi tutti i testi e le immagini generate dall'IA, viene salvato automaticamente e continuamente nell'archiviazione locale del tuo browser (un database chiamato IndexedDB). Ciò significa che il tuo lavoro viene conservato sul tuo computer tra le sessioni. Un indicatore 'Salvataggio...' appare nell'intestazione quando le modifiche vengono scritte, seguito da 'Tutte le modifiche salvate'.

Non esiste un account cloud né archiviazione lato server. Questo garantisce la completa privacy, ma significa anche che sei responsabile della creazione di backup utilizzando la funzione 'Esporta backup' nelle Impostazioni.

", + "help.faq.saving.content": "

L'intero progetto, inclusi tutti i testi e le immagini generate dall'IA, viene salvato automaticamente e continuamente: nella build Browser/PWA, nell'archiviazione locale del tuo browser (un database chiamato IndexedDB); nella build desktop Tauri, come file locali nella directory dati dell'app. In entrambi i casi, il tuo lavoro viene conservato sul tuo computer tra le sessioni. Un indicatore 'Salvataggio...' appare nell'intestazione quando le modifiche vengono scritte, seguito da 'Tutte le modifiche salvate'.

Non esiste un account cloud né archiviazione lato server. Questo garantisce la completa privacy, ma significa anche che sei responsabile della creazione di backup utilizzando la funzione 'Esporta backup' nelle Impostazioni.

", "help.faq.saving.title": "Come vengono salvati i dati del mio progetto?", - "help.gettingStarted.desktop.content": "

Dove eseguire WorldScript Studio

WorldScript Studio funziona in tre ambienti. I tuoi manoscritti, i personaggi e le impostazioni rimangono sempre sul tuo dispositivo, indipendentemente da quello che utilizzi: scegli l'opzione che meglio si adatta al tuo flusso di lavoro.

Browser (nessuna installazione richiesta)

Apri WorldScript in qualsiasi browser moderno (Chrome, Edge, Firefox, Safari). I dati vengono archiviati nell'IndexedDB del tuo browser, un database persistente e sandbox che non viene cancellato dalla normale pulizia della cache del browser. Scrivi, modifica, esporta e gestisci le versioni completamente offline una volta memorizzata nella cache la shell dell'app.

PWA (installazione dal browser)

Installa WorldScript come app Web progressiva per una finestra dedicata senza Chrome del browser. In Chrome o Edge, fai clic sull'icona ⊕ nella barra degli indirizzi oppure vai su Impostazioni → Generali → Installa come app. Su iPhone o iPad, utilizza Condividi → Aggiungi alla schermata iniziale.

App desktop (Tauri)

L'app desktop Tauri v2 opzionale racchiude WorldScript in una shell Rust nativa e aggiunge funzionalità che i browser non possono fornire.

Privacy in tutti gli ambienti

Le chiavi API sono crittografate con AES-256-GCM prima dell'archiviazione e non vengono mai trasmessi ad alcun server di WorldScript. I manoscritti lasciano il tuo dispositivo solo quando invii esplicitamente un passaggio specifico a un fornitore di intelligenza artificiale cloud.

", + "help.gettingStarted.desktop.content": "

Dove eseguire WorldScript Studio

WorldScript Studio funziona in tre ambienti. I tuoi manoscritti, i personaggi e le impostazioni rimangono sempre sul tuo dispositivo, indipendentemente da quello che utilizzi: scegli l'opzione che meglio si adatta al tuo flusso di lavoro.

Browser (nessuna installazione richiesta)

Apri WorldScript in qualsiasi browser moderno (Chrome, Edge, Firefox, Safari). I dati vengono archiviati nell'IndexedDB del tuo browser, un database persistente e sandbox che non viene cancellato dalla normale pulizia della cache del browser. Scrivi, modifica, esporta e gestisci le versioni completamente offline una volta memorizzata nella cache la shell dell'app.

PWA (installazione dal browser)

Installa WorldScript come app Web progressiva per una finestra dedicata senza Chrome del browser. In Chrome o Edge, fai clic sull'icona ⊕ nella barra degli indirizzi oppure vai su Impostazioni → Generali → Installa come app. Su iPhone o iPad, utilizza Condividi → Aggiungi alla schermata iniziale.

App desktop (Tauri)

L'app desktop Tauri v2 opzionale racchiude WorldScript in una shell Rust nativa e aggiunge funzionalità che i browser non possono fornire.

Privacy in tutti gli ambienti

Le chiavi API di browser/PWA sono protette con AES-256-GCM in IndexedDB; la protezione su desktop segue il ciclo di vita dell'archiviazione desktop. Le chiavi API non vengono mai trasmesse ad alcun server di WorldScript. (Eccezione: Claude nella build web/PWA — le richieste vengono inoltrate tramite il proxy serverless proprio e stateless di WorldScript, mai registrato a livello applicativo (i log delle richieste della piattaforma di hosting restano fuori da questa garanzia), poiché Anthropic blocca le richieste dirette dal browser; su desktop, Anthropic viene chiamato direttamente, come qualsiasi altro provider.) I manoscritti lasciano il tuo dispositivo solo quando invii esplicitamente un passaggio specifico a un fornitore di intelligenza artificiale cloud.

", "help.gettingStarted.desktop.title": "App desktop (Tauri) e PWA", "help.gettingStarted.firstProject.content": "

Scegli il Tuo Percorso

Il Portale di Benvenuto ti offre tre potenti modi per iniziare:

  1. Inizia con un Modello: Ottimo per la narrazione strutturata. Vai alla vista Modelli, scegli una struttura come la 'Struttura in Tre Atti' e usa la funzione 'Personalizza con l'IA' per ottenere suggerimenti personalizzati per ogni sezione basati sulla tua idea di storia.
  2. Genera con l'IA: Se hai un concetto ma nessuna struttura, usa il Generatore di Schema. Fornisci semplicemente il tuo genere e un'idea di storia, e creerà uno schema di trama completo e modificabile che puoi applicare al tuo manoscritto.
  3. Inizia Vuoto: Per chi preferisce una tela completamente aperta, questa opzione crea un nuovo progetto con un primo capitolo vuoto, pronto per iniziare a scrivere immediatamente.
", "help.gettingStarted.firstProject.title": "Avviare il Tuo Primo Progetto", diff --git a/public/locales/ja/bundle.json b/public/locales/ja/bundle.json index fdee42f6..8fe08ffc 100644 --- a/public/locales/ja/bundle.json +++ b/public/locales/ja/bundle.json @@ -1178,7 +1178,7 @@ "help.docs.pwaDesktop.title": "PWA およびデスクトップ パッケージング", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "ラグと迅速な組み立て", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri デスクトップ アプリ", "help.faq.api.content": "

API キーは必要ですか?

クラウド AI プロバイダーのみ。 WorldScript は、API キーなしで、すべての書き込み、プロット ボード、キャラクター、バージョン管理、エクスポートに使用できます。ローカル プロバイダの AI 機能にもキーは必要ありません。

クラウド プロバイダ (API キーが必要)

ローカル プロバイダー (API キーは必要ありません)

キーのセキュリティ

すべての API キーは、IndexedDB に保存される前に、AES-256-GCM (PBKDF2、600,000 SHA-256 反復) で暗号化されます。プレーンテキスト キーは、ディスクに書き込まれたり、localStorage に保存されたり、WorldScript サーバーに送信されたりすることはありません。複数のプロバイダのキーを同時に保存し、再入力せずにそれらを切り替えることができます。

", "help.faq.api.title": "API キーは必要ですか?", diff --git a/public/locales/ko/bundle.json b/public/locales/ko/bundle.json index f3ade9a1..e1f959f8 100644 --- a/public/locales/ko/bundle.json +++ b/public/locales/ko/bundle.json @@ -1178,7 +1178,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/public/locales/pt/bundle.json b/public/locales/pt/bundle.json index a4609957..1af737cb 100644 --- a/public/locales/pt/bundle.json +++ b/public/locales/pt/bundle.json @@ -1178,7 +1178,7 @@ "help.docs.pwaDesktop.title": "PWA e empacotamento de desktop", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every IA request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG e montagem imediata", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Aplicativo de desktop Tauri", "help.faq.api.content": "

Preciso de uma chave de API?

Somente para provedores de IA em nuvem. Você pode usar o WorldScript para toda a escrita, quadro de plotagem, personagens, controle de versão e exportação sem qualquer chave de API. Os recursos de IA com provedores locais também não precisam de chave.

Provedores de nuvem (exigem uma chave de API)

Provedores locais (sem necessidade de chave de API)

Segurança de chave

Cada chave de API é criptografada com AES-256-GCM (PBKDF2, 600.000 iterações SHA-256) antes de ser armazenada no IndexedDB. A chave de texto simples nunca é gravada em disco, nunca é armazenada em localStorage e nunca é enviada para nenhum servidor WorldScript. Você pode armazenar chaves de vários provedores simultaneamente e alternar entre eles sem digitá-las novamente.

", "help.faq.api.title": "Preciso de uma chave de API?", diff --git a/public/locales/ru/bundle.json b/public/locales/ru/bundle.json index 197ca31b..8121e045 100644 --- a/public/locales/ru/bundle.json +++ b/public/locales/ru/bundle.json @@ -1178,7 +1178,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/public/locales/sv/bundle.json b/public/locales/sv/bundle.json index 2bc648cc..c7290bd0 100644 --- a/public/locales/sv/bundle.json +++ b/public/locales/sv/bundle.json @@ -1178,7 +1178,7 @@ "help.docs.pwaDesktop.title": "PWA & desktop packaging", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG & prompt assembly", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri desktop app", "help.faq.api.content": "

Do I Need an API Key?

Only for cloud AI providers. You can use WorldScript for all writing, the Plot Board, characters, version control, and export without any API key. AI features with local providers also need no key.

Cloud providers (require an API key)

Local providers (no API key required)

Key security

Every API key is encrypted with AES-256-GCM (PBKDF2, 600,000 SHA-256 iterations) before being stored in IndexedDB. The plaintext key is never written to disk, never stored in localStorage, and never sent to any WorldScript server. You can store keys for multiple providers simultaneously and switch between them without re-entering them.

", "help.faq.api.title": "Do I need an API key?", diff --git a/public/locales/zh/bundle.json b/public/locales/zh/bundle.json index 84c96608..d278da06 100644 --- a/public/locales/zh/bundle.json +++ b/public/locales/zh/bundle.json @@ -1178,7 +1178,7 @@ "help.docs.pwaDesktop.title": "PWA 和桌面打包", "help.docs.ragPipeline.content": "

RAG & Prompt Assembly

WorldScript's retrieval-augmented generation (RAG) pipeline enriches every AI request with relevant passages from your own manuscript — so the model knows your story before it writes the next line.

", "help.docs.ragPipeline.title": "RAG 和快速组装", - "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", + "help.docs.tauriDesktop.content": "

Tauri Desktop App

The WorldScript Studio desktop app wraps the same React codebase in a native Tauri v2 shell (Rust). It adds capabilities that browsers cannot provide while keeping your data fully local.

What the Desktop App Adds

Installers & Distribution

The Tauri CI workflow builds platform-specific installers on every tagged release (v*): .dmg for macOS (code-signed), .msi / .exe for Windows (code-signed), .AppImage and .deb for Linux. Installers are attached to GitHub Releases and referenced by the auto-updater endpoint.

Data Location

On desktop, data lives in the Tauri app data directory — typically %APPDATA%\\WorldScript Studio on Windows, ~/Library/Application Support/WorldScript Studio on macOS, and ~/.local/share/worldscript-studio on Linux. You can safely copy this directory for a full manual backup.

", "help.docs.tauriDesktop.title": "Tauri 桌面应用程序", "help.faq.api.content": "

我需要 API 密钥吗?

仅适用于云 AI 提供商。您可以使用 WorldScript 进行所有写作、绘图板、角色、版本控制和导出,无需任何 API 密钥。本地提供商的 AI 功能也不需要密钥。

云提供商(需要 API 密钥)

本地提供商(无需 API 密钥)

密钥安全

每个 API 密钥在存储到 IndexedDB 之前都使用 AES-256-GCM(PBKDF2,600,000 SHA-256 迭代)加密。明文密钥永远不会写入磁盘,永远不会存储在 localStorage 中,也永远不会发送到任何 WorldScript 服务器。您可以同时存储多个提供商的密钥并在它们之间切换,而无需重新输入它们。

", "help.faq.api.title": "我需要 API 密钥吗?", diff --git a/services/storage/idbProjectStore.ts b/services/storage/idbProjectStore.ts index 8bb24aef..0a2d00f7 100644 --- a/services/storage/idbProjectStore.ts +++ b/services/storage/idbProjectStore.ts @@ -15,7 +15,7 @@ import { defaultDesktopSettings, defaultVoiceSettings, } from '../../features/settings/settingsDefaults'; -import type { Settings, StoryProject } from '../../types'; +import type { OpenRouterSettings, Settings, StoryProject } from '../../types'; import { DEFAULT_WEBRTC_SIGNALING_URLS } from '../collaborationService'; import { APP_DATA_STORE } from '../dbConstants'; import { logger } from '../logger'; @@ -157,14 +157,19 @@ export function normalizePersistedSettings(incoming: Record): S desktopNotifications: validSettings.desktop.desktopNotifications === true, }; } - // QNBS-v3: openRouter added in OpenRouter integration — backfill for older persisted settings. - if (!validSettings.openRouter || typeof validSettings.openRouter !== 'object') { - validSettings.openRouter = { - enabled: false, - apiKey: '', - preferredModel: 'deepseek/deepseek-r1:free', - }; - } + // QNBS-v3: rebuild (never trust-cast) openRouter every time — discards any legacy/imported apiKey (the real key lives only in the dedicated per-provider key store) and guarantees enabled/preferredModel are always present, even for a credentials-only legacy object like `{ apiKey: "..." }`. + const incomingOpenRouter = + validSettings.openRouter && typeof validSettings.openRouter === 'object' + ? (validSettings.openRouter as unknown as Record) + : {}; + const rebuiltOpenRouter: OpenRouterSettings = { + enabled: incomingOpenRouter['enabled'] === true, + preferredModel: + typeof incomingOpenRouter['preferredModel'] === 'string' + ? incomingOpenRouter['preferredModel'] + : 'deepseek/deepseek-r1:free', + }; + validSettings.openRouter = rebuiltOpenRouter; return validSettings; } diff --git a/tests/unit/CharacterView.test.tsx b/tests/unit/CharacterView.test.tsx index 6c1e5ed3..b6773eb7 100644 --- a/tests/unit/CharacterView.test.tsx +++ b/tests/unit/CharacterView.test.tsx @@ -1,6 +1,7 @@ -import { render, screen } from '@testing-library/react'; +import { render, screen, waitFor } from '@testing-library/react'; import { describe, expect, it, vi } from 'vitest'; import { CharacterView } from '../../components/CharacterView'; +import { storageService } from '../../services/storageService'; // --------------------------------------------------------------------------- // Mocks @@ -124,4 +125,75 @@ describe('CharacterView', () => { // Only AddNewCard buttons + no character cards expect(cards.length).toBeLessThanOrEqual(2); }); + + // ── useStoredImage (QNBS-v3: storageService-backed, MIME-preserving) ────── + + it('renders a data:image/-prefixed avatar as-is, without re-wrapping it as PNG', async () => { + vi.mocked(storageService.getImage).mockResolvedValueOnce('data:image/jpeg;base64,abc123'); + const { useCharacterView } = await import('../../hooks/useCharacterView'); + vi.mocked(useCharacterView).mockReturnValueOnce({ + ...baseContextValue, + characters: [ + { + id: 'c-jpeg', + name: 'Jamie', + appearance: '', + motivation: '', + backstory: '', + notes: '', + personalityTraits: '', + hasAvatar: true, + }, + ], + } as never); + render(); + const img = await waitFor(() => screen.getByAltText('Jamie')); + expect(img).toHaveAttribute('src', 'data:image/jpeg;base64,abc123'); + }); + + it('falls back to a PNG data URL for a legacy raw-base64 avatar with no MIME prefix', async () => { + vi.mocked(storageService.getImage).mockResolvedValueOnce('legacyRawBase64Payload'); + const { useCharacterView } = await import('../../hooks/useCharacterView'); + vi.mocked(useCharacterView).mockReturnValueOnce({ + ...baseContextValue, + characters: [ + { + id: 'c-legacy', + name: 'Lee', + appearance: '', + motivation: '', + backstory: '', + notes: '', + personalityTraits: '', + hasAvatar: true, + }, + ], + } as never); + render(); + const img = await waitFor(() => screen.getByAltText('Lee')); + expect(img).toHaveAttribute('src', 'data:image/png;base64,legacyRawBase64Payload'); + }); + + it('keeps the placeholder icon instead of throwing when storageService.getImage rejects', async () => { + vi.mocked(storageService.getImage).mockRejectedValueOnce(new Error('read failed')); + const { useCharacterView } = await import('../../hooks/useCharacterView'); + vi.mocked(useCharacterView).mockReturnValueOnce({ + ...baseContextValue, + characters: [ + { + id: 'c-broken', + name: 'Robin', + appearance: '', + motivation: '', + backstory: '', + notes: '', + personalityTraits: '', + hasAvatar: true, + }, + ], + } as never); + render(); + await waitFor(() => expect(storageService.getImage).toHaveBeenCalledWith('c-broken')); + expect(screen.queryByAltText('Robin')).toBeNull(); + }); }); diff --git a/tests/unit/WorldView.test.tsx b/tests/unit/WorldView.test.tsx index aa1b54ab..15316063 100644 --- a/tests/unit/WorldView.test.tsx +++ b/tests/unit/WorldView.test.tsx @@ -1,6 +1,7 @@ -import { render, screen } from '@testing-library/react'; +import { render, screen, waitFor } from '@testing-library/react'; import { describe, expect, it, vi } from 'vitest'; import { WorldView } from '../../components/WorldView'; +import { storageService } from '../../services/storageService'; // --------------------------------------------------------------------------- // Mocks @@ -120,4 +121,78 @@ describe('WorldView', () => { const addBtns = screen.getAllByText(/worlds\.addNew/); expect(addBtns.length).toBeGreaterThanOrEqual(2); }); + + // ── useStoredImage (QNBS-v3: storageService-backed, MIME-preserving) ────── + + it('renders a data:image/-prefixed ambiance image as-is, without re-wrapping it as PNG', async () => { + vi.mocked(storageService.getImage).mockResolvedValueOnce('data:image/jpeg;base64,abc123'); + const { useWorldView } = await import('../../hooks/useWorldView'); + vi.mocked(useWorldView).mockReturnValueOnce({ + ...baseContextValue, + worlds: [ + { + id: 'w-jpeg', + name: 'Aetheria', + description: '', + geography: '', + magicSystem: '', + notes: '', + hasAmbianceImage: true, + locations: [], + timeline: [], + }, + ], + } as never); + render(); + const img = await waitFor(() => screen.getByAltText('Aetheria')); + expect(img).toHaveAttribute('src', 'data:image/jpeg;base64,abc123'); + }); + + it('falls back to a PNG data URL for a legacy raw-base64 ambiance image with no MIME prefix', async () => { + vi.mocked(storageService.getImage).mockResolvedValueOnce('legacyRawBase64Payload'); + const { useWorldView } = await import('../../hooks/useWorldView'); + vi.mocked(useWorldView).mockReturnValueOnce({ + ...baseContextValue, + worlds: [ + { + id: 'w-legacy', + name: 'Boralis', + description: '', + geography: '', + magicSystem: '', + notes: '', + hasAmbianceImage: true, + locations: [], + timeline: [], + }, + ], + } as never); + render(); + const img = await waitFor(() => screen.getByAltText('Boralis')); + expect(img).toHaveAttribute('src', 'data:image/png;base64,legacyRawBase64Payload'); + }); + + it('keeps the placeholder icon instead of throwing when storageService.getImage rejects', async () => { + vi.mocked(storageService.getImage).mockRejectedValueOnce(new Error('read failed')); + const { useWorldView } = await import('../../hooks/useWorldView'); + vi.mocked(useWorldView).mockReturnValueOnce({ + ...baseContextValue, + worlds: [ + { + id: 'w-broken', + name: 'Cindralis', + description: '', + geography: '', + magicSystem: '', + notes: '', + hasAmbianceImage: true, + locations: [], + timeline: [], + }, + ], + } as never); + render(); + await waitFor(() => expect(storageService.getImage).toHaveBeenCalledWith('w-broken')); + expect(screen.queryByAltText('Cindralis')).toBeNull(); + }); }); diff --git a/tests/unit/settings/DataSection.test.tsx b/tests/unit/settings/DataSection.test.tsx index 57c463d8..8dd568e7 100644 --- a/tests/unit/settings/DataSection.test.tsx +++ b/tests/unit/settings/DataSection.test.tsx @@ -73,8 +73,9 @@ vi.mock('../../../services/desktop/desktopNotifications', () => ({ sendDesktopNotification: (...args: unknown[]) => mockSendDesktopNotification(...args), })); +const mockDispatch = vi.fn(); vi.mock('../../../app/hooks', () => ({ - useAppDispatch: vi.fn(() => vi.fn()), + useAppDispatch: vi.fn(() => mockDispatch), useAppSelector: vi.fn(() => ({})), })); @@ -85,6 +86,11 @@ vi.mock('../../../features/settings/settingsSlice', () => ({ default: (s = {}) => s, })); +vi.mock('../../../services/storage/idbProjectStore', () => ({ + // QNBS-v3: identity pass-through — this integration test only asserts the import path *calls* the sanitizer; normalizePersistedSettings' own stripping logic is unit-tested separately. + normalizePersistedSettings: vi.fn((s: unknown) => s), +})); + vi.mock('../../../features/settings/keyboardShortcutsDefaults', () => ({ getDefaultKeyboardShortcuts: vi.fn(() => []), SHORTCUT_ACTION_REGISTRY: [], @@ -161,6 +167,59 @@ describe('DataSection', () => { }); }); +// QNBS-v3: a raw settings import previously bypassed sanitization entirely, letting a legacy/crafted openRouter.apiKey reach Redux (and then autosave) unfiltered. +describe('DataSection settings-file import sanitization', () => { + beforeEach(async () => { + mockDispatch.mockClear(); + const { normalizePersistedSettings } = await import( + '../../../services/storage/idbProjectStore' + ); + vi.mocked(normalizePersistedSettings).mockClear(); + }); + + it('routes an imported settings file through normalizePersistedSettings before dispatching', async () => { + const { parseSettingsImportEnvelope } = await import('../../../services/settingsExchange'); + const importedPartial = { openRouter: { apiKey: 'sk-should-be-stripped', enabled: true } }; + vi.mocked(parseSettingsImportEnvelope).mockReturnValueOnce(importedPartial as never); + + render(); + const fileInput = document.querySelector('input[type="file"][accept=".json,application/json"]'); + expect(fileInput).toBeTruthy(); + + const file = new File( + [JSON.stringify({ worldscriptSettingsExportVersion: 1, settings: {} })], + 'settings.json', + { + type: 'application/json', + }, + ); + vi.spyOn(FileReader.prototype, 'readAsText').mockImplementation(function (this: FileReader) { + Object.defineProperty(this, 'result', { value: '{}', configurable: true }); + void Promise.resolve().then(() => { + if (typeof this.onload === 'function') + this.onload(new ProgressEvent('load') as ProgressEvent); + }); + }); + + // QNBS-v3: userEvent.upload (not fireEvent.change) simulates the real browser file-selection interaction. + const user = userEvent.setup(); + await user.upload(fileInput as HTMLInputElement, file); + + const { normalizePersistedSettings } = await import( + '../../../services/storage/idbProjectStore' + ); + await waitFor(() => expect(normalizePersistedSettings).toHaveBeenCalledTimes(1)); + expect(vi.mocked(normalizePersistedSettings).mock.calls[0]?.[0]).toMatchObject(importedPartial); + + await waitFor(() => expect(mockDispatch).toHaveBeenCalledTimes(1)); + expect(mockDispatch).toHaveBeenCalledWith({ + type: 'settings/setSettings', + // QNBS-v3: identity-mocked normalizePersistedSettings returns its input unchanged — this asserts wiring, not the sanitizer's own stripping (covered in normalizePersistedSettings.test.ts). + payload: { ...baseContextValue.settings, ...importedPartial }, + }); + }); +}); + // --------------------------------------------------------------------------- // QNBS-v3 (T3): encrypted library backup desktop-notification gating (Copilot reviewer finding #8) // --------------------------------------------------------------------------- diff --git a/tests/unit/storage/normalizePersistedSettings.test.ts b/tests/unit/storage/normalizePersistedSettings.test.ts index 38f2ced8..986419a4 100644 --- a/tests/unit/storage/normalizePersistedSettings.test.ts +++ b/tests/unit/storage/normalizePersistedSettings.test.ts @@ -167,6 +167,35 @@ describe('normalizePersistedSettings', () => { expect(result.theme).toBe('dark'); }); + // ── openRouter ──────────────────────────────────────────────────────────── + + it('backfills openRouter without an apiKey field when absent', () => { + const result = normalizePersistedSettings({ theme: 'dark' }); + expect(result.openRouter).toBeDefined(); + expect(result.openRouter).not.toHaveProperty('apiKey'); + expect(result.openRouter?.preferredModel).toBe('deepseek/deepseek-r1:free'); + }); + + it('strips a legacy/imported apiKey field from an existing openRouter object', () => { + // QNBS-v3: a settings import/export round-trip could otherwise carry a real secret straight through — the real key lives only in the dedicated per-provider key store, never in Settings. + const result = normalizePersistedSettings({ + openRouter: { enabled: true, apiKey: 'sk-should-never-persist', preferredModel: 'x/y:free' }, + }); + expect(result.openRouter).not.toHaveProperty('apiKey'); + expect(result.openRouter?.enabled).toBe(true); + expect(result.openRouter?.preferredModel).toBe('x/y:free'); + }); + + it('restores enabled/preferredModel defaults for a credentials-only legacy object', () => { + // QNBS-v3: a legacy payload with only `apiKey` (no enabled/preferredModel) must not leave those required fields undefined after stripping. + const result = normalizePersistedSettings({ + openRouter: { apiKey: 'sk-legacy-only' }, + }); + expect(result.openRouter).not.toHaveProperty('apiKey'); + expect(result.openRouter?.enabled).toBe(false); + expect(result.openRouter?.preferredModel).toBe('deepseek/deepseek-r1:free'); + }); + // ── fully absent settings (completely old project) ──────────────────────── it('handles completely empty incoming object without throwing', () => { diff --git a/tests/unit/thunks/outlineAndWorldThunks.test.ts b/tests/unit/thunks/outlineAndWorldThunks.test.ts index 3ad26064..3686cb54 100644 --- a/tests/unit/thunks/outlineAndWorldThunks.test.ts +++ b/tests/unit/thunks/outlineAndWorldThunks.test.ts @@ -16,6 +16,12 @@ vi.mock('../../../features/project/thunks/thunkUtils', () => ({ buildAiCreativity: vi.fn().mockReturnValue('Balanced'), })); +vi.mock('../../../services/storageService', () => ({ + storageService: { + saveImage: vi.fn(), + }, +})); + import featureFlagsReducer from '../../../features/featureFlags/featureFlagsSlice'; import projectReducer, { projectActions } from '../../../features/project/projectSlice'; import { @@ -25,11 +31,17 @@ import { regenerateOutlineSectionThunk, } from '../../../features/project/thunks/outlineThunks'; import { loadAiProvider, loadPrompts } from '../../../features/project/thunks/thunkUtils'; -import { generateWorldProfileThunk } from '../../../features/project/thunks/worldThunks'; +import { + generateWorldImageThunk, + generateWorldProfileThunk, + regenerateWorldFieldThunk, + uploadWorldImageThunk, +} from '../../../features/project/thunks/worldThunks'; import settingsReducer from '../../../features/settings/settingsSlice'; import statusReducer from '../../../features/status/statusSlice'; import versionControlReducer from '../../../features/versionControl/versionControlSlice'; import writerReducer from '../../../features/writer/writerSlice'; +import { storageService } from '../../../services/storageService'; // --------------------------------------------------------------------------- // Store factory @@ -50,6 +62,8 @@ function makeStore() { const mockGetPrompts = vi.fn(); const mockGenerateJson = vi.fn(); +const mockGenerateText = vi.fn(); +const mockGenerateImage = vi.fn(); beforeEach(() => { vi.clearAllMocks(); @@ -57,12 +71,13 @@ beforeEach(() => { vi.mocked(loadPrompts).mockResolvedValue({ getPrompts: mockGetPrompts } as never); vi.mocked(loadAiProvider).mockResolvedValue({ generateJson: mockGenerateJson, - generateText: vi.fn(), - generateImage: vi.fn(), + generateText: mockGenerateText, + generateImage: mockGenerateImage, streamText: vi.fn(), } as never); mockGetPrompts.mockReturnValue({ prompt: 'test-prompt', schema: {} }); mockGenerateJson.mockResolvedValue([]); + vi.mocked(storageService.saveImage).mockResolvedValue(undefined); }); // --------------------------------------------------------------------------- @@ -178,3 +193,198 @@ describe('generateWorldProfileThunk', () => { expect(result.type).toBe('project/generateWorldProfile/rejected'); }); }); + +// QNBS-v3: regenerateWorldFieldThunk/generateWorldImageThunk were only mocked out in hook tests, never actually exercised — these protect the fulfilled payload, prompt args, persistence call, and rejection path. +describe('regenerateWorldFieldThunk', () => { + const world = { + id: 'w1', + name: 'Eldoria', + description: 'Old description', + geography: '', + magicSystem: '', + culture: '', + notes: '', + timeline: [], + locations: [], + }; + + it('dispatches fulfilled with { field, value }', async () => { + mockGenerateText.mockResolvedValueOnce('New description text'); + const store = makeStore(); + const action = await store.dispatch( + regenerateWorldFieldThunk({ world, field: 'description', lang: 'en' }), + ); + + expect(action.type).toBe('project/regenerateWorldField/fulfilled'); + const payload = (action as { payload: { field: string; value: string } }).payload; + expect(payload.field).toBe('description'); + expect(payload.value).toBe('New description text'); + }); + + it('passes the world and field to getPrompts', async () => { + mockGenerateText.mockResolvedValueOnce('value'); + const store = makeStore(); + await store.dispatch(regenerateWorldFieldThunk({ world, field: 'description', lang: 'de' })); + + expect(mockGetPrompts).toHaveBeenCalledWith( + 'regenerateWorldField', + expect.objectContaining({ world, field: 'description', lang: 'de' }), + ); + }); + + it('rejects on AI error', async () => { + mockGenerateText.mockRejectedValueOnce(new Error('AI down')); + const store = makeStore(); + const action = await store.dispatch( + regenerateWorldFieldThunk({ world, field: 'description', lang: 'en' }), + ); + + expect(action.type).toBe('project/regenerateWorldField/rejected'); + }); +}); + +describe('generateWorldImageThunk', () => { + it('dispatches fulfilled with worldId', async () => { + mockGenerateImage.mockResolvedValueOnce('worldimagebase64'); + const store = makeStore(); + const action = await store.dispatch( + generateWorldImageThunk({ worldId: 'w1', description: 'A misty forest', lang: 'en' }), + ); + + expect(action.type).toBe('project/generateWorldImage/fulfilled'); + expect((action as { payload: { worldId: string } }).payload.worldId).toBe('w1'); + }); + + it('saves the generated image via storageService', async () => { + mockGenerateImage.mockResolvedValueOnce('worldimagedata'); + const store = makeStore(); + await store.dispatch( + generateWorldImageThunk({ worldId: 'w42', description: 'A volcanic wasteland', lang: 'en' }), + ); + + expect(storageService.saveImage).toHaveBeenCalledWith('w42', 'worldimagedata'); + }); + + it('rejects on AI error', async () => { + mockGenerateImage.mockRejectedValueOnce(new Error('generation failed')); + const store = makeStore(); + const action = await store.dispatch( + generateWorldImageThunk({ worldId: 'w1', description: 'A sunken city', lang: 'en' }), + ); + + expect(action.type).toBe('project/generateWorldImage/rejected'); + expect(storageService.saveImage).not.toHaveBeenCalled(); + }); +}); + +// QNBS-v3: FileReader error/abort and storageService.saveImage-rejection coverage prevents the upload thunk's Promise from hanging forever on any terminal failure path. +describe('uploadWorldImageThunk', () => { + it('reads file as a MIME-preserving data URL', async () => { + const fakeDataUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA'; + vi.spyOn(FileReader.prototype, 'readAsDataURL').mockImplementation(function (this: FileReader) { + Object.defineProperty(this, 'result', { value: fakeDataUrl, configurable: true }); + void Promise.resolve().then(() => { + if (typeof this.onload === 'function') + this.onload(new ProgressEvent('load') as ProgressEvent); + }); + }); + + const store = makeStore(); + const file = new File(['fake image data'], 'atlas.png', { type: 'image/png' }); + const action = await store.dispatch(uploadWorldImageThunk({ worldId: 'w99', file })); + + expect(action.type).toBe('project/uploadWorldImage/fulfilled'); + expect(storageService.saveImage).toHaveBeenCalledWith('w99', fakeDataUrl); + }); + + it('rejects when the FileReader errors', async () => { + const readerError = new Error('read failed'); + vi.spyOn(FileReader.prototype, 'readAsDataURL').mockImplementation(function (this: FileReader) { + Object.defineProperty(this, 'error', { value: readerError, configurable: true }); + void Promise.resolve().then(() => { + if (typeof this.onerror === 'function') + this.onerror(new ProgressEvent('error') as ProgressEvent); + }); + }); + + const store = makeStore(); + const file = new File(['data'], 'broken.png', { type: 'image/png' }); + const action = await store.dispatch(uploadWorldImageThunk({ worldId: 'w1', file })); + + expect(action.type).toBe('project/uploadWorldImage/rejected'); + expect(storageService.saveImage).not.toHaveBeenCalled(); + }); + + // QNBS-v3: covers the `reader.error ?? new Error(...)` fallback branch — a browser could fire onerror with a null/undefined reader.error, which must still reject instead of leaving the upload thunk pending. + it('rejects with a fallback error when the FileReader errors without a reader.error', async () => { + vi.spyOn(FileReader.prototype, 'readAsDataURL').mockImplementation(function (this: FileReader) { + Object.defineProperty(this, 'error', { value: null, configurable: true }); + void Promise.resolve().then(() => { + if (typeof this.onerror === 'function') + this.onerror(new ProgressEvent('error') as ProgressEvent); + }); + }); + + const store = makeStore(); + const file = new File(['data'], 'broken.png', { type: 'image/png' }); + const action = await store.dispatch(uploadWorldImageThunk({ worldId: 'w8', file })); + + expect(action.type).toBe('project/uploadWorldImage/rejected'); + expect((action as { error: { message?: string } }).error.message).toBe( + 'FileReader failed to read the file', + ); + }); + + it('rejects when the FileReader is aborted', async () => { + vi.spyOn(FileReader.prototype, 'readAsDataURL').mockImplementation(function (this: FileReader) { + void Promise.resolve().then(() => { + if (typeof this.onabort === 'function') + this.onabort(new ProgressEvent('abort') as ProgressEvent); + }); + }); + + const store = makeStore(); + const file = new File(['data'], 'aborted.png', { type: 'image/png' }); + const action = await store.dispatch(uploadWorldImageThunk({ worldId: 'w3', file })); + + expect(action.type).toBe('project/uploadWorldImage/rejected'); + expect(storageService.saveImage).not.toHaveBeenCalled(); + }); + + it('rejects when onload fires but reader.result is not a string', async () => { + vi.spyOn(FileReader.prototype, 'readAsDataURL').mockImplementation(function (this: FileReader) { + Object.defineProperty(this, 'result', { value: null, configurable: true }); + void Promise.resolve().then(() => { + if (typeof this.onload === 'function') + this.onload(new ProgressEvent('load') as ProgressEvent); + }); + }); + + const store = makeStore(); + const file = new File(['data'], 'weird.png', { type: 'image/png' }); + const action = await store.dispatch(uploadWorldImageThunk({ worldId: 'w4', file })); + + expect(action.type).toBe('project/uploadWorldImage/rejected'); + expect(storageService.saveImage).not.toHaveBeenCalled(); + }); + + it('rejects (does not hang) when storageService.saveImage fails', async () => { + vi.spyOn(FileReader.prototype, 'readAsDataURL').mockImplementation(function (this: FileReader) { + Object.defineProperty(this, 'result', { + value: 'data:image/png;base64,abc', + configurable: true, + }); + void Promise.resolve().then(() => { + if (typeof this.onload === 'function') + this.onload(new ProgressEvent('load') as ProgressEvent); + }); + }); + vi.mocked(storageService.saveImage).mockRejectedValueOnce(new Error('disk full')); + + const store = makeStore(); + const file = new File(['data'], 'atlas.png', { type: 'image/png' }); + const action = await store.dispatch(uploadWorldImageThunk({ worldId: 'w2', file })); + + expect(action.type).toBe('project/uploadWorldImage/rejected'); + }); +}); diff --git a/tests/unit/thunks/writingAndCharacterThunks.test.ts b/tests/unit/thunks/writingAndCharacterThunks.test.ts index e39abff1..3c5c363a 100644 --- a/tests/unit/thunks/writingAndCharacterThunks.test.ts +++ b/tests/unit/thunks/writingAndCharacterThunks.test.ts @@ -434,6 +434,7 @@ describe('generateCharacterPortraitThunk', () => { // --------------------------------------------------------------------------- // uploadCharacterImageThunk // --------------------------------------------------------------------------- +// QNBS-v3: FileReader error/abort and storageService.saveImage-rejection coverage prevents the upload thunk's Promise from hanging forever on any terminal failure path. describe('uploadCharacterImageThunk', () => { it('reads file as a MIME-preserving data URL', async () => { const fakeBase64 = 'iVBORw0KGgoAAAANSUhEUgAAAA'; @@ -443,8 +444,8 @@ describe('uploadCharacterImageThunk', () => { vi.spyOn(FileReader.prototype, 'readAsDataURL').mockImplementation(function (this: FileReader) { Object.defineProperty(this, 'result', { value: fakeDataUrl, configurable: true }); void Promise.resolve().then(() => { - if (typeof this.onloadend === 'function') - this.onloadend(new ProgressEvent('loadend') as ProgressEvent); + if (typeof this.onload === 'function') + this.onload(new ProgressEvent('load') as ProgressEvent); }); }); @@ -463,8 +464,8 @@ describe('uploadCharacterImageThunk', () => { configurable: true, }); void Promise.resolve().then(() => { - if (typeof this.onloadend === 'function') - this.onloadend(new ProgressEvent('loadend') as ProgressEvent); + if (typeof this.onload === 'function') + this.onload(new ProgressEvent('load') as ProgressEvent); }); }); @@ -475,4 +476,94 @@ describe('uploadCharacterImageThunk', () => { expect((action as { payload: { characterId: string } }).payload?.characterId).toBe('c7'); expect(storageService.saveImage).toHaveBeenCalledWith('c7', 'data:image/jpeg;base64,abc123'); }); + + it('rejects when the FileReader errors', async () => { + const readerError = new Error('read failed'); + vi.spyOn(FileReader.prototype, 'readAsDataURL').mockImplementation(function (this: FileReader) { + Object.defineProperty(this, 'error', { value: readerError, configurable: true }); + void Promise.resolve().then(() => { + if (typeof this.onerror === 'function') + this.onerror(new ProgressEvent('error') as ProgressEvent); + }); + }); + + const store = makeStore(); + const file = new File(['data'], 'broken.png', { type: 'image/png' }); + const action = await store.dispatch(uploadCharacterImageThunk({ characterId: 'c1', file })); + + expect(action.type).toBe('project/uploadCharacterImage/rejected'); + expect(storageService.saveImage).not.toHaveBeenCalled(); + }); + + it('rejects with a fallback error when the FileReader errors without a reader.error', async () => { + vi.spyOn(FileReader.prototype, 'readAsDataURL').mockImplementation(function (this: FileReader) { + Object.defineProperty(this, 'error', { value: null, configurable: true }); + void Promise.resolve().then(() => { + if (typeof this.onerror === 'function') + this.onerror(new ProgressEvent('error') as ProgressEvent); + }); + }); + + const store = makeStore(); + const file = new File(['data'], 'broken.png', { type: 'image/png' }); + const action = await store.dispatch(uploadCharacterImageThunk({ characterId: 'c8', file })); + + expect(action.type).toBe('project/uploadCharacterImage/rejected'); + expect((action as { error: { message?: string } }).error.message).toBe( + 'FileReader failed to read the file', + ); + }); + + it('rejects when the FileReader is aborted', async () => { + vi.spyOn(FileReader.prototype, 'readAsDataURL').mockImplementation(function (this: FileReader) { + void Promise.resolve().then(() => { + if (typeof this.onabort === 'function') + this.onabort(new ProgressEvent('abort') as ProgressEvent); + }); + }); + + const store = makeStore(); + const file = new File(['data'], 'aborted.png', { type: 'image/png' }); + const action = await store.dispatch(uploadCharacterImageThunk({ characterId: 'c3', file })); + + expect(action.type).toBe('project/uploadCharacterImage/rejected'); + expect(storageService.saveImage).not.toHaveBeenCalled(); + }); + + it('rejects when onload fires but reader.result is not a string', async () => { + vi.spyOn(FileReader.prototype, 'readAsDataURL').mockImplementation(function (this: FileReader) { + Object.defineProperty(this, 'result', { value: null, configurable: true }); + void Promise.resolve().then(() => { + if (typeof this.onload === 'function') + this.onload(new ProgressEvent('load') as ProgressEvent); + }); + }); + + const store = makeStore(); + const file = new File(['data'], 'weird.png', { type: 'image/png' }); + const action = await store.dispatch(uploadCharacterImageThunk({ characterId: 'c4', file })); + + expect(action.type).toBe('project/uploadCharacterImage/rejected'); + expect(storageService.saveImage).not.toHaveBeenCalled(); + }); + + it('rejects (does not hang) when storageService.saveImage fails', async () => { + vi.spyOn(FileReader.prototype, 'readAsDataURL').mockImplementation(function (this: FileReader) { + Object.defineProperty(this, 'result', { + value: 'data:image/png;base64,abc', + configurable: true, + }); + void Promise.resolve().then(() => { + if (typeof this.onload === 'function') + this.onload(new ProgressEvent('load') as ProgressEvent); + }); + }); + vi.mocked(storageService.saveImage).mockRejectedValueOnce(new Error('disk full')); + + const store = makeStore(); + const file = new File(['data'], 'portrait.png', { type: 'image/png' }); + const action = await store.dispatch(uploadCharacterImageThunk({ characterId: 'c2', file })); + + expect(action.type).toBe('project/uploadCharacterImage/rejected'); + }); }); diff --git a/types.ts b/types.ts index 7a1c55f8..93908f5a 100644 --- a/types.ts +++ b/types.ts @@ -624,15 +624,11 @@ export interface VoiceSettings { voiceWasmDownloadError?: string; } -/** OpenRouter provider settings — key stored encrypted, model controls free-vs-paid selection. */ +/** OpenRouter provider settings — model controls free-vs-paid selection. */ +// QNBS-v3: no `apiKey` field here on purpose — it was never populated by any reducer or read anywhere; the real key lives only in the dedicated per-provider key store (see idbProjectStore.ts#normalizePersistedSettings, which strips a legacy/imported apiKey). export interface OpenRouterSettings { /** Whether OpenRouter is enabled as a provider in the routing chain. */ enabled: boolean; - /** - * OpenRouter API key (encrypted at rest via IDB AES-256-GCM when enableIdbAtRestEncryption is on). - * Never logged; sanitizeLogContext redacts it automatically. - */ - apiKey: string; /** * Preferred model identifier. Use `:free` suffix for the free tier * (e.g. `"deepseek/deepseek-r1:free"`, `"meta-llama/llama-3.3-70b-instruct:free"`). @@ -655,7 +651,7 @@ export interface Settings { writingSurfaceStyle: WritingSurfaceStyle; /** AI execution routing mode — hybrid (default), cloud-only, local-only, or eco (tiny models). */ aiMode: AiMode; - /** OpenRouter cloud provider settings — enabled/disabled, API key, preferred model. */ + /** OpenRouter cloud provider settings — enabled/disabled, preferred model. Key stored separately, see OpenRouterSettings. */ openRouter?: OpenRouterSettings; editorFont: EditorFont; fontSize: number;