> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vowen.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# AI Enhancement

> Automatically polish your transcriptions with AI.

<div style={{ marginTop: "-1rem" }}>
  AI Enhancement is a light cleanup pass that runs after transcription. It fixes spelling, grammar, and formatting, then gets out of the way.
</div>

<div className="my-6 flex gap-3 rounded-xl border border-violet-500/30 bg-violet-500/10 p-4">
  <div className="shrink-0 pt-0.5 text-violet-500 dark:text-violet-400">
    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
      <path d="m21 2-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0 3 3L22 7l-3-3m-3.5 3.5L19 4" />
    </svg>
  </div>

  <div className="text-sm leading-relaxed text-zinc-700 dark:text-zinc-300">
    <strong className="text-violet-700 dark:text-violet-300">API key required.</strong> AI Enhancement runs on a third-party provider (OpenAI, Anthropic, Google Gemini, Groq, and 6+ others). Connect your own key in <a href="/ai-features/ai-setup" className="font-semibold text-violet-600 hover:text-violet-500 dark:text-violet-400">Settings > AI Setup</a>. **Groq** and **Google Gemini** both offer generous free tiers that cover most daily use; other providers may require a paid plan.
  </div>
</div>

## What it does

### Cleanup

<div className="my-4 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3">
  <div className="rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 flex flex-col gap-2 hover:border-violet-400 dark:hover:border-violet-500/60 transition-colors" style={{ minHeight: "240px" }}>
    <div className="flex items-center gap-2 text-zinc-900 dark:text-zinc-100" style={{ minHeight: "44px" }}>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="text-violet-500 dark:text-violet-400" style={{ flexShrink: 0 }}>
        <path d="M12 20h9" />

        <path d="M16.5 3.5a2.12 2.12 0 1 1 3 3L7 19l-4 1 1-4Z" />
      </svg>

      <div className="text-sm font-semibold">Spelling and grammar</div>
    </div>

    <div className="font-mono text-xs text-zinc-600 dark:text-zinc-400 bg-zinc-100/60 dark:bg-zinc-900/60 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"i think <span style={{ textDecoration: "line-through", opacity: 0.5 }}>wee</span> should go <span style={{ textDecoration: "line-through", opacity: 0.5 }}>tommorow</span>"</div>
    <div className="text-center text-violet-500 dark:text-violet-400" style={{ fontSize: "0.85rem" }}>↓</div>
    <div className="font-mono text-xs text-zinc-800 dark:text-zinc-200 bg-violet-500/10 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"I think <strong className="text-violet-700 dark:text-violet-300">we</strong> should go <strong className="text-violet-700 dark:text-violet-300">tomorrow</strong>."</div>
  </div>

  <div className="rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 flex flex-col gap-2 hover:border-violet-400 dark:hover:border-violet-500/60 transition-colors" style={{ minHeight: "240px" }}>
    <div className="flex items-center gap-2 text-zinc-900 dark:text-zinc-100" style={{ minHeight: "44px" }}>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="text-violet-500 dark:text-violet-400" style={{ flexShrink: 0 }}>
        <path d="M4 7V4h16v3" />

        <path d="M9 20h6" />

        <path d="M12 4v16" />
      </svg>

      <div className="text-sm font-semibold">Punctuation and capitalization</div>
    </div>

    <div className="font-mono text-xs text-zinc-600 dark:text-zinc-400 bg-zinc-100/60 dark:bg-zinc-900/60 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"<span style={{ textDecoration: "line-through", opacity: 0.5 }}>hey</span> are you free tomorrow"</div>
    <div className="text-center text-violet-500 dark:text-violet-400" style={{ fontSize: "0.85rem" }}>↓</div>
    <div className="font-mono text-xs text-zinc-800 dark:text-zinc-200 bg-violet-500/10 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"<strong className="text-violet-700 dark:text-violet-300">Hey,</strong> are you free tomorrow<strong className="text-violet-700 dark:text-violet-300">?</strong>"</div>
  </div>

  <div className="rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 flex flex-col gap-2 hover:border-violet-400 dark:hover:border-violet-500/60 transition-colors" style={{ minHeight: "240px" }}>
    <div className="flex items-center gap-2 text-zinc-900 dark:text-zinc-100" style={{ minHeight: "44px" }}>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="text-violet-500 dark:text-violet-400" style={{ flexShrink: 0 }}>
        <path d="M9 14 4 9l5-5" />

        <path d="M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5v0a5.5 5.5 0 0 1-5.5 5.5H11" />
      </svg>

      <div className="text-sm font-semibold">Self-corrections</div>
    </div>

    <div className="font-mono text-xs text-zinc-600 dark:text-zinc-400 bg-zinc-100/60 dark:bg-zinc-900/60 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"let's meet at <span style={{ textDecoration: "line-through", opacity: 0.5 }}>3 actually</span> 4"</div>
    <div className="text-center text-violet-500 dark:text-violet-400" style={{ fontSize: "0.85rem" }}>↓</div>
    <div className="font-mono text-xs text-zinc-800 dark:text-zinc-200 bg-violet-500/10 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"Let's meet at <strong className="text-violet-700 dark:text-violet-300">4</strong>."</div>
  </div>
