Skip to content

What installing it actually costs

Most projects tell you how to install and never what it costs. These are measured numbers, not estimates, so you can decide before you start.

Disk

What Size Notes
YazSes, headless (no desktop extra) 414 MB pip install yazses — enough for transcribe. 42 distributions; 84% of it is four binary wheels that arrive with faster-whisper

The 414 MB is measured on Linux x86_64, CPython 3.12. Expect it to differ by a few tens of MB elsewhere: the platform-conditional dependencies are not the same set — Linux compiles evdev, macOS pulls four pyobjc frameworks plus rumps, Windows pulls pywin32, pystray and Pillow. The four wheels that dominate the total are the same everywhere. | YazSes + the desktop extra | 1.1 GB | what install.sh, the .deb and the Snap install | | ↳ of which PySide6 (Qt) | 648 MB | the overlay and the tray — now optional, see below | | Speech model — tiny.en | 75 MB | fastest, least accurate | | Speech model — base.en | 141 MB | the default | | Speech model — small.en | 464 MB | most accurate of the three | | Speaker diarization models | ~45 MB | only if you use --diarize | | Docker image (transcription only) | 833 MB | no Qt |

A normal desktop install is therefore about 1.25 GB: 1.1 GB of program plus the 141 MB default model. A headless install is roughly 555 MB all-in. Only one model is downloaded — the one you configure.

Can the headless 414 MB be made smaller?

Not meaningfully, and it is worth being straight about why. 84% of it is four binary wheels that arrive with the speech engine: ctranslate2 (135 MB), PyAV (103 MB), numpy (58 MB) and onnxruntime (53 MB) — the last of which is faster-whisper's own dependency, for its bundled voice-activity detector. YazSes' own code is 4 MB, under 1% of the install.

So the floor is set by the speech engine's dependency tree, not by how YazSes is packaged. Every lever packaging does control has already been pulled: Qt is an extra, the 21 optional features install on demand, and no speech model ships with the program — it is fetched on first use, and only the one you configure. Measurements and the full breakdown: modular distribution survey.

Qt is now optional — headless installs are ~650 MB lighter

PySide6 is no longer a base dependency. It is 648 MB of Qt and it exists for exactly two desktop features: the voice-activity overlay and the system-tray icon. Installs that can never show either — servers, containers, CI, anything headless, and anyone who only runs yazses transcribe — were paying for all of it.

It now lives in the desktop extra:

pip install yazses              # headless: transcribe, meetings, the CLI
pip install 'yazses[desktop]'   # adds the overlay and the tray

Nothing changes for a normal desktop install. install.sh, the .deb and the Snap all pull the desktop extra, so the tray and overlay work out of the box exactly as before. If you installed headless and later want them, yazses features enable tray (or overlay) fetches Qt on demand.

Every import of it is lazy, so a headless copy simply reports the feature as unavailable rather than failing. Tracked as #259.

What a feature costs to turn on

Nothing below is installed unless you ask for it. yazses features info <name> shows the figure before you commit, and yazses features enable prints it again — loudly — before it fetches anything.

Feature Download Packages
cocktail, multiprofile, voiceguard (speaker voiceprint) ~3.1 GB 37
stt-parakeet ~604 MB 1
read-back, readback_clone (Kokoro TTS) ~352 MB 23
overlay, tray (Qt) ~256 MB 4
gaze (mediapipe + OpenCV) ~223 MB 12
stt-moonshine ~113 MB+ 18
llm-cleanup (llama.cpp) ~75 MB 4
diarize, meeting, recimport (sherpa-onnx) ~62 MB 2
prosody, voicehealth ~11 MB 1
agent (MCP) ~4.4 MB 20
chinese-script ~0.5 MB 1

A trailing + means the packages are measured but the model files are not: the feature fetches weights whose size is not established here, so the figure is a floor. Every number is yazses features' own, so the page and the command cannot drift — tests/test_install_cost_page_matches_the_tool.py fails the build if they do.

The voiceprint features cost 3.1 GB, and it is worth knowing why

