Skip to main content

voxtex

Python 3.11+ PyPI CI License: MIT

Voxtex: talk to your thesis, get LaTeX that compiles.

You point it at a LaTeX project and talk, in Greek, English or both. It reads how your thesis is set up (packages, citation commands, macros, labels, the bibliography, how you write) and turns what you say into clean academic LaTeX. Your chapter opens in voxtex's terminal editor, which works like Wispr Flow: press ctrl+space, talk, press it again. What you said is written at the cursor in your own words, only formatted as LaTeX (punctuation, citations, \en{} terms, maths). Select text first and what you say is an instruction for it ("make this more formal", "add the Broekstra citation"). The mic records only between the two presses, so typing and clicks never end up in the thesis, and nothing you say is ever dropped. Every write is checked first.

Install

With uv:

uv tool install "voxtex[gpu]"     # NVIDIA GPU; on other machines: uv tool install voxtex

On Linux and WSL, the microphone needs three system packages:

sudo apt install -y libportaudio2 libasound2-plugins pulseaudio-utils
Host Speech-to-text it picks Tested
Linux or WSL2, NVIDIA GPU local large-v3-turbo on the GPU Yes (WSL2, Ubuntu 24.04, RTX 3060)
Linux or WSL2, no GPU Groq Whisper if you have a key, else local small on the CPU No
macOS, Apple silicon Groq Whisper if you have a key, else local small on the CPU No
Windows without WSL — No; use WSL2

A TeX installation (pdflatex or xelatex) is optional. With one, voxtex compiles anything unusual it writes inside your real preamble before writing it.

First run

cd my-thesis                             # the folder with your main .tex file
voxtex                                   # first time: a one-minute setup, then the editor

Setup looks at your machine first (GPU, Ollama, keys you already have) and only asks what it can't decide: whether everything should stay on this machine, and a free Groq key, tested on the spot. Run voxtex init to change it later and voxtex doctor to check everything.

voxtex edit chapters/results.tex         # open a specific chapter
voxtex index                             # show what voxtex learned about the thesis

In the editor, ctrl+space starts and stops recording (esc cancels); the text goes at the cursor, or replaces the selection if you selected something. Say punctuation ("κόμμα", "full stop") and it becomes the mark; say "undo" ("αναίρεση", "undo twice") to take back the last edit. If Whisper only heard noise, or wasn't sure of the language and another one fits better, nothing odd is written: a message shows what it heard so you can say it again. ctrl+t switches to unfiltered: what you say goes in exactly as heard, with no AI (press it again for AI formatting). ctrl+p picks a theme (charcoal by default, voxtex, catppuccin, nord, gruvbox, dracula, tokyo-night, solarized, rose-pine, ...); the background always stays your terminal's. ctrl+g shows or hides small graphs of what's in use (AI calls and tokens, speech time, and the GPU when speech or the local model runs on it). ctrl+z undoes, ctrl+o opens any .tex file in the thesis folder (type to filter, esc to go back), ctrl+q quits. voxtex saves after every voice edit, a moment after you stop typing, and on ctrl+s (with a backup in .voxtex/backups/ before the first save), so your PDF viewer and other editors see the changes right away.

To keep using your own editor, there are two other ways in. voxtex listen writes at a %> HERE line in the file. voxtex watch works with any dictation app (Voxtype, Windows Win+H, macOS dictation): dictate onto lines that start with %> and save, and each block of %> lines becomes LaTeX.