</div>

### Formatting

<div className="my-4 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3">
  <div className="rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 flex flex-col gap-2 hover:border-violet-400 dark:hover:border-violet-500/60 transition-colors" style={{ minHeight: "240px" }}>
    <div className="flex items-center gap-2 text-zinc-900 dark:text-zinc-100" style={{ minHeight: "44px" }}>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="text-violet-500 dark:text-violet-400" style={{ flexShrink: 0 }}>
        <path d="M4 9h16" />

        <path d="M4 15h16" />

        <path d="M10 3l-2 18" />

        <path d="M16 3l-2 18" />
      </svg>

      <div className="text-sm font-semibold">Spoken numbers to digits</div>
    </div>

    <div className="font-mono text-xs text-zinc-600 dark:text-zinc-400 bg-zinc-100/60 dark:bg-zinc-900/60 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"<span style={{ textDecoration: "line-through", opacity: 0.5 }}>three thousand</span> dollars"</div>
    <div className="text-center text-violet-500 dark:text-violet-400" style={{ fontSize: "0.85rem" }}>↓</div>
    <div className="font-mono text-xs text-zinc-800 dark:text-zinc-200 bg-violet-500/10 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"<strong className="text-violet-700 dark:text-violet-300">3000</strong> dollars"</div>
  </div>

  <div className="rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 flex flex-col gap-2 hover:border-violet-400 dark:hover:border-violet-500/60 transition-colors" style={{ minHeight: "240px" }}>
    <div className="flex items-center gap-2 text-zinc-900 dark:text-zinc-100" style={{ minHeight: "44px" }}>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="text-violet-500 dark:text-violet-400" style={{ flexShrink: 0 }}>
        <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z" />
      </svg>

      <div className="text-sm font-semibold">Phone numbers</div>
    </div>

    <div className="font-mono text-xs text-zinc-600 dark:text-zinc-400 bg-zinc-100/60 dark:bg-zinc-900/60 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"<span style={{ textDecoration: "line-through", opacity: 0.5 }}>five five five one two three four</span>"</div>
    <div className="text-center text-violet-500 dark:text-violet-400" style={{ fontSize: "0.85rem" }}>↓</div>
    <div className="font-mono text-xs text-zinc-800 dark:text-zinc-200 bg-violet-500/10 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"<strong className="text-violet-700 dark:text-violet-300">555-1234</strong>"</div>
  </div>

  <div className="rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 flex flex-col gap-2 hover:border-violet-400 dark:hover:border-violet-500/60 transition-colors" style={{ minHeight: "240px" }}>
    <div className="flex items-center gap-2 text-zinc-900 dark:text-zinc-100" style={{ minHeight: "44px" }}>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="text-violet-500 dark:text-violet-400" style={{ flexShrink: 0 }}>
        <rect x="2" y="4" width="20" height="16" rx="2" />

        <path d="M6 8h.01" />

        <path d="M10 8h8" />

        <path d="M6 12h.01" />

        <path d="M10 12h8" />

        <path d="M6 16h.01" />

        <path d="M10 16h4" />
      </svg>

      <div className="text-sm font-semibold">Spoken formatting commands</div>
    </div>

    <div className="font-mono text-xs text-zinc-600 dark:text-zinc-400 bg-zinc-100/60 dark:bg-zinc-900/60 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"price <span style={{ textDecoration: "line-through", opacity: 0.5 }}>colon</span> ten dollars"</div>
    <div className="text-center text-violet-500 dark:text-violet-400" style={{ fontSize: "0.85rem" }}>↓</div>
    <div className="font-mono text-xs text-zinc-800 dark:text-zinc-200 bg-violet-500/10 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"Price<strong className="text-violet-700 dark:text-violet-300">:</strong> 10 dollars"</div>
  </div>
