{#- Landing page template for the YazSes docs site (selected by `template: home.html` in docs/index.md's front matter). The full-width sections below render above the ordinary Markdown body, which is kept as-is: it carries the JSON-LD, the install tabs and the FAQ that search and answer engines already index. Everything here is first-party — no third-party script, font or image, because the site promises that a visitor's request goes nowhere else (see the material/privacy note in mkdocs.yml). Behaviour lives in docs/assets/landing.js and styling in docs/assets/landing.css; both no-op on every other page. Every figure quoted here is a measurement published on docs/architecture.md or docs/benchmarks.md. Do not add a number that is not. -#} {% extends "main.html" %} {% macro ic(name) -%} {%- endmacro %} {% block tabs %} {{ super() }}
{# ================================================================ HERO #}

Open source · Apache-2.0 · runs on your CPU

Offline voice dictation for Linux, macOS & Windows

Hold a key, speak, release — YazSes transcribes your words on-device with faster-whisper and types them into whatever app has focus. No cloud. No API key. No subscription. Nothing leaves your machine.

bash <(curl -fsSL https://raw.githubusercontent.com/MSKazemi/yazses/main/install.sh)
{# Signature animation: the real loop, idle → recording → transcribing → injecting. The colours are the tray's own state colours (docs/tray-and-overlay.md). #}

Right Alt Idle — hold the key
🔵 idle🟢 recording🟣 command⚡ on-device decode
{# =============================================================== STATS #}
0 bytes of audio or text sent anywhere by default
1.56 s median decode, default base.en, CPU only, no GPU
2.06% word error rate with Parakeet TDT on LibriSpeech
99.98% of a burst’s latency is the speech model — the rest is noise
{# ======================================================== ARCHITECTURE #}

Architecture

Nine stages. One machine. Zero round‑trips.

Every time you hold the key, your audio flows through a fixed pipeline that never touches the network. Hover or tap a stage — the pulse shows a burst moving through it.

    {% set stages = [ ("keyboard", "Hotkey", "trigger", "Hold-to-talk starts a burst; releasing ends it. The trigger can also be an EMG muscle sensor over USB serial — a hands-free option.", "platform/emg/"), ("microphone", "Capture", "audio", "The microphone is recorded into an in-memory buffer for exactly as long as you hold. Nothing is written to disk.", "audio/recorder.py"), ("radar", "VAD gate", "0.063 ms", "A calibrated voice-activity check discards a burst that is mostly silence, so an accidental tap never produces a phantom transcript.", "audio/vad_calibrated.py"), ("timer-sand", "Padding", "lead-in", "A short silent lead-in is prepended so the decoder never clips your first word.", "audio/padding.py"), ("chip", "STT decode", "1 561 ms", "faster-whisper (int8, CPU) by default, or NVIDIA Parakeet TDT — behind one SttEngine protocol, so an engine is a config change, not a fork.", "stt/base.py"), ("broom", "Clean", "0.005 ms", "Strips Whisper artefacts such as [BLANK_AUDIO] and stray leading punctuation.", "postprocess/cleaner.py"), ("filter-variant", "Disfluency", "0.147 ms", "Three passes: fillers out, repeated words collapsed, self-corrections rolled back.", "stt/filters/disfluency.py"), ("source-branch", "Classify", "0.075 ms", "A Tier 1 regex grammar decides: dictation, or a command like “undo that” or “go to line 42”. An optional local SLM gets a second look at the unsure case.", "commands/grammar.py"), ("text-box-check", "Inject", "type · keys", "Dictation is typed into the focused app; a command becomes a key sequence. X11, Wayland, macOS, Windows and SSH panes alike.", "commands/dispatch.py"), ] %} {% for icon, name, cost, desc, src in stages %}
  1. {{ "%02d" | format(loop.index) }} {{ ic(icon) }} {{ name }} {{ cost }}
  2. {% endfor %}

Hold-to-talk starts a burst; releasing ends it. The trigger can also be an EMG muscle sensor over USB serial — a hands-free option.

src/yazses/platform/emg/
{# The stack: who talks to whom #}

The stack

{{ ic("console-line") }}
CLI · tray · Settings windownever touch the pipeline directly
{{ ic("head-cog-outline") }}
yazses-daemonone long-lived process · a state machine
{{ ic("transit-connection-variant") }}
Pure pipelinedependency-free logic, unit-tested directly
{{ ic("linux") }}Linux{{ ic("apple") }}macOS {{ ic("microsoft-windows") }}Windows{{ ic("android") }}Android · in design
{# The state machine, as an orbit #}

The dictation loop

The spine is four states. Meeting capture, read-back, the SSH remote path and enrollment are modes you enter deliberately over IPC — and return from.

{# The three seams that make the future an extension, not a rewrite #}
{{ ic("hand-back-right-outline") }}

Activation seam

“What starts a burst” is a contract. A key and an EMG squeeze already implement it; a wake word, a switch or a BCI would be a third — without touching the pipeline.

{{ ic("chip") }}

Engine seam

SttEngine made Parakeet a config change, not a fork. Anything that turns audio into words plugs in here.

{{ ic("monitor-multiple") }}

Platform seam

Every OS difference is a Protocol. That is what makes Android a port rather than a rewrite.

Read the full architecture {{ ic("arrow-right") }} Browse the diagrams {{ ic("arrow-right") }}

{# ============================================================= ROADMAP #}

The future

From a dictation tool to keyboard‑optional computing

Four eras. Each is a promise kept before the next begins — and every step stays offline, encrypted on-device, and off until you turn it on.

{% set eras = [ ("shipped", "Foundation", "Shipped", "a tool that works", "history", ["Hold-to-talk dictation into any app", "Linux, macOS and Windows", "Voice commands & macros", "Encrypted on-device learning loop"]), ("now", "Perception", "Shipping now", "it hears and sees well", "ear-hearing", ["Meeting Mode with speaker labels", "Second engine: Parakeet TDT", "Gaze targeting & EMG activation", "Sotto-voce command channel"]), ("next", "Understanding", "Next", "it knows what you mean", "brain", ["Offline command mode over selected text", "Vocabulary biasing in every engine", "Android dictation keyboard", "Settings that install what they enable"]), ("horizon", "Recall", "The horizon", "it remembers for you", "message-text-clock", ["Spoken recall over everything you dictated", "An ambient scribe you control", "A computer you talk with — that stays yours"]), ] %} {% for key, name, status, tag, icon, items in eras %}

{{ status }}

{{ name }}

{{ tag }}

    {% for it in items %}
  • {{ it }}
  • {% endfor %}
{% endfor %}
shippedin progress designed, aheadresearch horizon
{{ ic("cloud-off-outline") }}

Designed — and deliberately unbuilt

Cloud escalation is fully specified and stays unimplemented, so the offline promise can never erode by increments. Voiceprints, the learning corpus and third-party capture may never leave at all.

ADR-019 {{ ic("arrow-right") }}
{{ ic("puzzle-outline") }}

Declined, with reasons

Third-party plug-ins would sit on the hot path with your microphone, transcript and keyboard. They stay out until a real isolation boundary exists.

ADR-018 {{ ic("arrow-right") }}
{{ ic("tune-variant") }}

Gated on a measurement

Personal speech adapters — including for dysarthria, ALS and Parkinson’s — ship only after a measured accuracy win on held-out data. Ideas don’t ship on their own strength.

Future work {{ ic("arrow-right") }}

Join a milestone

{% set miles = [ ("cog-outline", "Settings GUI", "Configure everything from a window", "Desktop · Qt", "https://github.com/MSKazemi/yazses/milestone/5"), ("rocket-launch", "Install anywhere", "One command on every distro and OS", "Packaging", "https://github.com/MSKazemi/yazses/milestone/6"), ("ear-hearing", "Hear better", "Accuracy measured, not asserted", "Speech · ML", "https://github.com/MSKazemi/yazses/milestone/7"), ("account-voice", "Voice control", "Git, files, windows — commanded", "Systems · HCI", "https://github.com/MSKazemi/yazses/milestone/8"), ("account-group", "Welcome mat", "An easy first hour and first PR", "Docs · no-code", "https://github.com/MSKazemi/yazses/milestone/9"), ("android", "Android", "An offline keyboard in your pocket", "Mobile · Kotlin", "https://github.com/MSKazemi/yazses/milestones"), ] %} {% for icon, name, promise, flavour, href in miles %} {{ ic(icon) }}{{ name }}{{ promise }}{{ flavour }} {% endfor %}

The full roadmap {{ ic("arrow-right") }} The research behind it {{ ic("arrow-right") }}

{# ============================================================ DOCS HUB #}

Documentation

Everything, documented — honestly

Guides for the first five minutes, references for the fiftieth hour, and design records for every decision in between.

{% set hub = [ ("rocket-launch", "Get started", "Install on Linux, macOS or Windows and dictate in minutes.", "install-linux.html", [("Linux", "install-linux.html"), ("macOS", "macos-install.html"), ("Windows", "windows-install.html")]), ("compass-outline", "Use cases", "Wayland, coding by voice, confidential work, accessibility.", "use-cases/index.html", [("Wayland", "use-cases/voice-dictation-wayland.html"), ("Coding", "use-cases/voice-coding.html"), ("RSI", "use-cases/accessibility-rsi-hands-free.html")]), ("book-open-variant", "Guides", "Hotkeys, vocabulary, macros, low-RAM models, air-gapped use.", "how-to/index.html", [("Hotkey", "how-to/change-hotkey.html"), ("Vocabulary", "how-to/personal-vocabulary.html"), ("Air-gapped", "how-to/air-gapped.html")]), ("console", "Reference", "Every command, flag and config key — generated from the code.", "cli-reference.html", [("CLI", "cli-reference.html"), ("Config", "configuration.html"), ("Features", "features.html")]), ("sitemap", "Architecture", "The pipeline, the daemon, the platform seams and the figures.", "architecture.html", [("Diagrams", "diagrams/index.html"), ("Reliability", "reliability.html"), ("Benchmarks", "benchmarks.html")]), ("flask-outline", "Research", "The cited science of post-keyboard input: eye, voice, muscle.", "research/index.html", [("Eye control", "research/eye-control.html"), ("Voice", "research/voice-control.html"), ("Agenda", "research/agenda.html")]), ("map-marker-path", "Roadmap", "Where it is going, what shipped, and what is declined.", "roadmap.html", [("Releases", "releases/index.html"), ("Decisions", "design/adr/index.html"), ("Mobile", "mobile/index.html")]), ("account-group", "Contribute", "Find a task that fits — many need no code at all.", "contribute/start.html", [("Find a task", "contribute/find.html"), ("AI agents", "contribute/ai-agents.html"), ("Translate", "localization/STATUS.html")]), ] %} {% for icon, name, desc, href, links in hub %} {% endfor %}
{% endblock %} {#- The Markdown body: no auto-inserted

— the hero above owns the page's only h1. -#} {% block content %} {{ page.content }} {% endblock %} {% block footer %}

Your voice is yours. Keep it that way.

Free, open source, and fully offline — on the machine you already own.

Questions or feedback? mohsen.seyedkazemi@gmail.com

{{ super() }} {% endblock %}