FlowLens

Configuration

Provider, model, voice, hotkey, privacy, diagnostics, and persisted defaults for FlowLens.

Runtime storage model

FlowLens has two layers of configuration:

LayerPurposeStorage
Non-secret preferenceshotkey, mode, provider base URL, model, voice ID, mic, overlay position, privacy, updatesapp.getPath('userData')/config.json
Secretsprovider API key and ElevenLabs API keyencrypted app.getPath('userData')/secrets.json
Legacy migrationolder development configone-time copy from ~/.flowlens/config.json

In tests and lower-level config helpers, the legacy path can still be used directly. In the running Electron app, runtime-config.ts routes config through userData.

Reference shape

{
  "hotkey": "CommandOrControl+Shift+Space",
  "defaultMode": "error-explainer",
  "firstRunComplete": false,
  "provider": "openai",
  "providerKey": "openai",
  "providerProtocol": "auto",
  "providerBaseUrl": "https://api.openai.com/v1",
  "model": "gpt-4o-mini",
  "apiKeys": {},
  "tts": {
    "model": "eleven_flash_v2_5",
    "voiceId": "JBFqnCBsd6RMkjVDRZzb"
  },
  "audio": {
    "inputDeviceId": null
  },
  "overlay": {
    "position": { "mode": "bottom-right" }
  },
  "launchAtLogin": false,
  "updates": {
    "channel": "stable",
    "autoDownload": false
  },
  "privacy": {
    "confirmBeforeScreenshot": false,
    "voicePlaybackEnabled": true
  },
  "diagnostics": {
    "loggingEnabled": true
  }
}

Field guide

FieldPurposeDefault
providerAdapter family. Current implementation uses the OpenAI-compatible adapter.openai
providerKeySecret-store key for the active provider credential.openai
providerProtocolWire protocol for compatible endpoints. auto lets FlowLens pick from known provider presets.auto
providerBaseUrlBase URL for the OpenAI-compatible API.https://api.openai.com/v1
modelModel passed to /chat/completions.gpt-4o-mini
tts.modelElevenLabs text-to-speech model.eleven_flash_v2_5
tts.voiceIdElevenLabs voice ID selected by setup/settings.JBFqnCBsd6RMkjVDRZzb
audio.inputDeviceIdBrowser microphone device ID. null means system default.null
overlay.positionBottom-right anchor or custom dragged position.bottom-right
launchAtLoginStarts FlowLens in the background after OS login.false
privacy.voicePlaybackEnabledEnables or disables spoken TTS playback.true
diagnostics.loggingEnabledUser-facing preference for diagnostics logging.true

Provider configuration

FlowLens supports providers through one OpenAI-compatible adapter plus provider-specific presets where needed:

  1. providerKey selects which stored secret to use.
  2. providerBaseUrl selects the API root.
  3. providerProtocol selects or infers the transport.
  4. model selects the model.

For normal OpenAI-compatible providers, the request URL is assembled as:

{providerBaseUrl}/chat/completions

The current setup/settings UI also includes convenience presets:

Provider pathBase URLProtocolNotes
OpenAI-compatiblehttps://api.openai.com/v1openai-chatDefault adapter path for vision-capable chat completions
Gemini OpenAI-compatiblehttps://generativelanguage.googleapis.com/v1beta/openaiopenai-chatWorks through Google's OpenAI-compatible chat completions surface
OpenCode Gohttps://opencode.ai/zen/go/v1autoInfers per-model protocol and capability quirks
Custom compatible endpointuser supplieduser selected or autoUseful for local gateways or hosted OpenAI-compatible APIs

OpenCode Go has extra compatibility handling because its available models do not all behave like a single strict OpenAI clone. FlowLens can omit native response_format where the endpoint rejects it, infer text-only versus vision-capable models, avoid the short app-side request timeout for long-running models, and coerce prompt-only markdown output into the structured response contract when the answer is useful but not valid JSON.

This keeps the overlay, prompts, response parser, and voice pipeline stable while still allowing provider-specific request differences.

ElevenLabs configuration

FlowLens uses ElevenLabs for both ends of the voice loop:

  • scribe_v2 for speech-to-text
  • configurable TTS for spoken summaries

The current settings UI exposes these TTS model options:

ModelUse
eleven_flash_v2_5Lowest latency for quick overlay responses
eleven_turbo_v2_5Balanced speed and quality
eleven_v3More expressive speech
eleven_multilingual_v2Stable multilingual playback

The voice picker loads available voices through the main process using the stored ElevenLabs key. The renderer never receives that key.

Settings and cleanup

The settings window and in-overlay settings panel expose:

  • provider key, base URL, model, and API key
  • ElevenLabs key, TTS model, and voice picker
  • microphone selector
  • hotkey capture and reset
  • permission checks and request actions
  • overlay position reset
  • launch-at-login
  • voice playback
  • screenshot confirmation preference
  • diagnostics export
  • factory reset

Factory reset clears FlowLens-owned settings, encrypted secrets, diagnostics logs, and overlay position.

On this page