</div>

### Structure

<div className="my-4 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3">
  <div className="rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 flex flex-col gap-2 hover:border-violet-400 dark:hover:border-violet-500/60 transition-colors" style={{ minHeight: "240px" }}>
    <div className="flex items-center gap-2 text-zinc-900 dark:text-zinc-100" style={{ minHeight: "44px" }}>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="text-violet-500 dark:text-violet-400" style={{ flexShrink: 0 }}>
        <path d="M10 6h11" />

        <path d="M10 12h11" />

        <path d="M10 18h11" />

        <path d="M4 6h1v4" />

        <path d="M4 10h2" />

        <path d="M6 18H4c0-1 2-2 2-3s-1-1.5-2-1" />
      </svg>

      <div className="text-sm font-semibold">List formatting</div>
    </div>

    <div className="font-mono text-xs text-zinc-600 dark:text-zinc-400 bg-zinc-100/60 dark:bg-zinc-900/60 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"buy milk call mom send report"</div>
    <div className="text-center text-violet-500 dark:text-violet-400" style={{ fontSize: "0.85rem" }}>↓</div>
    <div className="font-mono text-xs text-zinc-800 dark:text-zinc-200 bg-violet-500/10 rounded px-2 py-1.5" style={{ minHeight: "56px" }}><strong className="text-violet-700 dark:text-violet-300">1.</strong> Buy milk<br /><strong className="text-violet-700 dark:text-violet-300">2.</strong> Call mom<br /><strong className="text-violet-700 dark:text-violet-300">3.</strong> Send report</div>
  </div>

  <div className="rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 flex flex-col gap-2 hover:border-violet-400 dark:hover:border-violet-500/60 transition-colors" style={{ minHeight: "240px" }}>
    <div className="flex items-center gap-2 text-zinc-900 dark:text-zinc-100" style={{ minHeight: "44px" }}>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="text-violet-500 dark:text-violet-400" style={{ flexShrink: 0 }}>
        <rect x="2" y="4" width="20" height="16" rx="2" />

        <path d="m22 7-10 5L2 7" />
      </svg>

      <div className="text-sm font-semibold">Email structure</div>
    </div>

    <div className="font-mono text-xs text-zinc-600 dark:text-zinc-400 bg-zinc-100/60 dark:bg-zinc-900/60 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"hi sarah thanks for the update regards john"</div>
    <div className="text-center text-violet-500 dark:text-violet-400" style={{ fontSize: "0.85rem" }}>↓</div>
    <div className="font-mono text-xs text-zinc-800 dark:text-zinc-200 bg-violet-500/10 rounded px-2 py-1.5" style={{ minHeight: "56px" }}><strong className="text-violet-700 dark:text-violet-300">Hi Sarah,</strong><br />Thanks for the update.<br /><strong className="text-violet-700 dark:text-violet-300">Regards,</strong><br />John</div>
  </div>

  <div className="rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 flex flex-col gap-2 hover:border-violet-400 dark:hover:border-violet-500/60 transition-colors" style={{ minHeight: "240px" }}>
    <div className="flex items-center gap-2 text-zinc-900 dark:text-zinc-100" style={{ minHeight: "44px" }}>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="text-violet-500 dark:text-violet-400" style={{ flexShrink: 0 }}>
        <path d="M3 6h18" />

        <path d="M3 12h18" />

        <path d="M3 18h18" />
      </svg>

      <div className="text-sm font-semibold">Paragraph splitting</div>
    </div>

    <div className="font-mono text-xs text-zinc-600 dark:text-zinc-400 bg-zinc-100/60 dark:bg-zinc-900/60 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>"we met today anyway tomorrow we ship"</div>
    <div className="text-center text-violet-500 dark:text-violet-400" style={{ fontSize: "0.85rem" }}>↓</div>
    <div className="font-mono text-xs text-zinc-800 dark:text-zinc-200 bg-violet-500/10 rounded px-2 py-1.5" style={{ minHeight: "56px" }}>We met today.<br /><br /><strong className="text-violet-700 dark:text-violet-300">Anyway,</strong> tomorrow we ship.</div>
  </div>
</div>

