--- url: /about.md description: >- Diction is built by a hands-on engineering lead who works daily on critical banking infrastructure. Privacy and reliability are not product values. They are engineering constraints he lives by. --- # About Diction is an engineering project. I'm a hands-on engineering lead at a major financial institution. The kind of environment where the reliability and privacy bar is set by regulators, not product managers. Systems don't go down. Data doesn't leak. Those aren't goals, they're the baseline. I use speech to text constantly. Commuting. On a walk with my son. Apple's built-in dictation is well known for being unreliable, and I needed something that works in any app. And I mean any app. I use terminal apps, SSH clients, things where the standard iOS keyboard already struggles. I was just missing something that solves the problem properly. A keyboard you tap, speak into, and it works. Every time, everywhere. So I built it properly. Diction is under 15 MB. I wanted it lean and focused, one thing that works rather than ten things that mostly work. A lot of the core audio and processing modules are custom built because the available libraries either pulled in too many dependencies or weren't precise enough for what I needed. iOS keyboard extensions have tight memory limits and no tolerance for slowness. I've spent a lot of time on memory usage, battery draw, and making sure the keyboard is ready the moment you need it. The same instincts I bring to banking systems are in Diction. No unnecessary data retention. No assumptions about the happy path. Defence in depth. Audio is processed and immediately discarded. The server is open source. You can read every line. On-device and self-hosted are free. If you don't want to run a server, there's Diction One. It runs on my own infrastructure with fine-tuned speech models and low-latency processing. Transcription text is encrypted with AES-256-GCM before it leaves the server. Context awareness carries terminology and names across your session. AI polishing cleans up the raw transcript before it hits your text field. The result is clean, ready-to-send text with no setup on your end. Priced like a developer built it, not like someone raised a round. *** [Try it on the App Store](https://apps.apple.com/app/id6759807364) I'm curious how people actually use it. Commuting, meetings, writing, terminal work, something else entirely. And what's missing for you. If there's a use case Diction doesn't handle well, I want to know. Find me on [GitHub](https://github.com/omachala) or [LinkedIn](https://www.linkedin.com/in/ondrejmachala), or just [drop a message](/support). --- --- url: /features/ai-companion.md description: >- AI Companion polishes your speech into clean text, and understands voice commands to rewrite, translate, or edit. Available with Diction One. --- # AI Companion AI Companion is more than cleanup. It polishes your natural speech into clean text, and it understands voice commands. Say "translate this to French", "make it shorter", or "rewrite as a bullet list" and it just does it. It is a writing companion that listens, cleans up, and follows instructions. When you speak, you don't speak in perfect sentences. You say "um", pause mid-thought, restart, skip punctuation, and trail off. That is normal. AI Companion takes the raw transcription and cleans it up before the text is inserted. And when you need more than cleanup, just tell it what to do. The result: you dictate a quick thought and get a polished sentence. Dictate a paragraph and get something you would be comfortable sending as an email. Or select existing text, say what you want changed, and it rewrites it on the spot. ## Before and After **What you say:** > *"So um I was thinking we could like maybe move the meeting to Thursday instead of um Wednesday because I have a conflict"* **What gets inserted:** > I was thinking we could move the meeting to Thursday instead of Wednesday because I have a conflict. *** **What you say:** > *"Hey can you um send me the the report when you get a chance I need it for the uh the presentation tomorrow morning thanks"* **What gets inserted:** > Hey, can you send me the report when you get a chance? I need it for the presentation tomorrow morning. Thanks. *** **What you say:** > *"Note to self buy milk eggs bread and also pick up the dry cleaning before five"* **What gets inserted:** > Note to self: buy milk, eggs, bread, and also pick up the dry cleaning before five. ## What It Does * Removes filler words ("um", "uh", "like", "you know", "sort of") * Removes accidental word repetitions ("the the", "I I") * Adds punctuation and capitalisation * Fixes grammar and sentence structure * Preserves your meaning and intent -- it cleans up how you said it, not what you said ## What It Does Not Do * It does not change the meaning of your words * It does not add content you did not say * It does not translate between languages (unless you ask it to) * It does not store or learn from your transcriptions * It does not sanitise your language. Profanity comes through as you said it. ## Sounds Human, Not AI AI cleanup tools leave fingerprints. The em-dashes everywhere. The faintly formal vocabulary. The cadence that doesn't quite sound like a person wrote it. AI Companion is tuned against that. Casual text stays casual. Professional text reads like a careful human, not a corporate template. The output should read like you, not like a model wrote it for you. ## Context-Aware AI Companion is not running in isolation. It sees the text around your cursor -- up to 500 characters before and after the insertion point, plus any selected text. This means: * Inserted text matches the capitalisation of its position in the sentence * Punctuation adapts to context (no period if you are mid-sentence) * Tone and formality match what you have already written * List formatting is continued when you are adding to a list AI Companion also considers your recent dictations for terminology continuity. If you used a specific term two dictations ago, it carries that context forward. [Read more about context-aware editing.](/features/context-aware) ## Profile Tone Presets shape style per app. Profile shapes everything underneath them. In the Diction app, open Profile and write a short note about who you are and how you write. Software engineer who uses British English. Sales lead who talks to enterprise customers. Doctor who dictates patient notes. A few sentences are plenty. AI Companion reads your Profile on every cleanup. Brand names and jargon come through. Domain language stays in the right register. Your spellings match what you actually use. The same raw dictation produces different results for different people because their Profile is different. Profile and Tone Presets stack. Profile is the baseline that follows you everywhere. Tone is the local style for the app you are in right now. Set "British English, technical writing" as your Profile, then a Professional tone for Mail and a Casual tone for Messages, and your dictations come out as British technical email or British casual messages without you doing anything. Write Profile once and it applies everywhere AI Companion runs. ## Tone Presets Set a writing style per app. Professional for email, Casual for messages, or write your own custom instruction. Diction remembers which tone goes with which app and applies it automatically. [Read more about Tone Presets.](/features/tone-presets) ## My Words Add names, jargon, and product terms that speech models keep getting wrong. Diction uses your custom words to improve both raw transcription and AI Companion accuracy. [Read more about My Words.](/features/my-words) ## How to Use It AI Companion is enabled by default for Diction One subscribers. Toggle it off any time in the Diction app settings if you prefer raw transcription output. When AI Companion is active, the transcription text (not the original audio) is processed by an AI model to produce the cleaned result. Audio is always discarded immediately after transcription, regardless of whether AI Companion is on or off. ## Best For * Emails and messages where you want polished output without editing * Long-form dictation where filler words would clutter the text * Professional contexts where grammar and punctuation matter * Quick notes where you want clean text without going back to fix it --- --- url: /features/context-aware.md description: >- Diction reads the text around your cursor and adapts your dictation to fit. Insert into sentences, replace selected text, fix typos -- all by voice. --- # Context-Aware Text Editing Diction is not a blank-page dictation tool. It sees where your cursor is, reads the text before and after the insertion point, and understands what you have selected. When AI Companion is active, every dictation is shaped to fit the context it is landing in. This turns Diction from a transcription tool into a voice-powered text editor. ## You don't pick a mode Diction figures out what you want from where your cursor is. * **Cursor in empty space**: it dictates. Words land at the cursor. * **Cursor in the middle of text**: it inserts. The new words fit the surrounding sentence. * **Text selected**: it edits. Either replaces the selection with what you said, or follows your instruction. Say *"translate to Czech"* and it does that. No toggle, no setting. One mic button, the right behaviour for the context you are in. ## Insert Anywhere Place your cursor in the middle of a sentence and dictate. Diction reads the surrounding text and formats the insertion to fit. Capitalisation and spacing adapt automatically, so the result reads like you typed it in place. **Example: filling in a sentence** You are writing an email: > Hi Sarah, I wanted to follow up on ▌ and see if you had any questions. You tap the mic and say: *"the proposal I sent last week"* Result: > Hi Sarah, I wanted to follow up on **the proposal I sent last week** and see if you had any questions. No stray capital letter. No extra period. It fits because Diction sees the sentence around it. *** **Example: continuing a list** You have a note open: > Things to pack: > > * Passport > * Charger > ▌ You tap the mic and say: *"laptop and headphones"* Result: > Things to pack: > > * Passport > * Charger > * **Laptop and headphones** It matches the list format because it can see the pattern above. *** **Example: adding to a code comment** You are editing a code file: > // TODO: refactor this function to ▌ You say: *"handle the edge case where the input array is empty"* Result: > // TODO: refactor this function to **handle the edge case where the input array is empty** Lowercase, no period. It reads like you typed it. ## Select and Replace Select text in any app, then dictate. Diction replaces the selection with your new words. This is the fastest way to rewrite, rephrase, or fix text by voice. **Example: rewriting a sentence** Your draft says: > I think we should probably consider maybe going with the second option if that is okay with everyone. Select the whole sentence. Tap the mic. Say: *"Let's go with option B."* Result: > **Let's go with option B.** No copy-paste. No deleting. Select, speak, replaced. *** **Example: fixing a single word** You wrote "defiantly" when you meant "definitely". Double-tap the word to select it. Tap the mic. Say *"definitely"*. Replaced. *** **Example: rephrasing a paragraph** You have a paragraph in a document that does not sound right. Select it. Dictate what you actually want to say. The entire selection is replaced with your new dictation, formatted to fit the surrounding document. ## How It Works Every time you tap the mic, Diction captures: * The text before your cursor (up to 500 characters) * The text after your cursor (up to 500 characters) * Any selected text This context is sent alongside your audio. AI Companion uses it to decide capitalisation, punctuation, formatting, and tone. The result is text that reads like it was typed in place, not pasted from a separate dictation box. ## When Is Context Used? Context-aware editing requires **AI Companion** to be active. AI Companion is available with Diction One cloud. Without AI Companion (on-device or self-hosted without cloud post-processing), Diction still handles select-and-replace correctly -- your dictation replaces the selection. But the formatting will not adapt to surrounding text. | Mode | Select and Replace | Context-Aware Formatting | |------|-------------------|------------------------| | On-Device | Yes | -- | | Self-Hosted | Yes | -- | | Diction One Cloud | Yes | Yes | | Diction One Cloud (AI Companion off) | Yes | -- | ## Tips * **Place your cursor precisely.** The more context Diction has on both sides, the better the formatting. Tap to position your cursor where you want the text to go. * **Select generously.** When replacing, select the full phrase or sentence you want to rewrite. Diction works best when it can see the whole thing you are replacing. * **Speak naturally.** You do not need to dictate punctuation or capitalisation. AI Companion handles it based on context. * **Use it for edits, not just dictation.** Diction is most powerful when you are refining existing text. First drafts, rewrites, quick fixes -- it handles all of them. --- --- url: /cloud.md description: >- Diction One cloud transcription. Fine-tuned speech model, high accuracy, zero setup. Audio processed and immediately discarded. AI Companion included. --- # Diction One A fine-tuned speech model with advanced audio filters, built for accuracy, speed, and scale. Always available, always improving. You speak. We handle everything else. No server to run. No model to download. Open the app, subscribe, and start dictating. ## How It Works 1. Subscribe to Diction One in the app (free trial included). 2. Switch to the Diction keyboard in any text field. 3. Tap the mic and speak. Audio is transcribed and the text is returned. 4. Audio is discarded immediately. Nothing is stored. Nothing is used for training. ## What You Get * **Fine-tuned speech model**: custom-trained for accuracy beyond standard Whisper, with advanced audio filters applied before transcription. Hosted and maintained by us. We pick the best model for your language automatically. * **AI Companion**: optional post-processing that cleans up your transcription and understands voice commands. Removes filler words, fixes grammar, adds proper punctuation and capitalisation. Tell it to rewrite, translate, or edit and it follows your instructions. Tell it who you are with Profile, set a tone per app with Tone Presets, and add your own terms with My Words. Tuned to read like a person wrote it, not like a model wrote it for you. * **Long dictations**: long messages, long notes, full meetings come back complete. No truncation, no cutoff. * **Your words, uncensored**: profanity passes through as you said it. No automatic sanitising or replacement with asterisks. * **99 languages**: full multilingual support. Switch languages in settings. * **Zero setup**: no server, no Docker, no downloads. Works immediately after subscribing. * **On-device fallback**: if the request fails for any reason, Diction automatically retries using a local model on your iPhone. Your dictation is never lost to a network issue. * **Audio immediately discarded**: we transcribe and it is gone. Nothing is recorded. Nothing is stored. Nothing is shared. Nothing is used to train models. ## AI Companion When you speak, you don't speak in perfect sentences. You say "um", pause mid-thought, skip punctuation, and occasionally trail off. That's normal. AI Companion takes the raw transcription and cleans it up before inserting the text. It removes filler words like "um" and "uh", adds punctuation and capitalisation, fixes grammar, and produces text that reads like you wrote it, not like you said it. And when you need more than cleanup, just tell it what to do -- say "translate to Spanish" or "make this more concise" and it follows your instructions. The result: you dictate a quick thought and get a polished sentence. Dictate a paragraph and get something you'd be comfortable sending as an email. ### What it does * Removes filler words ("um", "uh", "like", "you know") * Adds punctuation and capitalisation * Fixes grammar and sentence structure * Preserves your meaning and intent. It cleans up how you said it, not what you said. * Tone Presets: set Professional, Casual, Friendly, or a custom style per app. Diction remembers which tone to use where. * My Words: add names, jargon, and product terms so both transcription and cleanup get them right. ### What it does not do * It does not change the meaning of your words * It does not add content you did not say * It does not translate between languages * It does not store or learn from your transcriptions ### How to use it AI Companion is enabled by default for Diction One subscribers. You can turn it off any time in the Diction app settings if you prefer the raw transcription output. When AI Companion is active, the transcription text (not the original audio) is processed by an AI model to produce the cleaned result. Audio is always discarded immediately after transcription, regardless of whether AI Companion is on or off. ## Best For * You want the highest accuracy without managing any infrastructure * You dictate emails, notes, and documents and want polished output, not raw speech * You value convenience. Subscribe and it works, everywhere, immediately. * You have tried on-device and want a step up in accuracy --- --- url: /vs/apple-dictation.md description: >- Diction vs Apple Dictation: no 30-second limit, 100+ languages, self-hosted option, and Whisper accuracy vs Apple's built-in iOS speech recognition. Both work offline. --- # Diction vs Apple Dictation Apple Dictation is built into iOS. It's already on your phone. For many use cases it's fine. Here's where they diverge. ## What Apple Dictation does Press the microphone key on the system keyboard, speak, tap done. Works in most apps. Supports offline for some languages. No subscription required. It's convenient because it's already there. It's limited because Apple didn't build it for power users - it's a basic accessibility feature that's been around since iOS 5. ## Side-by-side | | Diction | Apple Dictation | |--|---------|-----------------| | Dedicated dictation keyboard | Yes | No - bolted onto system keyboard | | On-device mode | Yes (WhisperKit) | Yes (Apple models) | | Self-hosted | Yes | No | | Cloud mode | Yes (Diction One) | Yes (default) | | Language support | 100+ (Whisper) | ~60 | | App Store | Yes | Built-in | | Open-source server | Yes | No | | Custom vocabulary | Yes (My Words) | Limited | | Continuous long-form | Yes | Cuts off after ~30-60 seconds | | Works in all apps | Yes | Most apps | ## The 30-second wall Apple Dictation stops after about 30 to 60 seconds. It's designed for short inputs: messages, quick searches, short notes. Long-form dictation - composing an email, writing a document, leaving a detailed comment - hits this wall. Diction doesn't have this limit. You dictate as long as you want. When you're done, it inserts the full text. ## Language support Apple Dictation supports around 60 languages. Diction uses Whisper under the hood, which covers 100+ languages and handles accented speech and mixed-language input better than most systems. This matters if you're not a native English speaker, if you mix languages, or if you dictate technical terms that standard models mangle. ## Privacy Apple Dictation defaults to sending audio to Apple's servers for transcription. You can enable on-device dictation in Settings, but most people never do. Diction puts the choice front and center. On-device mode is one of the three modes you pick during setup. It's not buried in a settings page. If you're already using Apple's on-device dictation, the privacy story is comparable. If you're on default Apple cloud mode, Diction's on-device mode keeps more data local. ## When Apple Dictation is better If you need dictation in one or two places and don't want an extra app, Apple Dictation is fine. It's free, it's there, and it works for short text. ## When Diction is better Diction is better when you want to make dictation your primary input method. It takes over the keyboard completely - you tap the mic, speak, and the text appears in whatever app you're in. There's no switching modes, no finding the mic button, no 30-second cut. Self-hosting is the biggest differentiator. If you run a home server, you can point Diction at your own Whisper instance. Apple doesn't offer anything equivalent. Tone Presets let you set a writing style per app. Professional tone for email, casual for messages. Apple Dictation gives you the same raw output everywhere. My Words means names and jargon come through correctly, something Apple's limited vocabulary system has never done well. The open-source server means you can audit exactly what runs. Apple's transcription stack is a black box. *** *Diction is available on the [App Store](https://apps.apple.com/app/id6759807364). The server is open source at [github.com/omachala/diction](https://github.com/omachala/diction).* --- --- url: /vs/superwhisper.md description: >- Diction vs Superwhisper: purpose-built iOS keyboard vs Mac app ported to iOS. Self-hosted Whisper, AES-256 encryption, open-source server. No recording bugs. --- # Diction vs Superwhisper Superwhisper started on Mac. Diction started on iPhone. That difference shows up everywhere. ## The core difference Superwhisper is a Mac dictation app that added an iOS version later. Diction is built from scratch as an iOS keyboard. Every design decision, every performance optimization, every UX detail is iOS-first. iOS keyboard extensions run in a tight sandbox with strict memory limits and no background privileges. Building a reliable one takes deep platform knowledge. Porting a Mac app into that sandbox is a different exercise entirely. ## Side-by-side | | Diction | Superwhisper | |--|---------|-------------| | Built for iOS | Yes, iOS-only | Mac-first, iOS added later | | iOS keyboard extension | Purpose-built | Ported | | Self-hosted | Yes | No | | Custom dictionary | Yes (My Words) | No | | Per-app tone presets | Yes | No | | End-to-end text encryption | AES-256 + X25519 | No | | Open-source server | Yes | No | | Free tier | On-device, no limits | 15 min recording limit | | Paid plan | Subscription for cloud | $8.49/month or $249 lifetime | ## iOS experience Diction is one button. Tap mic, speak, text appears. No modes to choose, no settings to configure before you start. It works the same in every app because it's a native iOS keyboard extension. Superwhisper on iOS inherits its Mac complexity. Multiple modes, model selection, prompt configuration. Features that make sense on a Mac with a big screen and a pointer. On an iPhone keyboard, simplicity wins. ## Privacy and encryption Superwhisper processes audio locally on Mac, which is good. But there's no end-to-end encryption for transcriptions, no self-hosting option, and no way to audit the server. Diction encrypts transcription text with AES-256-GCM and X25519 key exchange. The server is open source. Self-hosted mode means your audio never touches infrastructure you don't control. ## Pricing Superwhisper's free tier gives you 15 minutes of recording. After that, $8.49/month or $249 for lifetime. Diction's on-device mode is free with no time limits, no word caps, no restrictions. You pay only if you want Diction One cloud transcription. ## Why Diction If you dictate on iPhone, you want a keyboard built for iPhone. Not a Mac app squeezed into an iOS keyboard extension. Diction is purpose-built for the platform, with the constraints and polish that requires. Diction also lets you add your own words to a custom dictionary and set a different writing tone per app. Names, jargon, and product terms come through correctly. Superwhisper has no equivalent for either. Self-hosting, text encryption, and an open-source server are things Superwhisper doesn't offer at any price. *** *Diction is available on the [App Store](https://apps.apple.com/app/id6759807364). The server is open source at [github.com/omachala/diction](https://github.com/omachala/diction).* --- --- url: /vs/willow.md description: >- Diction vs Willow Voice: fully offline on-device mode and self-hosted Whisper vs cloud-only. No word caps vs 2,000 words/week free tier. AES-256 text encryption. --- # Diction vs Willow Both are iOS voice keyboards. The difference is where your audio goes and what it costs. ## The core difference Willow is primarily cloud-based. Your audio gets sent to their servers for transcription. The iOS app has a limited offline fallback, but it's not a full on-device mode. There is no way to self-host. Diction lets you choose. On-device mode runs entirely on your iPhone with zero network requests. Self-hosted mode sends audio to a server you control. Cloud is available if you want it, but never required. ## Side-by-side | | Diction | Willow | |--|---------|--------| | On-device (fully offline) | Yes | Limited fallback | | Self-hosted | Yes | No | | Cloud mode | Yes (optional) | Required | | iOS keyboard | Yes | Yes | | Custom dictionary | Yes (My Words) | No | | Per-app tone presets | Yes | No | | Open-source server | Yes | No | | End-to-end text encryption | AES-256 + X25519 | No | | Free tier | On-device is free, no limits | 2,000 words/week | | Paid plan | Subscription for cloud | $12-15/month | ## Privacy Willow says they don't collect transcriptions by default. But cloud-only means your audio always leaves your device. You're trusting their infrastructure and their policies. With Diction on-device, there is no server involved. Audio is processed locally and discarded. Nothing is transmitted. In self-hosted mode, audio goes to your server only. Either way, transcriptions are encrypted with AES-256-GCM using X25519 key exchange before they travel anywhere. ## Pricing Willow caps the free tier at 2,000 words per week. After that, it's $12-15/month for unlimited. Diction's on-device mode is free with no word limits, no weekly caps, no restrictions. Self-hosting is free if you run a server. The Diction One cloud subscription is only needed if you want hosted transcription. ## Why Diction If your audio staying on your device matters to you, Diction is the clear choice. Willow's offline fallback is limited and there's no path to self-hosting. If you work in healthcare, legal, or any environment where audio can't leave your network, cloud-only is a non-starter. Diction's custom dictionary means names and jargon come through correctly, and per-app tone presets let your emails sound professional while your messages stay casual. Willow has neither. If you don't want to pay for dictation, Diction's on-device mode has no caps. Willow's free tier runs out after a few emails. *** *Diction is available on the [App Store](https://apps.apple.com/app/id6759807364). The server is open source at [github.com/omachala/diction](https://github.com/omachala/diction).* --- --- url: /vs/wispr-flow.md description: >- Compare Diction vs Wispr Flow: on-device and self-hosted free vs $15/mo cloud-only. Open-source server, no word limits, full privacy control. Wispr Flow requires cloud. --- # Diction vs Wispr Flow Both apps let you dictate into any text field on iOS. The difference is what happens to your audio. ## The core difference Wispr Flow is 100% cloud. Your audio goes to their servers, gets transcribed, gets cleaned up by an AI model, and comes back. This works well - they've built solid infrastructure and the accuracy is good. Diction gives you a choice. On-device mode runs entirely on your iPhone with no network requests at all. Self-hosted mode sends audio to a server you control. Diction One cloud mode is available if you want it, but it's never forced on you. ## Side-by-side | | Diction | Wispr Flow | |--|---------|------------| | On-device (fully offline) | Yes | No | | Self-hosted | Yes | No | | Cloud mode | Yes (optional) | Required | | iOS keyboard | Yes | Yes | | Custom dictionary | Yes (My Words) | No | | Per-app tone presets | Yes | No | | Open-source server | Yes | No | | Free tier | On-device is free forever | 2,000 words/week | | Paid plan | Diction One subscription | $15/month | | macOS | No | Yes | | Windows | No | Yes | | Android | No | Yes | ## Privacy Wispr Flow has a documented history with privacy. In 2024, it was discovered they were using customer audio to train their models without explicit opt-in. The CTO apologized publicly, and training is now opt-out by default. They've added a Privacy Mode (zero data retention) and achieved SOC 2. To be clear: Wispr Flow has fixed the worst issues. But if you work in a regulated environment, or just don't want your words leaving your device, "fixed" isn't the same as "never happened." With Diction in on-device mode, the question doesn't arise. Audio is processed locally by WhisperKit and never transmitted anywhere. There is no server to breach, no policy to trust. ## Pricing Wispr Flow is $15/month for unlimited dictation on Pro. There's a free tier capped at 2,000 words per week (roughly a few emails a day). Diction's on-device mode is free with no word limits. The Diction One cloud subscription is required only if you want cloud transcription with AI Companion. Self-hosting is free if you can run a server. ## Why Diction If you're on iPhone and want your audio to stay on your iPhone, Diction is the only option. No other iOS dictation keyboard offers on-device transcription. If you're self-hosting infrastructure (Home Assistant, Nextcloud, Jellyfin, anything), adding a Whisper server takes minutes and Diction just points to it. You get unlimited dictation, no subscription, and complete data control. If you're in healthcare, legal, or anywhere that can't send audio to third-party servers, on-device or self-hosted is the practical answer. Diction also lets you set a different writing tone per app and add your own words to a custom dictionary. Wispr Flow has no equivalent. Your colleague's name and your product terms come through right the first time. If you don't want to pay $15/month for dictation, Diction's on-device mode is free with no caps. *** *Diction is available on the [App Store](https://apps.apple.com/app/id6759807364). The server is open source at [github.com/omachala/diction](https://github.com/omachala/diction).* --- --- url: /encryption.md description: >- Diction protects every transcription with AES-256-GCM encryption and X25519 key exchange. The same standards used in WireGuard and Signal. Automatic. No configuration required. --- # Your Words. Protected. Privacy is built into Diction at the protocol level. Not as a feature you enable. Not as a paid tier. As a default. Every transcription is protected with AES-256-GCM encryption and X25519 key exchange. These are the same cryptographic standards used in WireGuard, Signal, and TLS 1.3. We did not invent anything. We applied the best tools the industry has, correctly, and made them automatic. ## We Take This Seriously Diction was built for people who think about where their voice goes. The server infrastructure is fully open source. The encryption is standard, auditable, and ships in every build. There is no version of Diction that does not encrypt your transcriptions. We do not ask you to trust us. We give you the code. ## What This Means For You * **Encrypted on every request**: your transcriptions are protected with AES-256-GCM before they leave the server. Strong encryption, every time, without exception. * **Fresh key per request**: X25519 key exchange generates a unique session key for each transcription. No key is reused. No key is stored. Nothing accumulates that could be stolen. * **Automatic on Diction One and self-hosted**: the same protection runs on our cloud and on every community-deployed gateway. No configuration. No opt-in. * **Open-source implementation**: the encryption code is public on GitHub. Read it, audit it, run it yourself. ## AI Companion: Encrypted Both Ways When AI Companion cleans up your transcription, the text makes a round trip. Your raw words go to the server. The polished version comes back. Both directions are encrypted. Your text is sealed on your device before it leaves. The server decrypts it, runs the cleanup, and encrypts the result with a fresh key before sending it back. At no point does your text travel unprotected. This is not something you configure. It happens on every AI Companion request, automatically. ## On-Device Is Still the Gold Standard If absolute privacy is your requirement, on-device transcription is the answer. Audio never leaves your iPhone. There is nothing to encrypt because there is no transmission. Encryption protects data in transit. On-device removes the transit entirely. For everyone else, encryption means your words are protected whether you use Diction One cloud or your own server. --- --- url: /features.md description: >- Everything Diction does. Context-aware voice editing, AI Companion that sounds human, Profile, on-device and self-hosted, long dictations, 99 languages. --- # Features Diction is a voice keyboard for iPhone. One mic button. No QWERTY. Tap, speak, text appears wherever your cursor is. Here is everything it can do. ## [Context-Aware Text Editing](/features/context-aware) Diction reads where your cursor is and figures out what you want without you switching modes. Cursor in empty space, it dictates. Cursor in the middle of a sentence, it inserts. Text selected, it rewrites the selection or follows an instruction like *"translate to Czech"* or *"make this shorter"*. One mic button, the right behaviour every time. [Read more](/features/context-aware) ## [AI Companion](/features/ai-companion) Raw speech is messy. AI Companion removes filler words, fixes grammar, adds punctuation, and produces text that reads like you wrote it. Tuned to sound human rather than machine-cleaned. No em-dashes everywhere, no faintly corporate cadence. It also takes voice commands. Translate, summarise, rewrite as a list, make it more formal. Anything you can describe in a sentence. [Read more](/features/ai-companion) ## [Profile](/features/ai-companion#profile) Tell Diction who you are and how you write. Software engineer with British English. Sales lead who talks to enterprise customers. Doctor who dictates patient notes. A few sentences are plenty. AI Companion uses your Profile on every cleanup, alongside whatever Tone Preset you have set for the app you are in. [Read more](/features/ai-companion#profile) ## [Tone Presets](/features/tone-presets) Set a writing style per app. Professional for email, Casual for messages, Friendly for social, or write a custom instruction in plain language. Diction remembers which tone goes with which app and applies it automatically. Same dictation, different output depending on where you are typing. [Read more](/features/tone-presets) ## [My Words](/features/my-words) Add names, jargon, product terms, and anything else that keeps coming through wrong. Diction uses your custom words to improve both raw transcription and AI Companion accuracy. Add them once in the app, they work everywhere. [Read more](/features/my-words) ## Three Ways to Transcribe Pick the backend that fits how you work. Switch any time in settings. **[On-Device](/on-device)** . Speech models run locally on your iPhone. No internet required. Audio never leaves your device. **[Self-Hosted](/self-hosted)** . Run a Whisper server on your own hardware. One Docker Compose command. Free and unlimited. **[Diction One Cloud](/cloud)** . Frontier speech models, highest accuracy, zero setup. Includes AI Companion. ## Long Dictations Long messages, long notes, full meetings. Diction handles dictations end to end without truncation. Talk for as long as you need and the full text comes back. ## Your Voice Is Never Lost If transcription fails for any reason, Diction keeps your audio safe and shows a retry button on the keyboard. Network drops mid-recording? Diction falls back to a local model on your iPhone automatically. The result lands exactly where your cursor was, without re-recording a single word. ## [Transcription History](/features/history) Every dictation is saved. The history screen splits into recent and full archive. Search highlights matching text so you find what you need fast. Tap any entry to open the full transcript. If you dictated something ten minutes ago and need it again, you do not have to remember it. Open history, find it, tap, done. [Read more](/features/history) ## Insights See how much you are actually dictating. Daily time saved, words per minute, how much faster you are than typing, days used. A stats badge on the home screen shows your usage at a glance. ## [Preferences](/features/preferences) Language, mic timeout (down to "release the moment I'm done"), functional keys, auto start, hand layout, haptics. Every setting in one place. [Read more](/features/preferences) ## 99 Languages On-device, self-hosted, and cloud modes all support the full set. Auto-detect is on by default, so you can switch between languages mid-sentence without touching settings. ## Works in Every Text Field Voice keyboards often break in unusual text fields. Terminals, code editors, browser inputs, search bars. Diction is built to work everywhere. If you can place a cursor in it, Diction can insert text into it. ## No Word Limits On-device and self-hosted modes have no word caps, no daily limits, no time restrictions. Talk for five seconds or fifty minutes. There is no meter running. Diction One cloud is unlimited for subscribers. ## Privacy The Diction app contains no analytics, no tracking code, and no telemetry. There is no data collection of any kind in the app. On-device mode processes audio in memory and discards it immediately. Self-hosted mode sends audio only to your server. Diction One cloud processes and discards. Nothing is stored, nothing is used for training. The server infrastructure is open source. Your words come through as you said them. No automatic censoring of profanity. --- --- url: /features/preferences.md description: >- Every setting in Diction's Keyboard Preferences screen explained. Language, functional keys, mic timeout, auto start, and hand layout. --- # Keyboard Preferences Open the Diction app and tap **Preferences** to reach these settings. Every one of them is stored in a shared space the keyboard reads too, so changes take effect the next time you open the keyboard. ## Language Diction supports 99 languages. Auto-detect is on by default, so you can speak in any supported language without changing a setting. Diction figures out which language you are using and transcribes accordingly. If you prefer to lock it to a specific language, turn off auto-detect and pick one manually. This can improve accuracy when you always dictate in the same language. You do not need to download anything for cloud or self-hosted modes. On-device mode uses a single model that handles all supported languages. ## Functional Keys A second row of buttons sits just below the recording bar when this is on. It gives you a period, question mark, space, return, delete, and the globe key to switch keyboards, all without leaving Diction. Useful if you want to punctuate or fix a word without reaching for another keyboard. Turn it off if you prefer the cleaner look. Default: on. ## Show Keyboard Key Adds a key to the functional row that shows or hides a full QWERTY keyboard. Tap it once to open the keyboard for quick edits, tap again to dismiss it and return to the dictation view. If you prefer a different key in that slot (like the globe key for switching keyboards), turn this off and customise the row to your liking. Default: on. ## Show QWERTY by Default When this is on, the full keyboard opens automatically every time the Diction keyboard appears. You can still hide it with the keyboard toggle key and bring it back later. On the next appearance it opens again. Useful if you use Diction as a hybrid keyboard — dictation first, typing for corrections — and don't want to tap the toggle key every time. Default: off. ## Timeout How long the microphone stays active after you stop talking. Once this elapses with no speech, Diction releases the mic and goes idle. Pick what fits how you dictate: * **After dictation**: releases the mic the moment your transcription comes back. Best if you usually dictate one thing at a time. If you use Bluetooth headphones, this also stops music and podcast audio from dropping into lower-quality voice-call mode while the mic is held. * **10 seconds, 30 seconds, 1 minute, and up**: keep the mic ready for a quick follow-up, then release it. * **Manual**: stays ready indefinitely until you tap to stop. Good for long hands-free sessions where you do not want to think about the mic. Default: 5 minutes. ## Auto Start When the microphone gets reactivated after a suspension, or when a session reconnects, Diction can start recording automatically rather than waiting for you to tap. Most people leave this on. Turn it off if you want explicit control over when recording starts. Default: on. ## Hand Moves the confirm button and the speech indicator to the side that matches your dominant hand. Right-handed layout puts the confirm button on the right. Left-handed puts it on the left. Default: Right. ## Haptic Feedback The keyboard vibrates on key moments: mic start, mic stop, successful transcription, and errors. You feel the state change without looking at the screen. Useful when you are dictating while walking or glancing away. Turn it off in Preferences if you prefer silent operation. Default: on. --- --- url: /features/my-words.md description: >- Add names, places, and terms to your personal dictionary. Diction uses them to improve transcription and AI Companion accuracy --- # My Words Speech models handle everyday words fine. But your friend's last name, the street you live on, the brand you mention ten times a day? Those get garbled. You say "Nguyen" and get "new win." You say "Venmo" and it comes out as "ven mo." Your dog's name Biscotti becomes "this coffee." My Words fixes this. Add your words once, and Diction gets them right every time. ## How It Works Open the Diction app and go to My Words. Add any word or phrase that keeps getting misheard. Each entry can include "also heard as" variants for how the word might come out wrong. For example: | Word | Also heard as | |------|--------------| | Nguyen | New Win, Winn | | Venmo | Ven Mo, Ben Mo | | Acai | Ah Sigh, A Kai | | Peloton | Pellet On, Pell A Ton | When you dictate, Diction checks your custom words against the transcription. The speech model uses your words as hints during recognition, and AI Companion corrects any remaining mismatches. Both layers work together. ## What It Catches My Words works at two levels: 1. **During transcription.** Your custom words nudge the speech model toward the right word when the audio is ambiguous. "Nguyen" is more likely to come through correctly because the model knows to listen for it. 2. **During cleanup.** Even if the raw transcription still gets it wrong, AI Companion knows your words and swaps in the correct spelling. "New Win" becomes "Nguyen" because Diction knows that is what you meant. The combination catches most cases. The speech model gets it right more often, and the cleanup catches what slips through. ## Good Candidates for My Words * People's names (friends, family, coworkers) * Brand and company names * Street names and neighborhoods * Restaurant names, food terms * Anything you say regularly that keeps coming out wrong ## Requirements The My Words settings screen is accessible when [AI Companion](/features/ai-companion) is enabled. AI Companion requires a Diction One subscription and works across all transcription modes. Your custom words improve both raw transcription (via hints to the speech model) and AI Companion (via the cleanup step). The hints work regardless of whether AI Companion is on, but the cleanup correction layer requires it. --- --- url: /on-device.md description: >- Diction on-device mode runs speech-to-text locally on your iPhone. Audio never leaves your device. No internet required. 99 languages. --- # On-Device Transcription Your voice stays on your phone. On-device mode runs speech models locally on your iPhone. No internet, no servers, no data leaving your device. Ever. Download a model once and dictate anywhere. On a plane, in the underground, in a country with no signal. It works. ## How It Works 1. Download a speech model in the Diction app (one-time, happens automatically on first launch). 2. Switch to the Diction keyboard in any text field. 3. Tap the mic and speak. Transcription happens on your iPhone. 4. Text is inserted. Audio is discarded from memory. Nothing is saved. No account required. No internet required. No setup beyond the initial download. ## What You Get * **Complete privacy**: audio is processed in memory and discarded immediately. Nothing is transmitted anywhere. * **Works offline**: no Wi-Fi, no cellular, no connection of any kind needed. * **Multilingual**: most on-device models support 99 languages. Switch languages in settings. * **Two free models**: Standard and Advanced on-device models are free with no word limits, no daily caps, no restrictions. * **Premium model**: highest accuracy model available with a Diction One subscription. See pricing in the app. ## Best For * You want your voice to never leave your device. Full stop. * Offline dictation: flights, commutes, remote areas, anywhere with no signal * Quick notes and messages where speed matters more than peak accuracy * You want speech-to-text that works without depending on anyone else's server --- --- url: /privacy-first.md description: >- How Diction protects your voice data. On-device processing, self-hosted servers, encrypted transcriptions, open-source server code, and zero analytics in the app --- # Privacy First Voice keyboards are in a uniquely sensitive position. Every app you use, every message you type, every search you run, your keyboard is present for all of it. That kind of access demands more than a policy page. Here is exactly how Diction handles your data. ## The problem with "trust us" When you enable Full Access for a keyboard, you are extending significant trust. The permission exists so keyboards can do things like send audio for transcription or sync custom dictionaries. But in the wrong hands, it is also what would allow a keyboard to read what you type, monitor which apps you use, or send clipboard contents somewhere without disclosing it. Closed-source keyboards can claim anything in a privacy policy. You have no way to verify what the code actually does. Earlier this year, researchers examined a popular voice keyboard and found it was silently collecting full browser URLs, on-screen text via the Accessibility API, clipboard contents including data from password managers, and sending all of it to a server. Nothing in the privacy policy disclosed this. The only way it was discovered was by reverse-engineering the app. This is why Diction exists the way it does. ## How Diction handles your audio ### On-Device Audio is processed entirely on your iPhone using local speech models. Nothing leaves your device. No internet connection is required. Audio is held in memory during transcription and discarded the moment the result comes back. There is no server to breach. No policy to trust. No transmission to protect. The question of where your audio goes has one answer: nowhere. ### Self-Hosted You point Diction at a server you control. Your audio travels to that server and nowhere else. No data touches Diction infrastructure. We have no access to your audio, your transcriptions, or your server. The server software is open source. You can read it, audit it, and run it yourself. ### Diction One Cloud Your audio is processed in memory and discarded the moment transcription completes. No recordings are written to disk. No transcriptions are stored, cached, or logged. Your audio is never used for model training. Every transcription is protected with AES-256-GCM encryption and X25519 key exchange, the same standards used in WireGuard and Signal. Automatic on every request. ## What the Diction app collects Nothing. The Diction app contains no analytics and no tracking code. No usage data, no device identifiers, no behavioural monitoring. Your App Store privacy label reads "Data Not Collected." That is accurate. This website uses Google Analytics. The app does not. Diction has no QWERTY keyboard. There is nothing to type into it, and therefore nothing to log. ## What you can verify We do not ask you to take this on faith. **Server code:** the gateway that handles your audio is [open source on GitHub](https://github.com/omachala/diction). Read the transcription handler. Verify that audio is not stored. **Encryption:** the AES-256-GCM and X25519 implementation is in the same repository. Read it, audit it, or run it yourself. **On-device mode:** no network requests leave the app. Confirm it with any network inspector. *** On-device, self-hosted, or cloud. The principle is the same. Your voice is yours. We process it, return the text, and get out of the way. [Download on the App Store](https://apps.apple.com/app/id6759807364)  ·  [Server on GitHub](https://github.com/omachala/diction) --- --- url: /privacy.md description: >- Diction privacy policy. The Diction app has zero analytics and zero tracking. Your voice data is never stored. --- # Privacy Policy Want to understand how Diction is designed to protect your data? [Read our Privacy First page.](/privacy-first) *Last updated: March 2026* Diction is a speech-to-text keyboard for iOS. Your privacy is the foundation of how Diction is built, not a feature we bolt on later. The Diction **app** contains **zero analytics and zero tracking code**. No data is collected, transmitted, or sold by the app. Your App Store privacy label reads "Data Not Collected." That is accurate. This website uses Google Analytics to understand how visitors find diction.one. The app itself contains no analytics of any kind. ## How Each Mode Handles Your Audio ### On-Device Mode Audio is processed entirely on your iPhone using a local speech model. **Nothing leaves your device.** No internet connection is required. Audio is held in memory during transcription and discarded the moment the result is returned. ### Self-Hosted Mode When you connect Diction to your own server: * **Audio travels only to your server.** No data touches any third-party service. * **Nothing is stored by Diction.** Audio is processed and discarded immediately after transcription. * **We have no access** to your audio, your transcriptions, your server, or any other data you produce. ### Diction One (Cloud) When you use the hosted Diction One service: * **Audio is never saved.** Your audio is processed in memory and discarded the moment transcription completes. No recordings are written to disk at any point. * **Transcriptions are never stored.** The transcribed text is returned to your device and immediately removed from server memory. No transcription is saved, logged, cached, or retained in any form. * **No model training.** Your audio and transcriptions are never used to train, fine-tune, or improve any models. ### Diction One Infrastructure Logging The Diction One cloud infrastructure collects system performance logs for debugging and monitoring. These logs include request latency, character counts, error types, and server load metrics. **No client data is ever logged or stored.** Your audio, transcriptions, and any text context sent for AI Companion are never written to logs. ## What the App Collects **Nothing.** The Diction app does not collect, transmit, or store any personal data. Specifically: * No analytics or usage tracking of any kind * No behavioural monitoring * No device identifiers sent anywhere * No advertising networks or ad code * No data shared with or sold to third parties ## Data Stored on Your Device Diction stores the following locally on your iPhone, accessible only to the app and its keyboard extension: * **Your settings**: selected mode, language, server endpoint (if self-hosted) * **Subscription status**: whether you hold an active Diction One subscription (managed entirely by Apple) * **Downloaded speech models**: for on-device transcription, stored in the app's local container None of this data syncs to iCloud or any external service. Removing the app deletes all local data. ## Keyboard Extension and Full Access Diction requests **Full Access** for the keyboard extension. iOS requires this permission for any keyboard that needs network access. Here is exactly what Full Access enables, and what it does not: * **Network access**: required to send audio to your server or Diction One for transcription * **No keylogging**: Diction has no QWERTY keyboard and no text input to record * **No clipboard access**: Diction does not read your clipboard * **No contacts access**: Diction does not access your contacts, photos, or any other personal data ## Payments Diction One subscriptions are processed entirely by Apple through the App Store. We never receive or store your payment information, Apple ID, or billing details. ## Children's Privacy Diction does not knowingly collect data from anyone, including children under 13. Since we collect no personal information at all, no additional protections are necessary. ## Changes to This Policy If we update this policy, the revised version will be posted here with an updated date. Since Diction collects no data, material changes are unlikely. ## Contact Questions about privacy? Email or open an issue on [GitHub](https://github.com/omachala/diction/issues). --- --- url: /releases.md description: What's new in each Diction release. Full changelog for every App Store version --- # Release Notes ## Diction 10.0 * Diction One runs on a brand new cloud model. English, Spanish, German, French, Italian, Portuguese, and Dutch are now up to six times faster, and just as accurate or better. * Polish transcription quality has been fixed. * Fewer failed dictations. Cloud retries properly and falls back faster when something does go wrong. * Autocorrect on the QWERTY keyboard fixes typos as you type, splits run-together words, and completes contractions. * Word suggestions above the keys. Tap one to accept. * The keyboard learns the words you correct back, and stops changing them. * Much better corrections and accents when typing in Spanish, Portuguese, French, and German. * Typing feels smoother. No more key-callout blinking or jitter. * The keyboard no longer freezes, and a stuck dictation can be cancelled instead of spinning on retry. * You land back in the app you were typing in after you dictate, on the latest iOS. * AI Companion now formats what you say into paragraphs and lists instead of one long block. * Real iPad support. Wider layouts, a globe key, and right-sized emoji. * Bigger, clearer emoji on iPhone too. * Your music stays on the car speakers when you dictate over CarPlay. * Your music app gets its playback controls back the moment dictation ends. * On-device dictation is reliable on the latest iOS, and fast on every launch after the first. ## Diction 9.0 * Cloud transcription is about twice as fast end to end, so text lands in your app almost as soon as you stop speaking. * An emoji picker is built into the keyboard, with search and skin tone variants, so you can grab the right one without leaving Diction. * The QWERTY spacebar row now has a period key, so ending a sentence is one tap instead of a stretch. * Pause and resume mid-dictation. Take a breath, gather a thought, then pick up where you left off without losing context. * Hold space and slide to move the cursor like a trackpad, matching what your thumb already knows from the system keyboard. * The mic releases the instant your phone rings, so you never miss a call because Diction is holding the audio session. * Diction mode is now equally reliable online or offline. No more failed attempts when your network drops for a moment. * Choose what music does while you dictate: keep playing, duck, or pause. Whichever fits how you use audio. ## Diction 8.0 * Brand-new autocorrect engine, the first real one in Diction. It quietly fixes common mistakes as you type, with no setup required. * The QWERTY keyboard layout has been updated: more compact, more responsive, and easier to use. Suggestion chips now sit inline next to the mic button, and the dismiss key lives in the keyboard row itself. * Suggestions are significantly more reliable. They now track context correctly after backspace and edits, and tapping them works consistently wherever you are. * When you have text selected and speak an edit instruction, the live streaming preview no longer overwrites your selection mid-way. The replacement arrives as a single, clean swap. * Tap the mic inside any transcript to record more and insert it at the cursor. In Live mode, the detail view opens right away so text streams in as you speak. * Added a numpad for number fields. Tap into a phone number, PIN, or numeric field and the keyboard adapts automatically. ## Diction 7.0 * A built-in QWERTY keyboard. When you can't talk out loud, just type without leaving Diction. Autocorrect, word suggestions, long-press accents, key popups, caps lock, double-space-to-period, backspace acceleration, and the feel of a native keyboard. * Diction Live (Beta). Your words now appear as you speak them, in real time, instead of only after you stop. * Automatic language detection. Switch between languages a lot? Diction can now work out which one you're speaking. No need to set it each time. Optional, off by default. * Smarter capitalization. Dictation now respects the field you're writing in, so email addresses, code, and similar text don't get wrongly capitalized. * A cleaner mode switcher. Picking Diction One, Live, an on-device model, or your own server is now a dedicated one-tap screen, with your current plan shown at a glance. * Record and transcribe right inside the app. A new mic button on the home screen lets you capture speech without the keyboard, then copy the text or send it straight to any app with the share button. * More reliable in the moment. Better retry and fallback when a transcription fails, sturdier live-streaming connections, and a refined suggestion strip that stays out of your way. * The keyboard's default key row now includes a period key, and choosing an on-device model starts downloading right away with no extra confirmation step. * Fully localized across all 13 languages, with faster recording start, proper light and dark keyboard theming, and lots of smaller polish and stability fixes. ## Diction 6.0 * Customizable keyboard row. Tap any key to change what it does, rename it, resize it. Add new keys, drag to reorder, delete what you don't need. The whole row is yours now. * Per-key visibility. Toggle "only show in edit mode" so custom keys stay hidden while you're dictating and appear when you select text. No more layout jumping. * Tap-to-fix suggestions. Select a word and three smart alternatives appear above the keyboard: spelling fixes, grammar corrections, or just a better way to say it. * Save to My Words. A new key that teaches Diction your names and jargon with one tap. Custom words feed into transcription for better accuracy going forward. * Undo and redo. Tap to reverse your last dictation, tap again to bring it back. Works for edits too, not just transcriptions. * Diction One now includes both cloud and on-device. Subscribers get the flagship cloud model and the best offline model, so you're covered with or without a connection. * More on-device models. Whisper Small and Nvidia Parakeet join the lineup, giving you more choices for different languages and accuracy needs. * Redesigned home screen. Three clear tiers: Diction, On-Device, and Self-Hosted, each remembering your selection when you switch between them. * Continued improvements to speak-to-replace. Better casing, punctuation matching, and context awareness when editing selected text. * Refreshed onboarding with illustrated steps. * Self-hosted: the gateway now speaks the OpenAI speech API, so any compatible SDK works as a drop-in. * Improved reliability, bug fixes, and various UI polish. ## Diction 5.0 *April 2026* * Profile lets you tell Diction who you are and how you write. AI Companion uses it every time, alongside whatever Tone Preset you have set for the app you are in. * Diction now figures out what you want from where your cursor is. Cursor in empty space, it dictates. Cursor inside a sentence, it inserts. Text selected, it edits or replaces. No more switching modes. * New "After dictation" mic timeout releases the mic the moment your transcription comes back. Plus 10 and 30 second steps for short bursts. If you use Bluetooth headphones, music and podcasts no longer drop into lower-quality voice-call audio while you are holding the mic. * Long dictations come back complete. Long messages, long notes, even full meetings work end to end without truncation. * AI Companion is tuned to sound more human. Less of the em-dash-everywhere, faintly corporate cadence that gives away machine-cleaned text. * Your words come through as you said them, including profanity. No automatic censoring. * Redesigned insights dashboard with a daily time-saved card and a words-per-minute card showing how much faster you are than typing. * Double-tap space now inserts a period and a space, matching the standard iOS keyboard convention. * Smoother onboarding with steadier layout when the keyboard opens, plus a small pulse on the active step. ## Diction 4.0 *April 2026* * Speak to Edit. Select any text, say what you want changed, and it's done. Works for simple replacements and editing instructions like "translate to Czech" or "make this shorter." * Your custom words now improve transcription accuracy directly. Names and jargon get recognized correctly even without AI Companion. * Dictate for as long as you need. Improved reliability for long recordings, no more cut-off transcripts. * Profile lets you tell Diction who you are and how you write, so AI Companion matches your style. * New guided onboarding walks you through setup step by step instead of throwing dialogs at you on first launch. * Improved on-device model setup. Smoother download, faster preparation, automatically ready when done. * The mic no longer activates when you open the app manually. Orange dot only when you're actually dictating. * Improved AI Companion accuracy across apps. * Various UI polish across the keyboard, history, tones, and settings. ## Diction 3.0 *March 25, 2026* * AI Companion now understands where you are in your document. Dictate into the middle of a sentence and it inserts correctly. Select text and tell Diction what to do with it, and it rewrites the selection in place. * A small pulse now lights up in the action bar when Diction hears your voice. You always know exactly when it is listening. * Added a dominant hand setting. If you prefer left-handed use, flip the keyboard layout so the controls are on your side. * Redesigned History with a tabbed view separating recent and all transcriptions. Search works across all of them, and tapping any entry copies it instantly. * Carefully revisited what happens when a transcription fails. We now save your audio automatically and show a retry button on the keyboard so you never have to say it twice. * Added a dedicated Keyboard Preferences screen. Easier to find keyboard settings, and auto-detect language is now on by default. * Added a clear explanation screen for when Full Access is missing. No more silent failures if the keyboard is not fully set up. * Fixed capitalization and spacing when dictating into the middle of existing text, and a rare issue where cloud transcriptions could fail silently when multiple keyboard instances were active. ## Diction 2.0 *March 15, 2026* * AI Companion is now available for cloud mode. After transcription, Diction can optionally clean up your text. It removes filler words, fixes grammar, and polishes the result. Only the transcript is sent for cleanup, never the audio. Off by default, toggle it in Settings. * Added a setup guide that walks you through keyboard installation and permissions before your first dictation. No more guessing why things are not working. * Large model downloads now wait for WiFi by default. No surprise data bills from downloading on mobile. * The cloud subscription is now Diction One, with a redesigned offer screen that makes pricing and what is included much clearer. * Improved dictation reliability. Fixed the tap-to-reconnect loop, globe key skipping past iOS keyboards, and stale heartbeat issues. * On-device models now pre-warm after download so your first dictation is fast. * When something goes wrong, you now see a clear explanation screen instead of a silent failure. * Added a support screen with troubleshooting steps and a way to reach us directly. * Various UI polish across the keyboard and settings. ## Diction 1.0 *March 11, 2026* The first public release. Everything that makes Diction what it is: * Dictation-only keyboard for iPhone. Tap the mic, speak, and text appears wherever your cursor is in any app. No QWERTY, no distractions. * Three transcription modes out of the box: on-device for complete offline use, self-hosted to point at your own server, and Diction cloud. * On-device models in three tiers. The standard model downloads automatically on first launch. Larger models are available for better accuracy. * Self-hosted mode works with any server running the Whisper API format. One Docker command to get started. * 99 languages with automatic detection. Speak in your language and Diction figures it out. * No word limits, no daily caps, no session timeouts. Dictate as much as you want. * Cloud transcriptions are encrypted before they leave the server. Your audio is processed and immediately discarded. * The Diction app contains no analytics and no tracking code. * Configurable idle timeout for hands-free dictation. --- --- url: /self-hosted.md description: >- Run your own speech-to-text server and connect Diction to it. Audio stays on your network. Free, unlimited, open-source. Three setup paths including a faster engine for European languages --- # Self-Hosted Transcription Your server, your models, your rules. Run a Whisper server on your own hardware, paste its URL into the Diction app, and your audio never leaves your network. Good for: regulated industries where audio cannot go to the cloud, people who already run servers at home, anyone who wants a specific model for a specific language or domain, and folks who refuse to hand their voice to someone else's infrastructure. ## How it works Diction speaks the OpenAI transcription API directly. If your server accepts `POST /v1/audio/transcriptions`, Diction can talk to it. That's the whole contract. You have three ways to run it. ### The simple way: whisper only One container, no extras. Start any OpenAI-compatible Whisper server, point the app at its address. ```bash git clone https://github.com/omachala/diction.git cd diction docker compose --profile small up -d ``` Pick a profile that matches the engine you want (`small`, `medium`, `large`, or `parakeet`). The compose file starts our gateway plus your chosen speech engine. If you want the absolute minimum and don't mind a short pause after you stop speaking, run just the Whisper container and skip the gateway entirely. Details in the [setup guide](/features/self-hosting-setup). ### The fast way: whisper plus the Diction gateway Run our open-source gateway in front of whisper. It adds a WebSocket layer, so the app can stream your audio live while you're still talking. By the time you tap stop, the transcript is already coming back. The longer the dictation, the bigger the gap. Short phrases barely change. Same compose file, same profile command, same URL paste into the app. ### The alternative: a faster engine for European languages Whisper supports 99 languages, but if you mostly dictate in a European language there's a faster option. NVIDIA's speech engine is more accurate, roughly 10x faster, and uses less RAM. It supports 25 European languages. The setup guide covers both engines. Full walkthrough: [Self-Hosting Setup Guide](/features/self-hosting-setup). Already running your own Whisper server? [Use Your Own Model](/features/custom-model). ## What you get * **Audio stays on your network.** From your phone to your server and back. No third party in the middle. * **Free, unlimited, no restrictions.** No Diction subscription needed. No word limits. No daily caps. No trial that expires. * **Works with any Whisper-compatible server.** The app speaks the OpenAI transcription API directly. Use our default stack, use someone else's, roll your own. * **Optional streaming.** Run our gateway in front of whisper and the app streams audio as you speak. Longer dictations are noticeably faster. * **On-device fallback.** If your server is unreachable, Diction automatically retries using a local model on your iPhone. Your dictation is never lost to a network issue. * **Run it anywhere.** Home server, NAS, Raspberry Pi for tiny models, cloud VM, behind a reverse proxy, over a VPN. If Docker runs there, Diction connects to it. * **Pick your own model.** Run whatever speech model fits your use case. Your language, your accuracy requirements, your hardware. * **Open-source gateway.** The gateway infrastructure is fully open source on GitHub. Inspect it, modify it, contribute to it. ## Best for * You already run Docker at home and want transcription on your own hardware * You work in a regulated industry where audio cannot leave your network * You want a specific model for a specific language or domain * You refuse to send voice data to someone else's cloud * You already have a Whisper server running and just want an iOS keyboard that talks to it --- --- url: /features/self-hosting-setup.md description: >- Run your own speech-to-text server and connect Diction to it. Three setup paths covering Whisper, the Diction streaming gateway, and a faster engine for European languages --- # Self-Hosting Setup Guide Run your own Whisper server, point the Diction app at it, start dictating. Your audio never touches our infrastructure. Diction speaks the OpenAI transcription API (`POST /v1/audio/transcriptions`). Any server that implements it works. You have three ways to set it up, depending on how much you care about latency and what language you dictate in. ## Path 1: Whisper only (simplest) The minimal setup. One container. No gateway, no extra moving parts. ```yaml # docker-compose.yml services: whisper: image: fedirz/faster-whisper-server:latest-cpu ports: - "8000:8000" environment: WHISPER__MODEL: Systran/faster-whisper-small WHISPER__INFERENCE_DEVICE: cpu ``` ```bash docker compose up -d ``` Open the Diction app, switch to **Self-Hosted**, paste `http://your-server:8000`. A green dot confirms the endpoint is reachable. Start dictating. **The trade-off:** no streaming. The app waits until you stop speaking, uploads the whole recording to your server, and waits for Whisper to transcribe it. On short phrases that's fine. On longer dictations you'll see a visible pause after you tap stop. If that's acceptable, you're done. Skip to [Choosing a model](#choosing-a-model). ## Path 2: Whisper + the Diction gateway (streaming) Adds our open-source gateway in front of Whisper. The gateway exposes a WebSocket endpoint the Diction app uses to stream audio live as you speak. By the time you stop talking, the transcript is mostly ready. ```yaml # docker-compose.yml services: gateway: image: ghcr.io/omachala/diction-gateway:latest ports: - "8080:8080" environment: DEFAULT_MODEL: small whisper-small: image: fedirz/faster-whisper-server:latest-cpu environment: WHISPER__MODEL: Systran/faster-whisper-small WHISPER__INFERENCE_DEVICE: cpu ``` ```bash docker compose up -d ``` Paste `http://your-server:8080` into the Diction app's **Self-Hosted** tab. Short phrases feel about the same as Path 1. Longer dictations are noticeably faster. The longer you talk, the bigger the gap. The Diction gateway is fully open source. It runs as a pure proxy and streaming layer. It does not talk to our servers, does not require a subscription, and does not send any telemetry. ## Path 3: Faster engine for European languages If you mostly dictate in a European language, there's a faster alternative to Whisper. NVIDIA's speech engine is more accurate, roughly 10x faster on CPU, and uses about half the RAM. It supports 25 languages: English, Bulgarian, Croatian, Czech, Danish, Dutch, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Maltese, Polish, Portuguese, Romanian, Slovak, Slovenian, Spanish, Swedish, Russian, and Ukrainian. The trade-off: if you need Asian, Arabic, or other non-European languages, use Whisper instead (Path 1 or 2). ```yaml # docker-compose.yml services: gateway: image: ghcr.io/omachala/diction-gateway:latest ports: - "8080:8080" environment: DEFAULT_MODEL: parakeet-v3 parakeet: image: ghcr.io/achetronic/parakeet:latest-int8 ``` ```bash docker compose up -d ``` Models are baked into the image. No download on first start. Paste `http://your-server:8080` into the Diction app's **Self-Hosted** tab. Same [Connecting the app](#connecting-the-app) flow as the other paths. ## Choosing a model Paths 1 and 2 support any Whisper model. Pick based on your hardware and what you're dictating. | Model ID | Params | RAM | Notes | |----------|--------|-----|-------| | `Systran/faster-whisper-small` | 244M | ~850 MB | Recommended starting point. Fast on CPU, fine for most dictations. | | `Systran/faster-whisper-medium` | 769M | ~2.1 GB | Better with accents and background noise. Slow on CPU, good on GPU. | | `deepdml/faster-whisper-large-v3-turbo-ct2` | 809M | ~2.3 GB | Highest accuracy. Manageable on modern CPUs, near-instant on GPU. | Swap the model by changing `WHISPER__MODEL` in the service. For Path 2 (gateway), also update `DEFAULT_MODEL` on the gateway service and make sure the Whisper service is named to match: `whisper-small`, `whisper-medium`, or `whisper-large-turbo`. Path 3 uses a different engine with models baked into the image. No model selection needed. The full compose file in the [GitHub repository](https://github.com/omachala/diction) puts each engine behind a profile. Pick one and start: ```bash docker compose --profile small up -d # Whisper small docker compose --profile medium up -d # Whisper medium docker compose --profile large up -d # Whisper large-v3-turbo docker compose --profile parakeet up -d # NVIDIA engine (European languages) ``` Set `DEFAULT_MODEL` on the gateway to match your chosen profile. ## Connecting the app 1. Open the Diction app 2. Switch to the **Self-Hosted** tab 3. Paste your server URL into **Endpoint URL**: ``` http://192.168.1.100:8080 ``` Replace the address with your server's actual IP. A green dot next to the endpoint confirms it's reachable. Tap the mic and start dictating. ## No public IP? You don't need to open ports on your router. Several free options connect your phone to a home server from anywhere: * **[Cloudflare Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/)**. Free, outbound-only connection. No port forwarding. * **[Tailscale](https://tailscale.com/)**. Free WireGuard mesh VPN. Install on server and phone, connect from anywhere. * **[ngrok](https://ngrok.com/)**. Instant public URL. Great for quick testing. ## Optional: API key If your server is behind an API key (common with reverse proxies or hosted endpoints), enter it in the **API Key** field in the app's Self-Hosted settings. It's sent as a `Bearer` token with every request. ## Any Whisper endpoint works None of the paths lock you to our containers. The Diction app and the gateway both talk the standard OpenAI transcription API. Anything that accepts `POST /v1/audio/transcriptions` with a file upload and returns a JSON transcript works: * [faster-whisper-server](https://github.com/fedirz/faster-whisper-server) (used in both paths above) * [whisper.cpp](https://github.com/ggerganov/whisper.cpp) HTTP server * OpenAI's own Whisper API * Any future model that speaks the same protocol Already running one? See [Use Your Own Model](/features/custom-model). ## Requirements * Any machine that runs Docker (home server, NAS, cloud VM, Raspberry Pi for tiny models) * iPhone on the same network, or reachable via tunnel or VPN ## Full configuration The complete compose file with multiple model profiles, and all gateway environment variables, is in the [public GitHub repository](https://github.com/omachala/diction). --- --- url: /support.md description: >- Get help with Diction voice keyboard for iPhone. Setup guide, troubleshooting, and contact information. --- # Support ## Getting Started Setting up Diction takes under a minute: 1. **Open the Diction app** and grant microphone permission when prompted. 2. Go to **Settings > General > Keyboard > Keyboards > Add New Keyboard** and select **Diction**. 3. Tap **Diction** in the keyboard list and enable **Allow Full Access** (required for transcription). 4. Open any app with a text field, tap the **globe icon** to switch to Diction, and tap the mic. ::: tip The Diction app must be running in the background for the keyboard to work. Launch it once and it stays ready. After a period of inactivity, you may need to open the app again. ::: ## Troubleshooting ### Keyboard does not appear Make sure Diction is added in **Settings > General > Keyboard > Keyboards**. If it still does not appear, restart your iPhone. ### Microphone not working Open the Diction app and grant microphone permission. The keyboard extension cannot request mic access on its own. Permission must be granted through the main app first. ### "Open Diction to start" message The Diction app needs to be running in the background. Open the app, then switch back to your text field and try again. ### "Enable Full Access" message Go to **Settings > General > Keyboard > Keyboards > Diction** and enable **Allow Full Access**. iOS requires this for any keyboard that uses network access. ### On-device transcription not working Make sure you have downloaded a speech model in the Diction app. The Standard model downloads automatically on first launch. Check the On-Device section in the app to confirm. ### Transcription fails or times out Check your internet connection (not needed for on-device mode). If you are using a self-hosted server, verify your endpoint URL is correct and the server is reachable from your phone's network. ## Self-Hosting Diction works with any speech-to-text server that supports the standard transcription API format. For setup guides, Docker Compose files, and documentation, see the [GitHub repository](https://github.com/omachala/diction). ## Managing Your Subscription To manage or cancel your Diction One subscription: **Settings > Apple ID > Subscriptions** on your iPhone. You can cancel at any time. Your subscription remains active until the end of the current billing period. ## Questions On-device and self-hosted modes are completely free. No word limits, no daily caps. Diction One unlocks cloud transcription with the highest accuracy, plus AI Companion with tone presets and a custom dictionary. Free trial included. More accurate speech models, no session time limits, no word caps. AI Companion cleans up filler words and grammar automatically. Context-aware editing reads the text around your cursor so dictating mid-sentence produces correct capitalization and punctuation. Set a tone per app, add your own words for names and jargon, and search your full dictation history. Apple offers none of that. Yes. Diction reads the text around your cursor. Dictate into the middle of a sentence and it inserts with correct capitalization and punctuation. Select text and speak to replace it. Rewrite a sentence, fix a typo, or add to a paragraph, all without touching the screen. Yes. On-device mode works without internet once the model is downloaded. Cloud and self-hosted modes require network access. 99 languages. On-device handles most languages well. Cloud and self-hosted use larger models for even better accuracy across all supported languages. Never. On-device mode processes audio in memory and discards it immediately. Self-hosted mode sends audio only to your server. Diction One cloud processes and discards. No recordings retained, no model training. After transcription, Diction can optionally clean up your text. It removes filler words, fixes grammar, and polishes the result. Set a tone per app (Professional for email, Casual for chat) and add your own words to a custom dictionary so names and jargon come through right. Only the text is sent to the AI, never the audio. Open the app, grant microphone permission, add Diction as a keyboard in iOS Settings, enable Full Access, and start dictating. Under a minute from download to first transcription. [Detailed steps here.](/support) You run a speech-to-text server on your own hardware. Diction connects to it over your network. Your audio never touches any third-party service. The server ships as a Docker image. One command to start. iOS requires Full Access for any keyboard extension that uses the network. Diction needs it to send audio to your server or Diction One for transcription. Diction has no QWERTY keys to log, does not read your clipboard, and does not access contacts or any other personal data. ## Contact Need help? Reach out: * **Email:** * **GitHub:** [Open an issue](https://github.com/omachala/diction/issues) * **Reddit:** [r/dictionapp](https://www.reddit.com/r/dictionapp) * **X:** [@diction\_one](https://x.com/diction_one) --- --- url: /terms.md description: >- Diction terms of service. Voice keyboard for iPhone with on-device, self-hosted, and cloud transcription modes. --- # Terms of Service *Last updated: March 2026* Diction is a speech-to-text keyboard for iOS. By installing or using Diction, you agree to these terms. If you do not agree, do not use the app. ## The Service Diction transcribes speech to text. Three modes are available: * **On-device**: transcription runs locally on your iPhone. Free, unlimited, no account required. * **Self-hosted**: you connect Diction to your own speech-to-text server. Free, unlimited, no account required. * **Diction One**: our hosted cloud transcription service. Requires a paid subscription. The app and cloud service are provided "as is" without warranty. We may update, modify, or discontinue features at any time. ## Free Trial Every new Diction install includes a **14-day free trial** of all Pro features. The trial starts automatically. No account, no sign-up, and no payment method required. During the trial you get full access to Diction One cloud transcription, AI Companion, and premium on-device models. When the trial ends, Diction continues working on the Free tier: on-device transcription with basic models and self-hosted mode. Both are unlimited with no restrictions. If you want to keep using Pro features, you can subscribe to Diction One at any time. ## Diction One Subscription Diction One is an optional paid subscription at **$5.99 per month** (USD), billed through Apple's App Store. * Payment is charged to your Apple ID account at confirmation of purchase. * Your subscription **renews automatically** unless cancelled at least 24 hours before the end of the current billing period. * You can manage or cancel your subscription at any time in **Settings > Apple ID > Subscriptions** on your iPhone. * Prices may vary by region due to Apple's local pricing. Refunds are handled by Apple according to their [standard terms](https://www.apple.com/legal/internet-services/itunes/). ## Free Modes On-device and self-hosted modes are free with **no word limits, no daily caps, and no restrictions**. If you self-host, you are responsible for your own server infrastructure and any costs associated with running it. ## Acceptable Use * Use Diction in compliance with all applicable laws. * Do not reverse-engineer, decompile, or redistribute the app. * Do not abuse, overload, or interfere with Diction One or any related infrastructure. * Do not use the service for any unlawful, harmful, or fraudulent purpose. ## Intellectual Property Diction, its name, logo, and cloud infrastructure are the property of their respective owner. The self-hosted server infrastructure is open source. See the [GitHub repository](https://github.com/omachala/diction) for licence details. The iOS app is proprietary and distributed exclusively through the App Store. Your transcriptions belong to you. ## Limitation of Liability Diction is provided "as is" without warranties of any kind, express or implied. To the fullest extent permitted by law, we are not liable for any damages arising from the use of the app or service, including transcription errors, service interruptions, data loss, or inaccurate output. ## Termination You may stop using Diction at any time by uninstalling the app. We reserve the right to suspend or terminate access to Diction One if you violate these terms. ## Changes to These Terms We may update these terms. The revised version will be posted at this URL with an updated date. Continued use of Diction after changes constitutes acceptance of the updated terms. ## Governing Law These terms are governed by the laws of England and Wales. Any disputes arising from these terms will be subject to the exclusive jurisdiction of the courts of England and Wales. ## Contact Questions about these terms? Email . --- --- url: /features/tone-presets.md description: >- Set a writing style per app. Professional for email, casual for messages. Diction remembers which tone to use where and applies it automatically --- # Tone Presets You write differently depending on where you are typing. An email to your boss sounds different from a message to a friend. A Slack reply to a colleague has a different register than a note to yourself. Tone Presets let you set a writing style per app. Diction remembers which tone goes with which app and applies it every time, without you changing anything. ## How It Works Open the Diction app, go to Tones, and assign a tone to any app on your phone. When you dictate into that app, AI Companion shapes the output to match the tone you picked. Four built-in tones: * **Professional** . Formal structure, complete sentences, no slang. Good for email clients, document editors, and work chat. * **Casual** . Relaxed, conversational, contractions. Good for messaging apps and social media. * **Friendly** . Warm and approachable. Slightly more polished than casual but not stiff. * **Clean** . Minimal cleanup only. Removes filler words and fixes punctuation, but keeps your natural voice. If none of those fit, write your own custom instruction. Describe the style you want in plain language and Diction follows it. ## Same Dictation, Different Results You say: *"hey so the project is done we hit all the deadlines and the client seems pretty happy with everything"* **Professional** (set for Mail): > The project is complete. We met all deadlines, and the client is satisfied with the results. **Casual** (set for Messages): > Project's done, hit all the deadlines. Client seems happy with everything. **Friendly** (set for Slack): > Good news. The project is done, we hit all the deadlines, and the client seems really happy with everything. Same words in, different text out. The app you are typing in determines the tone. ## Set It Once The point of per-app tones is that you set them once and never think about it again. Assign Professional to Mail, Casual to Messages, Friendly to Slack. Every dictation in those apps gets the right tone automatically. No toggling. No remembering which mode you are in. Open the app, tap the mic, speak. The output matches the context. ## Custom Tones The four built-in tones cover most situations, but you might need something specific. A custom tone is a plain-language instruction that tells AI Companion exactly how to shape the output. Examples: * *"Write like a brief executive summary. No greeting, no filler. Lead with the conclusion."* * *"Keep the original wording as much as possible. Only fix grammar and add punctuation."* * *"Use British English spelling and formal academic tone."* Custom tones work exactly like the built-in ones. Assign them per app, and they apply automatically. ## Requirements Tone Presets require [AI Companion](/features/ai-companion) to be active. AI Companion requires a Diction One subscription and works across all transcription modes. Without AI Companion, Diction still transcribes accurately, but the output is raw text without tone shaping. --- --- url: /features/history.md description: >- Every dictation is saved and searchable. Browse recent transcriptions, search the full archive, and tap any entry to see the complete text --- # Transcription History Every dictation you make is saved automatically. No clipboard juggling, no trying to remember what you said five minutes ago. It is all there. ## Two Tabs The history screen has two views: **Recent.** Your latest dictations, right at the top. Tap any entry to see the full text. This is the view you will use most. You dictated something, you need it again, it is right there. **Archive.** The full history of everything you have dictated. Scroll back as far as you need. Same tap-to-open behavior. ## Search Type a word or phrase and Diction searches across all your dictations. Matching text is highlighted in the results so you can scan quickly and find exactly what you are looking for. You dictated a phone number three days ago and forgot to save it? Search for the area code. You mentioned a restaurant name in a message last week? Search for it. The history has it. ## Transcript Detail View Tap any entry in the list and it opens a full detail view with the complete text. No more truncated previews or guessing what the rest says. The full transcription is right there, easy to read and copy. ## Privacy History is stored locally on your device. It never leaves your phone and is not synced anywhere. If you delete a dictation from history, it is gone. --- --- url: /features/custom-model.md description: >- Already running a speech-to-text server? Connect Diction to it directly, or wrap it with the Diction gateway for streaming. Works with any OpenAI-compatible endpoint. --- # Use Your Own Whisper Server Say you already have a speech-to-text server on your homelab. A beefy GPU box, a model fine-tuned for your language, something domain-specific, maybe just a newer release than the one in our default stack. You found Diction and want to point it at your existing setup without running more containers than you have to. Good news: Diction speaks the standard OpenAI transcription API natively. It talks to your server directly. No gateway required. The only question is whether you want streaming. ## Two paths ### Path 1: point Diction straight at your server If your server implements `POST /v1/audio/transcriptions` with a multipart file upload (faster-whisper-server, whisper.cpp HTTP server, LocalAI in whisper mode, and most others do), paste its URL into Diction and you're done. 1. Open the Diction app 2. Switch to the **Self-Hosted** tab 3. Paste your server URL, for example `http://192.168.1.50:8000` 4. Start dictating No extra containers, no compose file, no proxy. **The trade-off:** no streaming. The app uploads your recording to your server after you stop speaking, your server transcribes, the text comes back. On short dictations you barely notice. On longer ones, there's a visible pause between the moment you tap stop and the text arriving. Whether that matters depends on how long your typical dictation is. If you're on a GPU and transcription is already fast, Path 1 is probably all you need. ### Path 2: wrap it with the Diction gateway (streaming) Run our open-source gateway in front of your existing server. It exposes a WebSocket endpoint the app uses to stream audio up as you speak. By the time you stop talking, the transcript is mostly ready. You run just the gateway, pointed at your existing backend: ```yaml services: gateway: image: ghcr.io/omachala/diction-gateway:latest ports: - "8080:8080" environment: CUSTOM_BACKEND_URL: http://192.168.1.50:8000 CUSTOM_BACKEND_MODEL: your-model-name ``` ```bash docker compose up -d ``` Paste the gateway's address into Diction's **Self-Hosted** tab: ``` http://192.168.1.50:8080 ``` The gateway forwards to your existing server and adds the streaming layer on top. Short phrases feel about the same as Path 1. Longer dictations are noticeably faster. The gateway is open source. It runs as a pure proxy. No subscription, no account, no telemetry. ## Gateway options These only apply to Path 2. ### Model name ```yaml environment: CUSTOM_BACKEND_URL: http://my-server:8000 CUSTOM_BACKEND_MODEL: your-model-name-here ``` The gateway injects `CUSTOM_BACKEND_MODEL` as the `model` form field on every forwarded request. If your server runs a single model and doesn't care which name it receives, omit `CUSTOM_BACKEND_MODEL` and the gateway will leave the field untouched. ### WAV-only backend Some models only accept WAV audio. The gateway converts for you via ffmpeg: ```yaml environment: CUSTOM_BACKEND_URL: http://my-model:5092 CUSTOM_BACKEND_NEEDS_WAV: "true" ``` Audio arrives as 16 kHz mono WAV. Your model gets what it expects. ### Backend behind an API key ```yaml environment: CUSTOM_BACKEND_URL: http://my-server:8000 CUSTOM_BACKEND_AUTH: "Bearer sk-your-key-here" ``` The gateway injects the `Authorization` header on every forwarded request. ### All options | Variable | Required | Description | |----------|----------|-------------| | `CUSTOM_BACKEND_URL` | Yes | Base URL of your server, e.g. `http://192.168.1.50:8000` | | `CUSTOM_BACKEND_MODEL` | No | Model name to send in the request. Omit if your server runs a single model and doesn't require the field. | | `CUSTOM_BACKEND_NEEDS_WAV` | No | Set to `"true"` if your server only accepts WAV audio. Gateway converts via ffmpeg. | | `CUSTOM_BACKEND_AUTH` | No | Full `Authorization` header value, e.g. `Bearer sk-xxx`. | ## Which path should I pick? * **You want the minimum fuss and your hardware is fast:** Path 1. Paste URL, done. * **You care about perceived latency on longer dictations:** Path 2. One extra container, streaming on top. * **You're on a GPU and transcription already takes under a second:** Path 1 is fine. Streaming barely helps when there's nothing to hide. * **You're on CPU with a larger model:** Path 2 makes a real difference. Both paths keep your audio on your network. Neither sends anything to Diction's servers. ## Requirements * Your existing speech server reachable from the iPhone (Path 1) or from the gateway (Path 2) * Docker on any machine, for Path 2 * For remote access without opening router ports, see [Cloudflare Tunnel, Tailscale, or ngrok](/features/self-hosting-setup#no-public-ip)