Skip to main content

Entune

CI

Your speech model. Your vocabulary. Corrections that consider the context.

Entune is an open-source dictation app for macOS, Windows and Linux. It runs as its own app: hold a shortcut in any app, speak, and the text is pasted where you are. Choose a cloud or local speech model, and keep your recordings on your computer. Its personal dictionary learns from your dictation; a decision model chooses when a dictionary replacement actually fits the sentence, and where paragraphs and bullets belong.

A 42-second tour of Entune on a Mac:

https://github.com/user-attachments/assets/bcbc632c-c74e-441f-a802-a3b9f4fe6d5f

Install

With uv, one command installs Entune and opens it:

uv tool install entune && entune

In Windows PowerShell, use uv tool install entune; entune.

On macOS, this puts Entune in your Applications folder, preparing it for up to a minute the first time; on Windows, in the Start menu; on Linux, in your applications menu. Then it opens Entune. From then on, open it like any other app; the terminal is no longer needed. If the terminal cannot find entune, open a new one and run entune again.

Or use pip in a Python 3.12+ environment:

python -m pip install entune && entune
Install from source, or try development changes

This option requires Git:

uv tool install "git+https://github.com/eandualem/entune.git@develop" && entune

With pip, use python -m pip install "git+https://github.com/eandualem/entune.git@develop".

Start dictating: the first time, Entune opens with a short introduction, then Get started.

  1. Set up a speech model: in Models, add a speech provider's API key, or download a local model. The first one becomes your default. AssemblyAI is a straightforward cloud starting point; Parakeet is our local recommendation on Apple Silicon.
  2. Allow permissions: on macOS, Microphone, Accessibility and Input Monitoring, each from its own button. On Windows, only the microphone. On Linux, keyboard access: one command, run once, then log out and back in.
  3. Set a shortcut, then hold it in any app and speak. The text is pasted where you are, and what you had copied is put back (on Windows, copied text only); with no text field active, the text is copied instead. Or click Record in Entune's window. Your audio and transcript are saved in History.

You can start without a dictionary or decision model and add them later.

macOS permissions belong to the Entune app, which is signed on your Mac without any certificate and stays the same across versions, so they remain granted when you upgrade. The permission guide covers missing shortcuts and “1 of 3 allowed.”

The full setup and dictation have been tested on macOS and Windows; see Windows for what differs there. Linux is new: see Linux for the two system libraries it needs and how shortcuts work on X11 and Wayland.

A dictionary match should not always become a replacement

A recognizer might write “cloud” when you meant “Claude.” But replacing every “cloud” would also damage a sentence about cloud storage. Entune stores both meanings and asks a decision model which fits the surrounding words.

The decision model selects from your dictionary. It does not generate or rewrite your dictation. Entune applies the stored spelling you can inspect and edit.

72 wrong replacements become 1 with Jev, in our test

We let Entune learn a dictionary from 7.5 hours of the maintainer's own dictation (406 recordings), then tested it on the next 2.1 hours (160 recordings) that it never saw. Parakeet transcribed everything on the Mac; GPT-6 Astra learned the dictionary on a ChatGPT plan. At the 121 places where the dictionary offered another reading, the expected answer was written down before any decision model ran (2 could not be judged and are left out):

Method Changes made Correct Incorrect
Replace every dictionary match 121 47 72
Choose with Jev 39 38 1
Choose with OpenAI's Decisions API 50 42 8
Choose with Laya, locally 36 28 8
  • Jev avoided 71 of the 72 wrong replacements and kept 38 of the 47 correct ones.
  • OpenAI caught the most correct ones, 42, with 8 wrong.
  • Laya keeps the decisions on your computer and is the fastest, a median 0.15 s per dictation; it kept 28 correct ones.

Formatting was tested on the same dictation: of 92 places that should start a paragraph or bullet, Jev placed 35 with 12 unwanted breaks, OpenAI 8 with 1, and Laya 5 with 37, turning two whole dictations into bullet lists.

This is one person's dictation judged from the text by one reviewer, not an overall transcription-accuracy claim. Read the data, method and limits, including what the learned dictionary missed and an earlier test with the same direction.

Choose the models that suit you

Entune separates three jobs, so you can choose each independently:

Job Our starting recommendation When it runs
Turn audio into text Parakeet on Apple Silicon, or AssemblyAI in the cloud After each recording
Build your dictionary GPT-6.1 Sol, medium effort, 24,000-character batches; our October test used GPT-6 Astra, high effort When you request suggestions
Choose dictionary replacements and formatting Jev for the best result in our test; OpenAI's Decisions API; Laya for local processing After transcription, when enabled

Speech options also include Groq, Soniox, ElevenLabs, xAI and local Whisper.cpp. Cloud services use your own provider accounts and keys; Entune does not sell inference credits.