<Note>
  Filler words like "um", "uh", and "you know" are stripped by Vowen's output filter before AI Enhancement runs. This works whether or not you have an AI provider connected. Toggle it in **Settings > General > Remove filler words**.
</Note>

## How it works

When you record with AI Enhancement enabled, your speech moves through three stages. AI Enhancement is the middle one and is the focus of this page.

<div className="my-6 grid grid-cols-1 md:grid-cols-3 gap-3">
  <div className="rounded-xl border border-zinc-200 dark:border-zinc-800 p-4">
    <div className="text-xs font-semibold uppercase tracking-wide text-zinc-500 mb-1">Step 1</div>
    <div className="font-semibold mb-2 text-zinc-900 dark:text-zinc-100">Transcription</div>
    <div className="text-sm text-zinc-600 dark:text-zinc-400">Your speech is transcribed by your selected local or cloud model. Filler words are stripped by Vowen's output filter, and any matching Threads are applied.</div>
  </div>

  <div className="rounded-xl border-2 border-violet-500 bg-violet-500/10 p-4">
    <div className="text-xs font-semibold uppercase tracking-wide text-violet-600 dark:text-violet-400 mb-1">Step 2</div>
    <div className="font-semibold mb-2 text-violet-700 dark:text-violet-300">AI Enhancement</div>
    <div className="text-sm text-zinc-700 dark:text-zinc-300">The cleaned transcription is sent to your AI provider with a system prompt that tells it to fix errors and apply formatting without rewriting your sentences. Custom instructions, if you've set them, are appended.</div>
  </div>

  <div className="rounded-xl border border-zinc-200 dark:border-zinc-800 p-4">
    <div className="text-xs font-semibold uppercase tracking-wide text-zinc-500 mb-1">Step 3</div>
    <div className="font-semibold mb-2 text-zinc-900 dark:text-zinc-100">Auto-Paste</div>
    <div className="text-sm text-zinc-600 dark:text-zinc-400">The polished output is pasted into whatever app has focus, using your selected text insertion method.</div>
  </div>
</div>

## Voice formatting commands

Speak any of these and Vowen will apply the symbol or formatting instead of writing the words.

<div className="my-6 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-x-8 gap-y-6 text-sm">
  <div>
    <div className="font-semibold text-zinc-900 dark:text-zinc-100 mb-2 pb-1 border-b border-violet-500/30">Punctuation</div>

    <div className="space-y-1">
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">period, full stop</span><code className="text-violet-600 dark:text-violet-400">.</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">comma</span><code className="text-violet-600 dark:text-violet-400">,</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">question mark</span><code className="text-violet-600 dark:text-violet-400">?</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">exclamation point</span><code className="text-violet-600 dark:text-violet-400">!</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">colon</span><code className="text-violet-600 dark:text-violet-400">:</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">semicolon</span><code className="text-violet-600 dark:text-violet-400">;</code></div>
    </div>
  </div>

  <div>
    <div className="font-semibold text-zinc-900 dark:text-zinc-100 mb-2 pb-1 border-b border-violet-500/30">Line breaks</div>

    <div className="space-y-1">
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">line break, new line</span><code className="text-violet-600 dark:text-violet-400">↵</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">new paragraph</span><code className="text-violet-600 dark:text-violet-400">↵↵</code></div>
    </div>
  </div>

  <div>
    <div className="font-semibold text-zinc-900 dark:text-zinc-100 mb-2 pb-1 border-b border-violet-500/30">Quotes</div>

    <div className="space-y-1">
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">quotation mark, quote</span><code className="text-violet-600 dark:text-violet-400">"</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">apostrophe</span><code className="text-violet-600 dark:text-violet-400">'</code></div>
    </div>
  </div>

  <div>
    <div className="font-semibold text-zinc-900 dark:text-zinc-100 mb-2 pb-1 border-b border-violet-500/30">Symbols</div>

    <div className="space-y-1">
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">asterisk, star</span><code className="text-violet-600 dark:text-violet-400">\*</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">ampersand</span><code className="text-violet-600 dark:text-violet-400">&</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">percent sign</span><code className="text-violet-600 dark:text-violet-400">%</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">ellipsis</span><code className="text-violet-600 dark:text-violet-400">...</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">slash, forward slash</span><code className="text-violet-600 dark:text-violet-400">/</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">backslash</span><code className="text-violet-600 dark:text-violet-400">{"\\"}</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">at, at sign</span><code className="text-violet-600 dark:text-violet-400">@</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">hashtag</span><code className="text-violet-600 dark:text-violet-400">#</code></div>
    </div>
  </div>

  <div>
    <div className="font-semibold text-zinc-900 dark:text-zinc-100 mb-2 pb-1 border-b border-violet-500/30">Brackets and dashes</div>

    <div className="space-y-1">
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">open / close parenthesis</span><code className="text-violet-600 dark:text-violet-400">( )</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">open / close bracket</span><code className="text-violet-600 dark:text-violet-400">\[ ]</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">open / close brace</span><code className="text-violet-600 dark:text-violet-400">{"{ }"}</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">dash, hyphen</span><code className="text-violet-600 dark:text-violet-400">-</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">em dash</span><code className="text-violet-600 dark:text-violet-400">—</code></div>
    </div>
  </div>

  <div>
    <div className="font-semibold text-zinc-900 dark:text-zinc-100 mb-2 pb-1 border-b border-violet-500/30">Math and special</div>

    <div className="space-y-1">
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">plus</span><code className="text-violet-600 dark:text-violet-400">+</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">minus, negative</span><code className="text-violet-600 dark:text-violet-400">-</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">equals</span><code className="text-violet-600 dark:text-violet-400">=</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">trademark, tm</span><code className="text-violet-600 dark:text-violet-400">™</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">copyright</span><code className="text-violet-600 dark:text-violet-400">©</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">degree</span><code className="text-violet-600 dark:text-violet-400">°</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">degrees celsius</span><code className="text-violet-600 dark:text-violet-400">°C</code></div>
      <div className="flex justify-between gap-3"><span className="text-zinc-600 dark:text-zinc-400">degrees fahrenheit</span><code className="text-violet-600 dark:text-violet-400">°F</code></div>
    </div>
  </div>
