FluidVoice

Overview

FluidVoice is a fully open-source (GPLv3), local-first voice-to-text dictation application for macOS. It captures audio via a global hotkey, transcribes it using on-device speech models (Parakeet, Whisper, Apple Speech, Cohere Transcribe), and optionally enhances the result with an LLM before typing it into the active application.

The application runs as a menu bar app with a floating overlay that appears during recording. It requires macOS 15.0 (Sequoia) or later and is optimized for Apple Silicon, with Intel support via Whisper models.

Repository: https://github.com/altic-dev/FluidVoice

Core Architecture

FluidVoice has two independent processing stages:

  1. Speech-to-Text (STT): Runs entirely on-device with no network access. Supported engines include Parakeet Flash (lowest latency, English), Parakeet TDT v3 (multilingual), Cohere Transcribe (highest accuracy), Apple Speech (zero download), and Whisper (broadest language coverage).

  2. AI Enhancement (optional): Raw transcription is sent to an LLM for cleanup — filler word removal, punctuation correction, self-correction handling, number conversion. Supports OpenAI, Anthropic, Groq, Google, xAI, OpenRouter, Ollama, LM Studio, Apple Intelligence, and custom OpenAI-compatible endpoints.

Three Operating Modes

Dictate Mode: Voice-to-text with optional AI cleanup. The default mode.

Edit Mode: Rewrites selected text or generates new text based on voice instructions. Requires AI.

Command Mode: Agentic terminal automation. Translates natural language into shell commands, executes them, verifies results. Uses the OpenAI function-calling API format with up to 20 autonomous turns. Requires AI.

Key Features

  • Five configurable global hotkeys (two independent dictation shortcuts, Command Mode, Edit Mode, Cancel)
  • Toggle or Press-and-Hold hotkey behavior (global setting)
  • Per-app AI prompt routing (different prompts for Chrome vs VS Code vs Slack)
  • Custom named prompt profiles for both Dictate and Edit modes
  • Two text insertion strategies: Reliable Paste (clipboard-based, default) and Experimental Direct Typing (accessibility APIs)
  • Floating overlay with live transcription preview, mode switcher, prompt picker, and quick actions
  • Transcription history with reprocess, copy, and undo-AI actions
  • Independent AI provider/model settings for Command Mode

Using with Ollama

With Ollama providing the LLM locally, the entire FluidVoice pipeline — speech-to-text + AI enhancement — runs on-device with no network access, no API keys, and no per-token costs. FluidVoice detects that the Ollama endpoint is on localhost and skips API key validation.

Setup

  1. Install and start Ollama:

    brew install ollama
    ollama serve
  2. Pull a model. For dictation cleanup, 7B is sufficient. For Command Mode (function calling), 14B is better:

    ollama pull qwen2.5:7b     # dictation
    ollama pull qwen2.5:14b    # command mode / editing
  3. In FluidVoice > Settings > AI Enhancement:

    • Select Ollama as the provider (base URL pre-configured to http://localhost:11434/v1)
    • Set the model name to match what you pulled (e.g., qwen2.5:7b)
    • Leave API key blank
  4. For Command Mode with a different model: open the Command Mode settings and either link to the global Ollama provider or configure an independent provider with the larger model.

  5. In the overlay’s prompt picker, select Default (not “Off”) to enable AI cleanup.

Model Recommendations

See Model Recommendations by Task for the full matrix. Summary:

FeatureModelMemory
Dictation cleanupqwen2.5:7b~6 GB
Edit Modeqwen2.5:14b~9 GB
Command Modeqwen2.5:14b or qwen2.5:32b9-20 GB
All-in-oneqwen2.5:14b~9 GB

Using one model for everything avoids the 2-3 second reload when switching modes. See Model Swapping Overhead.

Troubleshooting

No AI processing: Verify Ollama is running (curl http://localhost:11434/ should return “Ollama is running”) and that the model name in FluidVoice matches ollama list exactly.

Slow first response: Ollama unloads models after 5 minutes by default. Increase with OLLAMA_KEEP_ALIVE=30m or -1 for indefinite.

Command Mode ignores commands: The model may lack function calling support. Use qwen2.5:14b or llama3.1:8b which have explicit tool-use training.

See also

  • OLLAMA — local LLM inference engine used as FluidVoice’s AI backend
  • Ollama vs LM Studio — comparison of local inference options
  • MCP — Model Context Protocol (related AI tool integration standard)