cocktail, multiprofile and voiceguard all need a speaker-embedding model, and the default backend (speechbrain) resolves to PyTorch and the full NVIDIA CUDA stack — cuDNN, NCCL, cuSPARSE, cuSOLVER — none of which YazSes uses, because everything here runs on the CPU. That is a dependency of a dependency, not a choice this project makes, and it is 7× the size of YazSes itself.

If you want speaker features without it, [voiceprint] backend = "resemblyzer" is the lighter alternative. Otherwise, leave them off — all three are off by default and cocktail is experimental besides.

These are download sizes for the fully resolved dependency set, measured on Linux x86_64 against a clean base install, so they will not match a du afterwards. A feature whose packages you already have costs nothing, and says so.

What each install path actually pulls

There is no single installer, and they do not all install the same thing — correctly, because a container and a laptop need different software. This is what each one decides for you:

How you installed Pulls the desktop extra (Qt, 648 MB)? You get Roughly
pip install yazses / pipx install yazses No The CLI, dictation, transcribe, meetings 414 MB
install.sh (the Linux one-liner) Yes …plus the tray and the voice-activity overlay ~1.1 GB
The .deb Yes (yazses[desktop]) Same as above ~1.1 GB
The Snap Yes (bundled) Same, in a confined package ~1.1 GB
The Docker image No — it has no display transcribe + diarization only 833 MB

If you want the smallest install, pip install yazses already is it. There is no minimal extra to ask for, because the base install is the minimum — see the box above for why 414 MB is a floor rather than a choice. Everything beyond it is opt-in through yazses features enable <name>, which now tells you the download size before it fetches anything.

install.sh names Qt directly rather than asking for the desktop extra — uv resolves extras awkwardly from a git+ source — so the two are kept in step by tests/test_install_paths_agree.py rather than by anyone remembering.

Downloads

Nothing is downloaded that you did not ask for, and the speech model is the only large download. It happens once, on first use, from Hugging Face — after that YazSes never needs the network again.

You can prove that rather than trust it:

docker run --rm --network none -v yazses-models:/home/yazses/.cache \
    -v "$PWD:/data" ghcr.io/mskazemi/yazses transcribe jfk.wav

That transcribes with networking switched off entirely. It works.

Time

Step Time Measured how
First transcription (incl. 141 MB model download) 43 s 4-core CPU, base.en
Every transcription after 2.3 s for 11 s of audio model cached
System provisioning (yazses setup) under a minute apt packages
The one-time log-out and back in you pick when required on Linux; see below

Install time itself depends almost entirely on your network and on whether evdev has to be compiled (it has no wheels, so it usually does — this needs a C compiler, which install.sh installs for you if it is missing).

What it changes on your system

On Linux, a full dictation install touches these and nothing else:

Change Why Reversible
Installs libportaudio2, xdotool/ydotool/wtype, clipboard tools capture audio, type text yes — normal apt packages
Adds you to the input group read the hold-to-talk key from the kernel yes — sudo gpasswd -d $USER input
Enables ydotoold (Wayland only) the only way to inject keystrokes on GNOME/KDE Wayland yes — systemctl --user disable --now ydotoold
Writes config to ~/.config/yazses/ your settings yes — delete it
Writes data to ~/.local/share/yazses/ logs, PID, learning corpus if enabled yes — delete it
Optional systemd user unit start at login, if you ask for it yes — yazses autostart disable

The input group is the one real security consideration, and it is worth understanding

Membership lets any program you run read raw input events — which is how the hold-to-talk hotkey works at all, and it is the same mechanism every Linux hotkey daemon uses. It is a genuine privilege grant, so it is stated plainly here rather than buried. If you are not comfortable with it, yazses transcribe needs none of it, and neither does Docker.

What it does not do

  • No account, no API key, no licence server, no sign-up.
  • No telemetry. Nothing is counted, phoned home, or reported — there is no analytics code in the project at all. Downloads on PyPI are the only number the project can see, and that is PyPI's counter, not ours.
  • No background network access after the model is downloaded.
  • No autostart unless you run yazses autostart enable.

Getting it back off

Uninstalling is one page, and it removes everything listed above.


Ready? Install on Linux · macOS · Windows — or try it without installing anything first.