</div>

## Per-shortcut override

Each shortcut has its own AI Enhancement setting:

| Setting    | Behavior                                        |
| ---------- | ----------------------------------------------- |
| Always on  | This shortcut always enhances the transcription |
| Always off | This shortcut never enhances the transcription  |

Configure this by clicking the gear icon next to any shortcut in [Settings > Shortcuts](/features/shortcuts). You can also create a **dedicated shortcut just for AI Enhancement**: set its enhancement to **Always on** while leaving your main shortcut on **Always off**. Custom shortcuts (any key combination, plus mouse buttons) are supported alongside the defaults.

<Note>Adding a second/alternate shortcut to one action is a <a href="https://vowen.ai" className="font-semibold underline-offset-2" style={{ color: "#8b5cf6", backgroundColor: "rgba(139, 92, 246, 0.12)", border: "1px solid rgba(139, 92, 246, 0.35)", padding: "2px 8px", borderRadius: "6px", fontSize: "0.85em", textDecoration: "none", whiteSpace: "nowrap" }}>Pro</a> feature; the per-shortcut Always-on / Always-off toggle on your single primary shortcut is free.</Note>

This is the cleanest way to keep one shortcut for raw transcription (code, AI prompts) and another for polished output (writing). See [Shortcut Patterns](/features/shortcut-patterns) for example setups.

## Custom instructions <a href="https://vowen.ai" className="font-semibold" style={{ color: "#8b5cf6", backgroundColor: "rgba(139, 92, 246, 0.12)", border: "1px solid rgba(139, 92, 246, 0.35)", padding: "2px 8px", borderRadius: "6px", fontSize: "0.5em", textDecoration: "none", whiteSpace: "nowrap", verticalAlign: "middle", marginLeft: "0.5rem" }}>Pro feature</a>

Inside the same settings panel as **Enhance transcription with AI**, there is a separate **Custom Instructions** toggle. Turn it on and a text area appears where you can write rules that get appended to every AI Enhancement pass. Click **Save** to apply them.

Examples:

* "Always use Oxford commas"
* "Write in active voice"
* "Keep paragraphs to two or three sentences"
* "Output everything in lowercase"

