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.
- Auslösen: Plot Board öffnen (Plot Board v2 zunächst in den Feature-Flags aktivieren). Auf KI ✦ in der Plot-Board-Symbolleiste klicken.
- Funktionsweise: WorldScript erstellt einen RAG-angereicherten Prompt aus den letzten Manuskriptabschnitten, vorhandenen Beat-Karten und der Projekt-Gliederung und sendet ihn an den konfigurierten KI-Anbieter.
- Ausgabe: Die KI gibt einen Vorschlagstitel, eine kurze Beschreibung und eine empfohlene Aktzuordnung zurück. Eine Vorschaukarte erscheint mit Übernehmen- und Ablehnen-Schaltflächen.
- Übernehmen: Das Klicken auf „Übernehmen“ erstellt die Beat-Karte im vorgeschlagenen Akt. Sie kann gezogen oder der Titel inline bearbeitet werden.
- Mehrere Vorschläge: Erneut vorschlagen liefert eine Alternative; beide erscheinen nebeneinander zum Vergleich.
- Beste Ergebnisse: Funktioniert am besten bei mindestens 500 Wörtern im Manuskript und beschreibenden Beat-Kartentiteln.
",
"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
- Google Gemini (Standard): Schnell, großzügiges kostenloses Kontingent. Hol dir einen kostenlosen API-Schlüssel von Google AI Studio. Empfohlene Modelle:
gemini-2.5-flash für den täglichen Einsatz, gemini-2.5-pro für komplexe Aufgaben. - OpenAI: GPT-4o und GPT-4o-mini. Trage deinen OpenAI-Schlüssel unter Einstellungen → KI → OpenAI-Schlüssel ein. Stark bei Anweisungsfolgen und Prosa-Umformulierungen.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6 und Haiku 4.5. Schlüssel über console.anthropic.com. Ausgezeichnet für lange Erzählungen und differenzierte Tonlage. Läuft nativ in der Desktop-App; im Web wird der Aufruf über den eigenen Serverless-Proxy von WorldScript auf Vercel-/Cloudflare-Pages-Deployments weitergeleitet (nicht verfügbar auf dem statischen GitHub-Pages-Mirror).
- Grok (xAI):
grok-3 und grok-3-mini über die xAI-API. Schlüssel aus dem xAI-Entwicklerportal. Wettbewerbsfähig bei kreativen Aufgaben mit niedrigeren Kosten pro Token als GPT-4. - OpenRouter: Ein einheitliches Gateway zu DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B und Hunderten weiteren. Kostenloser Schlüssel unter openrouter.ai/keys; Modelle mit dem Suffix
:free kosten nichts.
Lokale / Self-Hosted-Anbieter
- Ollama (lokal): Führt Modelle auf deiner Maschine via
http://localhost:11434 aus. Installiere Ollama und führe ollama pull llama3.2 aus. Die Desktop-App verbindet sich nativ – Browser können standardmäßig nicht origin-übergreifend auf localhost zugreifen (CORS, nicht CSP). Im Web/PWA-Build ist dies standardmäßig nur auf dem Desktop möglich; ein Opt-in-Flag Browser-Ollama-Verbindung unter Einstellungen → Experimentell erlaubt eine direkte Browser-Verbindung, wenn du deinen eigenen Server mit OLLAMA_ORIGINS für genau diesen Origin startest – fortgeschritten und nicht unterstützt. Unterstützt jedes Ollama-kompatible Modell einschließlich LoRA-Adapter. - WebLLM (Browser, GPU): Quantisierte LLMs direkt im Browser über WebGPU – kein API-Schlüssel, kein Internet nach dem ersten Download nötig. Unterstützte Modelle: Llama 3.2 1B/3B, Phi-3.5 Mini, Gemma 2 2B. Erfordert eine WebGPU-fähige GPU (~2–6 GB VRAM). Modell herunterladen unter Einstellungen → Erweiterte KI → Lokale KI-Modelle.
- ONNX Runtime Web (Browser, CPU): WASM-basierte Inferenz ohne GPU. Langsamer als WebLLM, aber auf jedem Gerät lauffähig. Gut für kurze Vervollständigungen und Klassifizierungsaufgaben.
- Transformers.js (automatisch): Betreibt das lokale Einbettungsmodell für den hybriden RAG-Index (MiniLM-L6-v2, 384 Dimensionen). Läuft automatisch – keine Konfiguration nötig.
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
- Google Gemini (Standard): Schnell, großzügiges kostenloses Kontingent. Hol dir einen kostenlosen API-Schlüssel von Google AI Studio. Empfohlene Modelle:
gemini-2.5-flash für den täglichen Einsatz, gemini-2.5-pro für komplexe Aufgaben. - OpenAI: GPT-4o und GPT-4o-mini. Trage deinen OpenAI-Schlüssel unter Einstellungen → KI → OpenAI-Schlüssel ein. Stark bei Anweisungsfolgen und Prosa-Umformulierungen.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6 und Haiku 4.5. Schlüssel über console.anthropic.com. Ausgezeichnet für lange Erzählungen und differenzierte Tonlage. Läuft nativ in der Desktop-App; im Web wird der Aufruf über den eigenen Serverless-Proxy von WorldScript auf Vercel-/Cloudflare-Pages-Deployments weitergeleitet (nicht verfügbar auf dem statischen GitHub-Pages-Mirror).
- Grok (xAI):
grok-3 und grok-3-mini über die xAI-API. Schlüssel aus dem xAI-Entwicklerportal. Wettbewerbsfähig bei kreativen Aufgaben mit niedrigeren Kosten pro Token als GPT-4. - OpenRouter: Ein einheitliches Gateway zu DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B und Hunderten weiteren. Kostenloser Schlüssel unter openrouter.ai/keys; Modelle mit dem Suffix
:free kosten nichts.
Lokale / Self-Hosted-Anbieter
- Ollama (lokal): Führt Modelle auf deiner Maschine via
http://localhost:11434 aus. Installiere Ollama und führe ollama pull llama3.2 aus. Die Desktop-App verbindet sich nativ – Browser können standardmäßig nicht origin-übergreifend auf localhost zugreifen (CORS, nicht CSP). Im Web/PWA-Build ist dies standardmäßig nur auf dem Desktop möglich; ein Opt-in-Flag Browser-Ollama-Verbindung unter Einstellungen → Experimentell erlaubt eine direkte Browser-Verbindung, wenn du deinen eigenen Server mit OLLAMA_ORIGINS für genau diesen Origin startest – fortgeschritten und nicht unterstützt. Unterstützt jedes Ollama-kompatible Modell einschließlich LoRA-Adapter. - WebLLM (Browser, GPU): Quantisierte LLMs direkt im Browser über WebGPU – kein API-Schlüssel, kein Internet nach dem ersten Download nötig. Unterstützte Modelle: Llama 3.2 1B/3B, Phi-3.5 Mini, Gemma 2 2B. Erfordert eine WebGPU-fähige GPU (~2–6 GB VRAM). Modell herunterladen unter Einstellungen → Erweiterte KI → Lokale KI-Modelle.
- ONNX Runtime Web (Browser, CPU): WASM-basierte Inferenz ohne GPU. Langsamer als WebLLM, aber auf jedem Gerät lauffähig. Gut für kurze Vervollständigungen und Klassifizierungsaufgaben.
- Transformers.js (automatisch): Betreibt das lokale Einbettungsmodell für den hybriden RAG-Index (MiniLM-L6-v2, 384 Dimensionen). Läuft automatisch – keine Konfiguration nötig.
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 %).
- Index unter Einstellungen → Erweiterte KI → Lokalen Suchindex neu aufbauen erstellen (lokales Embedding-Modell erforderlich).
- KI-Schreibstudio öffnen, RAG-Kontext aktivieren, dann Weiterschreiben, Brainstorm oder Kritik nutzen.
- 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.
- Ansichten: Jede Ansicht ist in
React.lazy() mit Suspense-Grenze gekapselt. Das Bundle lädt beim ersten Besuch; folgende nutzen den Browser-Cache. - Vite-manualChunks: Vendor-Code in benannte Chunks aufgeteilt:
vendor-react, vendor-redux, plot-board, export-docx, collab-yjs. Jeder Chunk lädt nur beim ersten Öffnen der jeweiligen Ansicht. - KI-Provider-Schicht:
services/ai/index.ts wird beim ersten KI-Tool-Einsatz dynamisch importiert. Das Vercel AI SDK (~200 KB gzippt) ist nicht im Entry-Chunk. - DuckDB & RAG: Listener und lokales Embedding-Modell werden nur bei aktiviertem Flag geladen. Cold-Start bleibt unberührt.
- Force-Graph:
react-force-graph-2d wird erst beim Öffnen der Figurengraph-Ansicht mit mindestens einer Figur importiert. - Bundle-Budget: CI-Job
bundle:budget: max. 7 000 KB Vendor-Chunk, 4 500 KB Entry-Chunk. Überschreitungen schlagen den Build fehl.
",
"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.
- Kein Konto erforderlich: Es gibt keine Anmeldung, keine Cloud-Synchronisierung und keinen Server, auf dem deine Manuskripte gespeichert werden. Alle Daten liegen in IndexedDB und OPFS deines Browsers.
- API-Schlüsselverschlüsselung: Wenn du einen API-Schlüssel eingibst, wird er mit AES-256-GCM (256-Bit-Schlüssel, zufälliges 12-Byte-IV, PBKDF2 mit 600.000 SHA-256-Iterationen) verschlüsselt, bevor er in IndexedDB gespeichert wird. Der Klartextschlüssel wird nie auf die Festplatte oder localStorage geschrieben.
- KI-Anfragen: Nur der explizit von dir übermittelte Text (z. B. eine ausgewählte Passage für „Text verbessern”) wird an deinen gewählten Anbieter gesendet. Die RAG-Pipeline läuft lokal; nur der fertig zusammengestellte Prompt wird über das Netzwerk übertragen.
- Content Security Policy: Der Web-Build enthält einen strengen CSP, der Inline-Skripte, beliebige Netzwerkanfragen und Localhost-Verbindungen blockiert (verhindert, dass eine kompromittierte Erweiterung über die Seite auf Ollama zugreift).
- Tauri-Desktop: Die Rust-Shell beschränkt Plugin-Berechtigungen auf das App-Datenverzeichnis. Beliebiger Dateisystemzugriff ist blockiert; das
dialog-Plugin erfordert Benutzerbestätigung für jeden Öffnungs-/Speichervorgang. - Kollaboration: Wenn Kollaboration aktiv ist, werden Yjs-Updates Ende-zu-Ende-verschlüsselt (AES-256-GCM + PBKDF2), bevor sie den Browser verlassen. Der Signaling-Server sieht nie Klartext-Dokumentinhalte.
- Abhängigkeitsprüfungen: OSV- und CodeQL-Scans laufen bei jedem CI-Push. Dependabot überwacht neue CVEs; Override-Pins in
pnpm.overrides werden genutzt, wenn eine gepatchte Version noch nicht im Upstream verfügbar ist.
",
+ "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.
- Kein Konto erforderlich: Es gibt keine Anmeldung, keine Cloud-Synchronisierung und keinen Server, auf dem deine Manuskripte gespeichert werden. Alle Daten bleiben auf deinem Gerät: im Browser/PWA-Build in IndexedDB und OPFS deines Browsers, im Tauri-Desktop-Build als lokale Dateien im Datenverzeichnis der App.
- API-Schlüsselschutz: Browser/PWA-API-Schlüssel sind mit AES-256-GCM in IndexedDB geschützt (zufälliger, nicht extrahierbarer Schlüssel). Der Schutz von Desktop-API-Schlüsseln folgt dem Desktop-Speicher-Lebenszyklus; Details zum Browser-Speicher gelten nicht automatisch für Desktop-Dateien.
- KI-Anfragen: Nur der explizit von dir übermittelte Text (z. B. eine ausgewählte Passage für „Text verbessern”) wird an deinen gewählten Anbieter gesendet. Die RAG-Pipeline läuft lokal; nur der fertig zusammengestellte Prompt wird über das Netzwerk übertragen.
- Content Security Policy: Der Web-Build enthält einen strengen CSP, der Inline-Skripte, beliebige Netzwerkanfragen und Localhost-Verbindungen blockiert (verhindert, dass eine kompromittierte Erweiterung über die Seite auf Ollama zugreift).
- Tauri-Desktop: Die Rust-Shell beschränkt Plugin-Berechtigungen auf das App-Datenverzeichnis. Beliebiger Dateisystemzugriff ist blockiert; das
dialog-Plugin erfordert Benutzerbestätigung für jeden Öffnungs-/Speichervorgang. - Kollaboration: Wenn Kollaboration aktiv ist, werden Yjs-Updates Ende-zu-Ende-verschlüsselt (AES-256-GCM + PBKDF2), bevor sie den Browser verlassen. Der Signaling-Server sieht nie Klartext-Dokumentinhalte.
- Abhängigkeitsprüfungen: OSV- und CodeQL-Scans laufen bei jedem CI-Push. Dependabot überwacht neue CVEs; Override-Pins in
pnpm.overrides werden genutzt, wenn eine gepatchte Version noch nicht im Upstream verfügbar ist.
",
"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)
- Installieren: In Chrome, Edge oder Safari auf den „Installieren“-Prompt klicken. Das App-Symbol erscheint auf dem Desktop oder Startbildschirm.
- Offline-Shell-Cache: Der Service Worker cacht die App-Shell vorab – Oberfläche lädt sofort, auch offline. Nur Cloud-KI-Anfragen benötigen Netzwerk.
- Speicher: Daten in IndexedDB und OPFS – dauerhaft, bei normalen Cache-Bereinigungen nicht gelöscht.
- Icons: PWA-Manifest mit 192×192- und 512×512-maskierbaren PNG-Icons für Android und Windows.
Tauri-Desktop-App
- Mehrwert: Nativer Dateisystemzugriff, Ollama auf localhost, Fensterzustand-Persistenz, Datei/Hilfe-Menüleiste und optionales Updater-Banner unter Einstellungen → Über.
- Enthaltene Rust-Plugins:
fs, dialog, http, shell, updater, plus optional menu, tray, window-state. - Datenordner: Einstellungen → Daten → Datenordner öffnen zeigt den OS-Pfad für IndexedDB- und OPFS-Daten.
- Installationspakete: Vom Tauri-CI-Workflow erstellt: macOS (.dmg), Windows (.msi), Linux (.AppImage / .deb).
",
"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.
- Index aufbauen: Einstellungen → Erweiterte KI → Lokalen Suchindex neu aufbauen. WorldScript zerlegt das Manuskript in ~200-Token-Chunks und kodiert jeden mit MiniLM-L6-v2 (384-dim Embeddings) lokal über Transformers.js.
- Hybridsuche: Semantische Kosinusähnlichkeit (~60 %), lexikalische Schlüsselwortüberschneidung (~30 %) und Aktualität (spätere Kapitel bevorzugt, ~10 %) – die Top-K-Passagen werden ausgewählt.
- Prompt-Zusammenstellung:
assembleRAGPrompt() erstellt einen token-budgetierten Kontext-Block und stellt ihn dem Prompt voran. Das Chunk-Badge im Writer zeigt die Anzahl injizierter Passagen. - Einsatzbereiche: Weiterschreiben, Brainstormen, KI-Kritik und Plot-Board-„Beat vorschlagen“ nutzen dieselbe Pipeline bei aktiviertem RAG.
- Neuaufbau-Auslöser: Nach Backup-Import oder vielen neuen Figuren/Welteinträgen, oder wenn KI-Ergebnisse die Story-Details nicht kennen.
- Datenschutz: Der Index liegt im Browser-OPFS. Manuskripttext wird nie hochgeladen – nur der fertige Prompt geht an den Cloud-Anbieter.
",
"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
- Nativer Dateisystemzugriff: Dateien direkt über das Tauri-
fs-Plugin lesen und schreiben – kein Browser-Dateidialog für jeden Vorgang. Logs werden in $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl geschrieben. - Ollama auf localhost: Browser-CSP blockiert
localhost-Verbindungen; die Desktop-App nicht. Verbinde einen lokal laufenden Ollama-Server unter localhost:11434 für vollständig private, kostenfreie Offline-KI-Inferenz. - Fensterzustand-Persistenz: Fenstergröße, -position und Maximierungsstatus werden bei jedem Start exakt wiederhergestellt (Tauri-
window-state-Plugin). - Native Menüleiste: Datei / Bearbeiten / Ansicht / Hilfe nach OS-Konventionen (macOS: Menü in der Toolbar; Windows/Linux: ins Fenster integriert).
- Auto-Updater: Das Tauri-
updater-Plugin prüft beim Start den GitHub-Releases-JSON-Endpunkt und zeigt unter Einstellungen → Über ein Banner, wenn eine neue Version verfügbar ist. „Update installieren“ lädt sie im Hintergrund herunter und wendet sie an. - Datenordner öffnen: Einstellungen → Daten → Datenordner öffnen öffnet den OS-Datei-Explorer am Verzeichnis, in dem IndexedDB- und OPFS-Daten gespeichert sind – nützlich für manuelle Backups.
- Stronghold (optional): Das
tauri-plugin-stronghold kann die IDB-Verschlüsselungspassphrase im OS-Schlüsselbund speichern, sodass das Entsperr-Modal auf dem Desktop nie erscheint.
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
- Nativer Dateisystemzugriff: Dateien direkt über das Tauri-
fs-Plugin lesen und schreiben – kein Browser-Dateidialog für jeden Vorgang. Logs werden in $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl geschrieben. - Ollama auf localhost: Browser-CSP blockiert
localhost-Verbindungen; die Desktop-App nicht. Verbinde einen lokal laufenden Ollama-Server unter localhost:11434 für vollständig private, kostenfreie Offline-KI-Inferenz. - Fensterzustand-Persistenz: Fenstergröße, -position und Maximierungsstatus werden bei jedem Start exakt wiederhergestellt (Tauri-
window-state-Plugin). - Native Menüleiste: Datei / Bearbeiten / Ansicht / Hilfe nach OS-Konventionen (macOS: Menü in der Toolbar; Windows/Linux: ins Fenster integriert).
- Auto-Updater: Das Tauri-
updater-Plugin prüft beim Start den GitHub-Releases-JSON-Endpunkt und zeigt unter Einstellungen → Über ein Banner, wenn eine neue Version verfügbar ist. „Update installieren“ lädt sie im Hintergrund herunter und wendet sie an. - Datenordner öffnen: Einstellungen → Daten → Datenordner öffnen öffnet den OS-Datei-Explorer am Verzeichnis, in dem IndexedDB- und OPFS-Daten gespeichert sind – nützlich für manuelle Backups.
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)
- Google Gemini (empfohlen – kostenlose Stufe verfügbar): Hol dir einen kostenlosen Schlüssel von Google AI Studio. Gib ihn unter Einstellungen → KI-Modelle → Gemini-API-Schlüssel ein. Empfohlene Modelle:
gemini-2.5-flash für den täglichen Gebrauch, gemini-2.5-pro für komplexe Aufgaben. - OpenAI: GPT-4o und GPT-4o-mini. Hol dir einen Schlüssel von platform.openai.com. Gib ihn unter Einstellungen → KI-Modelle → OpenAI-Schlüssel ein. Stark bei Anweisungsfolgen und Prosaüberarbeitung.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6 und Haiku 4.5. Schlüssel über console.anthropic.com. Gib ihn unter Einstellungen → KI-Modelle → Anthropic-Schlüssel ein. Ausgezeichnet für lange Erzählungen und differenzierte Tonlage. Nativ auf dem Desktop; im Web über einen Serverless-Proxy weitergeleitet (Vercel/Cloudflare Pages), nicht verfügbar auf GitHub Pages.
- Grok (xAI):
grok-3 und grok-3-mini. Schlüssel aus dem xAI-Entwicklerportal. Gib ihn unter Einstellungen → KI-Modelle → xAI-Schlüssel ein. Wettbewerbsfähig bei kreativen Aufgaben mit geringeren Kosten pro Token als GPT-4. - OpenRouter: Ein einheitliches Gateway zu DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B und mehr. Kostenloser Schlüssel unter openrouter.ai/keys; Modelle mit Suffix
:free kosten nichts.
Lokale Anbieter (kein API-Schlüssel erforderlich)
- WebLLM (Browser, GPU): Führt quantisierte LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) direkt im Browser über WebGPU aus. Lade ein Modell unter Einstellungen → Erweiterte KI → Lokale KI-Modelle herunter. Nach dem Download läuft die Inferenz vollständig offline und kostenlos.
- ONNX Runtime Web (Browser, CPU): WASM-basierte Inferenz ohne GPU. Funktioniert auf jedem Gerät; langsamer als WebLLM, aber für kurze Vervollständigungen und Klassifizierungsaufgaben geeignet.
- Transformers.js: Führt das lokale RAG-Einbettungsmodell automatisch im Hintergrund aus. Keine Konfiguration nötig – es startet, wenn RAG-Kontext aktiviert ist.
- Ollama: Verbindet sich mit einem lokal laufenden Ollama-Server unter
localhost:11434. Läuft nativ in der Desktop-App. Führe ollama pull llama3.2 aus, um loszulegen. Null API-Kosten, vollständig privat, unterstützt jedes Ollama-kompatible Modell einschließlich LoRA-Adapter. Im Web/PWA-Build standardmäßig nur auf dem Desktop – ein Opt-in-Flag Browser-Ollama-Verbindung (Einstellungen → Experimentell) erlaubt eine direkte Browser-Verbindung, wenn du deinen eigenen Server mit OLLAMA_ORIGINS für diesen Origin konfigurierst.
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)
- Google Gemini (empfohlen – kostenlose Stufe verfügbar): Hol dir einen kostenlosen Schlüssel von Google AI Studio. Gib ihn unter Einstellungen → KI-Modelle → Gemini-API-Schlüssel ein. Empfohlene Modelle:
gemini-2.5-flash für den täglichen Gebrauch, gemini-2.5-pro für komplexe Aufgaben. - OpenAI: GPT-4o und GPT-4o-mini. Hol dir einen Schlüssel von platform.openai.com. Gib ihn unter Einstellungen → KI-Modelle → OpenAI-Schlüssel ein. Stark bei Anweisungsfolgen und Prosaüberarbeitung.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6 und Haiku 4.5. Schlüssel über console.anthropic.com. Gib ihn unter Einstellungen → KI-Modelle → Anthropic-Schlüssel ein. Ausgezeichnet für lange Erzählungen und differenzierte Tonlage. Nativ auf dem Desktop; im Web über einen Serverless-Proxy weitergeleitet (Vercel/Cloudflare Pages), nicht verfügbar auf GitHub Pages.
- Grok (xAI):
grok-3 und grok-3-mini. Schlüssel aus dem xAI-Entwicklerportal. Gib ihn unter Einstellungen → KI-Modelle → xAI-Schlüssel ein. Wettbewerbsfähig bei kreativen Aufgaben mit geringeren Kosten pro Token als GPT-4. - OpenRouter: Ein einheitliches Gateway zu DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B und mehr. Kostenloser Schlüssel unter openrouter.ai/keys; Modelle mit Suffix
:free kosten nichts.
Lokale Anbieter (kein API-Schlüssel erforderlich)
- WebLLM (Browser, GPU): Führt quantisierte LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) direkt im Browser über WebGPU aus. Lade ein Modell unter Einstellungen → Erweiterte KI → Lokale KI-Modelle herunter. Nach dem Download läuft die Inferenz vollständig offline und kostenlos.
- ONNX Runtime Web (Browser, CPU): WASM-basierte Inferenz ohne GPU. Funktioniert auf jedem Gerät; langsamer als WebLLM, aber für kurze Vervollständigungen und Klassifizierungsaufgaben geeignet.
- Transformers.js: Führt das lokale RAG-Einbettungsmodell automatisch im Hintergrund aus. Keine Konfiguration nötig – es startet, wenn RAG-Kontext aktiviert ist.
- Ollama: Verbindet sich mit einem lokal laufenden Ollama-Server unter
localhost:11434. Läuft nativ in der Desktop-App. Führe ollama pull llama3.2 aus, um loszulegen. Null API-Kosten, vollständig privat, unterstützt jedes Ollama-kompatible Modell einschließlich LoRA-Adapter. Im Web/PWA-Build standardmäßig nur auf dem Desktop – ein Opt-in-Flag Browser-Ollama-Verbindung (Einstellungen → Experimentell) erlaubt eine direkte Browser-Verbindung, wenn du deinen eigenen Server mit OLLAMA_ORIGINS für diesen Origin konfigurierst.
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.
- Immer offline verfügbar: Schreiben, Plot Board, Figuren- und Weltbearbeitung, Snapshot-Erstellung und -Wiederherstellung, Export in PDF / Markdown / TXT, alle Einstellungen.
- Benötigt Netzwerk: Cloud-KI-Anbieter (Gemini, OpenAI, Anthropic, Grok) senden deine Anfrage über das Internet. Das Schreiben wird nie blockiert – nur KI-Funktionen geben einen Fehler zurück.
- Lokale Modelle vorab laden: Gehe zu Einstellungen → Erweiterte KI → Lokale KI-Modelle und lade ein Modell herunter. Nach dem Caching läuft die Inferenz vollständig offline.
- PWA-Shell-Cache: Installiere WorldScript als PWA (Browser-„Installieren“-Prompt), um die App-Shell per Service Worker zu cachen. Folgeladungen funktionieren dann offline.
- OPFS-Speicher: DuckDB-Analytics und das lokale Einbettungsmodell nutzen das Origin Private File System (OPFS) – ein dauerhafter, abgeschirmter Bereich, der bei normalen Cache-Bereinigungen nicht gelöscht wird.
",
"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)
- Manuskripte, Charaktere und Weltaufbau – werden nie irgendwohin übertragen, außer wenn du eine bestimmte Passage ausdrücklich zur Verarbeitung an einen KI-Anbieter sendest.
- API-Schlüssel – im Ruhezustand mit AES-256-GCM (PBKDF2, 600.000 SHA-256-Iterationen) verschlüsselt, bevor sie in IndexedDB gespeichert werden. Der Klartextschlüssel wird nie auf die Festplatte geschrieben, nie in localStorage gespeichert und nie an einen WorldScript-Server gesendet.
- Snapshots und Backups – vollständig in der IndexedDB deines Browsers gespeichert. Exportierte JSON-Dateien gehen direkt in deinen Download-Ordner.
- RAG-Index und DuckDB-Analysen – Manuskriptblöcke, Vektoreinbettungen und Analysedaten liegen alle im OPFS deines Browsers. Nur der fertig zusammengestellte Prompt wird an einen Anbieter gesendet.
Was dein Gerät verlässt (nur wenn du es wählst)
- Cloud-KI-Anfragen: Wenn du Gemini, OpenAI, Anthropic oder Grok verwendest, wird nur der Text gesendet, den du für diese Aktion explizit eingereicht hast. WorldScript fügt keine versteckten Telemetriedaten hinzu.
- Datenpolitik der Anbieter: Jeder Anbieter hat eigene Aufbewahrungsbedingungen. Google-Gemini-API-Anfragen werden standardmäßig nicht zum Training von Google-Modellen verwendet. Prüfe die Entwicklerbedingungen deines gewählten Anbieters.
- Kollaboration (nur Opt-in): Wenn du die P2P-Kollaboration aktivierst, werden Yjs-Dokumentupdates Ende-zu-Ende-verschlüsselt (AES-256-GCM + PBKDF2), bevor sie den Browser verlassen. Der Signaling-Server koordiniert Verbindungen, sieht aber nie den Inhalt deines Manuskripts.
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)
- Manuskripte, Charaktere und Weltaufbau – werden nie irgendwohin übertragen, außer wenn du eine bestimmte Passage ausdrücklich zur Verarbeitung an einen KI-Anbieter sendest.
- API-Schlüssel – 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 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.)
- Snapshots und Backups – im Browser/PWA-Build vollständig in der IndexedDB deines Browsers gespeichert, im Tauri-Desktop-Build als lokale JSON-Dateien im Datenverzeichnis der App. Exportierte JSON-Dateien gehen direkt in deinen Download-Ordner.
- RAG-Index und DuckDB-Analysen – Manuskriptblöcke, Vektoreinbettungen und Analysedaten liegen alle im OPFS deines Browsers. Nur der fertig zusammengestellte Prompt wird an einen Anbieter gesendet.
Was dein Gerät verlässt (nur wenn du es wählst)
- Cloud-KI-Anfragen: Wenn du Gemini, OpenAI, Anthropic oder Grok verwendest, wird nur der Text gesendet, den du für diese Aktion explizit eingereicht hast. WorldScript fügt keine versteckten Telemetriedaten hinzu.
- Datenpolitik der Anbieter: Jeder Anbieter hat eigene Aufbewahrungsbedingungen. Google-Gemini-API-Anfragen werden standardmäßig nicht zum Training von Google-Modellen verwendet. Prüfe die Entwicklerbedingungen deines gewählten Anbieters.
- Kollaboration (nur Opt-in): Wenn du die P2P-Kollaboration aktivierst, werden Yjs-Dokumentupdates Ende-zu-Ende-verschlüsselt (AES-256-GCM + PBKDF2), bevor sie den Browser verlassen. Der Signaling-Server koordiniert Verbindungen, sieht aber nie den Inhalt deines Manuskripts.
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.
- Google Gemini (Cloud): Standard-Anbieter. Gemini Flash ist schnell und Free-Tier-freundlich; Gemini Pro bietet höhere Qualität. Kostenloser API-Schlüssel aus Google AI Studio.
- OpenAI (Cloud): GPT-4o und GPT-4o-mini per API-Schlüssel. Stark bei Anweisungsfolgen und Prosaüberarbeitung. Für OpenAI-Nutzer empfohlen.
- Ollama (lokal – nur Desktop): Führt Modelle auf deiner Maschine via
localhost:11434 aus. Erfordert die Tauri-Desktop-App. Beste Wahl für maximale Privatsphäre ohne API-Kosten. - WebLLM (lokal – Browser): GPU-Inferenz direkt im Browser; kein Server, kein API-Schlüssel. Modelle werden einmal heruntergeladen und gecacht. Ideal für Privatsphäre ohne Desktop-App.
- Hybrid-Fallback: Aktiviere unter Einstellungen → Erweiterte KI, um Anbieter automatisch zu verketten – z. B. erst Gemini, dann Ollama bei Fehler.
",
"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.
- Funktioniert auf jedem Gerät – Desktop, Laptop, Tablet und Telefon.
- Immer aktuell – der Service Worker ruft Updates im Hintergrund ab; eine Benachrichtigung erscheint, wenn eine neue Version bereit ist.
- Offline-fähig – Schreiben, Plot-Board, Charaktere, Versionskontrolle und Export funktionieren ohne Internet. Nur Cloud-KI-Anbieter (Gemini, OpenAI usw.) benötigen eine Verbindung.
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.
- Öffnet sich in einem eigenen Fenster – keine Tabs oder Adressleiste sichtbar.
- Identische Funktionen und dieselben IndexedDB-Daten wie der Browser-Tab.
- Offline-Shell vom Service Worker gecacht – öffnet sich auch ohne Internet sofort.
- Installationsstatus unter Einstellungen → Allgemein mit grünem Häkchen.
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.
- Nativer Dateisystemzugriff – Dateien direkt lesen und schreiben, ohne Dateiauswahl für jeden Vorgang.
- Ollama auf localhost – Browser-CSP blockiert Localhost-Verbindungen; die Desktop-App nicht. Verbinde einen lokal laufenden Ollama-Server unter
localhost:11434 für vollständig private, kostenfreie Offline-KI-Inferenz. - Fensterzustand-Persistenz – Größe, Position und Maximierungsstatus werden bei jedem Start genau wiederhergestellt.
- Auto-Updater – ein Banner unter Einstellungen → Info informiert dich über neue Versionen und installiert sie im Hintergrund.
- Datenordner öffnen – Einstellungen → Daten → Datenordner öffnen zeigt den genauen OS-Pfad deiner gespeicherten Daten – praktisch für manuelle Backups.
- Installer – .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), verfügbar über GitHub Releases.
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.
- Funktioniert auf jedem Gerät – Desktop, Laptop, Tablet und Telefon.
- Immer aktuell – der Service Worker ruft Updates im Hintergrund ab; eine Benachrichtigung erscheint, wenn eine neue Version bereit ist.
- Offline-fähig – Schreiben, Plot-Board, Charaktere, Versionskontrolle und Export funktionieren ohne Internet. Nur Cloud-KI-Anbieter (Gemini, OpenAI usw.) benötigen eine Verbindung.
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.
- Öffnet sich in einem eigenen Fenster – keine Tabs oder Adressleiste sichtbar.
- Identische Funktionen und dieselben IndexedDB-Daten wie der Browser-Tab.
- Offline-Shell vom Service Worker gecacht – öffnet sich auch ohne Internet sofort.
- Installationsstatus unter Einstellungen → Allgemein mit grünem Häkchen.
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.
- Nativer Dateisystemzugriff – Dateien direkt lesen und schreiben, ohne Dateiauswahl für jeden Vorgang.
- Ollama auf localhost – Browser-CSP blockiert Localhost-Verbindungen; die Desktop-App nicht. Verbinde einen lokal laufenden Ollama-Server unter
localhost:11434 für vollständig private, kostenfreie Offline-KI-Inferenz. - Fensterzustand-Persistenz – Größe, Position und Maximierungsstatus werden bei jedem Start genau wiederhergestellt.
- Auto-Updater – ein Banner unter Einstellungen → Info informiert dich über neue Versionen und installiert sie im Hintergrund.
- Datenordner öffnen – Einstellungen → Daten → Datenordner öffnen zeigt den genauen OS-Pfad deiner gespeicherten Daten – praktisch für manuelle Backups.
- Installer – .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), verfügbar über GitHub Releases.
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:
- 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.
- 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.
- 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.
- Building the index: Go to Ρυθμίσεις → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Συνέχεια Writing, Brainstorm, AI Critic, and Πίνακας Πλοκής \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Χειρόγραφο text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Επεξεργασία / View / Βοήθεια menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Ρυθμίσεις → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Ρυθμίσεις → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Επεξεργασία / View / Βοήθεια menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Ρυθμίσεις → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Ρυθμίσεις → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (συνιστάται — διαθέσιμο δωρεάν επίπεδο): Λάβετε ένα δωρεάν κλειδί από το Google. Εισαγάγετε το στην περιοχή Ρυθμίσεις → Μοντέλα AI → Πλήκτρο API Gemini. Προτεινόμενα μοντέλα:
gemini-2.5-flash για καθημερινή χρήση, gemini-2.5-pro για σύνθετες εργασίες. - OpenAI: GPT-4o και GPT-4o-mini. Λάβετε ένα κλειδί από το platform.openai.com. Πληκτρολογήστε το στις Ρυθμίσεις → Μοντέλα AI → Πλήκτρο OpenAI. Ισχυρός στο να ακολουθεί τις οδηγίες και να ξαναγράφει πεζογραφία.
- Anthropic (Claude): Claude 3.5 Sonnet και Claude 3 Haiku. Λάβετε ένα κλειδί από το console.anthropic.com. Εισαγάγετε το στην περιοχή Ρυθμίσεις → Μοντέλα AI → Anthropic key. Εξαιρετικό για αφήγηση μεγάλης μορφής και αποχρώσεις.
- Grok (xAI): Grok-2. Λάβετε ένα κλειδί από την πύλη προγραμματιστών xAI. Εισαγάγετε το στην περιοχή Ρυθμίσεις → Μοντέλα AI → Πλήκτρο xAI. Ανταγωνιστικό σε δημιουργικές εργασίες με χαμηλότερο κόστος ανά διακριτικό από το GPT-4.
Τοπικοί πάροχοι (δεν απαιτείται κλειδί API)
- WebLLM (πρόγραμμα περιήγησης, GPU): Εκτελεί κβαντισμένα LLM (Llama 3.2, Phi-3.5 Mini, Gemma Via στο Web2) Κάντε λήψη ενός μοντέλου στην ενότητα Ρυθμίσεις → Προηγμένο AI → Τοπικά μοντέλα AI. Μετά τη λήψη, το συμπέρασμα εκτελείται πλήρως εκτός σύνδεσης με μηδενικό κόστος.
- ONNX Runtime Web (πρόγραμμα περιήγησης, CPU): Συμπεράσματα βάσει WASM χωρίς GPU. Λειτουργεί σε οποιαδήποτε συσκευή. πιο αργό από το WebLLM, αλλά κατάλληλο για σύντομες ολοκληρώσεις και εργασίες ταξινόμησης.
- Transformers.js: Εκτελεί αυτόματα το τοπικό μοντέλο ενσωμάτωσης RAG στο παρασκήνιο. Δεν απαιτείται διαμόρφωση — ξεκινά όταν είναι ενεργοποιημένο το περιβάλλον RAG.
- Ollama (μόνο εφαρμογή για επιτραπέζιους υπολογιστές): Συνδέεται σε έναν διακομιστή Ollama που εκτελείται τοπικά στη διεύθυνση
localhost:11434. Απαιτεί την εφαρμογή επιφάνειας εργασίας Tauri. Εκτελέστε το olama pull llama3.2 για να ξεκινήσετε. Το μηδενικό κόστος API, πλήρως ιδιωτικό, υποστηρίζει οποιοδήποτε μοντέλο συμβατό με το Ollama, συμπεριλαμβανομένων των προσαρμογέων LoRA.
Ασφάλεια κλειδιού
Κάθε κλειδί 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.
- Trigger: Open the Plot Board (enable Plot Board v2 in feature flags first). Click the AI ✦ button in the Plot Board toolbar to open the suggestion panel.
- How it works: WorldScript assembles a RAG-enriched prompt from your recent manuscript sections, existing beat cards, and your project outline. This context is sent to your configured AI provider.
- Output: The AI returns a suggested beat title, a short description, and a recommended act placement. A preview card appears in the panel with Accept and Reject buttons.
- Accept: Clicking Accept creates the beat card on the board in the suggested act column. You can drag it to reposition or edit the title inline.
- Multiple suggestions: Click Suggest again to get an alternative without accepting the first. Both suggestions appear side-by-side for comparison.
- Best results: Works best when your manuscript has at least 500 words and existing beat cards have descriptive titles. Enable RAG context in Settings → Advanced AI for richer retrieval.
",
"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
- Google Gemini (default): Fast, generous free tier. Get a free API key from Google AI Studio. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex generation tasks. - OpenAI: GPT-4o and GPT-4o-mini. Enter your OpenAI API key in Settings → AI → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6, and Haiku 4.5. Enter your API key from console.anthropic.com. Excellent for long-form narrative and nuanced tone. Works natively in the desktop app; on the web it's relayed through WorldScript's own serverless proxy on Vercel/Cloudflare Pages deployments (unavailable on the static GitHub Pages mirror) — see Settings → AI for the exact status on your deployment.
- Grok (xAI):
grok-3 and grok-3-mini. Enter your key from the xAI developer portal. Competitive on creative tasks with a lower cost per token than GPT-4. - OpenRouter: A unified gateway to DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B, and hundreds more. Sign up for a free key at openrouter.ai/keys — models with a
:free suffix cost nothing. A circuit breaker automatically pauses OpenRouter after repeated rate-limit errors and retries a few minutes later.
Local / Self-Hosted Providers
- Ollama (local): Runs models on your machine via
http://localhost:11434. Install Ollama and run ollama pull llama3.2 to get started. The desktop app connects natively — no setup needed, browsers can't reach localhost across origins by default (CORS, not CSP). The web/PWA build is desktop-only by default; an opt-in Browser-Ollama connection flag under Settings → Experimental lets the browser connect directly if you start your own server with OLLAMA_ORIGINS covering this page's exact origin (shown in Settings once the flag is on) — advanced and unsupported, same real-CORS model NovelCrafter uses. Supports any Ollama-compatible model including fine-tuned LoRA adapters. - WebLLM (browser, GPU): Runs quantized LLMs in the browser via WebGPU — no API key, no internet required after first download. Supported models: Llama 3.2 1B/3B, Phi-3.5 Mini, Gemma 2 2B. Requires a WebGPU-capable GPU (~2–6 GB VRAM). Download a model under Settings → Advanced AI → Local AI models.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Slower than WebLLM but works on any device. Good for short completions and classification tasks.
- Transformers.js (automatic): Powers the local embedding model used by the hybrid RAG index (MiniLM-L6-v2, 384 dimensions). Runs automatically — no configuration needed.
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
- Google Gemini (default): Fast, generous free tier. Get a free API key from Google AI Studio. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex generation tasks. - OpenAI: GPT-4o and GPT-4o-mini. Enter your OpenAI API key in Settings → AI → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6, and Haiku 4.5. Enter your API key from console.anthropic.com. Excellent for long-form narrative and nuanced tone. Works natively in the desktop app; on the web it's relayed through WorldScript's own serverless proxy on Vercel/Cloudflare Pages deployments (unavailable on the static GitHub Pages mirror) — see Settings → AI for the exact status on your deployment.
- Grok (xAI):
grok-3 and grok-3-mini. Enter your key from the xAI developer portal. Competitive on creative tasks with a lower cost per token than GPT-4. - OpenRouter: A unified gateway to DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B, and hundreds more. Sign up for a free key at openrouter.ai/keys — models with a
:free suffix cost nothing. A circuit breaker automatically pauses OpenRouter after repeated rate-limit errors and retries a few minutes later.
Local / Self-Hosted Providers
- Ollama (local): Runs models on your machine via
http://localhost:11434. Install Ollama and run ollama pull llama3.2 to get started. The desktop app connects natively — no setup needed, browsers can't reach localhost across origins by default (CORS, not CSP). The web/PWA build is desktop-only by default; an opt-in Browser-Ollama connection flag under Settings → Experimental lets the browser connect directly if you start your own server with OLLAMA_ORIGINS covering this page's exact origin (shown in Settings once the flag is on) — advanced and unsupported, same real-CORS model NovelCrafter uses. Supports any Ollama-compatible model including fine-tuned LoRA adapters. - WebLLM (browser, GPU): Runs quantized LLMs in the browser via WebGPU — no API key, no internet required after first download. Supported models: Llama 3.2 1B/3B, Phi-3.5 Mini, Gemma 2 2B. Requires a WebGPU-capable GPU (~2–6 GB VRAM). Download a model under Settings → Advanced AI → Local AI models.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Slower than WebLLM but works on any device. Good for short completions and classification tasks.
- Transformers.js (automatic): Powers the local embedding model used by the hybrid RAG index (MiniLM-L6-v2, 384 dimensions). Runs automatically — no configuration needed.
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%).
- Build the index under Settings → Advanced AI → Rebuild local search index (requires the local embedding model on capable devices).
- Open the AI Writing Studio, enable RAG context, and run Continue, Brainstorm, or Critic.
- 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.
- Views: Every view is wrapped in
React.lazy() with a Suspense boundary. The view bundle downloads the first time you navigate to it; subsequent visits use the browser cache. - Vite manual chunks: The build splits vendor code into named chunks:
vendor-react, vendor-redux, plot-board (canvas + SVG), export-docx (docx/jsPDF/jszip), collab-yjs (Yjs + y-webrtc). These download only when you first open their respective view. - AI provider layer:
services/ai/index.ts is dynamically imported the first time an AI tool is used. The Vercel AI SDK and provider adapters (~200 KB gzipped) are not bundled in the entry chunk. - DuckDB & RAG: The DuckDB listener and local embedding model are loaded by the Redux listener middleware only when their feature flags are on. They do not contribute to cold-start bundle size.
- Force graph:
react-force-graph-2d is lazy-imported only when you navigate to the Character Graph and have at least one character — the empty-state view loads without triggering the import. - Bundle budget: The CI
bundle:budget job enforces a maximum of 7 000 KB for the vendor chunk and 4 500 KB for the entry chunk. PRs that exceed these limits fail the build.
",
"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.
- No account required: There is no sign-up, no cloud sync, and no server that stores your manuscripts. All data lives in your browser's IndexedDB and OPFS.
- API key protection: Browser/PWA API keys are AES-256-GCM protected in IndexedDB. Desktop API-key protection follows the desktop storage lifecycle; do not assume browser storage details apply to desktop files.
- AI requests: Only the text you explicitly submit (e.g. a selected passage for \"Improve Text\") is sent to your chosen provider. The RAG pipeline runs locally; only the final assembled prompt travels over the network.
- Content Security Policy: The web build includes a strict CSP that blocks inline scripts, arbitrary network requests, and localhost connections (preventing a compromised extension from accessing Ollama via the page).
- Tauri desktop: The Rust shell restricts plugin permissions to the app data directory. Arbitrary filesystem access is blocked; the
dialog plugin requires user confirmation for every open/save operation. - Collaboration: When Collaboration is enabled, Yjs updates are end-to-end encrypted (AES-256-GCM + PBKDF2) before leaving the browser. The signaling server never sees plaintext document content.
- Dependency audits: OSV + CodeQL scanning runs on every CI push. Dependabot watches for new CVEs; override pins in
pnpm.overrides are used when a patched version is not yet available upstream.
",
+ "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.
- No account required: There is no sign-up, no cloud sync, and no server that stores 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.
- API key protection: Browser/PWA API keys are AES-256-GCM protected in IndexedDB. Desktop API-key protection follows the desktop storage lifecycle; do not assume browser storage details apply to desktop files.
- AI requests: Only the text you explicitly submit (e.g. a selected passage for \"Improve Text\") is sent to your chosen provider. The RAG pipeline runs locally; only the final assembled prompt travels over the network.
- Content Security Policy: The web build includes a strict CSP that blocks inline scripts, arbitrary network requests, and localhost connections (preventing a compromised extension from accessing Ollama via the page).
- Tauri desktop: The Rust shell restricts plugin permissions to the app data directory. Arbitrary filesystem access is blocked; the
dialog plugin requires user confirmation for every open/save operation. - Collaboration: When Collaboration is enabled, Yjs updates are end-to-end encrypted (AES-256-GCM + PBKDF2) before leaving the browser. The signaling server never sees plaintext document content.
- Dependency audits: OSV + CodeQL scanning runs on every CI push. Dependabot watches for new CVEs; override pins in
pnpm.overrides are used when a patched version is not yet available upstream.
",
"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)
- Install: Visit the web app in Chrome, Edge, or Safari and click the \"Install\" prompt in the address bar. The app icon appears on your desktop or home screen.
- Offline shell cache: The Service Worker pre-caches the app shell (HTML, CSS, JS entry chunks) so the interface loads instantly, even offline. Only cloud AI requests need a network connection.
- Storage: Data lives in IndexedDB and OPFS — persistent, sandboxed, and not cleared by normal browser cache clears.
- Icons: The PWA manifest includes 192×192 and 512×512 maskable PNG icons used by Android and Windows for the installed app shortcut.
Tauri desktop app
- What it adds: Native filesystem access, Ollama on localhost, window-state persistence (size, position), a File/Help menu bar, and an optional auto-updater banner under Settings → About.
- Rust plugins bundled:
fs, dialog, http, shell, updater, plus optional menu, tray, and window-state. - Data folder: On the desktop app, Settings → Data → Open data folder reveals the OS path where all IndexedDB and OPFS data is stored — safe to back up manually.
- Installers: Built by the Tauri CI workflow on tagged releases. Available for macOS (.dmg), Windows (.msi), and Linux (.AppImage / .deb).
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Local AI servers (Ollama, LM Studio, vLLM): Browsers block direct
localhost connections (CSP + Private Network Access); the desktop app routes these calls through the native Tauri HTTP stack — no proxy and no OLLAMA_ORIGINS setup needed. Use Settings → AI → Scan common local ports to auto-detect servers at localhost:11434 (Ollama), :1234 (LM Studio) and :8000 (vLLM), then adopt a found URL with one click. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6, and Haiku 4.5. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone. Native on desktop; relayed through a serverless proxy on the web (Vercel/Cloudflare Pages), unavailable on GitHub Pages.
- Grok (xAI):
grok-3 and grok-3-mini. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4. - OpenRouter: A unified gateway to DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B, and more. Free key at openrouter.ai/keys;
:free-suffixed models cost nothing.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama: Connects to a locally-running Ollama server at
localhost:11434. Works natively in the desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters. In the web/PWA build it's desktop-only by default — an opt-in Browser-Ollama connection flag (Settings → Experimental) lets the browser connect directly if you configure your own server's OLLAMA_ORIGINS for this page's origin.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6, and Haiku 4.5. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone. Native on desktop; relayed through a serverless proxy on the web (Vercel/Cloudflare Pages), unavailable on GitHub Pages.
- Grok (xAI):
grok-3 and grok-3-mini. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4. - OpenRouter: A unified gateway to DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B, and more. Free key at openrouter.ai/keys;
:free-suffixed models cost nothing.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama: Connects to a locally-running Ollama server at
localhost:11434. Works natively in the desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters. In the web/PWA build it's desktop-only by default — an opt-in Browser-Ollama connection flag (Settings → Experimental) lets the browser connect directly if you configure your own server's OLLAMA_ORIGINS for this page's origin.
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.
- Always available offline: Writing, the Plot Board, character and world editing, snapshot creation and restore, Export to PDF / Markdown / TXT, all Settings.
- Needs network: Cloud AI providers (Gemini, OpenAI, Anthropic, Grok) send your prompt over the internet. Writing is never blocked — only AI features return an error when offline.
- Pre-download local models: Go to Settings → Advanced AI → Local AI models and download a WebLLM or ONNX model while online. Once cached, inference runs fully offline.
- PWA shell cache: Install WorldScript as a PWA (browser \"Install\" prompt) to cache the app shell via the Service Worker. Subsequent loads work offline even without internet.
- OPFS storage: DuckDB analytics and the local embedding model use the browser Origin Private File System (OPFS) — a persistent, sandboxed area not cleared by normal cache-clearing actions.
",
"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)
- Manuscripts, characters, and world-building — never transmitted anywhere unless you explicitly send a specific passage to an AI provider for processing.
- API keys — Browser/PWA API keys are AES-256-GCM protected in IndexedDB. Desktop protection follows the desktop storage lifecycle; API keys are never sent to any WorldScript server.
- Snapshots and backups — stored entirely in your browser's IndexedDB. Exported JSON files go directly to your device's downloads folder.
- RAG index and DuckDB analytics — manuscript chunks, vector embeddings, and analytics data all live in your browser's OPFS. Only the final assembled prompt, not the raw index, is ever sent to a provider.
What leaves your device (only when you choose)
- Cloud AI requests: When you use Gemini, OpenAI, Anthropic, or Grok, only the text you explicitly submitted for that specific action is sent to the provider. WorldScript adds no hidden telemetry to these requests.
- AI provider data policies: Each provider has its own data-retention terms. Google Gemini API requests are not used to train Google's models by default. Check your chosen provider's developer terms for the current policy.
- Collaboration (opt-in only): If you enable P2P collaboration, Yjs document updates are end-to-end encrypted (AES-256-GCM + PBKDF2) before leaving the browser. The signaling server coordinates connections but never sees your manuscript content.
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)
- Manuscripts, characters, and world-building — never transmitted anywhere unless you explicitly send a specific passage to an AI provider for processing.
- API keys — Browser/PWA API keys are AES-256-GCM protected in IndexedDB. Desktop protection follows the desktop storage lifecycle; 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.)
- Snapshots and backups — stored entirely in your browser's IndexedDB on the Browser/PWA build, or in local JSON files under the app's data directory on the Tauri desktop build. Exported JSON files go directly to your device's downloads folder.
- RAG index and DuckDB analytics — manuscript chunks, vector embeddings, and analytics data all live in your browser's OPFS. Only the final assembled prompt, not the raw index, is ever sent to a provider.
What leaves your device (only when you choose)
- Cloud AI requests: When you use Gemini, OpenAI, Anthropic, or Grok, only the text you explicitly submitted for that specific action is sent to the provider. WorldScript adds no hidden telemetry to these requests.
- AI provider data policies: Each provider has its own data-retention terms. Google Gemini API requests are not used to train Google's models by default. Check your chosen provider's developer terms for the current policy.
- Collaboration (opt-in only): If you enable P2P collaboration, Yjs document updates are end-to-end encrypted (AES-256-GCM + PBKDF2) before leaving the browser. The signaling server coordinates connections but never sees your manuscript content.
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.
- Google Gemini (cloud): The default. Gemini Flash is fast and free-tier friendly; Gemini Pro gives higher quality. Requires a free API key from Google AI Studio. Best for: everyday writing assistance.
- OpenAI (cloud): GPT-4o and GPT-4o-mini via API key. Strong instruction-following and prose rewriting. Best for: users already on the OpenAI ecosystem.
- Ollama (local — desktop only): Runs models on your machine via
localhost:11434. Requires the Tauri desktop app (browsers block localhost connections); the Scan common local ports button in Settings → AI auto-detects Ollama, LM Studio and vLLM. Best for: maximum privacy and zero API cost with any Ollama-supported model. - WebLLM (local — browser): GPU inference directly in the browser; no server, no API key. Models are downloaded once and cached. Best for: privacy without the desktop app, fully offline after first download.
- Hybrid fallback: Enable under Settings → Advanced AI to chain providers automatically — e.g., try Gemini first, fall back to Ollama on error. Useful for resilient workflows.
",
"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.
- Works on any device — desktop, laptop, tablet, and phone.
- Always up to date — the Service Worker fetches updates in the background; a notification appears when a new version is ready.
- Offline capable — writing, Plot Board, characters, version control, and export all work without internet. Only cloud AI providers (Gemini, OpenAI, etc.) require a connection.
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.
- Opens in its own window — no browser tabs or address bar visible.
- Identical features and the same IndexedDB data as the browser tab.
- Offline shell cached by the Service Worker — opens instantly even with no internet.
- Install status shown in Settings → General with a green checkmark.
Desktop App (Tauri)
The optional Tauri v2 desktop app wraps WorldScript in a native Rust shell and adds capabilities that browsers cannot provide.
- Native filesystem access — read and write files directly without a file picker for every operation.
- Ollama on localhost — browser CSP blocks localhost connections; the desktop app does not. Connect a locally-running Ollama server at
localhost:11434 for fully private, zero-cost offline AI inference. - Window-state persistence — size, position, and maximized state are restored exactly on every launch.
- Auto-updater — a banner in Settings → About alerts you when a new version is available and installs it in the background.
- Open data folder — Settings → Data → Open data folder reveals the exact OS path where your data is stored, useful for manual backups.
- Installers — .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), available via GitHub Releases.
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.
- Works on any device — desktop, laptop, tablet, and phone.
- Always up to date — the Service Worker fetches updates in the background; a notification appears when a new version is ready.
- Offline capable — writing, Plot Board, characters, version control, and export all work without internet. Only cloud AI providers (Gemini, OpenAI, etc.) require a connection.
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.
- Opens in its own window — no browser tabs or address bar visible.
- Identical features and the same IndexedDB data as the browser tab.
- Offline shell cached by the Service Worker — opens instantly even with no internet.
- Install status shown in Settings → General with a green checkmark.
Desktop App (Tauri)
The optional Tauri v2 desktop app wraps WorldScript in a native Rust shell and adds capabilities that browsers cannot provide.
- Native filesystem access — read and write files directly without a file picker for every operation.
- Ollama on localhost — browser CSP blocks localhost connections; the desktop app does not. Connect a locally-running Ollama server at
localhost:11434 for fully private, zero-cost offline AI inference. - Window-state persistence — size, position, and maximized state are restored exactly on every launch.
- Auto-updater — a banner in Settings → About alerts you when a new version is available and installs it in the background.
- Open data folder — Settings → Data → Open data folder reveals the exact OS path where your data is stored, useful for manual backups.
- Installers — .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), available via GitHub Releases.
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:
- 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.
- 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.
- 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.
- Vistas: Cada vista está envuelta en
React.lazy() con un límite Suspense. El bundle se descarga la primera vez que la visitas; las siguientes usan la caché del navegador. - Vite manualChunks: El código vendor se divide en chunks con nombre:
vendor-react, vendor-redux, plot-board, export-docx, collab-yjs. Cada uno descarga solo al abrir su vista por primera vez. - Capa IA:
services/ai/index.ts se importa dinámicamente al usar la primera herramienta IA. El SDK Vercel AI (~200 KB comprimido) no está en el chunk de entrada. - DuckDB & RAG: El listener DuckDB y el modelo de embeddings local solo cargan si sus banderas están activas. El inicio en frío no se ve afectado.
- Force-graph:
react-force-graph-2d solo se importa al navegar al grafo de personajes con al menos un personaje creado. - Presupuesto de bundle: El job CI
bundle:budget impone un máximo de 7 000 KB para el chunk vendor y 4 500 KB para la entrada. Las PR que superen estos límites fallan el build.
",
"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.
- No se requiere cuenta: No hay registro, ni sincronización en la nube ni servidor que almacene sus manuscritos. Todos los datos residen en IndexedDB y OPFS de su navegador.
- Cifrado de clave API: cuando ingresa una clave API, se cifra con AES-256-GCM (clave de 256 bits, IV aleatoria de 12 bytes, PBKDF2 con 600 000 iteraciones SHA-256) antes de almacenarse en IndexedDB. La clave de texto sin formato nunca se escribe en el disco o en el almacenamiento local.
- Solicitudes de IA: solo el texto que envíe explícitamente (por ejemplo, un pasaje seleccionado para \"Mejorar texto\") se envía al proveedor elegido. El oleoducto RAG corre localmente; solo el mensaje final ensamblado viaja a través de la red.
- Política de seguridad de contenido: La compilación web incluye un CSP estricto que bloquea scripts en línea, solicitudes de red arbitrarias y conexiones de host local (evitando que una extensión comprometida acceda a Ollama a través de la página).
- Escritorio Tauri: El shell de Rust restringe los permisos del complemento al directorio de datos de la aplicación. El acceso arbitrario al sistema de archivos está bloqueado; el complemento
dialog requiere la confirmación del usuario para cada operación de abrir/guardar. - Colaboración: cuando la colaboración está habilitada, las actualizaciones de Yjs se cifran de extremo a extremo (AES-256-GCM + PBKDF2) antes de salir del navegador. El servidor de señalización nunca ve el contenido del documento en texto sin formato.
- Auditorías de dependencia: el escaneo OSV + CodeQL se ejecuta en cada inserción de CI. Dependabot busca nuevos CVE; Los pines de anulación en
pnpm.overrides se utilizan cuando una versión parcheada aún no está disponible en sentido ascendente.
",
+ "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.
- No se requiere cuenta: No hay registro, ni sincronización en la nube ni servidor que almacene sus manuscritos. Todos los datos permanecen en su dispositivo: en la compilación Navegador/PWA, en IndexedDB y OPFS de su navegador; en la compilación de escritorio Tauri, como archivos locales en el directorio de datos de la app.
- Protección de clave API: las claves API del navegador/PWA están protegidas con AES-256-GCM en IndexedDB (clave aleatoria no extraíble). La protección de las claves de escritorio sigue el ciclo de vida del almacenamiento de escritorio; los detalles del almacenamiento del navegador no aplican automáticamente a los archivos de escritorio.
- Solicitudes de IA: solo el texto que envíe explícitamente (por ejemplo, un pasaje seleccionado para \"Mejorar texto\") se envía al proveedor elegido. El oleoducto RAG corre localmente; solo el mensaje final ensamblado viaja a través de la red.
- Política de seguridad de contenido: La compilación web incluye un CSP estricto que bloquea scripts en línea, solicitudes de red arbitrarias y conexiones de host local (evitando que una extensión comprometida acceda a Ollama a través de la página).
- Escritorio Tauri: El shell de Rust restringe los permisos del complemento al directorio de datos de la aplicación. El acceso arbitrario al sistema de archivos está bloqueado; el complemento
dialog requiere la confirmación del usuario para cada operación de abrir/guardar. - Colaboración: cuando la colaboración está habilitada, las actualizaciones de Yjs se cifran de extremo a extremo (AES-256-GCM + PBKDF2) antes de salir del navegador. El servidor de señalización nunca ve el contenido del documento en texto sin formato.
- Auditorías de dependencia: el escaneo OSV + CodeQL se ejecuta en cada inserción de CI. Dependabot busca nuevos CVE; Los pines de anulación en
pnpm.overrides se utilizan cuando una versión parcheada aún no está disponible en sentido ascendente.
",
"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)
- Instalar: En Chrome, Edge o Safari, haz clic en la indicación «Instalar». El icono aparece en tu escritorio o pantalla de inicio.
- Caché del shell sin conexión: El Service Worker almacena en caché el shell de la app (HTML, CSS, JS) de antemano — la interfaz carga al instante, incluso sin conexión.
- Almacenamiento: Datos en IndexedDB y OPFS — persistentes, no borrados por limpiezas normales de caché.
- Iconos: El manifiesto PWA incluye iconos PNG enmascarables de 192×192 y 512×512 para Android y Windows.
App de escritorio Tauri
- Ventajas: Acceso nativo al sistema de archivos, Ollama en localhost, persistencia del estado de ventana, barra de menú Archivo/Ayuda y banner de actualizador opcional en Configuración → Acerca de.
- Plugins Rust incluidos:
fs, dialog, http, shell, updater, más opcionalmente menu, tray, window-state. - Carpeta de datos: Configuración → Datos → Abrir carpeta de datos revela la ruta del SO donde se almacenan los datos de IndexedDB y OPFS.
- Instaladores: Creados por el workflow CI de Tauri en las releases etiquetadas: macOS (.dmg), Windows (.msi), Linux (.AppImage / .deb).
",
"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
- Acceso nativo al sistema de archivos: Lee y escribe archivos directamente a través del plugin Tauri
fs — sin diálogo de archivo del navegador para cada operación. Los logs se escriben en $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama en localhost: El CSP del navegador bloquea las conexiones
localhost; la aplicación de escritorio no. Conecta un servidor Ollama local en localhost:11434 para inferencia IA offline, totalmente privada y gratuita. - Persistencia del estado de ventana: El tamaño, posición y estado de maximización de la ventana se restauran exactamente en cada inicio (plugin
window-state de Tauri). - Barra de menú nativa: Archivo / Editar / Ver / Ayuda según las convenciones del SO (macOS: menú en la barra de herramientas; Windows/Linux: integrado en la ventana).
- Actualización automática: El plugin
updater de Tauri verifica el endpoint JSON de releases de GitHub al inicio y muestra un banner en Configuración → Acerca de cuando hay una nueva versión disponible. - Abrir carpeta de datos: Configuración → Datos → Abrir carpeta de datos abre el explorador del SO en el directorio donde se almacenan los datos IndexedDB y OPFS.
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)
- Google Gemini (recomendado; nivel gratuito disponible): Obtenga una clave gratuita de Google AI Studio. Ingréselo en Configuración → Modelos AI → Clave API de Gemini. Modelos recomendados:
gemini-2.5-flash para uso diario, gemini-2.5-pro para tareas complejas. - OpenAI: GPT-4o y GPT-4o-mini. Obtenga una clave de platform.openai.com. Ingréselo en Configuración → Modelos AI → Clave OpenAI. Fuerte en seguir instrucciones y reescribir prosa.
- Antrópico (Claude): Claude Opus 4.7, Sonnet 4.6 y Haiku 4.5. Obtenga una clave de console.anthropic.com. Introdúcelo en Configuración → Modelos de IA → Clave antrópica. Excelente para narrativa larga y tono matizado. Nativo en escritorio; en la web se retransmite mediante un proxy serverless (Vercel/Cloudflare Pages), no disponible en GitHub Pages.
- Grok (xAI):
grok-3 y grok-3-mini. Obtenga una clave del portal para desarrolladores de xAI. Introdúcelo en Configuración → Modelos AI → Clave xAI. Competitivo en tareas creativas con menor costo por token que GPT-4. - OpenRouter: Una puerta de enlace unificada a DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B y más. Clave gratuita en openrouter.ai/keys; los modelos con sufijo
:free no cuestan nada.
Proveedores locales (no se requiere clave API)
- WebLLM (navegador, GPU): ejecuta LLM cuantificados (Llama 3.2, Phi-3.5 Mini, Gemma 2) directamente en el navegador a través de WebGPU. Descargue un modelo en Configuración → IA avanzada → Modelos de IA locales. Una vez descargada, la inferencia se ejecuta completamente sin conexión y sin coste alguno.
- ONNX Runtime Web (navegador, CPU): inferencia basada en WASM sin GPU. Funciona en cualquier dispositivo; más lento que WebLLM pero adecuado para tareas de clasificación y terminaciones breves.
- Transformers.js: ejecuta el modelo de incrustación RAG local automáticamente en segundo plano. No se necesita configuración: se inicia cuando el contexto RAG está habilitado.
- Ollama: Se conecta a un servidor Ollama que se ejecuta localmente en
localhost:11434. Funciona de forma nativa en la app de escritorio. Ejecute ollama pull llama3.2 para comenzar. Costo API cero, totalmente privado, admite cualquier modelo compatible con Ollama, incluidos los adaptadores LoRA. En la versión web/PWA es solo de escritorio por defecto — un indicador opt-in Conexión Browser-Ollama (Configuración → Experimental) permite una conexión directa del navegador si configuras tu propio servidor con OLLAMA_ORIGINS para este origen.
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)
- Google Gemini (recomendado; nivel gratuito disponible): Obtenga una clave gratuita de Google AI Studio. Ingréselo en Configuración → Modelos AI → Clave API de Gemini. Modelos recomendados:
gemini-2.5-flash para uso diario, gemini-2.5-pro para tareas complejas. - OpenAI: GPT-4o y GPT-4o-mini. Obtenga una clave de platform.openai.com. Ingréselo en Configuración → Modelos AI → Clave OpenAI. Fuerte en seguir instrucciones y reescribir prosa.
- Antrópico (Claude): Claude Opus 4.7, Sonnet 4.6 y Haiku 4.5. Obtenga una clave de console.anthropic.com. Introdúcelo en Configuración → Modelos de IA → Clave antrópica. Excelente para narrativa larga y tono matizado. Nativo en escritorio; en la web se retransmite mediante un proxy serverless (Vercel/Cloudflare Pages), no disponible en GitHub Pages.
- Grok (xAI):
grok-3 y grok-3-mini. Obtenga una clave del portal para desarrolladores de xAI. Introdúcelo en Configuración → Modelos AI → Clave xAI. Competitivo en tareas creativas con menor costo por token que GPT-4. - OpenRouter: Una puerta de enlace unificada a DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B y más. Clave gratuita en openrouter.ai/keys; los modelos con sufijo
:free no cuestan nada.
Proveedores locales (no se requiere clave API)
- WebLLM (navegador, GPU): ejecuta LLM cuantificados (Llama 3.2, Phi-3.5 Mini, Gemma 2) directamente en el navegador a través de WebGPU. Descargue un modelo en Configuración → IA avanzada → Modelos de IA locales. Una vez descargada, la inferencia se ejecuta completamente sin conexión y sin coste alguno.
- ONNX Runtime Web (navegador, CPU): inferencia basada en WASM sin GPU. Funciona en cualquier dispositivo; más lento que WebLLM pero adecuado para tareas de clasificación y terminaciones breves.
- Transformers.js: ejecuta el modelo de incrustación RAG local automáticamente en segundo plano. No se necesita configuración: se inicia cuando el contexto RAG está habilitado.
- Ollama: Se conecta a un servidor Ollama que se ejecuta localmente en
localhost:11434. Funciona de forma nativa en la app de escritorio. Ejecute ollama pull llama3.2 para comenzar. Costo API cero, totalmente privado, admite cualquier modelo compatible con Ollama, incluidos los adaptadores LoRA. En la versión web/PWA es solo de escritorio por defecto — un indicador opt-in Conexión Browser-Ollama (Configuración → Experimental) permite una conexión directa del navegador si configuras tu propio servidor con OLLAMA_ORIGINS para este origen.
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.
- Siempre disponible sin conexión: Escritura, Tablero de tramas, edición de personajes y mundos, creación y restauración de instantáneas, exportación a PDF / Markdown / TXT, toda la configuración.
- Requiere red: Los proveedores de IA en la nube (Gemini, OpenAI, Anthropic, Grok) envían tu consulta por internet. La escritura nunca se bloquea; solo las funciones de IA devuelven un error.
- Descargar modelos locales con antelación: Ve a Configuración → IA avanzada → Modelos de IA local y descarga un modelo. Una vez en caché, la inferencia funciona sin conexión.
- Caché del shell PWA: Instala WorldScript como PWA (botón «Instalar» del navegador) para cachear el shell de la app mediante el Service Worker.
- Almacenamiento OPFS: DuckDB y el modelo de embeddings local usan el Origin Private File System del navegador, un área persistente que no se borra con la limpieza normal de caché.
",
"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)
- Manuscritos, personajes y construcción del mundo: nunca se transmiten a ninguna parte a menos que envíe explícitamente un pasaje específico a un proveedor de IA para su procesamiento.
- Claves API: cifradas en reposo con AES-256-GCM (PBKDF2, 600.000 iteraciones SHA-256) antes de guardarlo 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.
- Instantáneas y copias de seguridad: se almacenan completamente en IndexedDB de su navegador. Los archivos JSON exportados van directamente a la carpeta de descargas de su dispositivo.
- Índice RAG y análisis DuckDB: fragmentos de manuscritos, incrustaciones de vectores y datos analíticos se encuentran en el OPFS de su navegador. Solo se envía al proveedor el mensaje final ensamblado, no el índice sin procesar.
Lo que sale de su dispositivo (solo cuando usted elige)
- Solicitudes de IA en la nube: Cuando usa Gemini, OpenAI, Anthropic o Grok, solo se envía al proveedor el texto que envió explícitamente para esa acción específica. WorldScript no agrega telemetría oculta a estas solicitudes.
- Políticas de datos del proveedor de IA: Cada proveedor tiene sus propios términos de retención de datos. Las solicitudes de la API de Google Gemini no se utilizan para entrenar los modelos de Google de forma predeterminada. Consulte los términos de desarrollador del proveedor elegido para conocer la política actual.
- Colaboración (solo suscripción): Si habilita la colaboración P2P, las actualizaciones de documentos de Yjs se cifran de extremo a extremo (AES-256-GCM + PBKDF2) antes de salir del navegador. El servidor de señalización coordina las conexiones, pero nunca ve el contenido de su manuscrito.
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)
- Manuscritos, personajes y construcción del mundo: nunca se transmiten a ninguna parte a menos que envíe explícitamente un pasaje específico a un proveedor de IA para su procesamiento.
- Claves API: las claves 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 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.)
- Instantáneas y copias de seguridad: en la compilación de Navegador/PWA se almacenan completamente en IndexedDB de su navegador; en la compilación de escritorio Tauri, como archivos JSON locales en el directorio de datos de la app. Los archivos JSON exportados van directamente a la carpeta de descargas de su dispositivo.
- Índice RAG y análisis DuckDB: fragmentos de manuscritos, incrustaciones de vectores y datos analíticos se encuentran en el OPFS de su navegador. Solo se envía al proveedor el mensaje final ensamblado, no el índice sin procesar.
Lo que sale de su dispositivo (solo cuando usted elige)
- Solicitudes de IA en la nube: Cuando usa Gemini, OpenAI, Anthropic o Grok, solo se envía al proveedor el texto que envió explícitamente para esa acción específica. WorldScript no agrega telemetría oculta a estas solicitudes.
- Políticas de datos del proveedor de IA: Cada proveedor tiene sus propios términos de retención de datos. Las solicitudes de la API de Google Gemini no se utilizan para entrenar los modelos de Google de forma predeterminada. Consulte los términos de desarrollador del proveedor elegido para conocer la política actual.
- Colaboración (solo opcional): Si habilita la colaboración P2P, las actualizaciones de documentos de Yjs se cifran de extremo a extremo (AES-256-GCM + PBKDF2) antes de salir del navegador. El servidor de señalización coordina las conexiones, pero nunca ve el contenido de su manuscrito.
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.
- Google Gemini (nube): El proveedor predeterminado. Gemini Flash es rápido y amigable con el nivel gratuito; Gemini Pro ofrece mayor calidad. Clave de API gratuita de Google AI Studio.
- OpenAI (nube): GPT-4o y GPT-4o-mini mediante clave API. Excelente para seguir instrucciones y reescribir prosa. Recomendado para usuarios del ecosistema OpenAI.
- Ollama (local — solo escritorio): Ejecuta modelos en tu máquina via
localhost:11434. Requiere la app de escritorio Tauri. Ideal para máxima privacidad sin costo de API. - WebLLM (local — navegador): Inferencia GPU directamente en el navegador; sin servidor, sin clave API. Los modelos se descargan una vez y se cachean. Ideal para privacidad sin la app de escritorio.
- Respaldo híbrido: Actívalo en Configuración → IA avanzada para encadenar proveedores automáticamente, p. ej., primero Gemini y luego Ollama si hay un error.
",
"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é.
- Funciona en cualquier dispositivo: computadora de escritorio, portátil, tableta y teléfono.
- Siempre actualizado: Service Worker obtiene actualizaciones en segundo plano; aparece una notificación cuando una nueva versión está lista.
- Capacidad sin conexión: escritura, tablero de trazado, caracteres, control de versiones y exportación, todo funciona sin Internet. Solo los proveedores de IA en la nube (Gemini, OpenAI, etc.) requieren una conexión.
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.
- Se abre en su propia ventana: no hay pestañas del navegador ni barra de direcciones visibles.
- Funciones idénticas y los mismos datos de IndexedDB que la pestaña del navegador.
- Shell sin conexión almacenado en caché por Service Worker: se abre instantáneamente incluso sin Internet.
- El estado de instalación se muestra en Configuración → General con una marca de verificación verde.
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.
- Acceso al sistema de archivos nativo: lee y escribe archivos directamente sin un selector de archivos para cada operación.
- Ollama en localhost: el CSP del navegador bloquea las conexiones de localhost; la aplicación de escritorio no. Conecte un servidor Ollama que se ejecute localmente en
localhost:11434 para obtener una inferencia de IA fuera de línea totalmente privada y sin costo. - Persistencia del estado de la ventana: el tamaño, la posición y el estado maximizado se restauran exactamente en cada inicio.
- Actualizador automático: un banner en Configuración → Acerca de le avisa cuando hay una nueva versión disponible y la instala en el fondo.
- Abrir carpeta de datos — Configuración → Datos → Abrir carpeta de datos revela la ruta exacta del sistema operativo donde se almacenan sus datos, útil para copias de seguridad manuales.
- Instaladores — .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), disponibles a través de versiones de GitHub.
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é.
- Funciona en cualquier dispositivo: computadora de escritorio, portátil, tableta y teléfono.
- Siempre actualizado: Service Worker obtiene actualizaciones en segundo plano; aparece una notificación cuando una nueva versión está lista.
- Capacidad sin conexión: escritura, tablero de trazado, caracteres, control de versiones y exportación, todo funciona sin Internet. Solo los proveedores de IA en la nube (Gemini, OpenAI, etc.) requieren una conexión.
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.
- Se abre en su propia ventana: no hay pestañas del navegador ni barra de direcciones visibles.
- Funciones idénticas y los mismos datos de IndexedDB que la pestaña del navegador.
- Shell sin conexión almacenado en caché por Service Worker: se abre instantáneamente incluso sin Internet.
- El estado de instalación se muestra en Configuración → General con una marca de verificación verde.
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.
- Acceso al sistema de archivos nativo: lee y escribe archivos directamente sin un selector de archivos para cada operación.
- Ollama en localhost: el CSP del navegador bloquea las conexiones de localhost; la aplicación de escritorio no. Conecte un servidor Ollama que se ejecute localmente en
localhost:11434 para obtener una inferencia de IA fuera de línea totalmente privada y sin costo. - Persistencia del estado de la ventana: el tamaño, la posición y el estado maximizado se restauran exactamente en cada inicio.
- Actualizador automático: un banner en Configuración → Acerca de le avisa cuando hay una nueva versión disponible y la instala en el fondo.
- Abrir carpeta de datos — Configuración → Datos → Abrir carpeta de datos revela la ruta exacta del sistema operativo donde se almacenan sus datos, útil para copias de seguridad manuales.
- Instaladores — .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), disponibles a través de versiones de GitHub.
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:
- 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.
- 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.
- 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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Vues : Chaque vue est enveloppée dans
React.lazy() avec une limite Suspense. Le bundle se télécharge au premier accès ; les visites suivantes utilisent le cache navigateur. - Vite manualChunks : Le code vendor est divisé en chunks nommés :
vendor-react, vendor-redux, plot-board, export-docx, collab-yjs. Chacun ne se télécharge qu'au premier accès à sa vue. - Couche IA :
services/ai/index.ts est importé dynamiquement au premier outil IA utilisé. Le SDK Vercel AI (~200 Ko gzipé) n'est pas dans le chunk d'entrée. - DuckDB & RAG : Le listener DuckDB et le modèle d'embeddings local ne chargent que si leurs drapeaux sont actifs. Le démarrage à froid n'est pas affecté.
- Force-graph :
react-force-graph-2d n'est importé que si vous naviguez vers le graphe et avez au moins un personnage. - Budget de bundle : Le job CI
bundle:budget impose un maximum de 7 000 Ko pour le chunk vendor et 4 500 Ko pour l'entrée. Les PRs dépassant ces limites échouent au build.
",
"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.
- Aucun compte requis : Il n'y a pas d'inscription, pas de synchronisation cloud et aucun serveur qui stocke vos manuscrits. Toutes les données se trouvent dans IndexedDB et OPFS de votre navigateur.
- Cryptage par clé API : Lorsque vous saisissez une clé API, elle est cryptée avec AES-256-GCM (clé de 256 bits, IV aléatoire de 12 octets, PBKDF2 avec 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 ou sur le stockage local.
- Requêtes AI : Seul le texte que vous soumettez explicitement (par exemple, un passage sélectionné pour \"Améliorer le texte\") est envoyé au fournisseur de votre choix. Le pipeline RAG s'exécute localement ; seule l'invite finale assemblée circule sur le réseau.
- Politique de sécurité du contenu : La version Web comprend un CSP strict qui bloque les scripts en ligne, les requêtes réseau arbitraires et les connexions localhost (empêchant une extension compromise d'accéder à Ollama via la page).
- Bureau Tauri : Le shell Rust restreint les autorisations du plugin au répertoire de données de l'application. L'accès arbitraire au système de fichiers est bloqué ; le plugin
dialog nécessite une confirmation de l'utilisateur pour chaque opération d'ouverture/sauvegarde. - Collaboration : Lorsque la collaboration est activée, les mises à jour Yjs sont cryptées de bout en bout (AES-256-GCM + PBKDF2) avant de quitter le navigateur. Le serveur de signalisation ne voit jamais le contenu du document en texte brut.
- Audits de dépendances : L'analyse OSV + CodeQL s'exécute à chaque poussée de CI. Dependabot surveille les nouveaux CVE ; les broches de remplacement dans
pnpm.overrides sont utilisées lorsqu'une version corrigée n'est pas encore disponible en amont.
",
+ "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.
- Aucun compte requis : Il n'y a pas d'inscription, pas de synchronisation cloud et aucun serveur qui stocke vos manuscrits. Toutes les données restent sur votre appareil : sur la version Navigateur/PWA, dans IndexedDB et OPFS de votre navigateur ; sur la version bureau Tauri, sous forme de fichiers locaux dans le répertoire de données de l'application.
- Protection par clé API : les clés API du navigateur/PWA sont protégées par AES-256-GCM dans IndexedDB (clé aléatoire non extractible). La protection des clés de bureau suit le cycle de vie du stockage de bureau ; les détails du stockage navigateur ne s'appliquent pas automatiquement aux fichiers de bureau.
- Requêtes AI : Seul le texte que vous soumettez explicitement (par exemple, un passage sélectionné pour \"Améliorer le texte\") est envoyé au fournisseur de votre choix. Le pipeline RAG s'exécute localement ; seule l'invite finale assemblée circule sur le réseau.
- Politique de sécurité du contenu : La version Web comprend un CSP strict qui bloque les scripts en ligne, les requêtes réseau arbitraires et les connexions localhost (empêchant une extension compromise d'accéder à Ollama via la page).
- Bureau Tauri : Le shell Rust restreint les autorisations du plugin au répertoire de données de l'application. L'accès arbitraire au système de fichiers est bloqué ; le plugin
dialog nécessite une confirmation de l'utilisateur pour chaque opération d'ouverture/sauvegarde. - Collaboration : Lorsque la collaboration est activée, les mises à jour Yjs sont cryptées de bout en bout (AES-256-GCM + PBKDF2) avant de quitter le navigateur. Le serveur de signalisation ne voit jamais le contenu du document en texte brut.
- Audits de dépendances : L'analyse OSV + CodeQL s'exécute à chaque poussée de CI. Dependabot surveille les nouveaux CVE ; les broches de remplacement dans
pnpm.overrides sont utilisées lorsqu'une version corrigée n'est pas encore disponible en amont.
",
"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)
- Installer : Dans Chrome, Edge ou Safari, cliquez sur l'invite « Installer ». L'icône apparaît sur votre bureau ou écran d'accueil.
- Cache shell hors ligne : Le Service Worker met en cache le shell de l'app (HTML, CSS, JS) à l'avance — l'interface se charge instantanément, même hors ligne.
- Stockage : Données dans IndexedDB et OPFS — persistantes, non effacées par les suppressions normales de cache.
- Icônes : Le manifeste PWA inclut des icônes PNG masquables 192×192 et 512×512 pour Android et Windows.
Application bureau Tauri
- Valeur ajoutée : Accès natif au système de fichiers, Ollama sur localhost, persistance de l'état de fenêtre, menu Fichier/Aide et bannière d'updater optionnelle dans Paramètres → À propos.
- Plugins Rust :
fs, dialog, http, shell, updater, plus optionnellement menu, tray, window-state. - Dossier de données : Paramètres → Données → Ouvrir le dossier de données révèle le chemin OS où sont stockées les données IndexedDB et OPFS.
- Installateurs : Créés par le workflow CI Tauri sur les releases taguées : macOS (.dmg), Windows (.msi), Linux (.AppImage / .deb).
",
"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
- Accès natif au système de fichiers : Lire et écrire des fichiers directement via le plugin Tauri
fs — sans dialogue de fichier navigateur à chaque opération. Les logs sont écrits dans $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama sur localhost : La CSP du navigateur bloque les connexions
localhost ; l'application bureau non. Connectez un serveur Ollama local sur localhost:11434 pour une inférence IA hors ligne, totalement privée et gratuite. - Persistance de l'état de fenêtre : La taille, la position et l'état de maximisation de la fenêtre sont restaurés exactement à chaque démarrage (plugin
window-state Tauri). - Barre de menus native : Fichier / Édition / Vue / Aide selon les conventions OS (macOS : menu dans la barre d'outils ; Windows/Linux : intégré dans la fenêtre).
- Mise à jour automatique : Le plugin
updater Tauri vérifie l'endpoint JSON des releases GitHub au démarrage et affiche une bannière dans Paramètres → À propos quand une nouvelle version est disponible. - Ouvrir le dossier de données : Paramètres → Données → Ouvrir le dossier de données ouvre l'explorateur OS au répertoire où sont stockées les données IndexedDB et OPFS.
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)
- Google Gemini (recommandé – niveau gratuit disponible) : Obtenez une clé gratuite auprès de Google AI Studio. Saisissez-le sous Paramètres → Modèles IA → Clé API Gemini. Modèles recommandés :
gemini-2.5-flash pour un usage quotidien, gemini-2.5-pro pour les tâches complexes. - OpenAI : GPT-4o et GPT-4o-mini. Obtenez une clé sur platform.openai.com. Saisissez-le sous Paramètres → Modèles IA → Clé OpenAI. Fort dans le suivi des instructions et la réécriture de prose.
- Anthropique (Claude) : Claude Opus 4.7, Sonnet 4.6 et Haiku 4.5. Obtenez une clé sur console.anthropic.com. Saisissez-le sous Paramètres → Modèles IA → Clé anthropique. Excellent pour une narration longue durée et un ton nuancé. Natif sur le bureau ; relayé via un proxy serverless sur le web (Vercel/Cloudflare Pages), indisponible sur GitHub Pages.
- Grok (xAI) :
grok-3 et grok-3-mini. Obtenez une clé sur le portail des développeurs xAI. Saisissez-le sous Paramètres → Modèles AI → Clé xAI. Compétitif sur les tâches créatives avec un coût par jeton inférieur à celui de GPT-4. - OpenRouter : Une passerelle unifiée vers DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B et plus. Clé gratuite sur openrouter.ai/keys ; les modèles avec le suffixe
:free ne coûtent rien.
Fournisseurs locaux (aucune clé API requise)
- WebLLM (navigateur, GPU) : Exécute des LLM quantifiés (Llama 3.2, Phi-3.5 Mini, Gemma 2) directement dans le navigateur via WebGPU. Téléchargez un modèle sous Paramètres → IA avancée → Modèles d'IA locaux. Une fois téléchargée, l'inférence s'exécute entièrement hors ligne et sans coût.
- ONNX Runtime Web (navigateur, CPU) : inférence basée sur WASM sans GPU. Fonctionne sur n'importe quel appareil ; plus lent que WebLLM mais adapté aux tâches de complétion et de classification courtes.
- Transformers.js : exécute automatiquement le modèle d'intégration RAG local en arrière-plan. Aucune configuration nécessaire : il démarre lorsque le contexte RAG est activé.
- Ollama : se connecte à un serveur Ollama exécuté localement à l'adresse
localhost:11434. Fonctionne nativement dans l'application de bureau. Exécutez ollama pull llama3.2 pour commencer. Aucun coût d'API, entièrement privé, prend en charge tout modèle compatible Ollama, y compris les adaptateurs LoRA. Dans la version web/PWA, c'est réservé au bureau par défaut ; un indicateur opt-in Connexion Browser-Ollama (Paramètres → Expérimental) permet une connexion directe du navigateur si vous configurez votre propre serveur avec OLLAMA_ORIGINS pour cette origine.
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)
- Google Gemini (recommandé – niveau gratuit disponible) : Obtenez une clé gratuite auprès de Google AI Studio. Saisissez-le sous Paramètres → Modèles IA → Clé API Gemini. Modèles recommandés :
gemini-2.5-flash pour un usage quotidien, gemini-2.5-pro pour les tâches complexes. - OpenAI : GPT-4o et GPT-4o-mini. Obtenez une clé sur platform.openai.com. Saisissez-le sous Paramètres → Modèles IA → Clé OpenAI. Fort dans le suivi des instructions et la réécriture de prose.
- Anthropique (Claude) : Claude Opus 4.7, Sonnet 4.6 et Haiku 4.5. Obtenez une clé sur console.anthropic.com. Saisissez-le sous Paramètres → Modèles IA → Clé anthropique. Excellent pour une narration longue durée et un ton nuancé. Natif sur le bureau ; relayé via un proxy serverless sur le web (Vercel/Cloudflare Pages), indisponible sur GitHub Pages.
- Grok (xAI) :
grok-3 et grok-3-mini. Obtenez une clé sur le portail des développeurs xAI. Saisissez-le sous Paramètres → Modèles AI → Clé xAI. Compétitif sur les tâches créatives avec un coût par jeton inférieur à celui de GPT-4. - OpenRouter : Une passerelle unifiée vers DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B et plus. Clé gratuite sur openrouter.ai/keys ; les modèles avec le suffixe
:free ne coûtent rien.
Fournisseurs locaux (aucune clé API requise)
- WebLLM (navigateur, GPU) : Exécute des LLM quantifiés (Llama 3.2, Phi-3.5 Mini, Gemma 2) directement dans le navigateur via WebGPU. Téléchargez un modèle sous Paramètres → IA avancée → Modèles d'IA locaux. Une fois téléchargée, l'inférence s'exécute entièrement hors ligne et sans coût.
- ONNX Runtime Web (navigateur, CPU) : inférence basée sur WASM sans GPU. Fonctionne sur n'importe quel appareil ; plus lent que WebLLM mais adapté aux tâches de complétion et de classification courtes.
- Transformers.js : exécute automatiquement le modèle d'intégration RAG local en arrière-plan. Aucune configuration nécessaire : il démarre lorsque le contexte RAG est activé.
- Ollama : se connecte à un serveur Ollama exécuté localement à l'adresse
localhost:11434. Fonctionne nativement dans l'application de bureau. Exécutez ollama pull llama3.2 pour commencer. Aucun coût d'API, entièrement privé, prend en charge tout modèle compatible Ollama, y compris les adaptateurs LoRA. Dans la version web/PWA, c'est réservé au bureau par défaut ; un indicateur opt-in Connexion Browser-Ollama (Paramètres → Expérimental) permet une connexion directe du navigateur si vous configurez votre propre serveur avec OLLAMA_ORIGINS pour cette origine.
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.
- Toujours disponible hors ligne : Écriture, tableau de l'intrigue, édition des personnages et mondes, création et restauration d'instantanés, export en PDF / Markdown / TXT, tous les paramètres.
- Nécessite le réseau : Les fournisseurs IA cloud (Gemini, OpenAI, Anthropic, Grok) envoient votre requête sur internet. L'écriture n'est jamais bloquée ; seules les fonctions IA renvoient une erreur.
- Télécharger des modèles locaux à l'avance : Allez dans Paramètres → IA avancée → Modèles IA locaux et téléchargez un modèle. Une fois en cache, l'inférence fonctionne hors ligne.
- Cache du shell PWA : Installez WorldScript comme PWA (bouton « Installer » du navigateur) pour mettre en cache le shell de l'application via le Service Worker.
- Stockage OPFS : DuckDB et le modèle d'embeddings local utilisent l'Origin Private File System du navigateur, une zone persistante non effacée par la suppression normale du cache.
",
"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)
- Manuscrits, personnages et construction du monde — jamais transmis nulle part, sauf si vous envoyez explicitement un passage spécifique à un fournisseur d'IA pour traitement.
- Clés API — cryptées au repos avec AES-256-GCM (PBKDF2, 600 000 itérations SHA-256) avant d'être enregistré 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.
- Instantanés et sauvegardes — entièrement stockés dans IndexedDB de votre navigateur. Les fichiers JSON exportés vont directement dans le dossier de téléchargements de votre appareil.
- Index RAG et analyses DuckDB : les morceaux de manuscrit, les intégrations vectorielles et les données d'analyse se trouvent tous dans l'OPFS de votre navigateur. Seule l'invite finale assemblée, et non l'index brut, est envoyée à un fournisseur.
Ce qui quitte votre appareil (uniquement lorsque vous le souhaitez)
- Demandes Cloud AI : Lorsque vous utilisez Gemini, OpenAI, Anthropic ou Grok, seul le texte que vous avez explicitement soumis pour cette action spécifique est envoyé au fournisseur. WorldScript n'ajoute aucune télémétrie cachée à ces demandes.
- Politiques de données des fournisseurs d'IA : Chaque fournisseur a ses propres conditions de conservation des données. Les requêtes API Google Gemini ne sont pas utilisées par défaut pour entraîner les modèles de Google. Vérifiez les conditions de développement du fournisseur choisi pour connaître la politique actuelle.
- Collaboration (opt-in uniquement) : Si vous activez la collaboration P2P, les mises à jour des documents Yjs sont cryptées de bout en bout (AES-256-GCM + PBKDF2) avant de quitter le navigateur. Le serveur de signalisation coordonne les connexions mais ne voit jamais le contenu de votre manuscrit.
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)
- Manuscrits, personnages et construction du monde — jamais transmis nulle part, sauf si vous envoyez explicitement un passage spécifique à un fournisseur d'IA pour traitement.
- Clés API — les clés 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 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.)
- Instantanés et sauvegardes — sur la version Navigateur/PWA, entièrement stockés dans IndexedDB de votre navigateur ; sur la version bureau Tauri, sous forme de fichiers JSON locaux dans le répertoire de données de l'application. Les fichiers JSON exportés vont directement dans le dossier de téléchargements de votre appareil.
- Index RAG et analyses DuckDB : les morceaux de manuscrit, les intégrations vectorielles et les données d'analyse se trouvent tous dans l'OPFS de votre navigateur. Seule l'invite finale assemblée, et non l'index brut, est envoyée à un fournisseur.
Ce qui quitte votre appareil (uniquement lorsque vous le souhaitez)
- Demandes Cloud AI : Lorsque vous utilisez Gemini, OpenAI, Anthropic ou Grok, seul le texte que vous avez explicitement soumis pour cette action spécifique est envoyé au fournisseur. WorldScript n'ajoute aucune télémétrie cachée à ces demandes.
- Politiques de données des fournisseurs d'IA : Chaque fournisseur a ses propres conditions de conservation des données. Les requêtes API Google Gemini ne sont pas utilisées par défaut pour entraîner les modèles de Google. Vérifiez les conditions de développement du fournisseur choisi pour connaître la politique actuelle.
- Collaboration (opt-in uniquement) : Si vous activez la collaboration P2P, les mises à jour des documents Yjs sont cryptées de bout en bout (AES-256-GCM + PBKDF2) avant de quitter le navigateur. Le serveur de signalisation coordonne les connexions mais ne voit jamais le contenu de votre manuscrit.
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.
- Google Gemini (cloud) : Fournisseur par défaut. Gemini Flash est rapide et convivial pour le niveau gratuit ; Gemini Pro offre une meilleure qualité. Clé API gratuite depuis Google AI Studio.
- OpenAI (cloud) : GPT-4o et GPT-4o-mini via clé API. Excellent pour le suivi d’instructions et la réécriture de prose. Recommandé pour les utilisateurs de l’écosystème OpenAI.
- Ollama (local — bureau uniquement) : Exécute des modèles sur votre machine via
localhost:11434. Nécessite l’application de bureau Tauri. Idéal pour une confidentialité maximale sans coût d’API. - WebLLM (local — navigateur) : Inférence GPU directement dans le navigateur ; sans serveur, sans clé API. Les modèles sont téléchargés une fois et mis en cache. Idéal pour la confidentialité sans l’application de bureau.
- Secours hybride : Activez dans Paramètres → IA avancée pour enchaîner automatiquement les fournisseurs — par ex., Gemini d’abord, puis Ollama en cas d’erreur.
",
"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.
- Fonctionne sur n'importe quel appareil : ordinateur de bureau, ordinateur portable, tablette et téléphone.
- Toujours à jour : le Service Worker récupère les mises à jour en arrière-plan ; une notification apparaît lorsqu'une nouvelle version est prête.
- Capable hors ligne — écriture, tableau de tracé, personnages, contrôle de version et exportation de tout le travail sans Internet. Seuls les fournisseurs d'IA cloud (Gemini, OpenAI, etc.) nécessitent une connexion.
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.
- S'ouvre dans sa propre fenêtre — aucun onglet de navigateur ni barre d'adresse visible.
- Fonctionnalités identiques et mêmes données IndexedDB que l'onglet du navigateur.
- Shell hors ligne mis en cache par Service Worker — s'ouvre instantanément même sans Internet.
- État d'installation affiché dans Paramètres → Général avec une coche verte.
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.
- Accès natif au système de fichiers — lit et écrit des fichiers directement sans sélecteur de fichiers pour chaque opération.
- Ollama sur localhost — le CSP du navigateur bloque les connexions localhost ; ce n’est pas le cas de l’application de bureau. Connectez un serveur Ollama exécuté localement sur
localhost:11434 pour une inférence d'IA hors ligne entièrement privée et sans frais. - Persistance de l'état de la fenêtre — la taille, la position et l'état maximisé sont restaurés exactement à chaque lancement.
- Mise à jour automatique — une bannière dans Paramètres → À propos de vous avertit lorsqu'une nouvelle version est disponible et l'installe en arrière-plan.
- Ouvrir dossier de données — Paramètres → Données → Ouvrir le dossier de données révèle le chemin exact du système d'exploitation où vos données sont stockées, utile pour les sauvegardes manuelles.
- Installateurs — .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), disponibles via les versions GitHub.
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.
- Fonctionne sur n'importe quel appareil : ordinateur de bureau, ordinateur portable, tablette et téléphone.
- Toujours à jour : le Service Worker récupère les mises à jour en arrière-plan ; une notification apparaît lorsqu'une nouvelle version est prête.
- Capable hors ligne — écriture, tableau de tracé, personnages, contrôle de version et exportation de tout le travail sans Internet. Seuls les fournisseurs d'IA cloud (Gemini, OpenAI, etc.) nécessitent une connexion.
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.
- S'ouvre dans sa propre fenêtre — aucun onglet de navigateur ni barre d'adresse visible.
- Fonctionnalités identiques et mêmes données IndexedDB que l'onglet du navigateur.
- Shell hors ligne mis en cache par Service Worker — s'ouvre instantanément même sans Internet.
- État d'installation affiché dans Paramètres → Général avec une coche verte.
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.
- Accès natif au système de fichiers — lit et écrit des fichiers directement sans sélecteur de fichiers pour chaque opération.
- Ollama sur localhost — le CSP du navigateur bloque les connexions localhost ; ce n’est pas le cas de l’application de bureau. Connectez un serveur Ollama exécuté localement sur
localhost:11434 pour une inférence d'IA hors ligne entièrement privée et sans frais. - Persistance de l'état de la fenêtre — la taille, la position et l'état maximisé sont restaurés exactement à chaque lancement.
- Mise à jour automatique — une bannière dans Paramètres → À propos de vous avertit lorsqu'une nouvelle version est disponible et l'installe en arrière-plan.
- Ouvrir dossier de données — Paramètres → Données → Ouvrir le dossier de données révèle le chemin exact du système d'exploitation où vos données sont stockées, utile pour les sauvegardes manuelles.
- Installateurs — .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), disponibles via les versions GitHub.
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 :
- 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.
- 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.
- 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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Viste lazy: Tutte e 14 le viste principali usano
React.lazy() con Suspense. Il codice di una vista si scarica solo quando l'utente ci naviga per la prima volta. - manualChunks Vite: Le librerie pesanti sono separate in chunk dedicati:
vendor-react, vendor-redux, plot-board (force-graph), export-docx (docx + jsPDF), collab-yjs (Yjs). Ogni chunk si scarica solo quando serve. - Layer provider IA:
services/ai/ differisce l'inizializzazione del provider al primo utilizzo. Il provider WebLLM carica il WASM solo al primo avvio dell'inferenza locale. - DuckDB e RAG: Il listener DuckDB e il worker RAG si importano dinamicamente via
listenerMiddleware.ts. Non bloccano il cold-start anche con i flag attivi. - Gate force-graph:
react-force-graph-2d si carica solo se esistono personaggi con relazioni definite. Se il grafo è vuoto, viene mostrato lo stato vuoto senza caricare il chunk. - Budget bundle: Chunk vendor: max 7000 KB; chunk entry: max 4500 KB. Verificato da
pnpm run bundle:budget in CI dopo ogni build.
",
"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.
- Nessun account richiesto: non è necessaria alcuna registrazione, nessuna sincronizzazione cloud e nessun server che archivia i tuoi manoscritti. Tutti i dati risiedono nell'IndexedDB e nell'OPFS del tuo browser.
- Crittografia della chiave API: quando inserisci una chiave API, questa viene crittografata con AES-256-GCM (chiave a 256 bit, IV casuale a 12 byte, PBKDF2 con 600.000 iterazioni SHA-256) prima di essere archiviata in IndexedDB. La chiave di testo in chiaro non viene mai scritta su disco o localStorage.
- Richieste AI: solo il testo che invii esplicitamente (ad esempio un passaggio selezionato per \"Migliora testo\") viene inviato al provider scelto. La pipeline RAG viene eseguita localmente; solo il prompt assemblato finale viaggia sulla rete.
- Politica di sicurezza dei contenuti: la build web include un rigoroso CSP che blocca script in linea, richieste di rete arbitrarie e connessioni localhost (impedendo a un'estensione compromessa di accedere a Ollama tramite la pagina).
- Desktop Tauri: la shell Rust limita le autorizzazioni del plug-in alla directory dei dati dell'app. L'accesso arbitrario al filesystem è bloccato; il plug-in
dialog richiede la conferma dell'utente per ogni operazione di apertura/salvataggio. - Collaborazione: quando la collaborazione è abilitata, gli aggiornamenti Yjs vengono crittografati end-to-end (AES-256-GCM + PBKDF2) prima di lasciare il browser. Il server di segnalazione non vede mai il contenuto del documento in testo normale.
- Controlli delle dipendenze: la scansione OSV + CodeQL viene eseguita su ogni push CI. Dependabot controlla i nuovi CVE; i pin di override in
pnpm.overrides vengono utilizzati quando una versione con patch non è ancora disponibile in upstream.
",
+ "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.
- Nessun account richiesto: non è necessaria alcuna registrazione, nessuna sincronizzazione cloud e nessun server che archivia i tuoi manoscritti. Tutti i dati restano sul tuo dispositivo: nella build Browser/PWA, nell'IndexedDB e nell'OPFS del tuo browser; nella build desktop Tauri, come file locali nella directory dati dell'app.
- Protezione della chiave API: le chiavi API di browser/PWA sono protette con AES-256-GCM in IndexedDB (chiave casuale non estraibile). La protezione delle chiavi desktop segue il ciclo di vita dell'archiviazione desktop; i dettagli dell'archiviazione del browser non si applicano automaticamente ai file desktop.
- Richieste AI: solo il testo che invii esplicitamente (ad esempio un passaggio selezionato per \"Migliora testo\") viene inviato al provider scelto. La pipeline RAG viene eseguita localmente; solo il prompt assemblato finale viaggia sulla rete.
- Politica di sicurezza dei contenuti: la build web include un rigoroso CSP che blocca script in linea, richieste di rete arbitrarie e connessioni localhost (impedendo a un'estensione compromessa di accedere a Ollama tramite la pagina).
- Desktop Tauri: la shell Rust limita le autorizzazioni del plug-in alla directory dei dati dell'app. L'accesso arbitrario al filesystem è bloccato; il plug-in
dialog richiede la conferma dell'utente per ogni operazione di apertura/salvataggio. - Collaborazione: quando la collaborazione è abilitata, gli aggiornamenti Yjs vengono crittografati end-to-end (AES-256-GCM + PBKDF2) prima di lasciare il browser. Il server di segnalazione non vede mai il contenuto del documento in testo normale.
- Controlli delle dipendenze: la scansione OSV + CodeQL viene eseguita su ogni push CI. Dependabot controlla i nuovi CVE; i pin di override in
pnpm.overrides vengono utilizzati quando una versione con patch non è ancora disponibile in upstream.
",
"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)
- Installazione: Fai clic sul pulsante «Installa» nella barra degli indirizzi (Chrome, Edge, Safari su iOS). L'app si installa come finestra autonoma senza barra del browser.
- Shell cache: Il Service Worker memorizza nella cache gli asset statici. Dopo la prima visita, il caricamento è quasi istantaneo e funziona offline.
- Icone maskable: PNG 192×192 e 512×512 con zona sicura per la forma adattiva — ottimizzate per ogni launcher su Android e iOS.
- Aggiornamenti: Quando viene distribuita una nuova versione, il Service Worker la scarica in background. Il banner «Aggiorna» appare al termine. Fai clic per ricaricare con la versione aggiornata.
App desktop Tauri
- Plugin Rust inclusi:
fs (accesso ai file), dialog (dialoghi nativi), http, shell, updater. Opzionali: menu, tray, window-state. - Dati locali: IndexedDB e OPFS sono memorizzati nella cartella dati dell'app del SO. Aprili con Impostazioni → Dati → Apri cartella dati.
- Aggiornamenti automatici: L'updater Tauri controlla una nuova versione all'avvio. Le release sono firmate dal maintainer.
- Build: Richiede Rust e il toolchain Tauri. Esegui
pnpm run tauri:dev per lo sviluppo locale.
",
"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
- Accesso nativo al filesystem: Leggi e scrivi file direttamente tramite il plugin Tauri
fs — nessun dialogo file del browser per ogni operazione. I log vengono scritti in $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama su localhost: Il CSP del browser blocca le connessioni
localhost; l'app desktop no. Connetti un server Ollama locale su localhost:11434 per inferenza IA offline, totalmente privata e gratuita. - Persistenza stato finestra: Dimensione, posizione e stato di massimizzazione vengono ripristinati esattamente ad ogni avvio (plugin
window-state di Tauri). - Barra dei menu nativa: File / Modifica / Visualizza / Aiuto secondo le convenzioni del SO (macOS: menu nella barra degli strumenti; Windows/Linux: integrato nella finestra).
- Aggiornamento automatico: Il plugin
updater di Tauri controlla l'endpoint JSON dei release di GitHub all'avvio e mostra un banner in Impostazioni → Informazioni quando è disponibile una nuova versione. - Apri cartella dati: Impostazioni → Dati → Apri cartella dati apre l'esplora file del SO nella directory dove sono archiviati i dati IndexedDB e OPFS.
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)
- Google Gemini (consigliato - livello gratuito disponibile): ottieni una chiave gratuita da Google AI Studio. Inseriscilo in Impostazioni → Modelli AI → Chiave API Gemini. Modelli consigliati:
gemini-2.5-flash per l'uso quotidiano, gemini-2.5-pro per attività complesse. - OpenAI: GPT-4o e GPT-4o-mini. Ottieni una chiave da platform.openai.com. Inseriscilo in Impostazioni → Modelli AI → Chiave OpenAI. Forte nel seguire le istruzioni e nella riscrittura in prosa.
- Antropico (Claude): Claude Opus 4.7, Sonnet 4.6 e Haiku 4.5. Ottieni una chiave da console.anthropic.com. Inseriscilo in Impostazioni → Modelli AI → Chiave antropica. Eccellente per narrativa di lunga durata e tono sfumato. Nativo su desktop; sul web viene inoltrato tramite un proxy serverless (Vercel/Cloudflare Pages), non disponibile su GitHub Pages.
- Grok (xAI):
grok-3 e grok-3-mini. Ottieni una chiave dal portale per sviluppatori xAI. Inseriscilo in Impostazioni → Modelli AI → Chiave xAI. Competitivo nelle attività creative con un costo per token inferiore rispetto a GPT-4. - OpenRouter: Un gateway unificato verso DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B e altri. Chiave gratuita su openrouter.ai/keys; i modelli con suffisso
:free non costano nulla.
Fornitori locali (non è richiesta alcuna chiave API)
- WebLLM (browser, GPU): esegue LLM quantizzati (Llama 3.2, Phi-3.5 Mini, Gemma 2) direttamente nel browser tramite WebGPU. Scarica un modello in Impostazioni → AI avanzata → Modelli AI locale. Una volta scaricata, l'inferenza viene eseguita completamente offline a costo zero.
- ONNX Runtime Web (browser, CPU): inferenza basata su WASM senza GPU. Funziona su qualsiasi dispositivo; più lento di WebLLM ma adatto per brevi completamenti e attività di classificazione.
- Transformers.js: esegue automaticamente il modello di incorporamento RAG locale in background. Non è necessaria alcuna configurazione: si avvia quando il contesto RAG è abilitato.
- Ollama: si connette a un server Ollama in esecuzione locale su
localhost:11434. Funziona nativamente nell'app desktop. Esegui ollama pull llama3.2 per iniziare. API a costo zero, completamente privata, supporta qualsiasi modello compatibile con Ollama inclusi gli adattatori LoRA. Nella build web/PWA è solo desktop per impostazione predefinita — un flag opt-in Connessione Browser-Ollama (Impostazioni → Sperimentale) consente una connessione diretta dal browser se configuri il tuo server con OLLAMA_ORIGINS per questa origine.
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)
- Google Gemini (consigliato - livello gratuito disponibile): ottieni una chiave gratuita da Google AI Studio. Inseriscilo in Impostazioni → Modelli AI → Chiave API Gemini. Modelli consigliati:
gemini-2.5-flash per l'uso quotidiano, gemini-2.5-pro per attività complesse. - OpenAI: GPT-4o e GPT-4o-mini. Ottieni una chiave da platform.openai.com. Inseriscilo in Impostazioni → Modelli AI → Chiave OpenAI. Forte nel seguire le istruzioni e nella riscrittura in prosa.
- Antropico (Claude): Claude Opus 4.7, Sonnet 4.6 e Haiku 4.5. Ottieni una chiave da console.anthropic.com. Inseriscilo in Impostazioni → Modelli AI → Chiave antropica. Eccellente per narrativa di lunga durata e tono sfumato. Nativo su desktop; sul web viene inoltrato tramite un proxy serverless (Vercel/Cloudflare Pages), non disponibile su GitHub Pages.
- Grok (xAI):
grok-3 e grok-3-mini. Ottieni una chiave dal portale per sviluppatori xAI. Inseriscilo in Impostazioni → Modelli AI → Chiave xAI. Competitivo nelle attività creative con un costo per token inferiore rispetto a GPT-4. - OpenRouter: Un gateway unificato verso DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B e altri. Chiave gratuita su openrouter.ai/keys; i modelli con suffisso
:free non costano nulla.
Fornitori locali (non è richiesta alcuna chiave API)
- WebLLM (browser, GPU): esegue LLM quantizzati (Llama 3.2, Phi-3.5 Mini, Gemma 2) direttamente nel browser tramite WebGPU. Scarica un modello in Impostazioni → AI avanzata → Modelli AI locale. Una volta scaricata, l'inferenza viene eseguita completamente offline a costo zero.
- ONNX Runtime Web (browser, CPU): inferenza basata su WASM senza GPU. Funziona su qualsiasi dispositivo; più lento di WebLLM ma adatto per brevi completamenti e attività di classificazione.
- Transformers.js: esegue automaticamente il modello di incorporamento RAG locale in background. Non è necessaria alcuna configurazione: si avvia quando il contesto RAG è abilitato.
- Ollama: si connette a un server Ollama in esecuzione locale su
localhost:11434. Funziona nativamente nell'app desktop. Esegui ollama pull llama3.2 per iniziare. API a costo zero, completamente privata, supporta qualsiasi modello compatibile con Ollama inclusi gli adattatori LoRA. Nella build web/PWA è solo desktop per impostazione predefinita — un flag opt-in Connessione Browser-Ollama (Impostazioni → Sperimentale) consente una connessione diretta dal browser se configuri il tuo server con OLLAMA_ORIGINS per questa origine.
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.
- Sempre disponibile offline: Scrittura, tavola delle trame, modifica di personaggi e mondi, creazione e ripristino di snapshot, esportazione in PDF / Markdown / TXT, tutte le impostazioni.
- Richiede rete: I provider IA cloud (Gemini, OpenAI, Anthropic, Grok) inviano la tua richiesta su internet. La scrittura non viene mai bloccata; solo le funzioni IA restituiscono un errore.
- Scarica modelli locali in anticipo: Vai in Impostazioni → IA avanzata → Modelli IA locali e scarica un modello. Una volta in cache, l'inferenza funziona offline.
- Cache dello shell PWA: Installa WorldScript come PWA (pulsante «Installa» del browser) per memorizzare nella cache lo shell dell'app tramite il Service Worker.
- Archiviazione OPFS: DuckDB e il modello di embedding locale usano l'Origin Private File System del browser, un'area persistente che non viene cancellata dalla normale pulizia della cache.
",
"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)
- Manoscritti, personaggi e costruzione del mondo: mai trasmessi da nessuna parte a meno che non invii esplicitamente un passaggio specifico a un fornitore di intelligenza artificiale per l'elaborazione.
- Chiavi API: crittografate a riposo con AES-256-GCM (PBKDF2, 600.000 iterazioni SHA-256) prima di essere salvati in IndexedDB. La chiave di testo in chiaro non viene mai scritta su disco, mai archiviata in localStorage e mai inviata a nessun server WorldScript.
- Istantanee e backup: archiviati interamente nell'IndexedDB del tuo browser. I file JSON esportati vanno direttamente nella cartella dei download del tuo dispositivo.
- Indice RAG e analisi DuckDB: blocchi di manoscritti, incorporamenti di vettori e dati di analisi risiedono tutti nell'OPFS del tuo browser. Solo il prompt assemblato finale, non l'indice non elaborato, viene inviato a un provider.
Cosa lascia il tuo dispositivo (solo quando lo scegli tu)
- Richieste Cloud AI: quando usi Gemini, OpenAI, Anthropic o Grok, solo il testo che hai esplicitamente inviato per quell'azione specifica viene inviato al provider. WorldScript non aggiunge telemetria nascosta a queste richieste.
- Politiche sui dati dei fornitori di intelligenza artificiale: ogni fornitore ha i propri termini di conservazione dei dati. Per impostazione predefinita, le richieste API di Google Gemini non vengono utilizzate per addestrare i modelli di Google. Controlla i termini dello sviluppatore del provider scelto per la politica attuale.
- Collaborazione (solo attivazione): se abiliti la collaborazione P2P, gli aggiornamenti dei documenti Yjs vengono crittografati end-to-end (AES-256-GCM + PBKDF2) prima di lasciare il browser. Il server di segnalazione coordina le connessioni ma non vede mai il contenuto del tuo manoscritto.
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)
- Manoscritti, personaggi e costruzione del mondo: mai trasmessi da nessuna parte a meno che non invii esplicitamente un passaggio specifico a un fornitore di intelligenza artificiale per l'elaborazione.
- Chiavi API: le chiavi 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 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.)
- Istantanee e backup: nella build Browser/PWA sono archiviati interamente nell'IndexedDB del tuo browser; nella build desktop Tauri, come file JSON locali nella directory dati dell'app. I file JSON esportati vanno direttamente nella cartella dei download del tuo dispositivo.
- Indice RAG e analisi DuckDB: blocchi di manoscritti, incorporamenti di vettori e dati di analisi risiedono tutti nell'OPFS del tuo browser. Solo il prompt assemblato finale, non l'indice non elaborato, viene inviato a un provider.
Cosa lascia il tuo dispositivo (solo quando lo scegli tu)
- Richieste Cloud AI: quando usi Gemini, OpenAI, Anthropic o Grok, solo il testo che hai esplicitamente inviato per quell'azione specifica viene inviato al provider. WorldScript non aggiunge telemetria nascosta a queste richieste.
- Politiche sui dati dei fornitori di intelligenza artificiale: ogni fornitore ha i propri termini di conservazione dei dati. Per impostazione predefinita, le richieste API di Google Gemini non vengono utilizzate per addestrare i modelli di Google. Controlla i termini dello sviluppatore del provider scelto per la politica attuale.
- Collaborazione (solo attivazione): se abiliti la collaborazione P2P, gli aggiornamenti dei documenti Yjs vengono crittografati end-to-end (AES-256-GCM + PBKDF2) prima di lasciare il browser. Il server di segnalazione coordina le connessioni ma non vede mai il contenuto del tuo manoscritto.
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.
- Google Gemini (cloud): Il provider predefinito. Gemini Flash è veloce e adatto al livello gratuito; Gemini Pro offre qualità superiore. Chiave API gratuita da Google AI Studio.
- OpenAI (cloud): GPT-4o e GPT-4o-mini tramite chiave API. Eccellente per seguire istruzioni e riscrivere prosa. Consigliato per gli utenti dell'ecosistema OpenAI.
- Ollama (locale — solo desktop): Esegue modelli sulla tua macchina via
localhost:11434. Richiede l'app desktop Tauri. Ideale per la massima privacy senza costi API. - WebLLM (locale — browser): Inferenza GPU direttamente nel browser; senza server, senza chiave API. I modelli vengono scaricati una volta e messi in cache. Ideale per la privacy senza l'app desktop.
- Fallback ibrido: Attiva in Impostazioni → IA avanzata per concatenare automaticamente i provider — es. prima Gemini, poi Ollama in caso di errore.
",
"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.
- Funziona su qualsiasi dispositivo: desktop, laptop, tablet e telefono.
- Sempre aggiornato: il Service Worker recupera gli aggiornamenti in background; viene visualizzata una notifica quando una nuova versione è pronta.
- Funziona offline: scrittura, Plot Board, caratteri, controllo della versione ed esportazione funzionano tutti senza Internet. Solo i provider di intelligenza artificiale cloud (Gemini, OpenAI, ecc.) richiedono una connessione.
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.
- Si apre in una finestra separata, senza schede del browser o barra degli indirizzi visibili.
- Caratteristiche identiche e gli stessi dati IndexedDB della scheda del browser.
- Shell offline memorizzata nella cache dal Service Worker: si apre istantaneamente anche senza Internet.
- Stato di installazione mostrato in Impostazioni → Generale con un segno di spunta verde.
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.
- Accesso nativo al filesystem: leggi e scrivi file direttamente senza un selettore di file per ogni operazione.
- Ollama su localhost: il CSP del browser blocca le connessioni localhost; l'app desktop no. Collega un server Ollama in esecuzione locale all'indirizzo
localhost:11434 per un'inferenza AI offline completamente privata e a costo zero. - Persistenza dello stato della finestra: dimensioni, posizione e stato ingrandito vengono ripristinati esattamente a ogni avvio.
- Aggiornamento automatico: un banner in Impostazioni → Informazioni ti avvisa quando è disponibile una nuova versione e la installa in background.
- Apri cartella dati: Impostazioni → Dati → Apri cartella dati rivela il percorso esatto del sistema operativo in cui sono archiviati i dati, utile per i backup manuali.
- Programmi di installazione: .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), disponibile tramite versioni GitHub.
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.
- Funziona su qualsiasi dispositivo: desktop, laptop, tablet e telefono.
- Sempre aggiornato: il Service Worker recupera gli aggiornamenti in background; viene visualizzata una notifica quando una nuova versione è pronta.
- Funziona offline: scrittura, Plot Board, caratteri, controllo della versione ed esportazione funzionano tutti senza Internet. Solo i provider di intelligenza artificiale cloud (Gemini, OpenAI, ecc.) richiedono una connessione.
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.
- Si apre in una finestra separata, senza schede del browser o barra degli indirizzi visibili.
- Caratteristiche identiche e gli stessi dati IndexedDB della scheda del browser.
- Shell offline memorizzata nella cache dal Service Worker: si apre istantaneamente anche senza Internet.
- Stato di installazione mostrato in Impostazioni → Generale con un segno di spunta verde.
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.
- Accesso nativo al filesystem: leggi e scrivi file direttamente senza un selettore di file per ogni operazione.
- Ollama su localhost: il CSP del browser blocca le connessioni localhost; l'app desktop no. Collega un server Ollama in esecuzione locale all'indirizzo
localhost:11434 per un'inferenza AI offline completamente privata e a costo zero. - Persistenza dello stato della finestra: dimensioni, posizione e stato ingrandito vengono ripristinati esattamente a ogni avvio.
- Aggiornamento automatico: un banner in Impostazioni → Informazioni ti avvisa quando è disponibile una nuova versione e la installa in background.
- Apri cartella dati: Impostazioni → Dati → Apri cartella dati rivela il percorso esatto del sistema operativo in cui sono archiviati i dati, utile per i backup manuali.
- Programmi di installazione: .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), disponibile tramite versioni GitHub.
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:
- 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.
- 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.
- 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.
- Building the index: Go to 設定 → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: 続ける Writing, Brainstorm, AI Critic, and プロットボード \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. 原稿 text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / 編集 / View / ヘルプ menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under 設定 → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: 設定 → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / 編集 / View / ヘルプ menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under 設定 → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: 設定 → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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 キーが必要)
- Google Gemini (推奨 - 無料枠あり):Google AI Studio から無料キーを取得します。それを設定 → AI モデル → Gemini API キー に入力します。推奨モデル: 日常使用には
gemini-2.5-flash、複雑なタスクには gemini-2.5-pro。 - OpenAI: GPT-4o および GPT-4o-mini。 platform.openai.com からキーを取得します。それを設定 → AI モデル → OpenAI キー に入力します。指示に従うことと散文の書き直しが得意。
- 人間性 (クロード): クロード 3.5 ソネットおよびクロード 3 俳句。 console.anthropic.com からキーを取得します。それを設定 → AI モデル → Anthropic キー に入力します。長い形式の物語やニュアンスのあるトーンに最適です。
- Grok (xAI): Grok-2。 xAI 開発者ポータルからキーを取得します。それを設定 → AI モデル → xAI キー に入力します。 GPT-4 よりもトークンあたりのコストが低く、クリエイティブなタスクで競争力があります。
ローカル プロバイダー (API キーは必要ありません)
- WebLLM (ブラウザ、GPU): 量子化された LLM (Llama 3.2、Phi-3.5 Mini、Gemma 2) を WebGPU 経由でブラウザで直接実行します。 [設定] → [高度な AI] → [ローカル AI モデル] でモデルをダウンロードします。ダウンロードが完了すると、推論はコストゼロで完全にオフラインで実行されます。
- ONNX ランタイム Web (ブラウザ、CPU): GPU を使用しない WASM ベースの推論。どのデバイスでも動作します。 WebLLM よりも遅いですが、短い完了や分類タスクに適しています。
- Transformers.js: ローカル RAG 埋め込みモデルをバックグラウンドで自動的に実行します。構成は必要ありません。RAG コンテキストが有効になると開始されます。
- Ollama (デスクトップ アプリのみ):
localhost:11434 でローカルで実行されている Ollama サーバーに接続します。 Tauri デスクトップ アプリが必要です。まず、ollama pull llama3.2 を実行します。 API コストはゼロで、完全にプライベートで、LoRA アダプターを含む Ollama 互換モデルをサポートします。
キーのセキュリティ
すべての 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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Building the index: Go to Configurações → Advanced IA → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the IA prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continuar Writing, Brainstorm, IA Critic, and Quadro de Enredo \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when IA completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscrito text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud IA providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Editar / View / Ajuda menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Configurações → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Configurações → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud IA providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Editar / View / Ajuda menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Configurações → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Configurações → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recomendado — nível gratuito disponível): obtenha uma chave gratuita do Google AI Studio. Insira-o em Configurações → Modelos de IA → Chave de API Gemini. Modelos recomendados:
gemini-2.5-flash para uso diário, gemini-2.5-pro para tarefas complexas. - OpenAI: GPT-4o e GPT-4o-mini. Obtenha uma chave em platform.openai.com. Insira-o em Configurações → Modelos de IA → Chave OpenAI. Forte em seguir instruções e reescrever prosa.
- Antrópico (Claude): Claude 3.5 Soneto e Claude 3 Haiku. Obtenha uma chave em console.anthropic.com. Insira-o em Configurações → Modelos de IA → Chave antrópica. Excelente para narrativas longas e tons matizados.
- Grok (xAI): Grok-2. Obtenha uma chave no portal do desenvolvedor xAI. Insira-o em Configurações → Modelos de IA → Chave xAI. Competitivo em tarefas criativas com menor custo por token do que GPT-4.
Provedores locais (sem necessidade de chave de API)
- WebLLM (navegador, GPU): executa LLMs quantizados (Llama 3.2, Phi-3.5 Mini, Gemma 2) diretamente no navegador via WebGPU. Baixe um modelo em Configurações → IA avançada → Modelos de IA locais. Depois de baixada, a inferência é executada totalmente offline e sem custo.
- ONNX Runtime Web (navegador, CPU): inferência baseada em WASM sem GPU. Funciona em qualquer dispositivo; mais lento que o WebLLM, mas adequado para conclusões curtas e tarefas de classificação.
- Transformers.js: executa o modelo de incorporação RAG local automaticamente em segundo plano. Nenhuma configuração necessária — ele inicia quando o contexto RAG está ativado.
- Ollama (somente aplicativo de desktop): Conecta-se a um servidor Ollama em execução local em
localhost:11434. Requer o aplicativo de desktop Tauri. Execute ollama pull llama3.2 para começar. Custo zero de API, totalmente privado, compatível com qualquer modelo compatível com Ollama, incluindo adaptadores LoRA.
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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Building the index: Go to 设置 → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: 继续 Writing, Brainstorm, AI Critic, and 情节板 \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. 手稿 text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / 编辑 / View / 帮助 menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under 设置 → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: 设置 → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / 编辑 / View / 帮助 menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under 设置 → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: 设置 → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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 密钥)
- Google Gemini(推荐 - 提供免费套餐):从 Google AI Studio 获取免费密钥。在设置 → AI 模型 → Gemini API 密钥下输入。推荐型号:适合日常使用的
gemini-2.5-flash,适合复杂任务的 gemini-2.5-pro。 - OpenAI: GPT-4o 和 GPT-4o-mini。从 platform.openai.com 获取密钥。在设置 → AI 模型 → OpenAI 密钥下输入。擅长遵循指令和散文重写。
- 人类(克劳德):克劳德3.5十四行诗和克劳德3俳句。从 console.anthropic.com 获取密钥。在设置 → AI 模型 → Anthropic key 下输入。非常适合长篇叙事和细致入微的语气。
- Grok (xAI): Grok-2。从 xAI 开发者门户获取密钥。在设置 → AI 模型 → xAI 密钥下输入。在创意任务上具有竞争力,每个令牌的成本低于 GPT-4。
本地提供商(无需 API 密钥)
- WebLLM(浏览器、GPU):通过 WebGPU 直接在浏览器中运行量化的 LLM(Llama 3.2、Phi-3.5 Mini、Gemma 2)。在设置 → 高级 AI → 本地 AI 模型下下载模型。下载后,推理可以零成本完全离线运行。
- ONNX 运行时 Web(浏览器、CPU):基于 WASM 的推理,无需 GPU。适用于任何设备;比 WebLLM 慢,但适合短期完成和分类任务。
- Transformers.js:在后台自动运行本地 RAG 嵌入模型。无需配置 - 它在启用 RAG 上下文时启动。
- Ollama(仅限桌面应用程序):连接到位于
localhost:11434 的本地运行的 Ollama 服务器。需要 Tauri 桌面应用程序。运行 ollama pull llama3.2 即可开始。零 API 成本,完全私有,支持任何 Ollama 兼容模型,包括 LoRA 适配器。
密钥安全
每个 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.
- Auslösen: Plot Board öffnen (Plot Board v2 zunächst in den Feature-Flags aktivieren). Auf KI ✦ in der Plot-Board-Symbolleiste klicken.
- Funktionsweise: WorldScript erstellt einen RAG-angereicherten Prompt aus den letzten Manuskriptabschnitten, vorhandenen Beat-Karten und der Projekt-Gliederung und sendet ihn an den konfigurierten KI-Anbieter.
- Ausgabe: Die KI gibt einen Vorschlagstitel, eine kurze Beschreibung und eine empfohlene Aktzuordnung zurück. Eine Vorschaukarte erscheint mit Übernehmen- und Ablehnen-Schaltflächen.
- Übernehmen: Das Klicken auf „Übernehmen“ erstellt die Beat-Karte im vorgeschlagenen Akt. Sie kann gezogen oder der Titel inline bearbeitet werden.
- Mehrere Vorschläge: Erneut vorschlagen liefert eine Alternative; beide erscheinen nebeneinander zum Vergleich.
- Beste Ergebnisse: Funktioniert am besten bei mindestens 500 Wörtern im Manuskript und beschreibenden Beat-Kartentiteln.
",
"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
- Google Gemini (Standard): Schnell, großzügiges kostenloses Kontingent. Hol dir einen kostenlosen API-Schlüssel von Google AI Studio. Empfohlene Modelle:
gemini-2.5-flash für den täglichen Einsatz, gemini-2.5-pro für komplexe Aufgaben. - OpenAI: GPT-4o und GPT-4o-mini. Trage deinen OpenAI-Schlüssel unter Einstellungen → KI → OpenAI-Schlüssel ein. Stark bei Anweisungsfolgen und Prosa-Umformulierungen.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6 und Haiku 4.5. Schlüssel über console.anthropic.com. Ausgezeichnet für lange Erzählungen und differenzierte Tonlage. Läuft nativ in der Desktop-App; im Web wird der Aufruf über den eigenen Serverless-Proxy von WorldScript auf Vercel-/Cloudflare-Pages-Deployments weitergeleitet (nicht verfügbar auf dem statischen GitHub-Pages-Mirror).
- Grok (xAI):
grok-3 und grok-3-mini über die xAI-API. Schlüssel aus dem xAI-Entwicklerportal. Wettbewerbsfähig bei kreativen Aufgaben mit niedrigeren Kosten pro Token als GPT-4. - OpenRouter: Ein einheitliches Gateway zu DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B und Hunderten weiteren. Kostenloser Schlüssel unter openrouter.ai/keys; Modelle mit dem Suffix
:free kosten nichts.
Lokale / Self-Hosted-Anbieter
- Ollama (lokal): Führt Modelle auf deiner Maschine via
http://localhost:11434 aus. Installiere Ollama und führe ollama pull llama3.2 aus. Die Desktop-App verbindet sich nativ – Browser können standardmäßig nicht origin-übergreifend auf localhost zugreifen (CORS, nicht CSP). Im Web/PWA-Build ist dies standardmäßig nur auf dem Desktop möglich; ein Opt-in-Flag Browser-Ollama-Verbindung unter Einstellungen → Experimentell erlaubt eine direkte Browser-Verbindung, wenn du deinen eigenen Server mit OLLAMA_ORIGINS für genau diesen Origin startest – fortgeschritten und nicht unterstützt. Unterstützt jedes Ollama-kompatible Modell einschließlich LoRA-Adapter. - WebLLM (Browser, GPU): Quantisierte LLMs direkt im Browser über WebGPU – kein API-Schlüssel, kein Internet nach dem ersten Download nötig. Unterstützte Modelle: Llama 3.2 1B/3B, Phi-3.5 Mini, Gemma 2 2B. Erfordert eine WebGPU-fähige GPU (~2–6 GB VRAM). Modell herunterladen unter Einstellungen → Erweiterte KI → Lokale KI-Modelle.
- ONNX Runtime Web (Browser, CPU): WASM-basierte Inferenz ohne GPU. Langsamer als WebLLM, aber auf jedem Gerät lauffähig. Gut für kurze Vervollständigungen und Klassifizierungsaufgaben.
- Transformers.js (automatisch): Betreibt das lokale Einbettungsmodell für den hybriden RAG-Index (MiniLM-L6-v2, 384 Dimensionen). Läuft automatisch – keine Konfiguration nötig.
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
- Google Gemini (Standard): Schnell, großzügiges kostenloses Kontingent. Hol dir einen kostenlosen API-Schlüssel von Google AI Studio. Empfohlene Modelle:
gemini-2.5-flash für den täglichen Einsatz, gemini-2.5-pro für komplexe Aufgaben. - OpenAI: GPT-4o und GPT-4o-mini. Trage deinen OpenAI-Schlüssel unter Einstellungen → KI → OpenAI-Schlüssel ein. Stark bei Anweisungsfolgen und Prosa-Umformulierungen.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6 und Haiku 4.5. Schlüssel über console.anthropic.com. Ausgezeichnet für lange Erzählungen und differenzierte Tonlage. Läuft nativ in der Desktop-App; im Web wird der Aufruf über den eigenen Serverless-Proxy von WorldScript auf Vercel-/Cloudflare-Pages-Deployments weitergeleitet (nicht verfügbar auf dem statischen GitHub-Pages-Mirror).
- Grok (xAI):
grok-3 und grok-3-mini über die xAI-API. Schlüssel aus dem xAI-Entwicklerportal. Wettbewerbsfähig bei kreativen Aufgaben mit niedrigeren Kosten pro Token als GPT-4. - OpenRouter: Ein einheitliches Gateway zu DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B und Hunderten weiteren. Kostenloser Schlüssel unter openrouter.ai/keys; Modelle mit dem Suffix
:free kosten nichts.
Lokale / Self-Hosted-Anbieter
- Ollama (lokal): Führt Modelle auf deiner Maschine via
http://localhost:11434 aus. Installiere Ollama und führe ollama pull llama3.2 aus. Die Desktop-App verbindet sich nativ – Browser können standardmäßig nicht origin-übergreifend auf localhost zugreifen (CORS, nicht CSP). Im Web/PWA-Build ist dies standardmäßig nur auf dem Desktop möglich; ein Opt-in-Flag Browser-Ollama-Verbindung unter Einstellungen → Experimentell erlaubt eine direkte Browser-Verbindung, wenn du deinen eigenen Server mit OLLAMA_ORIGINS für genau diesen Origin startest – fortgeschritten und nicht unterstützt. Unterstützt jedes Ollama-kompatible Modell einschließlich LoRA-Adapter. - WebLLM (Browser, GPU): Quantisierte LLMs direkt im Browser über WebGPU – kein API-Schlüssel, kein Internet nach dem ersten Download nötig. Unterstützte Modelle: Llama 3.2 1B/3B, Phi-3.5 Mini, Gemma 2 2B. Erfordert eine WebGPU-fähige GPU (~2–6 GB VRAM). Modell herunterladen unter Einstellungen → Erweiterte KI → Lokale KI-Modelle.
- ONNX Runtime Web (Browser, CPU): WASM-basierte Inferenz ohne GPU. Langsamer als WebLLM, aber auf jedem Gerät lauffähig. Gut für kurze Vervollständigungen und Klassifizierungsaufgaben.
- Transformers.js (automatisch): Betreibt das lokale Einbettungsmodell für den hybriden RAG-Index (MiniLM-L6-v2, 384 Dimensionen). Läuft automatisch – keine Konfiguration nötig.
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 %).
- Index unter Einstellungen → Erweiterte KI → Lokalen Suchindex neu aufbauen erstellen (lokales Embedding-Modell erforderlich).
- KI-Schreibstudio öffnen, RAG-Kontext aktivieren, dann Weiterschreiben, Brainstorm oder Kritik nutzen.
- 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.
- Ansichten: Jede Ansicht ist in
React.lazy() mit Suspense-Grenze gekapselt. Das Bundle lädt beim ersten Besuch; folgende nutzen den Browser-Cache. - Vite-manualChunks: Vendor-Code in benannte Chunks aufgeteilt:
vendor-react, vendor-redux, plot-board, export-docx, collab-yjs. Jeder Chunk lädt nur beim ersten Öffnen der jeweiligen Ansicht. - KI-Provider-Schicht:
services/ai/index.ts wird beim ersten KI-Tool-Einsatz dynamisch importiert. Das Vercel AI SDK (~200 KB gzippt) ist nicht im Entry-Chunk. - DuckDB & RAG: Listener und lokales Embedding-Modell werden nur bei aktiviertem Flag geladen. Cold-Start bleibt unberührt.
- Force-Graph:
react-force-graph-2d wird erst beim Öffnen der Figurengraph-Ansicht mit mindestens einer Figur importiert. - Bundle-Budget: CI-Job
bundle:budget: max. 7 000 KB Vendor-Chunk, 4 500 KB Entry-Chunk. Überschreitungen schlagen den Build fehl.
",
"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.
- Kein Konto erforderlich: Es gibt keine Anmeldung, keine Cloud-Synchronisierung und keinen Server, auf dem deine Manuskripte gespeichert werden. Alle Daten liegen in IndexedDB und OPFS deines Browsers.
- API-Schlüsselverschlüsselung: Wenn du einen API-Schlüssel eingibst, wird er mit AES-256-GCM (256-Bit-Schlüssel, zufälliges 12-Byte-IV, PBKDF2 mit 600.000 SHA-256-Iterationen) verschlüsselt, bevor er in IndexedDB gespeichert wird. Der Klartextschlüssel wird nie auf die Festplatte oder localStorage geschrieben.
- KI-Anfragen: Nur der explizit von dir übermittelte Text (z. B. eine ausgewählte Passage für „Text verbessern”) wird an deinen gewählten Anbieter gesendet. Die RAG-Pipeline läuft lokal; nur der fertig zusammengestellte Prompt wird über das Netzwerk übertragen.
- Content Security Policy: Der Web-Build enthält einen strengen CSP, der Inline-Skripte, beliebige Netzwerkanfragen und Localhost-Verbindungen blockiert (verhindert, dass eine kompromittierte Erweiterung über die Seite auf Ollama zugreift).
- Tauri-Desktop: Die Rust-Shell beschränkt Plugin-Berechtigungen auf das App-Datenverzeichnis. Beliebiger Dateisystemzugriff ist blockiert; das
dialog-Plugin erfordert Benutzerbestätigung für jeden Öffnungs-/Speichervorgang. - Kollaboration: Wenn Kollaboration aktiv ist, werden Yjs-Updates Ende-zu-Ende-verschlüsselt (AES-256-GCM + PBKDF2), bevor sie den Browser verlassen. Der Signaling-Server sieht nie Klartext-Dokumentinhalte.
- Abhängigkeitsprüfungen: OSV- und CodeQL-Scans laufen bei jedem CI-Push. Dependabot überwacht neue CVEs; Override-Pins in
pnpm.overrides werden genutzt, wenn eine gepatchte Version noch nicht im Upstream verfügbar ist.
",
+ "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.
- Kein Konto erforderlich: Es gibt keine Anmeldung, keine Cloud-Synchronisierung und keinen Server, auf dem deine Manuskripte gespeichert werden. Alle Daten bleiben auf deinem Gerät: im Browser/PWA-Build in IndexedDB und OPFS deines Browsers, im Tauri-Desktop-Build als lokale Dateien im Datenverzeichnis der App.
- API-Schlüsselschutz: Browser/PWA-API-Schlüssel sind mit AES-256-GCM in IndexedDB geschützt (zufälliger, nicht extrahierbarer Schlüssel). Der Schutz von Desktop-API-Schlüsseln folgt dem Desktop-Speicher-Lebenszyklus; Details zum Browser-Speicher gelten nicht automatisch für Desktop-Dateien.
- KI-Anfragen: Nur der explizit von dir übermittelte Text (z. B. eine ausgewählte Passage für „Text verbessern”) wird an deinen gewählten Anbieter gesendet. Die RAG-Pipeline läuft lokal; nur der fertig zusammengestellte Prompt wird über das Netzwerk übertragen.
- Content Security Policy: Der Web-Build enthält einen strengen CSP, der Inline-Skripte, beliebige Netzwerkanfragen und Localhost-Verbindungen blockiert (verhindert, dass eine kompromittierte Erweiterung über die Seite auf Ollama zugreift).
- Tauri-Desktop: Die Rust-Shell beschränkt Plugin-Berechtigungen auf das App-Datenverzeichnis. Beliebiger Dateisystemzugriff ist blockiert; das
dialog-Plugin erfordert Benutzerbestätigung für jeden Öffnungs-/Speichervorgang. - Kollaboration: Wenn Kollaboration aktiv ist, werden Yjs-Updates Ende-zu-Ende-verschlüsselt (AES-256-GCM + PBKDF2), bevor sie den Browser verlassen. Der Signaling-Server sieht nie Klartext-Dokumentinhalte.
- Abhängigkeitsprüfungen: OSV- und CodeQL-Scans laufen bei jedem CI-Push. Dependabot überwacht neue CVEs; Override-Pins in
pnpm.overrides werden genutzt, wenn eine gepatchte Version noch nicht im Upstream verfügbar ist.
",
"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)
- Installieren: In Chrome, Edge oder Safari auf den „Installieren“-Prompt klicken. Das App-Symbol erscheint auf dem Desktop oder Startbildschirm.
- Offline-Shell-Cache: Der Service Worker cacht die App-Shell vorab – Oberfläche lädt sofort, auch offline. Nur Cloud-KI-Anfragen benötigen Netzwerk.
- Speicher: Daten in IndexedDB und OPFS – dauerhaft, bei normalen Cache-Bereinigungen nicht gelöscht.
- Icons: PWA-Manifest mit 192×192- und 512×512-maskierbaren PNG-Icons für Android und Windows.
Tauri-Desktop-App
- Mehrwert: Nativer Dateisystemzugriff, Ollama auf localhost, Fensterzustand-Persistenz, Datei/Hilfe-Menüleiste und optionales Updater-Banner unter Einstellungen → Über.
- Enthaltene Rust-Plugins:
fs, dialog, http, shell, updater, plus optional menu, tray, window-state. - Datenordner: Einstellungen → Daten → Datenordner öffnen zeigt den OS-Pfad für IndexedDB- und OPFS-Daten.
- Installationspakete: Vom Tauri-CI-Workflow erstellt: macOS (.dmg), Windows (.msi), Linux (.AppImage / .deb).
",
"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.
- Index aufbauen: Einstellungen → Erweiterte KI → Lokalen Suchindex neu aufbauen. WorldScript zerlegt das Manuskript in ~200-Token-Chunks und kodiert jeden mit MiniLM-L6-v2 (384-dim Embeddings) lokal über Transformers.js.
- Hybridsuche: Semantische Kosinusähnlichkeit (~60 %), lexikalische Schlüsselwortüberschneidung (~30 %) und Aktualität (spätere Kapitel bevorzugt, ~10 %) – die Top-K-Passagen werden ausgewählt.
- Prompt-Zusammenstellung:
assembleRAGPrompt() erstellt einen token-budgetierten Kontext-Block und stellt ihn dem Prompt voran. Das Chunk-Badge im Writer zeigt die Anzahl injizierter Passagen. - Einsatzbereiche: Weiterschreiben, Brainstormen, KI-Kritik und Plot-Board-„Beat vorschlagen“ nutzen dieselbe Pipeline bei aktiviertem RAG.
- Neuaufbau-Auslöser: Nach Backup-Import oder vielen neuen Figuren/Welteinträgen, oder wenn KI-Ergebnisse die Story-Details nicht kennen.
- Datenschutz: Der Index liegt im Browser-OPFS. Manuskripttext wird nie hochgeladen – nur der fertige Prompt geht an den Cloud-Anbieter.
",
"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
- Nativer Dateisystemzugriff: Dateien direkt über das Tauri-
fs-Plugin lesen und schreiben – kein Browser-Dateidialog für jeden Vorgang. Logs werden in $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl geschrieben. - Ollama auf localhost: Browser-CSP blockiert
localhost-Verbindungen; die Desktop-App nicht. Verbinde einen lokal laufenden Ollama-Server unter localhost:11434 für vollständig private, kostenfreie Offline-KI-Inferenz. - Fensterzustand-Persistenz: Fenstergröße, -position und Maximierungsstatus werden bei jedem Start exakt wiederhergestellt (Tauri-
window-state-Plugin). - Native Menüleiste: Datei / Bearbeiten / Ansicht / Hilfe nach OS-Konventionen (macOS: Menü in der Toolbar; Windows/Linux: ins Fenster integriert).
- Auto-Updater: Das Tauri-
updater-Plugin prüft beim Start den GitHub-Releases-JSON-Endpunkt und zeigt unter Einstellungen → Über ein Banner, wenn eine neue Version verfügbar ist. „Update installieren“ lädt sie im Hintergrund herunter und wendet sie an. - Datenordner öffnen: Einstellungen → Daten → Datenordner öffnen öffnet den OS-Datei-Explorer am Verzeichnis, in dem IndexedDB- und OPFS-Daten gespeichert sind – nützlich für manuelle Backups.
- Stronghold (optional): Das
tauri-plugin-stronghold kann die IDB-Verschlüsselungspassphrase im OS-Schlüsselbund speichern, sodass das Entsperr-Modal auf dem Desktop nie erscheint.
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
- Nativer Dateisystemzugriff: Dateien direkt über das Tauri-
fs-Plugin lesen und schreiben – kein Browser-Dateidialog für jeden Vorgang. Logs werden in $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl geschrieben. - Ollama auf localhost: Browser-CSP blockiert
localhost-Verbindungen; die Desktop-App nicht. Verbinde einen lokal laufenden Ollama-Server unter localhost:11434 für vollständig private, kostenfreie Offline-KI-Inferenz. - Fensterzustand-Persistenz: Fenstergröße, -position und Maximierungsstatus werden bei jedem Start exakt wiederhergestellt (Tauri-
window-state-Plugin). - Native Menüleiste: Datei / Bearbeiten / Ansicht / Hilfe nach OS-Konventionen (macOS: Menü in der Toolbar; Windows/Linux: ins Fenster integriert).
- Auto-Updater: Das Tauri-
updater-Plugin prüft beim Start den GitHub-Releases-JSON-Endpunkt und zeigt unter Einstellungen → Über ein Banner, wenn eine neue Version verfügbar ist. „Update installieren“ lädt sie im Hintergrund herunter und wendet sie an. - Datenordner öffnen: Einstellungen → Daten → Datenordner öffnen öffnet den OS-Datei-Explorer am Verzeichnis, in dem IndexedDB- und OPFS-Daten gespeichert sind – nützlich für manuelle Backups.
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)
- Google Gemini (empfohlen – kostenlose Stufe verfügbar): Hol dir einen kostenlosen Schlüssel von Google AI Studio. Gib ihn unter Einstellungen → KI-Modelle → Gemini-API-Schlüssel ein. Empfohlene Modelle:
gemini-2.5-flash für den täglichen Gebrauch, gemini-2.5-pro für komplexe Aufgaben. - OpenAI: GPT-4o und GPT-4o-mini. Hol dir einen Schlüssel von platform.openai.com. Gib ihn unter Einstellungen → KI-Modelle → OpenAI-Schlüssel ein. Stark bei Anweisungsfolgen und Prosaüberarbeitung.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6 und Haiku 4.5. Schlüssel über console.anthropic.com. Gib ihn unter Einstellungen → KI-Modelle → Anthropic-Schlüssel ein. Ausgezeichnet für lange Erzählungen und differenzierte Tonlage. Nativ auf dem Desktop; im Web über einen Serverless-Proxy weitergeleitet (Vercel/Cloudflare Pages), nicht verfügbar auf GitHub Pages.
- Grok (xAI):
grok-3 und grok-3-mini. Schlüssel aus dem xAI-Entwicklerportal. Gib ihn unter Einstellungen → KI-Modelle → xAI-Schlüssel ein. Wettbewerbsfähig bei kreativen Aufgaben mit geringeren Kosten pro Token als GPT-4. - OpenRouter: Ein einheitliches Gateway zu DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B und mehr. Kostenloser Schlüssel unter openrouter.ai/keys; Modelle mit Suffix
:free kosten nichts.
Lokale Anbieter (kein API-Schlüssel erforderlich)
- WebLLM (Browser, GPU): Führt quantisierte LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) direkt im Browser über WebGPU aus. Lade ein Modell unter Einstellungen → Erweiterte KI → Lokale KI-Modelle herunter. Nach dem Download läuft die Inferenz vollständig offline und kostenlos.
- ONNX Runtime Web (Browser, CPU): WASM-basierte Inferenz ohne GPU. Funktioniert auf jedem Gerät; langsamer als WebLLM, aber für kurze Vervollständigungen und Klassifizierungsaufgaben geeignet.
- Transformers.js: Führt das lokale RAG-Einbettungsmodell automatisch im Hintergrund aus. Keine Konfiguration nötig – es startet, wenn RAG-Kontext aktiviert ist.
- Ollama: Verbindet sich mit einem lokal laufenden Ollama-Server unter
localhost:11434. Läuft nativ in der Desktop-App. Führe ollama pull llama3.2 aus, um loszulegen. Null API-Kosten, vollständig privat, unterstützt jedes Ollama-kompatible Modell einschließlich LoRA-Adapter. Im Web/PWA-Build standardmäßig nur auf dem Desktop – ein Opt-in-Flag Browser-Ollama-Verbindung (Einstellungen → Experimentell) erlaubt eine direkte Browser-Verbindung, wenn du deinen eigenen Server mit OLLAMA_ORIGINS für diesen Origin konfigurierst.
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)
- Google Gemini (empfohlen – kostenlose Stufe verfügbar): Hol dir einen kostenlosen Schlüssel von Google AI Studio. Gib ihn unter Einstellungen → KI-Modelle → Gemini-API-Schlüssel ein. Empfohlene Modelle:
gemini-2.5-flash für den täglichen Gebrauch, gemini-2.5-pro für komplexe Aufgaben. - OpenAI: GPT-4o und GPT-4o-mini. Hol dir einen Schlüssel von platform.openai.com. Gib ihn unter Einstellungen → KI-Modelle → OpenAI-Schlüssel ein. Stark bei Anweisungsfolgen und Prosaüberarbeitung.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6 und Haiku 4.5. Schlüssel über console.anthropic.com. Gib ihn unter Einstellungen → KI-Modelle → Anthropic-Schlüssel ein. Ausgezeichnet für lange Erzählungen und differenzierte Tonlage. Nativ auf dem Desktop; im Web über einen Serverless-Proxy weitergeleitet (Vercel/Cloudflare Pages), nicht verfügbar auf GitHub Pages.
- Grok (xAI):
grok-3 und grok-3-mini. Schlüssel aus dem xAI-Entwicklerportal. Gib ihn unter Einstellungen → KI-Modelle → xAI-Schlüssel ein. Wettbewerbsfähig bei kreativen Aufgaben mit geringeren Kosten pro Token als GPT-4. - OpenRouter: Ein einheitliches Gateway zu DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B und mehr. Kostenloser Schlüssel unter openrouter.ai/keys; Modelle mit Suffix
:free kosten nichts.
Lokale Anbieter (kein API-Schlüssel erforderlich)
- WebLLM (Browser, GPU): Führt quantisierte LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) direkt im Browser über WebGPU aus. Lade ein Modell unter Einstellungen → Erweiterte KI → Lokale KI-Modelle herunter. Nach dem Download läuft die Inferenz vollständig offline und kostenlos.
- ONNX Runtime Web (Browser, CPU): WASM-basierte Inferenz ohne GPU. Funktioniert auf jedem Gerät; langsamer als WebLLM, aber für kurze Vervollständigungen und Klassifizierungsaufgaben geeignet.
- Transformers.js: Führt das lokale RAG-Einbettungsmodell automatisch im Hintergrund aus. Keine Konfiguration nötig – es startet, wenn RAG-Kontext aktiviert ist.
- Ollama: Verbindet sich mit einem lokal laufenden Ollama-Server unter
localhost:11434. Läuft nativ in der Desktop-App. Führe ollama pull llama3.2 aus, um loszulegen. Null API-Kosten, vollständig privat, unterstützt jedes Ollama-kompatible Modell einschließlich LoRA-Adapter. Im Web/PWA-Build standardmäßig nur auf dem Desktop – ein Opt-in-Flag Browser-Ollama-Verbindung (Einstellungen → Experimentell) erlaubt eine direkte Browser-Verbindung, wenn du deinen eigenen Server mit OLLAMA_ORIGINS für diesen Origin konfigurierst.
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.
- Immer offline verfügbar: Schreiben, Plot Board, Figuren- und Weltbearbeitung, Snapshot-Erstellung und -Wiederherstellung, Export in PDF / Markdown / TXT, alle Einstellungen.
- Benötigt Netzwerk: Cloud-KI-Anbieter (Gemini, OpenAI, Anthropic, Grok) senden deine Anfrage über das Internet. Das Schreiben wird nie blockiert – nur KI-Funktionen geben einen Fehler zurück.
- Lokale Modelle vorab laden: Gehe zu Einstellungen → Erweiterte KI → Lokale KI-Modelle und lade ein Modell herunter. Nach dem Caching läuft die Inferenz vollständig offline.
- PWA-Shell-Cache: Installiere WorldScript als PWA (Browser-„Installieren“-Prompt), um die App-Shell per Service Worker zu cachen. Folgeladungen funktionieren dann offline.
- OPFS-Speicher: DuckDB-Analytics und das lokale Einbettungsmodell nutzen das Origin Private File System (OPFS) – ein dauerhafter, abgeschirmter Bereich, der bei normalen Cache-Bereinigungen nicht gelöscht wird.
",
"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)
- Manuskripte, Charaktere und Weltaufbau – werden nie irgendwohin übertragen, außer wenn du eine bestimmte Passage ausdrücklich zur Verarbeitung an einen KI-Anbieter sendest.
- API-Schlüssel – im Ruhezustand mit AES-256-GCM (PBKDF2, 600.000 SHA-256-Iterationen) verschlüsselt, bevor sie in IndexedDB gespeichert werden. Der Klartextschlüssel wird nie auf die Festplatte geschrieben, nie in localStorage gespeichert und nie an einen WorldScript-Server gesendet.
- Snapshots und Backups – vollständig in der IndexedDB deines Browsers gespeichert. Exportierte JSON-Dateien gehen direkt in deinen Download-Ordner.
- RAG-Index und DuckDB-Analysen – Manuskriptblöcke, Vektoreinbettungen und Analysedaten liegen alle im OPFS deines Browsers. Nur der fertig zusammengestellte Prompt wird an einen Anbieter gesendet.
Was dein Gerät verlässt (nur wenn du es wählst)
- Cloud-KI-Anfragen: Wenn du Gemini, OpenAI, Anthropic oder Grok verwendest, wird nur der Text gesendet, den du für diese Aktion explizit eingereicht hast. WorldScript fügt keine versteckten Telemetriedaten hinzu.
- Datenpolitik der Anbieter: Jeder Anbieter hat eigene Aufbewahrungsbedingungen. Google-Gemini-API-Anfragen werden standardmäßig nicht zum Training von Google-Modellen verwendet. Prüfe die Entwicklerbedingungen deines gewählten Anbieters.
- Kollaboration (nur Opt-in): Wenn du die P2P-Kollaboration aktivierst, werden Yjs-Dokumentupdates Ende-zu-Ende-verschlüsselt (AES-256-GCM + PBKDF2), bevor sie den Browser verlassen. Der Signaling-Server koordiniert Verbindungen, sieht aber nie den Inhalt deines Manuskripts.
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)
- Manuskripte, Charaktere und Weltaufbau – werden nie irgendwohin übertragen, außer wenn du eine bestimmte Passage ausdrücklich zur Verarbeitung an einen KI-Anbieter sendest.
- API-Schlüssel – 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 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.)
- Snapshots und Backups – im Browser/PWA-Build vollständig in der IndexedDB deines Browsers gespeichert, im Tauri-Desktop-Build als lokale JSON-Dateien im Datenverzeichnis der App. Exportierte JSON-Dateien gehen direkt in deinen Download-Ordner.
- RAG-Index und DuckDB-Analysen – Manuskriptblöcke, Vektoreinbettungen und Analysedaten liegen alle im OPFS deines Browsers. Nur der fertig zusammengestellte Prompt wird an einen Anbieter gesendet.
Was dein Gerät verlässt (nur wenn du es wählst)
- Cloud-KI-Anfragen: Wenn du Gemini, OpenAI, Anthropic oder Grok verwendest, wird nur der Text gesendet, den du für diese Aktion explizit eingereicht hast. WorldScript fügt keine versteckten Telemetriedaten hinzu.
- Datenpolitik der Anbieter: Jeder Anbieter hat eigene Aufbewahrungsbedingungen. Google-Gemini-API-Anfragen werden standardmäßig nicht zum Training von Google-Modellen verwendet. Prüfe die Entwicklerbedingungen deines gewählten Anbieters.
- Kollaboration (nur Opt-in): Wenn du die P2P-Kollaboration aktivierst, werden Yjs-Dokumentupdates Ende-zu-Ende-verschlüsselt (AES-256-GCM + PBKDF2), bevor sie den Browser verlassen. Der Signaling-Server koordiniert Verbindungen, sieht aber nie den Inhalt deines Manuskripts.
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.
- Google Gemini (Cloud): Standard-Anbieter. Gemini Flash ist schnell und Free-Tier-freundlich; Gemini Pro bietet höhere Qualität. Kostenloser API-Schlüssel aus Google AI Studio.
- OpenAI (Cloud): GPT-4o und GPT-4o-mini per API-Schlüssel. Stark bei Anweisungsfolgen und Prosaüberarbeitung. Für OpenAI-Nutzer empfohlen.
- Ollama (lokal – nur Desktop): Führt Modelle auf deiner Maschine via
localhost:11434 aus. Erfordert die Tauri-Desktop-App. Beste Wahl für maximale Privatsphäre ohne API-Kosten. - WebLLM (lokal – Browser): GPU-Inferenz direkt im Browser; kein Server, kein API-Schlüssel. Modelle werden einmal heruntergeladen und gecacht. Ideal für Privatsphäre ohne Desktop-App.
- Hybrid-Fallback: Aktiviere unter Einstellungen → Erweiterte KI, um Anbieter automatisch zu verketten – z. B. erst Gemini, dann Ollama bei Fehler.
",
"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.
- Funktioniert auf jedem Gerät – Desktop, Laptop, Tablet und Telefon.
- Immer aktuell – der Service Worker ruft Updates im Hintergrund ab; eine Benachrichtigung erscheint, wenn eine neue Version bereit ist.
- Offline-fähig – Schreiben, Plot-Board, Charaktere, Versionskontrolle und Export funktionieren ohne Internet. Nur Cloud-KI-Anbieter (Gemini, OpenAI usw.) benötigen eine Verbindung.
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.
- Öffnet sich in einem eigenen Fenster – keine Tabs oder Adressleiste sichtbar.
- Identische Funktionen und dieselben IndexedDB-Daten wie der Browser-Tab.
- Offline-Shell vom Service Worker gecacht – öffnet sich auch ohne Internet sofort.
- Installationsstatus unter Einstellungen → Allgemein mit grünem Häkchen.
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.
- Nativer Dateisystemzugriff – Dateien direkt lesen und schreiben, ohne Dateiauswahl für jeden Vorgang.
- Ollama auf localhost – Browser-CSP blockiert Localhost-Verbindungen; die Desktop-App nicht. Verbinde einen lokal laufenden Ollama-Server unter
localhost:11434 für vollständig private, kostenfreie Offline-KI-Inferenz. - Fensterzustand-Persistenz – Größe, Position und Maximierungsstatus werden bei jedem Start genau wiederhergestellt.
- Auto-Updater – ein Banner unter Einstellungen → Info informiert dich über neue Versionen und installiert sie im Hintergrund.
- Datenordner öffnen – Einstellungen → Daten → Datenordner öffnen zeigt den genauen OS-Pfad deiner gespeicherten Daten – praktisch für manuelle Backups.
- Installer – .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), verfügbar über GitHub Releases.
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.
- Funktioniert auf jedem Gerät – Desktop, Laptop, Tablet und Telefon.
- Immer aktuell – der Service Worker ruft Updates im Hintergrund ab; eine Benachrichtigung erscheint, wenn eine neue Version bereit ist.
- Offline-fähig – Schreiben, Plot-Board, Charaktere, Versionskontrolle und Export funktionieren ohne Internet. Nur Cloud-KI-Anbieter (Gemini, OpenAI usw.) benötigen eine Verbindung.
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.
- Öffnet sich in einem eigenen Fenster – keine Tabs oder Adressleiste sichtbar.
- Identische Funktionen und dieselben IndexedDB-Daten wie der Browser-Tab.
- Offline-Shell vom Service Worker gecacht – öffnet sich auch ohne Internet sofort.
- Installationsstatus unter Einstellungen → Allgemein mit grünem Häkchen.
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.
- Nativer Dateisystemzugriff – Dateien direkt lesen und schreiben, ohne Dateiauswahl für jeden Vorgang.
- Ollama auf localhost – Browser-CSP blockiert Localhost-Verbindungen; die Desktop-App nicht. Verbinde einen lokal laufenden Ollama-Server unter
localhost:11434 für vollständig private, kostenfreie Offline-KI-Inferenz. - Fensterzustand-Persistenz – Größe, Position und Maximierungsstatus werden bei jedem Start genau wiederhergestellt.
- Auto-Updater – ein Banner unter Einstellungen → Info informiert dich über neue Versionen und installiert sie im Hintergrund.
- Datenordner öffnen – Einstellungen → Daten → Datenordner öffnen zeigt den genauen OS-Pfad deiner gespeicherten Daten – praktisch für manuelle Backups.
- Installer – .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), verfügbar über GitHub Releases.
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:
- 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.
- 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.
- 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.
- Building the index: Go to Ρυθμίσεις → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Συνέχεια Writing, Brainstorm, AI Critic, and Πίνακας Πλοκής \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Χειρόγραφο text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Επεξεργασία / View / Βοήθεια menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Ρυθμίσεις → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Ρυθμίσεις → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Επεξεργασία / View / Βοήθεια menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Ρυθμίσεις → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Ρυθμίσεις → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (συνιστάται — διαθέσιμο δωρεάν επίπεδο): Λάβετε ένα δωρεάν κλειδί από το Google. Εισαγάγετε το στην περιοχή Ρυθμίσεις → Μοντέλα AI → Πλήκτρο API Gemini. Προτεινόμενα μοντέλα:
gemini-2.5-flash για καθημερινή χρήση, gemini-2.5-pro για σύνθετες εργασίες. - OpenAI: GPT-4o και GPT-4o-mini. Λάβετε ένα κλειδί από το platform.openai.com. Πληκτρολογήστε το στις Ρυθμίσεις → Μοντέλα AI → Πλήκτρο OpenAI. Ισχυρός στο να ακολουθεί τις οδηγίες και να ξαναγράφει πεζογραφία.
- Anthropic (Claude): Claude 3.5 Sonnet και Claude 3 Haiku. Λάβετε ένα κλειδί από το console.anthropic.com. Εισαγάγετε το στην περιοχή Ρυθμίσεις → Μοντέλα AI → Anthropic key. Εξαιρετικό για αφήγηση μεγάλης μορφής και αποχρώσεις.
- Grok (xAI): Grok-2. Λάβετε ένα κλειδί από την πύλη προγραμματιστών xAI. Εισαγάγετε το στην περιοχή Ρυθμίσεις → Μοντέλα AI → Πλήκτρο xAI. Ανταγωνιστικό σε δημιουργικές εργασίες με χαμηλότερο κόστος ανά διακριτικό από το GPT-4.
Τοπικοί πάροχοι (δεν απαιτείται κλειδί API)
- WebLLM (πρόγραμμα περιήγησης, GPU): Εκτελεί κβαντισμένα LLM (Llama 3.2, Phi-3.5 Mini, Gemma Via στο Web2) Κάντε λήψη ενός μοντέλου στην ενότητα Ρυθμίσεις → Προηγμένο AI → Τοπικά μοντέλα AI. Μετά τη λήψη, το συμπέρασμα εκτελείται πλήρως εκτός σύνδεσης με μηδενικό κόστος.
- ONNX Runtime Web (πρόγραμμα περιήγησης, CPU): Συμπεράσματα βάσει WASM χωρίς GPU. Λειτουργεί σε οποιαδήποτε συσκευή. πιο αργό από το WebLLM, αλλά κατάλληλο για σύντομες ολοκληρώσεις και εργασίες ταξινόμησης.
- Transformers.js: Εκτελεί αυτόματα το τοπικό μοντέλο ενσωμάτωσης RAG στο παρασκήνιο. Δεν απαιτείται διαμόρφωση — ξεκινά όταν είναι ενεργοποιημένο το περιβάλλον RAG.
- Ollama (μόνο εφαρμογή για επιτραπέζιους υπολογιστές): Συνδέεται σε έναν διακομιστή Ollama που εκτελείται τοπικά στη διεύθυνση
localhost:11434. Απαιτεί την εφαρμογή επιφάνειας εργασίας Tauri. Εκτελέστε το olama pull llama3.2 για να ξεκινήσετε. Το μηδενικό κόστος API, πλήρως ιδιωτικό, υποστηρίζει οποιοδήποτε μοντέλο συμβατό με το Ollama, συμπεριλαμβανομένων των προσαρμογέων LoRA.
Ασφάλεια κλειδιού
Κάθε κλειδί 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.
- Trigger: Open the Plot Board (enable Plot Board v2 in feature flags first). Click the AI ✦ button in the Plot Board toolbar to open the suggestion panel.
- How it works: WorldScript assembles a RAG-enriched prompt from your recent manuscript sections, existing beat cards, and your project outline. This context is sent to your configured AI provider.
- Output: The AI returns a suggested beat title, a short description, and a recommended act placement. A preview card appears in the panel with Accept and Reject buttons.
- Accept: Clicking Accept creates the beat card on the board in the suggested act column. You can drag it to reposition or edit the title inline.
- Multiple suggestions: Click Suggest again to get an alternative without accepting the first. Both suggestions appear side-by-side for comparison.
- Best results: Works best when your manuscript has at least 500 words and existing beat cards have descriptive titles. Enable RAG context in Settings → Advanced AI for richer retrieval.
",
"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
- Google Gemini (default): Fast, generous free tier. Get a free API key from Google AI Studio. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex generation tasks. - OpenAI: GPT-4o and GPT-4o-mini. Enter your OpenAI API key in Settings → AI → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6, and Haiku 4.5. Enter your API key from console.anthropic.com. Excellent for long-form narrative and nuanced tone. Works natively in the desktop app; on the web it's relayed through WorldScript's own serverless proxy on Vercel/Cloudflare Pages deployments (unavailable on the static GitHub Pages mirror) — see Settings → AI for the exact status on your deployment.
- Grok (xAI):
grok-3 and grok-3-mini. Enter your key from the xAI developer portal. Competitive on creative tasks with a lower cost per token than GPT-4. - OpenRouter: A unified gateway to DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B, and hundreds more. Sign up for a free key at openrouter.ai/keys — models with a
:free suffix cost nothing. A circuit breaker automatically pauses OpenRouter after repeated rate-limit errors and retries a few minutes later.
Local / Self-Hosted Providers
- Ollama (local): Runs models on your machine via
http://localhost:11434. Install Ollama and run ollama pull llama3.2 to get started. The desktop app connects natively — no setup needed, browsers can't reach localhost across origins by default (CORS, not CSP). The web/PWA build is desktop-only by default; an opt-in Browser-Ollama connection flag under Settings → Experimental lets the browser connect directly if you start your own server with OLLAMA_ORIGINS covering this page's exact origin (shown in Settings once the flag is on) — advanced and unsupported, same real-CORS model NovelCrafter uses. Supports any Ollama-compatible model including fine-tuned LoRA adapters. - WebLLM (browser, GPU): Runs quantized LLMs in the browser via WebGPU — no API key, no internet required after first download. Supported models: Llama 3.2 1B/3B, Phi-3.5 Mini, Gemma 2 2B. Requires a WebGPU-capable GPU (~2–6 GB VRAM). Download a model under Settings → Advanced AI → Local AI models.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Slower than WebLLM but works on any device. Good for short completions and classification tasks.
- Transformers.js (automatic): Powers the local embedding model used by the hybrid RAG index (MiniLM-L6-v2, 384 dimensions). Runs automatically — no configuration needed.
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
- Google Gemini (default): Fast, generous free tier. Get a free API key from Google AI Studio. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex generation tasks. - OpenAI: GPT-4o and GPT-4o-mini. Enter your OpenAI API key in Settings → AI → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6, and Haiku 4.5. Enter your API key from console.anthropic.com. Excellent for long-form narrative and nuanced tone. Works natively in the desktop app; on the web it's relayed through WorldScript's own serverless proxy on Vercel/Cloudflare Pages deployments (unavailable on the static GitHub Pages mirror) — see Settings → AI for the exact status on your deployment.
- Grok (xAI):
grok-3 and grok-3-mini. Enter your key from the xAI developer portal. Competitive on creative tasks with a lower cost per token than GPT-4. - OpenRouter: A unified gateway to DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B, and hundreds more. Sign up for a free key at openrouter.ai/keys — models with a
:free suffix cost nothing. A circuit breaker automatically pauses OpenRouter after repeated rate-limit errors and retries a few minutes later.
Local / Self-Hosted Providers
- Ollama (local): Runs models on your machine via
http://localhost:11434. Install Ollama and run ollama pull llama3.2 to get started. The desktop app connects natively — no setup needed, browsers can't reach localhost across origins by default (CORS, not CSP). The web/PWA build is desktop-only by default; an opt-in Browser-Ollama connection flag under Settings → Experimental lets the browser connect directly if you start your own server with OLLAMA_ORIGINS covering this page's exact origin (shown in Settings once the flag is on) — advanced and unsupported, same real-CORS model NovelCrafter uses. Supports any Ollama-compatible model including fine-tuned LoRA adapters. - WebLLM (browser, GPU): Runs quantized LLMs in the browser via WebGPU — no API key, no internet required after first download. Supported models: Llama 3.2 1B/3B, Phi-3.5 Mini, Gemma 2 2B. Requires a WebGPU-capable GPU (~2–6 GB VRAM). Download a model under Settings → Advanced AI → Local AI models.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Slower than WebLLM but works on any device. Good for short completions and classification tasks.
- Transformers.js (automatic): Powers the local embedding model used by the hybrid RAG index (MiniLM-L6-v2, 384 dimensions). Runs automatically — no configuration needed.
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%).
- Build the index under Settings → Advanced AI → Rebuild local search index (requires the local embedding model on capable devices).
- Open the AI Writing Studio, enable RAG context, and run Continue, Brainstorm, or Critic.
- 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.
- Views: Every view is wrapped in
React.lazy() with a Suspense boundary. The view bundle downloads the first time you navigate to it; subsequent visits use the browser cache. - Vite manual chunks: The build splits vendor code into named chunks:
vendor-react, vendor-redux, plot-board (canvas + SVG), export-docx (docx/jsPDF/jszip), collab-yjs (Yjs + y-webrtc). These download only when you first open their respective view. - AI provider layer:
services/ai/index.ts is dynamically imported the first time an AI tool is used. The Vercel AI SDK and provider adapters (~200 KB gzipped) are not bundled in the entry chunk. - DuckDB & RAG: The DuckDB listener and local embedding model are loaded by the Redux listener middleware only when their feature flags are on. They do not contribute to cold-start bundle size.
- Force graph:
react-force-graph-2d is lazy-imported only when you navigate to the Character Graph and have at least one character — the empty-state view loads without triggering the import. - Bundle budget: The CI
bundle:budget job enforces a maximum of 7 000 KB for the vendor chunk and 4 500 KB for the entry chunk. PRs that exceed these limits fail the build.
",
"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.
- No account required: There is no sign-up, no cloud sync, and no server that stores your manuscripts. All data lives in your browser's IndexedDB and OPFS.
- API key protection: Browser/PWA API keys are AES-256-GCM protected in IndexedDB. Desktop API-key protection follows the desktop storage lifecycle; do not assume browser storage details apply to desktop files.
- AI requests: Only the text you explicitly submit (e.g. a selected passage for \"Improve Text\") is sent to your chosen provider. The RAG pipeline runs locally; only the final assembled prompt travels over the network.
- Content Security Policy: The web build includes a strict CSP that blocks inline scripts, arbitrary network requests, and localhost connections (preventing a compromised extension from accessing Ollama via the page).
- Tauri desktop: The Rust shell restricts plugin permissions to the app data directory. Arbitrary filesystem access is blocked; the
dialog plugin requires user confirmation for every open/save operation. - Collaboration: When Collaboration is enabled, Yjs updates are end-to-end encrypted (AES-256-GCM + PBKDF2) before leaving the browser. The signaling server never sees plaintext document content.
- Dependency audits: OSV + CodeQL scanning runs on every CI push. Dependabot watches for new CVEs; override pins in
pnpm.overrides are used when a patched version is not yet available upstream.
",
+ "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.
- No account required: There is no sign-up, no cloud sync, and no server that stores 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.
- API key protection: Browser/PWA API keys are AES-256-GCM protected in IndexedDB. Desktop API-key protection follows the desktop storage lifecycle; do not assume browser storage details apply to desktop files.
- AI requests: Only the text you explicitly submit (e.g. a selected passage for \"Improve Text\") is sent to your chosen provider. The RAG pipeline runs locally; only the final assembled prompt travels over the network.
- Content Security Policy: The web build includes a strict CSP that blocks inline scripts, arbitrary network requests, and localhost connections (preventing a compromised extension from accessing Ollama via the page).
- Tauri desktop: The Rust shell restricts plugin permissions to the app data directory. Arbitrary filesystem access is blocked; the
dialog plugin requires user confirmation for every open/save operation. - Collaboration: When Collaboration is enabled, Yjs updates are end-to-end encrypted (AES-256-GCM + PBKDF2) before leaving the browser. The signaling server never sees plaintext document content.
- Dependency audits: OSV + CodeQL scanning runs on every CI push. Dependabot watches for new CVEs; override pins in
pnpm.overrides are used when a patched version is not yet available upstream.
",
"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)
- Install: Visit the web app in Chrome, Edge, or Safari and click the \"Install\" prompt in the address bar. The app icon appears on your desktop or home screen.
- Offline shell cache: The Service Worker pre-caches the app shell (HTML, CSS, JS entry chunks) so the interface loads instantly, even offline. Only cloud AI requests need a network connection.
- Storage: Data lives in IndexedDB and OPFS — persistent, sandboxed, and not cleared by normal browser cache clears.
- Icons: The PWA manifest includes 192×192 and 512×512 maskable PNG icons used by Android and Windows for the installed app shortcut.
Tauri desktop app
- What it adds: Native filesystem access, Ollama on localhost, window-state persistence (size, position), a File/Help menu bar, and an optional auto-updater banner under Settings → About.
- Rust plugins bundled:
fs, dialog, http, shell, updater, plus optional menu, tray, and window-state. - Data folder: On the desktop app, Settings → Data → Open data folder reveals the OS path where all IndexedDB and OPFS data is stored — safe to back up manually.
- Installers: Built by the Tauri CI workflow on tagged releases. Available for macOS (.dmg), Windows (.msi), and Linux (.AppImage / .deb).
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Local AI servers (Ollama, LM Studio, vLLM): Browsers block direct
localhost connections (CSP + Private Network Access); the desktop app routes these calls through the native Tauri HTTP stack — no proxy and no OLLAMA_ORIGINS setup needed. Use Settings → AI → Scan common local ports to auto-detect servers at localhost:11434 (Ollama), :1234 (LM Studio) and :8000 (vLLM), then adopt a found URL with one click. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6, and Haiku 4.5. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone. Native on desktop; relayed through a serverless proxy on the web (Vercel/Cloudflare Pages), unavailable on GitHub Pages.
- Grok (xAI):
grok-3 and grok-3-mini. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4. - OpenRouter: A unified gateway to DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B, and more. Free key at openrouter.ai/keys;
:free-suffixed models cost nothing.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama: Connects to a locally-running Ollama server at
localhost:11434. Works natively in the desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters. In the web/PWA build it's desktop-only by default — an opt-in Browser-Ollama connection flag (Settings → Experimental) lets the browser connect directly if you configure your own server's OLLAMA_ORIGINS for this page's origin.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude Opus 4.7, Sonnet 4.6, and Haiku 4.5. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone. Native on desktop; relayed through a serverless proxy on the web (Vercel/Cloudflare Pages), unavailable on GitHub Pages.
- Grok (xAI):
grok-3 and grok-3-mini. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4. - OpenRouter: A unified gateway to DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B, and more. Free key at openrouter.ai/keys;
:free-suffixed models cost nothing.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama: Connects to a locally-running Ollama server at
localhost:11434. Works natively in the desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters. In the web/PWA build it's desktop-only by default — an opt-in Browser-Ollama connection flag (Settings → Experimental) lets the browser connect directly if you configure your own server's OLLAMA_ORIGINS for this page's origin.
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.
- Always available offline: Writing, the Plot Board, character and world editing, snapshot creation and restore, Export to PDF / Markdown / TXT, all Settings.
- Needs network: Cloud AI providers (Gemini, OpenAI, Anthropic, Grok) send your prompt over the internet. Writing is never blocked — only AI features return an error when offline.
- Pre-download local models: Go to Settings → Advanced AI → Local AI models and download a WebLLM or ONNX model while online. Once cached, inference runs fully offline.
- PWA shell cache: Install WorldScript as a PWA (browser \"Install\" prompt) to cache the app shell via the Service Worker. Subsequent loads work offline even without internet.
- OPFS storage: DuckDB analytics and the local embedding model use the browser Origin Private File System (OPFS) — a persistent, sandboxed area not cleared by normal cache-clearing actions.
",
"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)
- Manuscripts, characters, and world-building — never transmitted anywhere unless you explicitly send a specific passage to an AI provider for processing.
- API keys — Browser/PWA API keys are AES-256-GCM protected in IndexedDB. Desktop protection follows the desktop storage lifecycle; API keys are never sent to any WorldScript server.
- Snapshots and backups — stored entirely in your browser's IndexedDB. Exported JSON files go directly to your device's downloads folder.
- RAG index and DuckDB analytics — manuscript chunks, vector embeddings, and analytics data all live in your browser's OPFS. Only the final assembled prompt, not the raw index, is ever sent to a provider.
What leaves your device (only when you choose)
- Cloud AI requests: When you use Gemini, OpenAI, Anthropic, or Grok, only the text you explicitly submitted for that specific action is sent to the provider. WorldScript adds no hidden telemetry to these requests.
- AI provider data policies: Each provider has its own data-retention terms. Google Gemini API requests are not used to train Google's models by default. Check your chosen provider's developer terms for the current policy.
- Collaboration (opt-in only): If you enable P2P collaboration, Yjs document updates are end-to-end encrypted (AES-256-GCM + PBKDF2) before leaving the browser. The signaling server coordinates connections but never sees your manuscript content.
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)
- Manuscripts, characters, and world-building — never transmitted anywhere unless you explicitly send a specific passage to an AI provider for processing.
- API keys — Browser/PWA API keys are AES-256-GCM protected in IndexedDB. Desktop protection follows the desktop storage lifecycle; 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.)
- Snapshots and backups — stored entirely in your browser's IndexedDB on the Browser/PWA build, or in local JSON files under the app's data directory on the Tauri desktop build. Exported JSON files go directly to your device's downloads folder.
- RAG index and DuckDB analytics — manuscript chunks, vector embeddings, and analytics data all live in your browser's OPFS. Only the final assembled prompt, not the raw index, is ever sent to a provider.
What leaves your device (only when you choose)
- Cloud AI requests: When you use Gemini, OpenAI, Anthropic, or Grok, only the text you explicitly submitted for that specific action is sent to the provider. WorldScript adds no hidden telemetry to these requests.
- AI provider data policies: Each provider has its own data-retention terms. Google Gemini API requests are not used to train Google's models by default. Check your chosen provider's developer terms for the current policy.
- Collaboration (opt-in only): If you enable P2P collaboration, Yjs document updates are end-to-end encrypted (AES-256-GCM + PBKDF2) before leaving the browser. The signaling server coordinates connections but never sees your manuscript content.
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.
- Google Gemini (cloud): The default. Gemini Flash is fast and free-tier friendly; Gemini Pro gives higher quality. Requires a free API key from Google AI Studio. Best for: everyday writing assistance.
- OpenAI (cloud): GPT-4o and GPT-4o-mini via API key. Strong instruction-following and prose rewriting. Best for: users already on the OpenAI ecosystem.
- Ollama (local — desktop only): Runs models on your machine via
localhost:11434. Requires the Tauri desktop app (browsers block localhost connections); the Scan common local ports button in Settings → AI auto-detects Ollama, LM Studio and vLLM. Best for: maximum privacy and zero API cost with any Ollama-supported model. - WebLLM (local — browser): GPU inference directly in the browser; no server, no API key. Models are downloaded once and cached. Best for: privacy without the desktop app, fully offline after first download.
- Hybrid fallback: Enable under Settings → Advanced AI to chain providers automatically — e.g., try Gemini first, fall back to Ollama on error. Useful for resilient workflows.
",
"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.
- Works on any device — desktop, laptop, tablet, and phone.
- Always up to date — the Service Worker fetches updates in the background; a notification appears when a new version is ready.
- Offline capable — writing, Plot Board, characters, version control, and export all work without internet. Only cloud AI providers (Gemini, OpenAI, etc.) require a connection.
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.
- Opens in its own window — no browser tabs or address bar visible.
- Identical features and the same IndexedDB data as the browser tab.
- Offline shell cached by the Service Worker — opens instantly even with no internet.
- Install status shown in Settings → General with a green checkmark.
Desktop App (Tauri)
The optional Tauri v2 desktop app wraps WorldScript in a native Rust shell and adds capabilities that browsers cannot provide.
- Native filesystem access — read and write files directly without a file picker for every operation.
- Ollama on localhost — browser CSP blocks localhost connections; the desktop app does not. Connect a locally-running Ollama server at
localhost:11434 for fully private, zero-cost offline AI inference. - Window-state persistence — size, position, and maximized state are restored exactly on every launch.
- Auto-updater — a banner in Settings → About alerts you when a new version is available and installs it in the background.
- Open data folder — Settings → Data → Open data folder reveals the exact OS path where your data is stored, useful for manual backups.
- Installers — .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), available via GitHub Releases.
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.
- Works on any device — desktop, laptop, tablet, and phone.
- Always up to date — the Service Worker fetches updates in the background; a notification appears when a new version is ready.
- Offline capable — writing, Plot Board, characters, version control, and export all work without internet. Only cloud AI providers (Gemini, OpenAI, etc.) require a connection.
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.
- Opens in its own window — no browser tabs or address bar visible.
- Identical features and the same IndexedDB data as the browser tab.
- Offline shell cached by the Service Worker — opens instantly even with no internet.
- Install status shown in Settings → General with a green checkmark.
Desktop App (Tauri)
The optional Tauri v2 desktop app wraps WorldScript in a native Rust shell and adds capabilities that browsers cannot provide.
- Native filesystem access — read and write files directly without a file picker for every operation.
- Ollama on localhost — browser CSP blocks localhost connections; the desktop app does not. Connect a locally-running Ollama server at
localhost:11434 for fully private, zero-cost offline AI inference. - Window-state persistence — size, position, and maximized state are restored exactly on every launch.
- Auto-updater — a banner in Settings → About alerts you when a new version is available and installs it in the background.
- Open data folder — Settings → Data → Open data folder reveals the exact OS path where your data is stored, useful for manual backups.
- Installers — .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), available via GitHub Releases.
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:
- 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.
- 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.
- 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.
- Vistas: Cada vista está envuelta en
React.lazy() con un límite Suspense. El bundle se descarga la primera vez que la visitas; las siguientes usan la caché del navegador. - Vite manualChunks: El código vendor se divide en chunks con nombre:
vendor-react, vendor-redux, plot-board, export-docx, collab-yjs. Cada uno descarga solo al abrir su vista por primera vez. - Capa IA:
services/ai/index.ts se importa dinámicamente al usar la primera herramienta IA. El SDK Vercel AI (~200 KB comprimido) no está en el chunk de entrada. - DuckDB & RAG: El listener DuckDB y el modelo de embeddings local solo cargan si sus banderas están activas. El inicio en frío no se ve afectado.
- Force-graph:
react-force-graph-2d solo se importa al navegar al grafo de personajes con al menos un personaje creado. - Presupuesto de bundle: El job CI
bundle:budget impone un máximo de 7 000 KB para el chunk vendor y 4 500 KB para la entrada. Las PR que superen estos límites fallan el build.
",
"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.
- No se requiere cuenta: No hay registro, ni sincronización en la nube ni servidor que almacene sus manuscritos. Todos los datos residen en IndexedDB y OPFS de su navegador.
- Cifrado de clave API: cuando ingresa una clave API, se cifra con AES-256-GCM (clave de 256 bits, IV aleatoria de 12 bytes, PBKDF2 con 600 000 iteraciones SHA-256) antes de almacenarse en IndexedDB. La clave de texto sin formato nunca se escribe en el disco o en el almacenamiento local.
- Solicitudes de IA: solo el texto que envíe explícitamente (por ejemplo, un pasaje seleccionado para \"Mejorar texto\") se envía al proveedor elegido. El oleoducto RAG corre localmente; solo el mensaje final ensamblado viaja a través de la red.
- Política de seguridad de contenido: La compilación web incluye un CSP estricto que bloquea scripts en línea, solicitudes de red arbitrarias y conexiones de host local (evitando que una extensión comprometida acceda a Ollama a través de la página).
- Escritorio Tauri: El shell de Rust restringe los permisos del complemento al directorio de datos de la aplicación. El acceso arbitrario al sistema de archivos está bloqueado; el complemento
dialog requiere la confirmación del usuario para cada operación de abrir/guardar. - Colaboración: cuando la colaboración está habilitada, las actualizaciones de Yjs se cifran de extremo a extremo (AES-256-GCM + PBKDF2) antes de salir del navegador. El servidor de señalización nunca ve el contenido del documento en texto sin formato.
- Auditorías de dependencia: el escaneo OSV + CodeQL se ejecuta en cada inserción de CI. Dependabot busca nuevos CVE; Los pines de anulación en
pnpm.overrides se utilizan cuando una versión parcheada aún no está disponible en sentido ascendente.
",
+ "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.
- No se requiere cuenta: No hay registro, ni sincronización en la nube ni servidor que almacene sus manuscritos. Todos los datos permanecen en su dispositivo: en la compilación Navegador/PWA, en IndexedDB y OPFS de su navegador; en la compilación de escritorio Tauri, como archivos locales en el directorio de datos de la app.
- Protección de clave API: las claves API del navegador/PWA están protegidas con AES-256-GCM en IndexedDB (clave aleatoria no extraíble). La protección de las claves de escritorio sigue el ciclo de vida del almacenamiento de escritorio; los detalles del almacenamiento del navegador no aplican automáticamente a los archivos de escritorio.
- Solicitudes de IA: solo el texto que envíe explícitamente (por ejemplo, un pasaje seleccionado para \"Mejorar texto\") se envía al proveedor elegido. El oleoducto RAG corre localmente; solo el mensaje final ensamblado viaja a través de la red.
- Política de seguridad de contenido: La compilación web incluye un CSP estricto que bloquea scripts en línea, solicitudes de red arbitrarias y conexiones de host local (evitando que una extensión comprometida acceda a Ollama a través de la página).
- Escritorio Tauri: El shell de Rust restringe los permisos del complemento al directorio de datos de la aplicación. El acceso arbitrario al sistema de archivos está bloqueado; el complemento
dialog requiere la confirmación del usuario para cada operación de abrir/guardar. - Colaboración: cuando la colaboración está habilitada, las actualizaciones de Yjs se cifran de extremo a extremo (AES-256-GCM + PBKDF2) antes de salir del navegador. El servidor de señalización nunca ve el contenido del documento en texto sin formato.
- Auditorías de dependencia: el escaneo OSV + CodeQL se ejecuta en cada inserción de CI. Dependabot busca nuevos CVE; Los pines de anulación en
pnpm.overrides se utilizan cuando una versión parcheada aún no está disponible en sentido ascendente.
",
"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)
- Instalar: En Chrome, Edge o Safari, haz clic en la indicación «Instalar». El icono aparece en tu escritorio o pantalla de inicio.
- Caché del shell sin conexión: El Service Worker almacena en caché el shell de la app (HTML, CSS, JS) de antemano — la interfaz carga al instante, incluso sin conexión.
- Almacenamiento: Datos en IndexedDB y OPFS — persistentes, no borrados por limpiezas normales de caché.
- Iconos: El manifiesto PWA incluye iconos PNG enmascarables de 192×192 y 512×512 para Android y Windows.
App de escritorio Tauri
- Ventajas: Acceso nativo al sistema de archivos, Ollama en localhost, persistencia del estado de ventana, barra de menú Archivo/Ayuda y banner de actualizador opcional en Configuración → Acerca de.
- Plugins Rust incluidos:
fs, dialog, http, shell, updater, más opcionalmente menu, tray, window-state. - Carpeta de datos: Configuración → Datos → Abrir carpeta de datos revela la ruta del SO donde se almacenan los datos de IndexedDB y OPFS.
- Instaladores: Creados por el workflow CI de Tauri en las releases etiquetadas: macOS (.dmg), Windows (.msi), Linux (.AppImage / .deb).
",
"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
- Acceso nativo al sistema de archivos: Lee y escribe archivos directamente a través del plugin Tauri
fs — sin diálogo de archivo del navegador para cada operación. Los logs se escriben en $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama en localhost: El CSP del navegador bloquea las conexiones
localhost; la aplicación de escritorio no. Conecta un servidor Ollama local en localhost:11434 para inferencia IA offline, totalmente privada y gratuita. - Persistencia del estado de ventana: El tamaño, posición y estado de maximización de la ventana se restauran exactamente en cada inicio (plugin
window-state de Tauri). - Barra de menú nativa: Archivo / Editar / Ver / Ayuda según las convenciones del SO (macOS: menú en la barra de herramientas; Windows/Linux: integrado en la ventana).
- Actualización automática: El plugin
updater de Tauri verifica el endpoint JSON de releases de GitHub al inicio y muestra un banner en Configuración → Acerca de cuando hay una nueva versión disponible. - Abrir carpeta de datos: Configuración → Datos → Abrir carpeta de datos abre el explorador del SO en el directorio donde se almacenan los datos IndexedDB y OPFS.
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)
- Google Gemini (recomendado; nivel gratuito disponible): Obtenga una clave gratuita de Google AI Studio. Ingréselo en Configuración → Modelos AI → Clave API de Gemini. Modelos recomendados:
gemini-2.5-flash para uso diario, gemini-2.5-pro para tareas complejas. - OpenAI: GPT-4o y GPT-4o-mini. Obtenga una clave de platform.openai.com. Ingréselo en Configuración → Modelos AI → Clave OpenAI. Fuerte en seguir instrucciones y reescribir prosa.
- Antrópico (Claude): Claude Opus 4.7, Sonnet 4.6 y Haiku 4.5. Obtenga una clave de console.anthropic.com. Introdúcelo en Configuración → Modelos de IA → Clave antrópica. Excelente para narrativa larga y tono matizado. Nativo en escritorio; en la web se retransmite mediante un proxy serverless (Vercel/Cloudflare Pages), no disponible en GitHub Pages.
- Grok (xAI):
grok-3 y grok-3-mini. Obtenga una clave del portal para desarrolladores de xAI. Introdúcelo en Configuración → Modelos AI → Clave xAI. Competitivo en tareas creativas con menor costo por token que GPT-4. - OpenRouter: Una puerta de enlace unificada a DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B y más. Clave gratuita en openrouter.ai/keys; los modelos con sufijo
:free no cuestan nada.
Proveedores locales (no se requiere clave API)
- WebLLM (navegador, GPU): ejecuta LLM cuantificados (Llama 3.2, Phi-3.5 Mini, Gemma 2) directamente en el navegador a través de WebGPU. Descargue un modelo en Configuración → IA avanzada → Modelos de IA locales. Una vez descargada, la inferencia se ejecuta completamente sin conexión y sin coste alguno.
- ONNX Runtime Web (navegador, CPU): inferencia basada en WASM sin GPU. Funciona en cualquier dispositivo; más lento que WebLLM pero adecuado para tareas de clasificación y terminaciones breves.
- Transformers.js: ejecuta el modelo de incrustación RAG local automáticamente en segundo plano. No se necesita configuración: se inicia cuando el contexto RAG está habilitado.
- Ollama: Se conecta a un servidor Ollama que se ejecuta localmente en
localhost:11434. Funciona de forma nativa en la app de escritorio. Ejecute ollama pull llama3.2 para comenzar. Costo API cero, totalmente privado, admite cualquier modelo compatible con Ollama, incluidos los adaptadores LoRA. En la versión web/PWA es solo de escritorio por defecto — un indicador opt-in Conexión Browser-Ollama (Configuración → Experimental) permite una conexión directa del navegador si configuras tu propio servidor con OLLAMA_ORIGINS para este origen.
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)
- Google Gemini (recomendado; nivel gratuito disponible): Obtenga una clave gratuita de Google AI Studio. Ingréselo en Configuración → Modelos AI → Clave API de Gemini. Modelos recomendados:
gemini-2.5-flash para uso diario, gemini-2.5-pro para tareas complejas. - OpenAI: GPT-4o y GPT-4o-mini. Obtenga una clave de platform.openai.com. Ingréselo en Configuración → Modelos AI → Clave OpenAI. Fuerte en seguir instrucciones y reescribir prosa.
- Antrópico (Claude): Claude Opus 4.7, Sonnet 4.6 y Haiku 4.5. Obtenga una clave de console.anthropic.com. Introdúcelo en Configuración → Modelos de IA → Clave antrópica. Excelente para narrativa larga y tono matizado. Nativo en escritorio; en la web se retransmite mediante un proxy serverless (Vercel/Cloudflare Pages), no disponible en GitHub Pages.
- Grok (xAI):
grok-3 y grok-3-mini. Obtenga una clave del portal para desarrolladores de xAI. Introdúcelo en Configuración → Modelos AI → Clave xAI. Competitivo en tareas creativas con menor costo por token que GPT-4. - OpenRouter: Una puerta de enlace unificada a DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B y más. Clave gratuita en openrouter.ai/keys; los modelos con sufijo
:free no cuestan nada.
Proveedores locales (no se requiere clave API)
- WebLLM (navegador, GPU): ejecuta LLM cuantificados (Llama 3.2, Phi-3.5 Mini, Gemma 2) directamente en el navegador a través de WebGPU. Descargue un modelo en Configuración → IA avanzada → Modelos de IA locales. Una vez descargada, la inferencia se ejecuta completamente sin conexión y sin coste alguno.
- ONNX Runtime Web (navegador, CPU): inferencia basada en WASM sin GPU. Funciona en cualquier dispositivo; más lento que WebLLM pero adecuado para tareas de clasificación y terminaciones breves.
- Transformers.js: ejecuta el modelo de incrustación RAG local automáticamente en segundo plano. No se necesita configuración: se inicia cuando el contexto RAG está habilitado.
- Ollama: Se conecta a un servidor Ollama que se ejecuta localmente en
localhost:11434. Funciona de forma nativa en la app de escritorio. Ejecute ollama pull llama3.2 para comenzar. Costo API cero, totalmente privado, admite cualquier modelo compatible con Ollama, incluidos los adaptadores LoRA. En la versión web/PWA es solo de escritorio por defecto — un indicador opt-in Conexión Browser-Ollama (Configuración → Experimental) permite una conexión directa del navegador si configuras tu propio servidor con OLLAMA_ORIGINS para este origen.
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.
- Siempre disponible sin conexión: Escritura, Tablero de tramas, edición de personajes y mundos, creación y restauración de instantáneas, exportación a PDF / Markdown / TXT, toda la configuración.
- Requiere red: Los proveedores de IA en la nube (Gemini, OpenAI, Anthropic, Grok) envían tu consulta por internet. La escritura nunca se bloquea; solo las funciones de IA devuelven un error.
- Descargar modelos locales con antelación: Ve a Configuración → IA avanzada → Modelos de IA local y descarga un modelo. Una vez en caché, la inferencia funciona sin conexión.
- Caché del shell PWA: Instala WorldScript como PWA (botón «Instalar» del navegador) para cachear el shell de la app mediante el Service Worker.
- Almacenamiento OPFS: DuckDB y el modelo de embeddings local usan el Origin Private File System del navegador, un área persistente que no se borra con la limpieza normal de caché.
",
"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)
- Manuscritos, personajes y construcción del mundo: nunca se transmiten a ninguna parte a menos que envíe explícitamente un pasaje específico a un proveedor de IA para su procesamiento.
- Claves API: cifradas en reposo con AES-256-GCM (PBKDF2, 600.000 iteraciones SHA-256) antes de guardarlo 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.
- Instantáneas y copias de seguridad: se almacenan completamente en IndexedDB de su navegador. Los archivos JSON exportados van directamente a la carpeta de descargas de su dispositivo.
- Índice RAG y análisis DuckDB: fragmentos de manuscritos, incrustaciones de vectores y datos analíticos se encuentran en el OPFS de su navegador. Solo se envía al proveedor el mensaje final ensamblado, no el índice sin procesar.
Lo que sale de su dispositivo (solo cuando usted elige)
- Solicitudes de IA en la nube: Cuando usa Gemini, OpenAI, Anthropic o Grok, solo se envía al proveedor el texto que envió explícitamente para esa acción específica. WorldScript no agrega telemetría oculta a estas solicitudes.
- Políticas de datos del proveedor de IA: Cada proveedor tiene sus propios términos de retención de datos. Las solicitudes de la API de Google Gemini no se utilizan para entrenar los modelos de Google de forma predeterminada. Consulte los términos de desarrollador del proveedor elegido para conocer la política actual.
- Colaboración (solo suscripción): Si habilita la colaboración P2P, las actualizaciones de documentos de Yjs se cifran de extremo a extremo (AES-256-GCM + PBKDF2) antes de salir del navegador. El servidor de señalización coordina las conexiones, pero nunca ve el contenido de su manuscrito.
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)
- Manuscritos, personajes y construcción del mundo: nunca se transmiten a ninguna parte a menos que envíe explícitamente un pasaje específico a un proveedor de IA para su procesamiento.
- Claves API: las claves 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 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.)
- Instantáneas y copias de seguridad: en la compilación de Navegador/PWA se almacenan completamente en IndexedDB de su navegador; en la compilación de escritorio Tauri, como archivos JSON locales en el directorio de datos de la app. Los archivos JSON exportados van directamente a la carpeta de descargas de su dispositivo.
- Índice RAG y análisis DuckDB: fragmentos de manuscritos, incrustaciones de vectores y datos analíticos se encuentran en el OPFS de su navegador. Solo se envía al proveedor el mensaje final ensamblado, no el índice sin procesar.
Lo que sale de su dispositivo (solo cuando usted elige)
- Solicitudes de IA en la nube: Cuando usa Gemini, OpenAI, Anthropic o Grok, solo se envía al proveedor el texto que envió explícitamente para esa acción específica. WorldScript no agrega telemetría oculta a estas solicitudes.
- Políticas de datos del proveedor de IA: Cada proveedor tiene sus propios términos de retención de datos. Las solicitudes de la API de Google Gemini no se utilizan para entrenar los modelos de Google de forma predeterminada. Consulte los términos de desarrollador del proveedor elegido para conocer la política actual.
- Colaboración (solo opcional): Si habilita la colaboración P2P, las actualizaciones de documentos de Yjs se cifran de extremo a extremo (AES-256-GCM + PBKDF2) antes de salir del navegador. El servidor de señalización coordina las conexiones, pero nunca ve el contenido de su manuscrito.
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.
- Google Gemini (nube): El proveedor predeterminado. Gemini Flash es rápido y amigable con el nivel gratuito; Gemini Pro ofrece mayor calidad. Clave de API gratuita de Google AI Studio.
- OpenAI (nube): GPT-4o y GPT-4o-mini mediante clave API. Excelente para seguir instrucciones y reescribir prosa. Recomendado para usuarios del ecosistema OpenAI.
- Ollama (local — solo escritorio): Ejecuta modelos en tu máquina via
localhost:11434. Requiere la app de escritorio Tauri. Ideal para máxima privacidad sin costo de API. - WebLLM (local — navegador): Inferencia GPU directamente en el navegador; sin servidor, sin clave API. Los modelos se descargan una vez y se cachean. Ideal para privacidad sin la app de escritorio.
- Respaldo híbrido: Actívalo en Configuración → IA avanzada para encadenar proveedores automáticamente, p. ej., primero Gemini y luego Ollama si hay un error.
",
"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é.
- Funciona en cualquier dispositivo: computadora de escritorio, portátil, tableta y teléfono.
- Siempre actualizado: Service Worker obtiene actualizaciones en segundo plano; aparece una notificación cuando una nueva versión está lista.
- Capacidad sin conexión: escritura, tablero de trazado, caracteres, control de versiones y exportación, todo funciona sin Internet. Solo los proveedores de IA en la nube (Gemini, OpenAI, etc.) requieren una conexión.
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.
- Se abre en su propia ventana: no hay pestañas del navegador ni barra de direcciones visibles.
- Funciones idénticas y los mismos datos de IndexedDB que la pestaña del navegador.
- Shell sin conexión almacenado en caché por Service Worker: se abre instantáneamente incluso sin Internet.
- El estado de instalación se muestra en Configuración → General con una marca de verificación verde.
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.
- Acceso al sistema de archivos nativo: lee y escribe archivos directamente sin un selector de archivos para cada operación.
- Ollama en localhost: el CSP del navegador bloquea las conexiones de localhost; la aplicación de escritorio no. Conecte un servidor Ollama que se ejecute localmente en
localhost:11434 para obtener una inferencia de IA fuera de línea totalmente privada y sin costo. - Persistencia del estado de la ventana: el tamaño, la posición y el estado maximizado se restauran exactamente en cada inicio.
- Actualizador automático: un banner en Configuración → Acerca de le avisa cuando hay una nueva versión disponible y la instala en el fondo.
- Abrir carpeta de datos — Configuración → Datos → Abrir carpeta de datos revela la ruta exacta del sistema operativo donde se almacenan sus datos, útil para copias de seguridad manuales.
- Instaladores — .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), disponibles a través de versiones de GitHub.
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é.
- Funciona en cualquier dispositivo: computadora de escritorio, portátil, tableta y teléfono.
- Siempre actualizado: Service Worker obtiene actualizaciones en segundo plano; aparece una notificación cuando una nueva versión está lista.
- Capacidad sin conexión: escritura, tablero de trazado, caracteres, control de versiones y exportación, todo funciona sin Internet. Solo los proveedores de IA en la nube (Gemini, OpenAI, etc.) requieren una conexión.
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.
- Se abre en su propia ventana: no hay pestañas del navegador ni barra de direcciones visibles.
- Funciones idénticas y los mismos datos de IndexedDB que la pestaña del navegador.
- Shell sin conexión almacenado en caché por Service Worker: se abre instantáneamente incluso sin Internet.
- El estado de instalación se muestra en Configuración → General con una marca de verificación verde.
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.
- Acceso al sistema de archivos nativo: lee y escribe archivos directamente sin un selector de archivos para cada operación.
- Ollama en localhost: el CSP del navegador bloquea las conexiones de localhost; la aplicación de escritorio no. Conecte un servidor Ollama que se ejecute localmente en
localhost:11434 para obtener una inferencia de IA fuera de línea totalmente privada y sin costo. - Persistencia del estado de la ventana: el tamaño, la posición y el estado maximizado se restauran exactamente en cada inicio.
- Actualizador automático: un banner en Configuración → Acerca de le avisa cuando hay una nueva versión disponible y la instala en el fondo.
- Abrir carpeta de datos — Configuración → Datos → Abrir carpeta de datos revela la ruta exacta del sistema operativo donde se almacenan sus datos, útil para copias de seguridad manuales.
- Instaladores — .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), disponibles a través de versiones de GitHub.
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:
- 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.
- 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.
- 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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Vues : Chaque vue est enveloppée dans
React.lazy() avec une limite Suspense. Le bundle se télécharge au premier accès ; les visites suivantes utilisent le cache navigateur. - Vite manualChunks : Le code vendor est divisé en chunks nommés :
vendor-react, vendor-redux, plot-board, export-docx, collab-yjs. Chacun ne se télécharge qu'au premier accès à sa vue. - Couche IA :
services/ai/index.ts est importé dynamiquement au premier outil IA utilisé. Le SDK Vercel AI (~200 Ko gzipé) n'est pas dans le chunk d'entrée. - DuckDB & RAG : Le listener DuckDB et le modèle d'embeddings local ne chargent que si leurs drapeaux sont actifs. Le démarrage à froid n'est pas affecté.
- Force-graph :
react-force-graph-2d n'est importé que si vous naviguez vers le graphe et avez au moins un personnage. - Budget de bundle : Le job CI
bundle:budget impose un maximum de 7 000 Ko pour le chunk vendor et 4 500 Ko pour l'entrée. Les PRs dépassant ces limites échouent au build.
",
"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.
- Aucun compte requis : Il n'y a pas d'inscription, pas de synchronisation cloud et aucun serveur qui stocke vos manuscrits. Toutes les données se trouvent dans IndexedDB et OPFS de votre navigateur.
- Cryptage par clé API : Lorsque vous saisissez une clé API, elle est cryptée avec AES-256-GCM (clé de 256 bits, IV aléatoire de 12 octets, PBKDF2 avec 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 ou sur le stockage local.
- Requêtes AI : Seul le texte que vous soumettez explicitement (par exemple, un passage sélectionné pour \"Améliorer le texte\") est envoyé au fournisseur de votre choix. Le pipeline RAG s'exécute localement ; seule l'invite finale assemblée circule sur le réseau.
- Politique de sécurité du contenu : La version Web comprend un CSP strict qui bloque les scripts en ligne, les requêtes réseau arbitraires et les connexions localhost (empêchant une extension compromise d'accéder à Ollama via la page).
- Bureau Tauri : Le shell Rust restreint les autorisations du plugin au répertoire de données de l'application. L'accès arbitraire au système de fichiers est bloqué ; le plugin
dialog nécessite une confirmation de l'utilisateur pour chaque opération d'ouverture/sauvegarde. - Collaboration : Lorsque la collaboration est activée, les mises à jour Yjs sont cryptées de bout en bout (AES-256-GCM + PBKDF2) avant de quitter le navigateur. Le serveur de signalisation ne voit jamais le contenu du document en texte brut.
- Audits de dépendances : L'analyse OSV + CodeQL s'exécute à chaque poussée de CI. Dependabot surveille les nouveaux CVE ; les broches de remplacement dans
pnpm.overrides sont utilisées lorsqu'une version corrigée n'est pas encore disponible en amont.
",
+ "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.
- Aucun compte requis : Il n'y a pas d'inscription, pas de synchronisation cloud et aucun serveur qui stocke vos manuscrits. Toutes les données restent sur votre appareil : sur la version Navigateur/PWA, dans IndexedDB et OPFS de votre navigateur ; sur la version bureau Tauri, sous forme de fichiers locaux dans le répertoire de données de l'application.
- Protection par clé API : les clés API du navigateur/PWA sont protégées par AES-256-GCM dans IndexedDB (clé aléatoire non extractible). La protection des clés de bureau suit le cycle de vie du stockage de bureau ; les détails du stockage navigateur ne s'appliquent pas automatiquement aux fichiers de bureau.
- Requêtes AI : Seul le texte que vous soumettez explicitement (par exemple, un passage sélectionné pour \"Améliorer le texte\") est envoyé au fournisseur de votre choix. Le pipeline RAG s'exécute localement ; seule l'invite finale assemblée circule sur le réseau.
- Politique de sécurité du contenu : La version Web comprend un CSP strict qui bloque les scripts en ligne, les requêtes réseau arbitraires et les connexions localhost (empêchant une extension compromise d'accéder à Ollama via la page).
- Bureau Tauri : Le shell Rust restreint les autorisations du plugin au répertoire de données de l'application. L'accès arbitraire au système de fichiers est bloqué ; le plugin
dialog nécessite une confirmation de l'utilisateur pour chaque opération d'ouverture/sauvegarde. - Collaboration : Lorsque la collaboration est activée, les mises à jour Yjs sont cryptées de bout en bout (AES-256-GCM + PBKDF2) avant de quitter le navigateur. Le serveur de signalisation ne voit jamais le contenu du document en texte brut.
- Audits de dépendances : L'analyse OSV + CodeQL s'exécute à chaque poussée de CI. Dependabot surveille les nouveaux CVE ; les broches de remplacement dans
pnpm.overrides sont utilisées lorsqu'une version corrigée n'est pas encore disponible en amont.
",
"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)
- Installer : Dans Chrome, Edge ou Safari, cliquez sur l'invite « Installer ». L'icône apparaît sur votre bureau ou écran d'accueil.
- Cache shell hors ligne : Le Service Worker met en cache le shell de l'app (HTML, CSS, JS) à l'avance — l'interface se charge instantanément, même hors ligne.
- Stockage : Données dans IndexedDB et OPFS — persistantes, non effacées par les suppressions normales de cache.
- Icônes : Le manifeste PWA inclut des icônes PNG masquables 192×192 et 512×512 pour Android et Windows.
Application bureau Tauri
- Valeur ajoutée : Accès natif au système de fichiers, Ollama sur localhost, persistance de l'état de fenêtre, menu Fichier/Aide et bannière d'updater optionnelle dans Paramètres → À propos.
- Plugins Rust :
fs, dialog, http, shell, updater, plus optionnellement menu, tray, window-state. - Dossier de données : Paramètres → Données → Ouvrir le dossier de données révèle le chemin OS où sont stockées les données IndexedDB et OPFS.
- Installateurs : Créés par le workflow CI Tauri sur les releases taguées : macOS (.dmg), Windows (.msi), Linux (.AppImage / .deb).
",
"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
- Accès natif au système de fichiers : Lire et écrire des fichiers directement via le plugin Tauri
fs — sans dialogue de fichier navigateur à chaque opération. Les logs sont écrits dans $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama sur localhost : La CSP du navigateur bloque les connexions
localhost ; l'application bureau non. Connectez un serveur Ollama local sur localhost:11434 pour une inférence IA hors ligne, totalement privée et gratuite. - Persistance de l'état de fenêtre : La taille, la position et l'état de maximisation de la fenêtre sont restaurés exactement à chaque démarrage (plugin
window-state Tauri). - Barre de menus native : Fichier / Édition / Vue / Aide selon les conventions OS (macOS : menu dans la barre d'outils ; Windows/Linux : intégré dans la fenêtre).
- Mise à jour automatique : Le plugin
updater Tauri vérifie l'endpoint JSON des releases GitHub au démarrage et affiche une bannière dans Paramètres → À propos quand une nouvelle version est disponible. - Ouvrir le dossier de données : Paramètres → Données → Ouvrir le dossier de données ouvre l'explorateur OS au répertoire où sont stockées les données IndexedDB et OPFS.
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)
- Google Gemini (recommandé – niveau gratuit disponible) : Obtenez une clé gratuite auprès de Google AI Studio. Saisissez-le sous Paramètres → Modèles IA → Clé API Gemini. Modèles recommandés :
gemini-2.5-flash pour un usage quotidien, gemini-2.5-pro pour les tâches complexes. - OpenAI : GPT-4o et GPT-4o-mini. Obtenez une clé sur platform.openai.com. Saisissez-le sous Paramètres → Modèles IA → Clé OpenAI. Fort dans le suivi des instructions et la réécriture de prose.
- Anthropique (Claude) : Claude Opus 4.7, Sonnet 4.6 et Haiku 4.5. Obtenez une clé sur console.anthropic.com. Saisissez-le sous Paramètres → Modèles IA → Clé anthropique. Excellent pour une narration longue durée et un ton nuancé. Natif sur le bureau ; relayé via un proxy serverless sur le web (Vercel/Cloudflare Pages), indisponible sur GitHub Pages.
- Grok (xAI) :
grok-3 et grok-3-mini. Obtenez une clé sur le portail des développeurs xAI. Saisissez-le sous Paramètres → Modèles AI → Clé xAI. Compétitif sur les tâches créatives avec un coût par jeton inférieur à celui de GPT-4. - OpenRouter : Une passerelle unifiée vers DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B et plus. Clé gratuite sur openrouter.ai/keys ; les modèles avec le suffixe
:free ne coûtent rien.
Fournisseurs locaux (aucune clé API requise)
- WebLLM (navigateur, GPU) : Exécute des LLM quantifiés (Llama 3.2, Phi-3.5 Mini, Gemma 2) directement dans le navigateur via WebGPU. Téléchargez un modèle sous Paramètres → IA avancée → Modèles d'IA locaux. Une fois téléchargée, l'inférence s'exécute entièrement hors ligne et sans coût.
- ONNX Runtime Web (navigateur, CPU) : inférence basée sur WASM sans GPU. Fonctionne sur n'importe quel appareil ; plus lent que WebLLM mais adapté aux tâches de complétion et de classification courtes.
- Transformers.js : exécute automatiquement le modèle d'intégration RAG local en arrière-plan. Aucune configuration nécessaire : il démarre lorsque le contexte RAG est activé.
- Ollama : se connecte à un serveur Ollama exécuté localement à l'adresse
localhost:11434. Fonctionne nativement dans l'application de bureau. Exécutez ollama pull llama3.2 pour commencer. Aucun coût d'API, entièrement privé, prend en charge tout modèle compatible Ollama, y compris les adaptateurs LoRA. Dans la version web/PWA, c'est réservé au bureau par défaut ; un indicateur opt-in Connexion Browser-Ollama (Paramètres → Expérimental) permet une connexion directe du navigateur si vous configurez votre propre serveur avec OLLAMA_ORIGINS pour cette origine.
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)
- Google Gemini (recommandé – niveau gratuit disponible) : Obtenez une clé gratuite auprès de Google AI Studio. Saisissez-le sous Paramètres → Modèles IA → Clé API Gemini. Modèles recommandés :
gemini-2.5-flash pour un usage quotidien, gemini-2.5-pro pour les tâches complexes. - OpenAI : GPT-4o et GPT-4o-mini. Obtenez une clé sur platform.openai.com. Saisissez-le sous Paramètres → Modèles IA → Clé OpenAI. Fort dans le suivi des instructions et la réécriture de prose.
- Anthropique (Claude) : Claude Opus 4.7, Sonnet 4.6 et Haiku 4.5. Obtenez une clé sur console.anthropic.com. Saisissez-le sous Paramètres → Modèles IA → Clé anthropique. Excellent pour une narration longue durée et un ton nuancé. Natif sur le bureau ; relayé via un proxy serverless sur le web (Vercel/Cloudflare Pages), indisponible sur GitHub Pages.
- Grok (xAI) :
grok-3 et grok-3-mini. Obtenez une clé sur le portail des développeurs xAI. Saisissez-le sous Paramètres → Modèles AI → Clé xAI. Compétitif sur les tâches créatives avec un coût par jeton inférieur à celui de GPT-4. - OpenRouter : Une passerelle unifiée vers DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B et plus. Clé gratuite sur openrouter.ai/keys ; les modèles avec le suffixe
:free ne coûtent rien.
Fournisseurs locaux (aucune clé API requise)
- WebLLM (navigateur, GPU) : Exécute des LLM quantifiés (Llama 3.2, Phi-3.5 Mini, Gemma 2) directement dans le navigateur via WebGPU. Téléchargez un modèle sous Paramètres → IA avancée → Modèles d'IA locaux. Une fois téléchargée, l'inférence s'exécute entièrement hors ligne et sans coût.
- ONNX Runtime Web (navigateur, CPU) : inférence basée sur WASM sans GPU. Fonctionne sur n'importe quel appareil ; plus lent que WebLLM mais adapté aux tâches de complétion et de classification courtes.
- Transformers.js : exécute automatiquement le modèle d'intégration RAG local en arrière-plan. Aucune configuration nécessaire : il démarre lorsque le contexte RAG est activé.
- Ollama : se connecte à un serveur Ollama exécuté localement à l'adresse
localhost:11434. Fonctionne nativement dans l'application de bureau. Exécutez ollama pull llama3.2 pour commencer. Aucun coût d'API, entièrement privé, prend en charge tout modèle compatible Ollama, y compris les adaptateurs LoRA. Dans la version web/PWA, c'est réservé au bureau par défaut ; un indicateur opt-in Connexion Browser-Ollama (Paramètres → Expérimental) permet une connexion directe du navigateur si vous configurez votre propre serveur avec OLLAMA_ORIGINS pour cette origine.
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.
- Toujours disponible hors ligne : Écriture, tableau de l'intrigue, édition des personnages et mondes, création et restauration d'instantanés, export en PDF / Markdown / TXT, tous les paramètres.
- Nécessite le réseau : Les fournisseurs IA cloud (Gemini, OpenAI, Anthropic, Grok) envoient votre requête sur internet. L'écriture n'est jamais bloquée ; seules les fonctions IA renvoient une erreur.
- Télécharger des modèles locaux à l'avance : Allez dans Paramètres → IA avancée → Modèles IA locaux et téléchargez un modèle. Une fois en cache, l'inférence fonctionne hors ligne.
- Cache du shell PWA : Installez WorldScript comme PWA (bouton « Installer » du navigateur) pour mettre en cache le shell de l'application via le Service Worker.
- Stockage OPFS : DuckDB et le modèle d'embeddings local utilisent l'Origin Private File System du navigateur, une zone persistante non effacée par la suppression normale du cache.
",
"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)
- Manuscrits, personnages et construction du monde — jamais transmis nulle part, sauf si vous envoyez explicitement un passage spécifique à un fournisseur d'IA pour traitement.
- Clés API — cryptées au repos avec AES-256-GCM (PBKDF2, 600 000 itérations SHA-256) avant d'être enregistré 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.
- Instantanés et sauvegardes — entièrement stockés dans IndexedDB de votre navigateur. Les fichiers JSON exportés vont directement dans le dossier de téléchargements de votre appareil.
- Index RAG et analyses DuckDB : les morceaux de manuscrit, les intégrations vectorielles et les données d'analyse se trouvent tous dans l'OPFS de votre navigateur. Seule l'invite finale assemblée, et non l'index brut, est envoyée à un fournisseur.
Ce qui quitte votre appareil (uniquement lorsque vous le souhaitez)
- Demandes Cloud AI : Lorsque vous utilisez Gemini, OpenAI, Anthropic ou Grok, seul le texte que vous avez explicitement soumis pour cette action spécifique est envoyé au fournisseur. WorldScript n'ajoute aucune télémétrie cachée à ces demandes.
- Politiques de données des fournisseurs d'IA : Chaque fournisseur a ses propres conditions de conservation des données. Les requêtes API Google Gemini ne sont pas utilisées par défaut pour entraîner les modèles de Google. Vérifiez les conditions de développement du fournisseur choisi pour connaître la politique actuelle.
- Collaboration (opt-in uniquement) : Si vous activez la collaboration P2P, les mises à jour des documents Yjs sont cryptées de bout en bout (AES-256-GCM + PBKDF2) avant de quitter le navigateur. Le serveur de signalisation coordonne les connexions mais ne voit jamais le contenu de votre manuscrit.
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)
- Manuscrits, personnages et construction du monde — jamais transmis nulle part, sauf si vous envoyez explicitement un passage spécifique à un fournisseur d'IA pour traitement.
- Clés API — les clés 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 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.)
- Instantanés et sauvegardes — sur la version Navigateur/PWA, entièrement stockés dans IndexedDB de votre navigateur ; sur la version bureau Tauri, sous forme de fichiers JSON locaux dans le répertoire de données de l'application. Les fichiers JSON exportés vont directement dans le dossier de téléchargements de votre appareil.
- Index RAG et analyses DuckDB : les morceaux de manuscrit, les intégrations vectorielles et les données d'analyse se trouvent tous dans l'OPFS de votre navigateur. Seule l'invite finale assemblée, et non l'index brut, est envoyée à un fournisseur.
Ce qui quitte votre appareil (uniquement lorsque vous le souhaitez)
- Demandes Cloud AI : Lorsque vous utilisez Gemini, OpenAI, Anthropic ou Grok, seul le texte que vous avez explicitement soumis pour cette action spécifique est envoyé au fournisseur. WorldScript n'ajoute aucune télémétrie cachée à ces demandes.
- Politiques de données des fournisseurs d'IA : Chaque fournisseur a ses propres conditions de conservation des données. Les requêtes API Google Gemini ne sont pas utilisées par défaut pour entraîner les modèles de Google. Vérifiez les conditions de développement du fournisseur choisi pour connaître la politique actuelle.
- Collaboration (opt-in uniquement) : Si vous activez la collaboration P2P, les mises à jour des documents Yjs sont cryptées de bout en bout (AES-256-GCM + PBKDF2) avant de quitter le navigateur. Le serveur de signalisation coordonne les connexions mais ne voit jamais le contenu de votre manuscrit.
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.
- Google Gemini (cloud) : Fournisseur par défaut. Gemini Flash est rapide et convivial pour le niveau gratuit ; Gemini Pro offre une meilleure qualité. Clé API gratuite depuis Google AI Studio.
- OpenAI (cloud) : GPT-4o et GPT-4o-mini via clé API. Excellent pour le suivi d’instructions et la réécriture de prose. Recommandé pour les utilisateurs de l’écosystème OpenAI.
- Ollama (local — bureau uniquement) : Exécute des modèles sur votre machine via
localhost:11434. Nécessite l’application de bureau Tauri. Idéal pour une confidentialité maximale sans coût d’API. - WebLLM (local — navigateur) : Inférence GPU directement dans le navigateur ; sans serveur, sans clé API. Les modèles sont téléchargés une fois et mis en cache. Idéal pour la confidentialité sans l’application de bureau.
- Secours hybride : Activez dans Paramètres → IA avancée pour enchaîner automatiquement les fournisseurs — par ex., Gemini d’abord, puis Ollama en cas d’erreur.
",
"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.
- Fonctionne sur n'importe quel appareil : ordinateur de bureau, ordinateur portable, tablette et téléphone.
- Toujours à jour : le Service Worker récupère les mises à jour en arrière-plan ; une notification apparaît lorsqu'une nouvelle version est prête.
- Capable hors ligne — écriture, tableau de tracé, personnages, contrôle de version et exportation de tout le travail sans Internet. Seuls les fournisseurs d'IA cloud (Gemini, OpenAI, etc.) nécessitent une connexion.
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.
- S'ouvre dans sa propre fenêtre — aucun onglet de navigateur ni barre d'adresse visible.
- Fonctionnalités identiques et mêmes données IndexedDB que l'onglet du navigateur.
- Shell hors ligne mis en cache par Service Worker — s'ouvre instantanément même sans Internet.
- État d'installation affiché dans Paramètres → Général avec une coche verte.
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.
- Accès natif au système de fichiers — lit et écrit des fichiers directement sans sélecteur de fichiers pour chaque opération.
- Ollama sur localhost — le CSP du navigateur bloque les connexions localhost ; ce n’est pas le cas de l’application de bureau. Connectez un serveur Ollama exécuté localement sur
localhost:11434 pour une inférence d'IA hors ligne entièrement privée et sans frais. - Persistance de l'état de la fenêtre — la taille, la position et l'état maximisé sont restaurés exactement à chaque lancement.
- Mise à jour automatique — une bannière dans Paramètres → À propos de vous avertit lorsqu'une nouvelle version est disponible et l'installe en arrière-plan.
- Ouvrir dossier de données — Paramètres → Données → Ouvrir le dossier de données révèle le chemin exact du système d'exploitation où vos données sont stockées, utile pour les sauvegardes manuelles.
- Installateurs — .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), disponibles via les versions GitHub.
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.
- Fonctionne sur n'importe quel appareil : ordinateur de bureau, ordinateur portable, tablette et téléphone.
- Toujours à jour : le Service Worker récupère les mises à jour en arrière-plan ; une notification apparaît lorsqu'une nouvelle version est prête.
- Capable hors ligne — écriture, tableau de tracé, personnages, contrôle de version et exportation de tout le travail sans Internet. Seuls les fournisseurs d'IA cloud (Gemini, OpenAI, etc.) nécessitent une connexion.
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.
- S'ouvre dans sa propre fenêtre — aucun onglet de navigateur ni barre d'adresse visible.
- Fonctionnalités identiques et mêmes données IndexedDB que l'onglet du navigateur.
- Shell hors ligne mis en cache par Service Worker — s'ouvre instantanément même sans Internet.
- État d'installation affiché dans Paramètres → Général avec une coche verte.
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.
- Accès natif au système de fichiers — lit et écrit des fichiers directement sans sélecteur de fichiers pour chaque opération.
- Ollama sur localhost — le CSP du navigateur bloque les connexions localhost ; ce n’est pas le cas de l’application de bureau. Connectez un serveur Ollama exécuté localement sur
localhost:11434 pour une inférence d'IA hors ligne entièrement privée et sans frais. - Persistance de l'état de la fenêtre — la taille, la position et l'état maximisé sont restaurés exactement à chaque lancement.
- Mise à jour automatique — une bannière dans Paramètres → À propos de vous avertit lorsqu'une nouvelle version est disponible et l'installe en arrière-plan.
- Ouvrir dossier de données — Paramètres → Données → Ouvrir le dossier de données révèle le chemin exact du système d'exploitation où vos données sont stockées, utile pour les sauvegardes manuelles.
- Installateurs — .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), disponibles via les versions GitHub.
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 :
- 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.
- 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.
- 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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Viste lazy: Tutte e 14 le viste principali usano
React.lazy() con Suspense. Il codice di una vista si scarica solo quando l'utente ci naviga per la prima volta. - manualChunks Vite: Le librerie pesanti sono separate in chunk dedicati:
vendor-react, vendor-redux, plot-board (force-graph), export-docx (docx + jsPDF), collab-yjs (Yjs). Ogni chunk si scarica solo quando serve. - Layer provider IA:
services/ai/ differisce l'inizializzazione del provider al primo utilizzo. Il provider WebLLM carica il WASM solo al primo avvio dell'inferenza locale. - DuckDB e RAG: Il listener DuckDB e il worker RAG si importano dinamicamente via
listenerMiddleware.ts. Non bloccano il cold-start anche con i flag attivi. - Gate force-graph:
react-force-graph-2d si carica solo se esistono personaggi con relazioni definite. Se il grafo è vuoto, viene mostrato lo stato vuoto senza caricare il chunk. - Budget bundle: Chunk vendor: max 7000 KB; chunk entry: max 4500 KB. Verificato da
pnpm run bundle:budget in CI dopo ogni build.
",
"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.
- Nessun account richiesto: non è necessaria alcuna registrazione, nessuna sincronizzazione cloud e nessun server che archivia i tuoi manoscritti. Tutti i dati risiedono nell'IndexedDB e nell'OPFS del tuo browser.
- Crittografia della chiave API: quando inserisci una chiave API, questa viene crittografata con AES-256-GCM (chiave a 256 bit, IV casuale a 12 byte, PBKDF2 con 600.000 iterazioni SHA-256) prima di essere archiviata in IndexedDB. La chiave di testo in chiaro non viene mai scritta su disco o localStorage.
- Richieste AI: solo il testo che invii esplicitamente (ad esempio un passaggio selezionato per \"Migliora testo\") viene inviato al provider scelto. La pipeline RAG viene eseguita localmente; solo il prompt assemblato finale viaggia sulla rete.
- Politica di sicurezza dei contenuti: la build web include un rigoroso CSP che blocca script in linea, richieste di rete arbitrarie e connessioni localhost (impedendo a un'estensione compromessa di accedere a Ollama tramite la pagina).
- Desktop Tauri: la shell Rust limita le autorizzazioni del plug-in alla directory dei dati dell'app. L'accesso arbitrario al filesystem è bloccato; il plug-in
dialog richiede la conferma dell'utente per ogni operazione di apertura/salvataggio. - Collaborazione: quando la collaborazione è abilitata, gli aggiornamenti Yjs vengono crittografati end-to-end (AES-256-GCM + PBKDF2) prima di lasciare il browser. Il server di segnalazione non vede mai il contenuto del documento in testo normale.
- Controlli delle dipendenze: la scansione OSV + CodeQL viene eseguita su ogni push CI. Dependabot controlla i nuovi CVE; i pin di override in
pnpm.overrides vengono utilizzati quando una versione con patch non è ancora disponibile in upstream.
",
+ "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.
- Nessun account richiesto: non è necessaria alcuna registrazione, nessuna sincronizzazione cloud e nessun server che archivia i tuoi manoscritti. Tutti i dati restano sul tuo dispositivo: nella build Browser/PWA, nell'IndexedDB e nell'OPFS del tuo browser; nella build desktop Tauri, come file locali nella directory dati dell'app.
- Protezione della chiave API: le chiavi API di browser/PWA sono protette con AES-256-GCM in IndexedDB (chiave casuale non estraibile). La protezione delle chiavi desktop segue il ciclo di vita dell'archiviazione desktop; i dettagli dell'archiviazione del browser non si applicano automaticamente ai file desktop.
- Richieste AI: solo il testo che invii esplicitamente (ad esempio un passaggio selezionato per \"Migliora testo\") viene inviato al provider scelto. La pipeline RAG viene eseguita localmente; solo il prompt assemblato finale viaggia sulla rete.
- Politica di sicurezza dei contenuti: la build web include un rigoroso CSP che blocca script in linea, richieste di rete arbitrarie e connessioni localhost (impedendo a un'estensione compromessa di accedere a Ollama tramite la pagina).
- Desktop Tauri: la shell Rust limita le autorizzazioni del plug-in alla directory dei dati dell'app. L'accesso arbitrario al filesystem è bloccato; il plug-in
dialog richiede la conferma dell'utente per ogni operazione di apertura/salvataggio. - Collaborazione: quando la collaborazione è abilitata, gli aggiornamenti Yjs vengono crittografati end-to-end (AES-256-GCM + PBKDF2) prima di lasciare il browser. Il server di segnalazione non vede mai il contenuto del documento in testo normale.
- Controlli delle dipendenze: la scansione OSV + CodeQL viene eseguita su ogni push CI. Dependabot controlla i nuovi CVE; i pin di override in
pnpm.overrides vengono utilizzati quando una versione con patch non è ancora disponibile in upstream.
",
"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)
- Installazione: Fai clic sul pulsante «Installa» nella barra degli indirizzi (Chrome, Edge, Safari su iOS). L'app si installa come finestra autonoma senza barra del browser.
- Shell cache: Il Service Worker memorizza nella cache gli asset statici. Dopo la prima visita, il caricamento è quasi istantaneo e funziona offline.
- Icone maskable: PNG 192×192 e 512×512 con zona sicura per la forma adattiva — ottimizzate per ogni launcher su Android e iOS.
- Aggiornamenti: Quando viene distribuita una nuova versione, il Service Worker la scarica in background. Il banner «Aggiorna» appare al termine. Fai clic per ricaricare con la versione aggiornata.
App desktop Tauri
- Plugin Rust inclusi:
fs (accesso ai file), dialog (dialoghi nativi), http, shell, updater. Opzionali: menu, tray, window-state. - Dati locali: IndexedDB e OPFS sono memorizzati nella cartella dati dell'app del SO. Aprili con Impostazioni → Dati → Apri cartella dati.
- Aggiornamenti automatici: L'updater Tauri controlla una nuova versione all'avvio. Le release sono firmate dal maintainer.
- Build: Richiede Rust e il toolchain Tauri. Esegui
pnpm run tauri:dev per lo sviluppo locale.
",
"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
- Accesso nativo al filesystem: Leggi e scrivi file direttamente tramite il plugin Tauri
fs — nessun dialogo file del browser per ogni operazione. I log vengono scritti in $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama su localhost: Il CSP del browser blocca le connessioni
localhost; l'app desktop no. Connetti un server Ollama locale su localhost:11434 per inferenza IA offline, totalmente privata e gratuita. - Persistenza stato finestra: Dimensione, posizione e stato di massimizzazione vengono ripristinati esattamente ad ogni avvio (plugin
window-state di Tauri). - Barra dei menu nativa: File / Modifica / Visualizza / Aiuto secondo le convenzioni del SO (macOS: menu nella barra degli strumenti; Windows/Linux: integrato nella finestra).
- Aggiornamento automatico: Il plugin
updater di Tauri controlla l'endpoint JSON dei release di GitHub all'avvio e mostra un banner in Impostazioni → Informazioni quando è disponibile una nuova versione. - Apri cartella dati: Impostazioni → Dati → Apri cartella dati apre l'esplora file del SO nella directory dove sono archiviati i dati IndexedDB e OPFS.
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)
- Google Gemini (consigliato - livello gratuito disponibile): ottieni una chiave gratuita da Google AI Studio. Inseriscilo in Impostazioni → Modelli AI → Chiave API Gemini. Modelli consigliati:
gemini-2.5-flash per l'uso quotidiano, gemini-2.5-pro per attività complesse. - OpenAI: GPT-4o e GPT-4o-mini. Ottieni una chiave da platform.openai.com. Inseriscilo in Impostazioni → Modelli AI → Chiave OpenAI. Forte nel seguire le istruzioni e nella riscrittura in prosa.
- Antropico (Claude): Claude Opus 4.7, Sonnet 4.6 e Haiku 4.5. Ottieni una chiave da console.anthropic.com. Inseriscilo in Impostazioni → Modelli AI → Chiave antropica. Eccellente per narrativa di lunga durata e tono sfumato. Nativo su desktop; sul web viene inoltrato tramite un proxy serverless (Vercel/Cloudflare Pages), non disponibile su GitHub Pages.
- Grok (xAI):
grok-3 e grok-3-mini. Ottieni una chiave dal portale per sviluppatori xAI. Inseriscilo in Impostazioni → Modelli AI → Chiave xAI. Competitivo nelle attività creative con un costo per token inferiore rispetto a GPT-4. - OpenRouter: Un gateway unificato verso DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B e altri. Chiave gratuita su openrouter.ai/keys; i modelli con suffisso
:free non costano nulla.
Fornitori locali (non è richiesta alcuna chiave API)
- WebLLM (browser, GPU): esegue LLM quantizzati (Llama 3.2, Phi-3.5 Mini, Gemma 2) direttamente nel browser tramite WebGPU. Scarica un modello in Impostazioni → AI avanzata → Modelli AI locale. Una volta scaricata, l'inferenza viene eseguita completamente offline a costo zero.
- ONNX Runtime Web (browser, CPU): inferenza basata su WASM senza GPU. Funziona su qualsiasi dispositivo; più lento di WebLLM ma adatto per brevi completamenti e attività di classificazione.
- Transformers.js: esegue automaticamente il modello di incorporamento RAG locale in background. Non è necessaria alcuna configurazione: si avvia quando il contesto RAG è abilitato.
- Ollama: si connette a un server Ollama in esecuzione locale su
localhost:11434. Funziona nativamente nell'app desktop. Esegui ollama pull llama3.2 per iniziare. API a costo zero, completamente privata, supporta qualsiasi modello compatibile con Ollama inclusi gli adattatori LoRA. Nella build web/PWA è solo desktop per impostazione predefinita — un flag opt-in Connessione Browser-Ollama (Impostazioni → Sperimentale) consente una connessione diretta dal browser se configuri il tuo server con OLLAMA_ORIGINS per questa origine.
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)
- Google Gemini (consigliato - livello gratuito disponibile): ottieni una chiave gratuita da Google AI Studio. Inseriscilo in Impostazioni → Modelli AI → Chiave API Gemini. Modelli consigliati:
gemini-2.5-flash per l'uso quotidiano, gemini-2.5-pro per attività complesse. - OpenAI: GPT-4o e GPT-4o-mini. Ottieni una chiave da platform.openai.com. Inseriscilo in Impostazioni → Modelli AI → Chiave OpenAI. Forte nel seguire le istruzioni e nella riscrittura in prosa.
- Antropico (Claude): Claude Opus 4.7, Sonnet 4.6 e Haiku 4.5. Ottieni una chiave da console.anthropic.com. Inseriscilo in Impostazioni → Modelli AI → Chiave antropica. Eccellente per narrativa di lunga durata e tono sfumato. Nativo su desktop; sul web viene inoltrato tramite un proxy serverless (Vercel/Cloudflare Pages), non disponibile su GitHub Pages.
- Grok (xAI):
grok-3 e grok-3-mini. Ottieni una chiave dal portale per sviluppatori xAI. Inseriscilo in Impostazioni → Modelli AI → Chiave xAI. Competitivo nelle attività creative con un costo per token inferiore rispetto a GPT-4. - OpenRouter: Un gateway unificato verso DeepSeek R1, Llama 3.3 70B, Qwen 2.5 72B e altri. Chiave gratuita su openrouter.ai/keys; i modelli con suffisso
:free non costano nulla.
Fornitori locali (non è richiesta alcuna chiave API)
- WebLLM (browser, GPU): esegue LLM quantizzati (Llama 3.2, Phi-3.5 Mini, Gemma 2) direttamente nel browser tramite WebGPU. Scarica un modello in Impostazioni → AI avanzata → Modelli AI locale. Una volta scaricata, l'inferenza viene eseguita completamente offline a costo zero.
- ONNX Runtime Web (browser, CPU): inferenza basata su WASM senza GPU. Funziona su qualsiasi dispositivo; più lento di WebLLM ma adatto per brevi completamenti e attività di classificazione.
- Transformers.js: esegue automaticamente il modello di incorporamento RAG locale in background. Non è necessaria alcuna configurazione: si avvia quando il contesto RAG è abilitato.
- Ollama: si connette a un server Ollama in esecuzione locale su
localhost:11434. Funziona nativamente nell'app desktop. Esegui ollama pull llama3.2 per iniziare. API a costo zero, completamente privata, supporta qualsiasi modello compatibile con Ollama inclusi gli adattatori LoRA. Nella build web/PWA è solo desktop per impostazione predefinita — un flag opt-in Connessione Browser-Ollama (Impostazioni → Sperimentale) consente una connessione diretta dal browser se configuri il tuo server con OLLAMA_ORIGINS per questa origine.
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.
- Sempre disponibile offline: Scrittura, tavola delle trame, modifica di personaggi e mondi, creazione e ripristino di snapshot, esportazione in PDF / Markdown / TXT, tutte le impostazioni.
- Richiede rete: I provider IA cloud (Gemini, OpenAI, Anthropic, Grok) inviano la tua richiesta su internet. La scrittura non viene mai bloccata; solo le funzioni IA restituiscono un errore.
- Scarica modelli locali in anticipo: Vai in Impostazioni → IA avanzata → Modelli IA locali e scarica un modello. Una volta in cache, l'inferenza funziona offline.
- Cache dello shell PWA: Installa WorldScript come PWA (pulsante «Installa» del browser) per memorizzare nella cache lo shell dell'app tramite il Service Worker.
- Archiviazione OPFS: DuckDB e il modello di embedding locale usano l'Origin Private File System del browser, un'area persistente che non viene cancellata dalla normale pulizia della cache.
",
"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)
- Manoscritti, personaggi e costruzione del mondo: mai trasmessi da nessuna parte a meno che non invii esplicitamente un passaggio specifico a un fornitore di intelligenza artificiale per l'elaborazione.
- Chiavi API: crittografate a riposo con AES-256-GCM (PBKDF2, 600.000 iterazioni SHA-256) prima di essere salvati in IndexedDB. La chiave di testo in chiaro non viene mai scritta su disco, mai archiviata in localStorage e mai inviata a nessun server WorldScript.
- Istantanee e backup: archiviati interamente nell'IndexedDB del tuo browser. I file JSON esportati vanno direttamente nella cartella dei download del tuo dispositivo.
- Indice RAG e analisi DuckDB: blocchi di manoscritti, incorporamenti di vettori e dati di analisi risiedono tutti nell'OPFS del tuo browser. Solo il prompt assemblato finale, non l'indice non elaborato, viene inviato a un provider.
Cosa lascia il tuo dispositivo (solo quando lo scegli tu)
- Richieste Cloud AI: quando usi Gemini, OpenAI, Anthropic o Grok, solo il testo che hai esplicitamente inviato per quell'azione specifica viene inviato al provider. WorldScript non aggiunge telemetria nascosta a queste richieste.
- Politiche sui dati dei fornitori di intelligenza artificiale: ogni fornitore ha i propri termini di conservazione dei dati. Per impostazione predefinita, le richieste API di Google Gemini non vengono utilizzate per addestrare i modelli di Google. Controlla i termini dello sviluppatore del provider scelto per la politica attuale.
- Collaborazione (solo attivazione): se abiliti la collaborazione P2P, gli aggiornamenti dei documenti Yjs vengono crittografati end-to-end (AES-256-GCM + PBKDF2) prima di lasciare il browser. Il server di segnalazione coordina le connessioni ma non vede mai il contenuto del tuo manoscritto.
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)
- Manoscritti, personaggi e costruzione del mondo: mai trasmessi da nessuna parte a meno che non invii esplicitamente un passaggio specifico a un fornitore di intelligenza artificiale per l'elaborazione.
- Chiavi API: le chiavi 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 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.)
- Istantanee e backup: nella build Browser/PWA sono archiviati interamente nell'IndexedDB del tuo browser; nella build desktop Tauri, come file JSON locali nella directory dati dell'app. I file JSON esportati vanno direttamente nella cartella dei download del tuo dispositivo.
- Indice RAG e analisi DuckDB: blocchi di manoscritti, incorporamenti di vettori e dati di analisi risiedono tutti nell'OPFS del tuo browser. Solo il prompt assemblato finale, non l'indice non elaborato, viene inviato a un provider.
Cosa lascia il tuo dispositivo (solo quando lo scegli tu)
- Richieste Cloud AI: quando usi Gemini, OpenAI, Anthropic o Grok, solo il testo che hai esplicitamente inviato per quell'azione specifica viene inviato al provider. WorldScript non aggiunge telemetria nascosta a queste richieste.
- Politiche sui dati dei fornitori di intelligenza artificiale: ogni fornitore ha i propri termini di conservazione dei dati. Per impostazione predefinita, le richieste API di Google Gemini non vengono utilizzate per addestrare i modelli di Google. Controlla i termini dello sviluppatore del provider scelto per la politica attuale.
- Collaborazione (solo attivazione): se abiliti la collaborazione P2P, gli aggiornamenti dei documenti Yjs vengono crittografati end-to-end (AES-256-GCM + PBKDF2) prima di lasciare il browser. Il server di segnalazione coordina le connessioni ma non vede mai il contenuto del tuo manoscritto.
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.
- Google Gemini (cloud): Il provider predefinito. Gemini Flash è veloce e adatto al livello gratuito; Gemini Pro offre qualità superiore. Chiave API gratuita da Google AI Studio.
- OpenAI (cloud): GPT-4o e GPT-4o-mini tramite chiave API. Eccellente per seguire istruzioni e riscrivere prosa. Consigliato per gli utenti dell'ecosistema OpenAI.
- Ollama (locale — solo desktop): Esegue modelli sulla tua macchina via
localhost:11434. Richiede l'app desktop Tauri. Ideale per la massima privacy senza costi API. - WebLLM (locale — browser): Inferenza GPU direttamente nel browser; senza server, senza chiave API. I modelli vengono scaricati una volta e messi in cache. Ideale per la privacy senza l'app desktop.
- Fallback ibrido: Attiva in Impostazioni → IA avanzata per concatenare automaticamente i provider — es. prima Gemini, poi Ollama in caso di errore.
",
"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.
- Funziona su qualsiasi dispositivo: desktop, laptop, tablet e telefono.
- Sempre aggiornato: il Service Worker recupera gli aggiornamenti in background; viene visualizzata una notifica quando una nuova versione è pronta.
- Funziona offline: scrittura, Plot Board, caratteri, controllo della versione ed esportazione funzionano tutti senza Internet. Solo i provider di intelligenza artificiale cloud (Gemini, OpenAI, ecc.) richiedono una connessione.
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.
- Si apre in una finestra separata, senza schede del browser o barra degli indirizzi visibili.
- Caratteristiche identiche e gli stessi dati IndexedDB della scheda del browser.
- Shell offline memorizzata nella cache dal Service Worker: si apre istantaneamente anche senza Internet.
- Stato di installazione mostrato in Impostazioni → Generale con un segno di spunta verde.
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.
- Accesso nativo al filesystem: leggi e scrivi file direttamente senza un selettore di file per ogni operazione.
- Ollama su localhost: il CSP del browser blocca le connessioni localhost; l'app desktop no. Collega un server Ollama in esecuzione locale all'indirizzo
localhost:11434 per un'inferenza AI offline completamente privata e a costo zero. - Persistenza dello stato della finestra: dimensioni, posizione e stato ingrandito vengono ripristinati esattamente a ogni avvio.
- Aggiornamento automatico: un banner in Impostazioni → Informazioni ti avvisa quando è disponibile una nuova versione e la installa in background.
- Apri cartella dati: Impostazioni → Dati → Apri cartella dati rivela il percorso esatto del sistema operativo in cui sono archiviati i dati, utile per i backup manuali.
- Programmi di installazione: .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), disponibile tramite versioni GitHub.
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.
- Funziona su qualsiasi dispositivo: desktop, laptop, tablet e telefono.
- Sempre aggiornato: il Service Worker recupera gli aggiornamenti in background; viene visualizzata una notifica quando una nuova versione è pronta.
- Funziona offline: scrittura, Plot Board, caratteri, controllo della versione ed esportazione funzionano tutti senza Internet. Solo i provider di intelligenza artificiale cloud (Gemini, OpenAI, ecc.) richiedono una connessione.
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.
- Si apre in una finestra separata, senza schede del browser o barra degli indirizzi visibili.
- Caratteristiche identiche e gli stessi dati IndexedDB della scheda del browser.
- Shell offline memorizzata nella cache dal Service Worker: si apre istantaneamente anche senza Internet.
- Stato di installazione mostrato in Impostazioni → Generale con un segno di spunta verde.
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.
- Accesso nativo al filesystem: leggi e scrivi file direttamente senza un selettore di file per ogni operazione.
- Ollama su localhost: il CSP del browser blocca le connessioni localhost; l'app desktop no. Collega un server Ollama in esecuzione locale all'indirizzo
localhost:11434 per un'inferenza AI offline completamente privata e a costo zero. - Persistenza dello stato della finestra: dimensioni, posizione e stato ingrandito vengono ripristinati esattamente a ogni avvio.
- Aggiornamento automatico: un banner in Impostazioni → Informazioni ti avvisa quando è disponibile una nuova versione e la installa in background.
- Apri cartella dati: Impostazioni → Dati → Apri cartella dati rivela il percorso esatto del sistema operativo in cui sono archiviati i dati, utile per i backup manuali.
- Programmi di installazione: .dmg (macOS), .msi (Windows), .AppImage / .deb (Linux), disponibile tramite versioni GitHub.
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:
- 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.
- 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.
- 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.
- Building the index: Go to 設定 → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: 続ける Writing, Brainstorm, AI Critic, and プロットボード \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. 原稿 text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / 編集 / View / ヘルプ menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under 設定 → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: 設定 → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / 編集 / View / ヘルプ menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under 設定 → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: 設定 → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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 キーが必要)
- Google Gemini (推奨 - 無料枠あり):Google AI Studio から無料キーを取得します。それを設定 → AI モデル → Gemini API キー に入力します。推奨モデル: 日常使用には
gemini-2.5-flash、複雑なタスクには gemini-2.5-pro。 - OpenAI: GPT-4o および GPT-4o-mini。 platform.openai.com からキーを取得します。それを設定 → AI モデル → OpenAI キー に入力します。指示に従うことと散文の書き直しが得意。
- 人間性 (クロード): クロード 3.5 ソネットおよびクロード 3 俳句。 console.anthropic.com からキーを取得します。それを設定 → AI モデル → Anthropic キー に入力します。長い形式の物語やニュアンスのあるトーンに最適です。
- Grok (xAI): Grok-2。 xAI 開発者ポータルからキーを取得します。それを設定 → AI モデル → xAI キー に入力します。 GPT-4 よりもトークンあたりのコストが低く、クリエイティブなタスクで競争力があります。
ローカル プロバイダー (API キーは必要ありません)
- WebLLM (ブラウザ、GPU): 量子化された LLM (Llama 3.2、Phi-3.5 Mini、Gemma 2) を WebGPU 経由でブラウザで直接実行します。 [設定] → [高度な AI] → [ローカル AI モデル] でモデルをダウンロードします。ダウンロードが完了すると、推論はコストゼロで完全にオフラインで実行されます。
- ONNX ランタイム Web (ブラウザ、CPU): GPU を使用しない WASM ベースの推論。どのデバイスでも動作します。 WebLLM よりも遅いですが、短い完了や分類タスクに適しています。
- Transformers.js: ローカル RAG 埋め込みモデルをバックグラウンドで自動的に実行します。構成は必要ありません。RAG コンテキストが有効になると開始されます。
- Ollama (デスクトップ アプリのみ):
localhost:11434 でローカルで実行されている Ollama サーバーに接続します。 Tauri デスクトップ アプリが必要です。まず、ollama pull llama3.2 を実行します。 API コストはゼロで、完全にプライベートで、LoRA アダプターを含む Ollama 互換モデルをサポートします。
キーのセキュリティ
すべての 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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Building the index: Go to Configurações → Advanced IA → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the IA prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continuar Writing, Brainstorm, IA Critic, and Quadro de Enredo \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when IA completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscrito text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud IA providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Editar / View / Ajuda menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Configurações → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Configurações → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud IA providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Editar / View / Ajuda menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Configurações → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Configurações → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recomendado — nível gratuito disponível): obtenha uma chave gratuita do Google AI Studio. Insira-o em Configurações → Modelos de IA → Chave de API Gemini. Modelos recomendados:
gemini-2.5-flash para uso diário, gemini-2.5-pro para tarefas complexas. - OpenAI: GPT-4o e GPT-4o-mini. Obtenha uma chave em platform.openai.com. Insira-o em Configurações → Modelos de IA → Chave OpenAI. Forte em seguir instruções e reescrever prosa.
- Antrópico (Claude): Claude 3.5 Soneto e Claude 3 Haiku. Obtenha uma chave em console.anthropic.com. Insira-o em Configurações → Modelos de IA → Chave antrópica. Excelente para narrativas longas e tons matizados.
- Grok (xAI): Grok-2. Obtenha uma chave no portal do desenvolvedor xAI. Insira-o em Configurações → Modelos de IA → Chave xAI. Competitivo em tarefas criativas com menor custo por token do que GPT-4.
Provedores locais (sem necessidade de chave de API)
- WebLLM (navegador, GPU): executa LLMs quantizados (Llama 3.2, Phi-3.5 Mini, Gemma 2) diretamente no navegador via WebGPU. Baixe um modelo em Configurações → IA avançada → Modelos de IA locais. Depois de baixada, a inferência é executada totalmente offline e sem custo.
- ONNX Runtime Web (navegador, CPU): inferência baseada em WASM sem GPU. Funciona em qualquer dispositivo; mais lento que o WebLLM, mas adequado para conclusões curtas e tarefas de classificação.
- Transformers.js: executa o modelo de incorporação RAG local automaticamente em segundo plano. Nenhuma configuração necessária — ele inicia quando o contexto RAG está ativado.
- Ollama (somente aplicativo de desktop): Conecta-se a um servidor Ollama em execução local em
localhost:11434. Requer o aplicativo de desktop Tauri. Execute ollama pull llama3.2 para começar. Custo zero de API, totalmente privado, compatível com qualquer modelo compatível com Ollama, incluindo adaptadores LoRA.
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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Building the index: Go to Settings → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: Continue Writing, Brainstorm, AI Critic, and Plot Board \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. Manuscript text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / Edit / View / Help menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under Settings → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: Settings → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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)
- Google Gemini (recommended — free tier available): Get a free key from Google AI Studio. Enter it under Settings → AI Models → Gemini API key. Recommended models:
gemini-2.5-flash for everyday use, gemini-2.5-pro for complex tasks. - OpenAI: GPT-4o and GPT-4o-mini. Get a key from platform.openai.com. Enter it under Settings → AI Models → OpenAI key. Strong at instruction-following and prose rewriting.
- Anthropic (Claude): Claude 3.5 Sonnet and Claude 3 Haiku. Get a key from console.anthropic.com. Enter it under Settings → AI Models → Anthropic key. Excellent for long-form narrative and nuanced tone.
- Grok (xAI): Grok-2. Get a key from the xAI developer portal. Enter it under Settings → AI Models → xAI key. Competitive on creative tasks with lower cost per token than GPT-4.
Local providers (no API key required)
- WebLLM (browser, GPU): Runs quantized LLMs (Llama 3.2, Phi-3.5 Mini, Gemma 2) directly in the browser via WebGPU. Download a model under Settings → Advanced AI → Local AI models. Once downloaded, inference runs fully offline at zero cost.
- ONNX Runtime Web (browser, CPU): WASM-based inference without a GPU. Works on any device; slower than WebLLM but suitable for short completions and classification tasks.
- Transformers.js: Runs the local RAG embedding model automatically in the background. No configuration needed — it starts when RAG context is enabled.
- Ollama (desktop app only): Connects to a locally-running Ollama server at
localhost:11434. Requires the Tauri desktop app. Run ollama pull llama3.2 to get started. Zero API cost, fully private, supports any Ollama-compatible model including LoRA adapters.
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.
- Building the index: Go to 设置 → Advanced AI → Rebuild local search index. WorldScript splits your manuscript into overlapping ~200-token chunks and encodes each with MiniLM-L6-v2 (384-dimensional embeddings) running locally via Transformers.js.
- Hybrid retrieval: When a request is made, the pipeline scores candidate chunks three ways — semantic cosine similarity (~60%), lexical keyword overlap (~30%), and recency (favoring later chapters, ~10%) — then selects the top-K passages.
- Prompt assembly:
assembleRAGPrompt() builds a token-budgeted context block from the selected chunks and prepends it to the AI prompt. The chunk badge in the Writer panel shows how many passages were injected. - Where RAG is used: 继续 Writing, Brainstorm, AI Critic, and 情节板 \"Suggest next beat\" all use the same pipeline when RAG is enabled.
- Rebuild triggers: Rebuild the index after importing a backup, adding many new characters, or when AI completions seem unfamiliar with your story's details.
- Privacy: The index lives entirely in your browser's OPFS. 手稿 text is never uploaded to build the index — only the final assembled prompt travels to your chosen cloud provider.
",
"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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / 编辑 / View / 帮助 menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under 设置 → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: 设置 → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
- Stronghold (optional): The
tauri-plugin-stronghold can store the IDB encryption passphrase in the OS keychain so the unlock modal never appears on desktop.
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
- Native filesystem access: Read and write files directly via the Tauri
fs plugin — no browser file picker required for every operation. Logs are written to $APPDATA/logs/worldscript-YYYY-MM-DD.jsonl. - Ollama on localhost: Cloud AI providers block
localhost connections in the browser (CSP); the desktop app bypasses this restriction, letting Ollama serve models at localhost:11434 without a proxy. - Window-state persistence: Window size, position, and maximized state are restored exactly on each launch via the Tauri
window-state plugin. - Native menu bar: A File / 编辑 / View / 帮助 menu bar following OS conventions (macOS: menu in toolbar; Windows/Linux: embedded in the window).
- Auto-updater: The Tauri
updater plugin checks the GitHub releases JSON endpoint on startup and shows a banner under 设置 → About when a new version is available. Click Install update to download and apply it in the background. - Open data folder: 设置 → Data → Open data folder opens the OS file explorer at the directory where IndexedDB and OPFS data are stored — useful for manual backups.
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 密钥)
- Google Gemini(推荐 - 提供免费套餐):从 Google AI Studio 获取免费密钥。在设置 → AI 模型 → Gemini API 密钥下输入。推荐型号:适合日常使用的
gemini-2.5-flash,适合复杂任务的 gemini-2.5-pro。 - OpenAI: GPT-4o 和 GPT-4o-mini。从 platform.openai.com 获取密钥。在设置 → AI 模型 → OpenAI 密钥下输入。擅长遵循指令和散文重写。
- 人类(克劳德):克劳德3.5十四行诗和克劳德3俳句。从 console.anthropic.com 获取密钥。在设置 → AI 模型 → Anthropic key 下输入。非常适合长篇叙事和细致入微的语气。
- Grok (xAI): Grok-2。从 xAI 开发者门户获取密钥。在设置 → AI 模型 → xAI 密钥下输入。在创意任务上具有竞争力,每个令牌的成本低于 GPT-4。
本地提供商(无需 API 密钥)
- WebLLM(浏览器、GPU):通过 WebGPU 直接在浏览器中运行量化的 LLM(Llama 3.2、Phi-3.5 Mini、Gemma 2)。在设置 → 高级 AI → 本地 AI 模型下下载模型。下载后,推理可以零成本完全离线运行。
- ONNX 运行时 Web(浏览器、CPU):基于 WASM 的推理,无需 GPU。适用于任何设备;比 WebLLM 慢,但适合短期完成和分类任务。
- Transformers.js:在后台自动运行本地 RAG 嵌入模型。无需配置 - 它在启用 RAG 上下文时启动。
- Ollama(仅限桌面应用程序):连接到位于
localhost:11434 的本地运行的 Ollama 服务器。需要 Tauri 桌面应用程序。运行 ollama pull llama3.2 即可开始。零 API 成本,完全私有,支持任何 Ollama 兼容模型,包括 LoRA 适配器。
密钥安全
每个 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;