What you control

  • The files. voxtex writes where your cursor is (or rewrites what you selected) in the chapter you opened, and nowhere else. Saves are atomic, so other programs never see half a file. Before the first save of a session it copies the file to .voxtex/backups/. Voice edits are part of the editor's undo, and a change to a selection you've since edited is written beside it instead.
  • What leaves your machine. The AI model gets what you said, about 800 characters of text before the cursor (and the selection, if any), and the few bibliography entries and labels that match. Your audio stays local when speech-to-text runs locally. --private keeps everything on your machine: local Whisper and a local model through Ollama.
  • What gets written. Before anything touches a file, voxtex checks that every citation key is in your .bib, every reference points to a real label, new labels follow your naming pattern, every number was actually said, braces and environments balance, and (for unfamiliar commands) that it compiles. A failure gets one automatic retry. If that fails too, the text is still written, tinted yellow, with a short message saying what to look at (listen and watch add a % voxtex-check: comment instead). If no AI answers at all, your words go in exactly as heard.
  • The cost. The default setup is free: a chain of free tiers (Groq, then Gemini and OpenRouter if you add keys) that ends in a local model. When one runs out, the same request moves to the next. A decision uses about 1,300 input tokens; .voxtex/timings.log records every call.

Commands

If you want to Run
Set up, or change the setup voxtex init
Check that everything works voxtex doctor [PATH] [--quick]
Talk into the thesis voxtex, or voxtex edit [CHAPTER]
Talk into a file open in your own editor voxtex listen [PATH], at a %> HERE line
Use another dictation app voxtex watch [PATH]
Undo listen/watch writes, even from earlier sessions voxtex undo [N]
See what voxtex learned about the thesis voxtex index [PATH] [-v] [--json]
Pick a microphone voxtex listen --list-mics, then --mic NAME
Keep everything local --private on edit, listen or watch
Try without changing files voxtex listen --dry-run

Configuration

voxtex init writes ~/.config/voxtex/config.toml, and keys go in ~/.config/voxtex/.env. A .voxtex.toml (or .env) in the thesis folder overrides them for that thesis. Everything is optional:

[llm]
chain = ["groq-gptoss", "groq-qwen", "gemini", "openrouter", "local"]

[providers.local]
model = "qwen2.5-coder:14b"          # any model you've pulled into Ollama

[writing]
style = "academic"                   # academic | clean
language = "auto"                    # auto | el | en

[stt]
mode = "auto"                        # auto | local | groq | openai | external
local_model = "auto"                 # auto | small | medium | large-v3-turbo

[listen]
utterance_pause = 0.9                # seconds of silence that end an utterance
decision_pause = 2.5                 # seconds of silence before a thought is written

[validate]
compile = "auto"                     # auto | always | off

Project status

voxtex is in beta (0.1). It's built and tested on a Greek thesis on WSL2 with an NVIDIA GPU; other setups are less tested, so issues are welcome. The original build plan is in docs/voxtext_plan.md and docs/PLAN-ADDENDUM.md.

To work on it:

git clone https://github.com/dhthz/voxtex.git && cd voxtex
uv sync --extra gpu
uv run pytest            # tests run without a microphone, a GPU or an API key
uv run ruff check .

License: MIT.

Metadata

Release files for voxtex 0.1.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 voxtex 0.1.1
File Size Uploaded Provenance
voxtex-0.1.1.tar.gz 227.1 kB Without provenance Details

Built distribution (wheel)

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

Total release size: 356.5 kB

Release files / voxtex-0.1.1.tar.gz

Download URL voxtex-0.1.1.tar.gz
Size 227.1 kB
Tags Source
SHA-256 checksum
How to use checksums
e35fa56f4da6740d092f8d274fb28a03a8051648f61fc4952e07bd8e1437b49a
BLAKE2b-256 checksum
How to use checksums
77923a30477797257c10e1a7767f5f3c47042c1bd7b6fb913cbd90e893e4e719
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.3 {"installer":{"name":"uv","version":"0.13.3","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 / voxtex-0.1.1-py3-none-any.whl

Download URL voxtex-0.1.1-py3-none-any.whl
Size 129.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
236a7d3fb71b337604cec93dd126652476e829485504867fac3c4082b678807b
BLAKE2b-256 checksum
How to use checksums
2f15b5f16a52ebcf9924cc61c9515f951b07b00b5a3dd3de1f1159d844e7a2e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.3 {"installer":{"name":"uv","version":"0.13.3","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}

Security for voxtex 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

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