<div className="my-6 rounded-xl border border-violet-500/30 bg-violet-500/5 p-5">
  <div className="text-xs uppercase tracking-wide text-violet-600 dark:text-violet-400 font-semibold mb-4">How a custom instruction shapes the output</div>

  <div className="text-xs uppercase tracking-wide font-semibold text-violet-600 dark:text-violet-400 mb-1">The rule you set</div>
  <div className="font-mono text-sm font-medium text-violet-900 dark:text-violet-100 bg-violet-500/15 rounded-lg px-3 py-3 mb-5" style={{ border: "1px solid rgba(139, 92, 246, 0.4)" }}>"Write in passive voice with a formal, report-style tone."</div>

  <div className="text-xs uppercase tracking-wide text-zinc-500 dark:text-zinc-500 mb-1">You say</div>
  <div className="font-mono text-sm text-zinc-600 dark:text-zinc-400 bg-zinc-100/60 dark:bg-zinc-900/60 rounded-lg px-3 py-2 border border-zinc-200 dark:border-zinc-800">"planned obsolescence is when companies make products that break on purpose so people keep buying new stuff and it's really wasteful because everything ends up in landfills and it's bad for sustainability"</div>

  <div className="text-center text-violet-500 dark:text-violet-400 my-2" style={{ fontSize: "0.85rem" }}>↓</div>

  <div className="text-xs uppercase tracking-wide text-zinc-500 dark:text-zinc-500 mb-1">AI Enhanced output</div>
  <div className="font-mono text-sm text-zinc-800 dark:text-zinc-200 bg-zinc-100/60 dark:bg-zinc-900/60 rounded-lg px-3 py-2" style={{ border: "1px solid rgb(228 228 231)", borderLeft: "3px solid #8b5cf6" }}>"Planned obsolescence refers to the practice by which products are deliberately designed by manufacturers to fail prematurely. As a result, consumers are compelled to make repeated purchases, and discarded items are accumulated in landfills, undermining broader sustainability efforts."</div>
</div>

See the [full guide](/ai-features/custom-instructions) for recommended phrasings.

## More Examples

### Example 1: Email structure

You say:

> "Hi Donna comma new line I'm writing to follow up on our meeting yesterday period I wanted to confirm the next steps period new paragraph Regards comma new line John"

You get:

```
Hi Donna,

I'm writing to follow up on our meeting yesterday. I wanted to confirm the next steps.

Regards,
John
```

### Example 2: Numbered list

You say:

> "I need three things first buy groceries second call mom and third finish the report"

You get:

```
I need 3 things:
1. Buy groceries
2. Call mom
3. Finish the report
```

### Example 3: Phone number

You say:

> "my office number is plus one eight hundred five five five zero one zero one extension two three four"

You get:

```
My office number is +1-800-555-0101 ext. 234
```

### Example 4: Email address

You say:

> "send the report to alex at example dot com"

You get:

```
Send the report to alex@example.com
```

## Best practices

1. **Match your model to your need.** For light cleanup, small models (Llama 3.1 8B, Gemini Flash Lite, Groq Llama) are fast and accurate. For complex custom instructions, use a larger model (GPT-4, Claude Sonnet, Gemini Pro).
2. **Speak naturally.** AI Enhancement is built to handle filler words, false starts, and casual phrasing. You do not need to over-articulate.
3. **Use formatting commands sparingly.** Let auto-detection handle normal sentences. Reach for explicit commands only when you need a specific symbol or paragraph break.
4. **Keep custom instructions short and specific.** "Use Oxford commas" works better than "Make my writing better".
5. **Set up Per-app Tones for repeated context switches.** If you want different behavior in different apps (formal in email, casual in Slack, off in code editors), [Per-app Tones](/ai-features/tones) is more sustainable than toggling the global setting.
6. **Choose latency-conscious providers.** If AI Enhancement feels slow, switch to Groq or Cerebras. Both serve large models at sub-second latency on the free tier.

## Languages

AI Enhancement runs in the same language as the transcription. Most providers handle major world languages well, but smaller models (under 8B parameters) can produce uneven results in low-resource languages.

For best non-English results:

* Pair a multilingual speech model (Whisper Large v3, Groq Whisper) with a frontier AI model (GPT-4o, Claude Sonnet, Gemini Pro).
* Avoid `.en` speech models for non-English input.
* Set your language explicitly in **Settings > Language** instead of relying on auto-detect.

See [Languages](/transcription/languages) for the full list of supported speech languages.

***

Running into issues with AI Enhancement? See [AI & API Issues](/troubleshooting/ai-issues) for symptom-driven fixes.

<Card title="Set up an AI provider" icon="key" href="/ai-features/ai-setup">
  Connect Groq, OpenAI, Anthropic, Gemini, or any of 10+ supported providers.
</Card>
