Troubleshooting
401 Unauthorized
Check:
- The
Authorizationheader is present - The header uses
Bearer <token> - You are using an external API key for
/v1/* - The key was not revoked
No local speech model is active
If dictation or /v1/audio/transcriptions fails before transcription starts:
- Open Settings -> Local speech models
- Download a built-in model such as
Whisper Base,Whisper Small, orSenseVoice, or place a compatible Whisper.cpp.binfile in the models directory - Activate the model you want the host to use
This applies only when Settings -> Routing and models -> STT mode is set to Local.
A settings change does not seem to take effect
Settings now save automatically after each change.
If a dictation priority, provider, or routing change does not seem to apply:
- Wait until the settings footer switches back from
Saving... - Reopen Settings and confirm the new value is still selected
- Retry dictation after the auto-save completes
Cloud STT is selected but transcription still fails
Check:
- Settings -> Routing and models -> STT mode is set to
Cloud - A valid cloud STT provider is selected
- The provider profile is enabled
- The provider API key is configured
- The cloud STT model name is valid for that provider
Prompt Lab Smart Clean returns the original text
This is often expected.
Smart Clean in Prompt Lab uses only local cleanup rules. It does not call the selected provider, model, preset, or prompt override. If the input has no low-risk fillers, repetitions, or obvious self-repairs, the result may stay unchanged and the run may show Local rules · <1ms.
Prompt Lab Polished says Add the API key for groq in Settings first
This means the provider request was not allowed to start because the configured transform provider is missing an API key.
Check:
- Settings -> Provider profiles contains a valid API key for the selected provider
- The provider profile is enabled
- The chosen model exists for that provider
Then reopen Prompt Lab or rerun the comparison.
Prompt override seems ignored in Prompt Lab
Prompt overrides apply only to Polished.
If you paste a prompt override into a Smart Clean variant, it will not be used because Smart Clean is intentionally local-only in V1.
whisper-rs-sys build failure
If npm run dev or cargo check fails while compiling whisper-rs-sys on Windows:
- Try
npm run cargo:checkfirst because it auto-detects common Windowslibclanglocations - Make sure a 64-bit
libclang.dllis available on the machine - Set
LIBCLANG_PATHto the directory that contains that DLL - Retry the build after reopening the shell if needed
This is a build prerequisite for the local Whisper runtime, not a runtime API configuration issue.
ONNX Runtime or SenseVoice startup failure on Windows
If the desktop app fails while preparing the built-in SenseVoice runtime:
- Start the app through the repository scripts such as
npm run dev,npm run build, ornpm run cargo:check - Avoid launching
cargodirectly from a shell that skipsscripts/with-libclang.mjs - Retry after deleting a partial ONNX Runtime download only if the script reports a corrupted archive
The repository startup scripts now download and wire up the required Windows ONNX Runtime files automatically.
macOS global shortcuts do not trigger
Check:
- System Settings -> Privacy & Security -> Accessibility includes the terminal, Codex host, or packaged VILab app you are launching
- You are testing on a recent build that includes the macOS event-listener shortcut backend
- The shortcut contains either
CommandorControl - The shortcut does not conflict with obvious system-reserved combinations such as
Cmd+SpaceorCmd+Option+Space
The current default macOS shortcut is Cmd+Shift+Option+D.
macOS dictation finishes but the recording animation looks flat
If text still transcribes correctly, the microphone input is usually reaching the model.
Check:
- The app has microphone permission
- You are running version
0.1.6or later, which boosts the macOS recording level used by the overlay animation - You are testing from the latest
npm run devsession or a rebuilt packaged app
This symptom usually indicates a UI level-mapping issue, not a transcription failure.
The Windows release app exits during startup
If the packaged desktop app opens and immediately exits on Windows:
- Open
%APPDATA%\\com.vilab.desktop\\startup-trace.log - Create an issue at GitHub Issues
- Attach
startup-trace.logand include the Windows version, the installer version, and whether the crash happens on first launch
If %APPDATA%\\com.vilab.desktop\\startup-trace.log is empty or missing, mention that in the issue as well.
Service unreachable
Check:
- The desktop app is running
- The configured Server URL is correct
- The host firewall allows inbound traffic on the service port
- The client is calling the reachable LAN IP or hostname
LAN clients cannot connect
Check:
- The host is not still bound only to
127.0.0.1 - The client and host are on the same network
- The service port is not blocked by security software
Wrong model error
/v1/audio/transcriptions accepts only:
- The current public STT model alias returned by
/health
If you send any other model value, the service returns 400 Unsupported model.
Unsupported audio format
The current local HTTP transcription endpoint accepts WAV audio in this phase.
If you send another container or codec, convert it to WAV before calling /v1/audio/transcriptions.