Use your ChatGPT subscription to build the dictionary. Dictionary setup opens on OpenAI → ChatGPT subscription: choose Sign in with ChatGPT and approve Entune in your browser. Entune uses OpenAI's documented sign-in for open-source apps, so no API key is needed, and you can set a limit for Entune in ChatGPT Settings → Usage. Your plan's model access and usage limits apply. An OpenAI API key is also available. See the access details. The subscription covers dictionary generation, not speech recognition or the decision models; OpenAI's Decisions API needs an API key.

The model guide covers exact model IDs, local-engine installation, account access, and the limits of our recommendations.

Teach Entune your vocabulary

Use Dictionary → Get suggestions to learn from the selected speech model's history. Or choose Learn from audio to import recordings from another dictation app or an audio folder. Entune transcribes imported audio with your chosen speech model, then proposes entries for review.

Dictionary generation takes time. Text goes to the suggestion model in parts, one after another, each with the dictionary entries that occur in its text. Large histories take longer; in our October test, 7.5 hours of dictation (387 transcripts) took 39 minutes in 10 parts with GPT-6 Astra at high effort on a ChatGPT plan. Imported audio is transcribed first, several recordings at a time with a cloud speech model, and parts start as soon as enough text is ready. The setup lets you choose the reasoning effort, and estimates the time from what Entune has measured. This is separate from the fast decision step on each new dictation.

Review the proposed entries before applying them. You can stop a build and review completed parts, or continue from where it stopped, with other settings if a part was too slow. Dictation keeps working throughout; only separate dictionary editing waits until the proposal is applied or discarded.

Learned entries belong to their speech model: a Parakeet dictionary is not automatically an AssemblyAI dictionary. Pin entries you deliberately want to share. Later suggestions can revise learned entries; more suggestion runs do not guarantee a better dictionary.

Keep control of your recordings

  • History: replay audio, copy text, inspect processing changes, and retry a recording with another speech model. Provider failures remain visible.
  • Shortcuts (macOS, Windows, Linux): hold to talk or toggle hands-free recording. Cancel without pasting; usable captured audio stays available for retry.
  • The pill: a small indicator in the corner shows level bars while you record, then says what happened; an error stays there with Retry. No system notifications for results.
  • Local data: audio, transcripts, settings and keys stay in Entune's data folder. Export or delete them in Settings → Data & Privacy.
  • Optional processing: dictionary correction, repeated-filler reduction, and paragraph/bullet formatting have separate controls, each run by the decision model you choose: Jev, OpenAI's Decisions API, or Laya on your computer.
  • Fast mode: uploads the audio while you speak, so a cloud transcript arrives sooner; the Performance chart shows each model's measured wait.
  • Drop audio to transcribe it: drop files anywhere on the window, such as a recording another app could not transcribe.
  • Anonymous mode: the eye switch blurs transcripts for screen recordings.
  • For agents and tools: a local API accepts corrections you have confirmed, and optional Langfuse tracing shows every dictionary-suggestion request.

There is no Entune account, telemetry or hosted history. Cloud speech sends audio to your chosen provider; dictionary generation sends its selected transcripts and dictionary to the chosen language-model provider. Jev sends matched context to TypeSafe, and OpenAI's Decisions API to OpenAI, even when speech recognition is local. Laya keeps that step local. See data and privacy.

Entune is for a trusted, single-user machine. Its loopback API has no authentication: other local processes can read or change data through it. Do not expose its port to a network or tunnel.

Guides and contributing

To work on Entune, clone the repository and run uv sync, then uv run entune. Run uv run ruff check ., uv run ruff format --check ., uv run mypy and uv run pytest before contributing. Pull requests target develop; main receives reviewed releases. See CONTRIBUTING.md.

MIT licensed.

Metadata

Release files for entune 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for entune 0.4.1
File Size Uploaded
entune-0.4.1.tar.gz 627.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for entune 0.4.1
File Interpreter ABI Platform
entune-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 1.3 MB

Release files / entune-0.4.1.tar.gz

Download URL entune-0.4.1.tar.gz
Size 627.2 kB
Tags Source
SHA-256 checksum
How to use checksums
f7d241aa74944d467fd46623f111fb866b2de873eecdd13c03a69cc791c6b69c
BLAKE2b-256 checksum
How to use checksums
dbcfe154133b73015e05e1fa5c8725c9ac019842da601d2eedac852d12c7dda6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / entune-0.4.1-py3-none-any.whl

Download URL entune-0.4.1-py3-none-any.whl
Size 688.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4f802f6de22923cd7fb9b4c3cc76dec24c088ad623c144ea1577d108caccaf35
BLAKE2b-256 checksum
How to use checksums
b6b37fd9f0f3d6fb80d8c2b446606e893aec6f78dd7942133b60a7dd40902551
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

0.5.1

2 release files

0.5.0

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

This release

0.4.1 This release

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page