# FluidVoice Voice Options and Customization: A Complete Guide to Engine Selection and Personalization

> Explore FluidVoice voice options and customization. Select engines like Parakeet TDT, Whisper, and Apple Speech, and personalize with custom dictionaries and voice-matching.

- Repository: [ALTIC/FluidVoice](https://github.com/altic-dev/FluidVoice)
- Tags: how-to-guide
- Published: 2026-08-16

---

**FluidVoice offers multiple voice engine choices including Parakeet TDT, Whisper, and Apple Speech, plus deep customization through custom dictionaries and voice-matching profiles.**

The open-source FluidVoice project provides a flexible, user-configurable speech recognition architecture. Whether you need offline transcription, specialized vocabulary, or personalized voice recognition, the codebase exposes these capabilities through well-structured SwiftUI components and view models.

## Voice Engine Selection in FluidVoice

FluidVoice does not lock users into a single speech recognition backend. The application supports **pluggable voice engines** that users can switch between based on accuracy needs, privacy preferences, or network constraints.

### Available Voice Engines

According to the source code in `Sources/Fluid/UI/AISettingsView+SpeechRecognition.swift`, FluidVoice currently supports three primary engines:

- **Parakeet TDT** – A research-preview model with advanced voice-matching capabilities
- **Whisper** – OpenAI's robust open-source speech recognition
- **Apple Speech** – Native on-device transcription using Apple's Speech framework

### Selecting Your Voice Engine During Onboarding

The onboarding flow presents voice engine selection as a core setup step. In [`Sources/Fluid/UI/WelcomeView.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/UI/WelcomeView.swift) at line 701, the `voiceModel` case drives the "Choose your voice engine" screen. This selection persists through `VoiceEngineSettingsViewModel`, ensuring your preference remains active across sessions.

```swift
// Inside AISettingsView.swift
Picker("Voice Engine", selection: $settings.voiceEngine) {
    Text("Parakeet TDT").tag(VoiceEngine.parakeet)
    Text("Whisper").tag(VoiceEngine.whisper)
    Text("Apple Speech").tag(VoiceEngine.apple)
}

```

The `AISettingsView+SpeechRecognition.swift` file (line 53) renders engine-specific details including title, description, and status indicators with appropriate foreground colors for each option.

## Custom Dictionary for Domain-Specific Vocabulary

FluidVoice addresses a common speech recognition limitation: uncommon terminology, product names, and proper nouns. The **Custom Dictionary** feature lets users teach the engine their specialized vocabulary.

### Adding Custom Entries

The implementation in [`Sources/Fluid/UI/CustomDictionaryView.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/UI/CustomDictionaryView.swift) at line 337 provides the UI for dictionary management. Users can type or speak new entries, which are stored in the app's dictionary and applied during transcription.

```swift
// Using the FluidVoice API
let entry = DictionaryTransferReplacement(
    from: ["myproduct"],                // spoken trigger
    to:   "MyProduct™"                  // desired transcription
)
ASRService.applyCustomDictionary(entry)

```

This `DictionaryTransferReplacement` struct maps spoken phrases to desired output, enabling precise control over transcription results.

## Voice-Matching and Speaker Profiles

Beyond vocabulary customization, FluidVoice supports **voice-matching profiles** that adapt recognition to a specific speaker's timbre and cadence.

### Training Your Voice Profile

The onboarding flow includes a "Teach Words" step implemented in [`Sources/Fluid/UI/CustomDictionaryView.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/UI/CustomDictionaryView.swift) at line 2770. This captures repetitions of a word to create an engine-specific profile.

```swift
// Triggered from the "Teach Words" UI
voiceEngine.trainProfile(
    phrase: "FluidVoice",
    repetitions: 3,
    completion: { result in
        switch result {
        case .success(let profile):
            print("Profile saved: \(profile.id)")
        case .failure(let error):
            print("Training failed: \(error)")
        }
    }
)

```

The `trainProfile(phrase:repetitions:completion:)` method accepts a target phrase, required repetition count, and completion handler for success or failure cases.

## Advanced Voice Engine Settings

Power users can access experimental features through the settings interface. In [`Sources/Fluid/UI/CustomDictionaryView.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/UI/CustomDictionaryView.swift) at line 2555, the "Advanced voice matching" section exposes toggles like **"Research Preview"** for Parakeet TDT.

These settings are engine-specific and allow early access to models that may offer improved accuracy at the cost of resource usage or stability.

## Architecture Overview

The voice customization system relies on several coordinated components:

| Component | Responsibility | Key File |
|-----------|--------------|----------|
| **AIProvider** | Abstracts backend calls to selected speech engine | [`Sources/Fluid/Networking/AIProvider.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/Networking/AIProvider.swift) |
| **VoiceEngineSettingsViewModel** | Persists user engine selection | Referenced in [`WelcomeView.swift`](https://github.com/altic-dev/FluidVoice/blob/main/WelcomeView.swift) |
| **ASRService** | Applies dictionary entries and manages profiles | Referenced in API examples |

This separation ensures that UI changes in [`AISettingsView.swift`](https://github.com/altic-dev/FluidVoice/blob/main/AISettingsView.swift) propagate correctly to the active transcription backend without coupling interface code to implementation details.

## Summary

- **FluidVoice supports three voice engines**: Parakeet TDT, Whisper, and Apple Speech, selectable during onboarding or in settings
- **Custom dictionary entries** allow precise control over transcription of specialized terminology via `DictionaryTransferReplacement`
- **Voice-matching profiles** capture speaker characteristics through the `trainProfile()` method for improved personal recognition
- **Advanced toggles** expose experimental engine capabilities for users who need cutting-edge accuracy

## Frequently Asked Questions

### Can I switch voice engines after completing setup?

Yes. While the initial selection appears during onboarding in [`WelcomeView.swift`](https://github.com/altic-dev/FluidVoice/blob/main/WelcomeView.swift), you can change engines at any time through **AI Settings**. The `AISettingsView+SpeechRecognition.swift` file renders the engine picker with live status indicators for each option.

### Does voice training data sync across devices?

The source analysis does not indicate cloud synchronization for voice profiles. The `VoiceEngineSettingsViewModel` handles persistence, but profile storage appears device-local based on the implementation in [`CustomDictionaryView.swift`](https://github.com/altic-dev/FluidVoice/blob/main/CustomDictionaryView.swift).

### How many custom dictionary entries can I add?

The codebase does not enforce a documented limit in the analyzed files. The `ASRService.applyCustomDictionary()` method processes entries individually, suggesting the constraint would depend on memory and performance characteristics rather than an arbitrary cap.

### Is the Parakeet TDT engine fully released?

No. The "Research Preview" label in [`CustomDictionaryView.swift`](https://github.com/altic-dev/FluidVoice/blob/main/CustomDictionaryView.swift) at line 2555 indicates this remains an experimental option. The toggle appears under "Advanced voice matching," signaling it may have stability or resource usage trade-offs compared to production engines like Whisper or Apple Speech.