FIRST-RUN SETUP v0.4

Onboarding Wizard

Five steps to nail down microphone, hotkey, models, APIs, and how to actually use it.

Overview

The wizard is a full-window overlay. On open, the Tauri window resizes to roughly 85% × 88% of the current monitor's work area (capped at 1240 × 840 logical pixels) and centers itself. A 5-step pill rail lives on the left; the active step's card occupies the right pane; every non-interactive surface is a Tauri drag region — you can drag the window from anywhere.

Trigger logic

Whether the wizard auto-opens depends on two fields in config.json: onboarding.completed and onboarding.appVersion.

ScenarioConditionResult
First install / cleared configconfig.json does not existWizard opens automatically
Upgrade (version bump)onboarding.appVersion ≠ current versionAuto-opens (migration / new fields)
Completed & version matchescompleted: true and versions equalSilent launch
Manual re-configureClick "Setup Wizard" in main panelPre-fills from current config, opens
User skippedClick "Skip"Writes skipped: true, no re-pop this version
💡

Tip: The "Setup Wizard" button uses a violet gradient pill, clearly different from the neutral ghost buttons nearby. Look at the top-right of the "Configuration" card.

Step 1 · System microphone

Get "does my mic work?" out of the way first.

⚠️

Note: Switching steps or closing the wizard releases the microphone immediately; the app does not hold the audio device long-term.

Step 2 · Hotkey

One stable physical key to start/stop recording. The wizard only accepts 6 recommended keys — arbitrary letter combos are intentionally rejected to avoid global-shortcut collisions.

KeyMac equivalentNote
Right Alt ★ recommended⌥ Right OptionOne-handed, no conflicts (default)
Left Alt⌥ Left OptionFor left-hand use
Right Ctrl⌃ Right ControlLow conflict on the right side
Left Ctrl⌃ Left ControlMay collide with editor shortcuts
Right Shift⇧ Right ShiftMay collide with IME
Left Shift⇧ Left ShiftMay collide with IME

Live key preview: focus the dark panel and press any key. The wizard uses KeyboardEvent.code (AltLeft/AltRight/ControlLeft/...) to disambiguate left vs right reliably. Unsupported keys (e.g. Win/⌘ or letters) just echo back with "(unsupported)" — no state change.

⚠️

Why not Win / Cmd? Windows-Logo / ⌘ open OS menus — using them as app hotkeys causes popups / window switches. They are intentionally excluded.

Step 3 · Models & parameters

Three base modules in one go. Fine-grained tuning lives in the main panel.

STTSpeech recognition
  • Backend: onnx / whisper / sensevoice / funasr
  • Model directory: local model folder
TTSSpeech synthesis
  • Model: auto / qwen3_tts / voxcpm / index_tts2 / vibevoice / volcengine_tts
  • Model directory: local path for the chosen model
STSSource / Target language
  • Source: auto / zh / en / ja / ko / yue / fr / de / es
  • Target: same enum (no auto)
LLMWhen to fill it?
  • Translation / summarization / live correction LLMs are configured in Step 4 (Providers).
  • This step focuses on local models; cloud creds are unified next.

Step 4 · API providers

Eleven providers ship out-of-the-box. Each card opens to Base URL, API Key, and one input per supported capability (LLM / ASR / TTS / Realtime). Filling an API Key is treated as "enabled".

How models map to features

Step 5 · Usage guide

Three SVG-animated cards explain the headline scenarios in 30 seconds:

  1. One-key record → transcribe: press Right Alt to start, press again to stop; transcript follows the cursor.
  2. TTS: type text or pick a history clip; one-click read-aloud with voice cloning.
  3. STS (translation): workbench mode — source voice → live ASR → target language → TTS, with timbre preserved.

Config file reference

On save, the wizard writes to ~/.zimablueai_config/config.json. Key fields:

{
  "stt": {
    "inputDeviceName": "Headset Microphone (MCP01)",
    "backend": "sensevoice",
    "modelDir": "D:/models/SenseVoiceSmall",
    "hotkey": "RightAlt"
  },
  "tts": {
    "ttsModel": "qwen3_tts",
    "modelDir": "D:/models/qwen3-tts",
    "cloudTtsModel": "speech-01-v2"
  },
  "sts": {
    "sourceLanguage": "zh",
    "targetLanguage": "en"
  },
  "translateApiBaseUrl": "https://api.openai.com/v1",
  "translateApiKey": "sk-***",
  "translateModel": "gpt-4o-mini",
  "translateEnabled": true,
  "onboarding": {
    "completed": true,
    "skipped": false,
    "version": 1,
    "appVersion": "0.4.0",
    "completedAt": "2026-05-11T08:42:13.000Z",
    "providers": {
      "openai": {
        "enabled": true,
        "baseUrl": "https://api.openai.com/v1",
        "apiKey": "sk-***",
        "models": { "llm": "gpt-4o-mini", "tts": "tts-1" }
      }
    }
  }
}
📎

Need to reset? Delete ~/.zimablueai_config/config.json, or blank out onboarding.appVersion — the wizard pops next launch.