audia — turn your ideas into audio
audia is an agentic Python package that converts PDFs — academic papers, reports, regulations — into podcast-style audio files. It uses an LLM to rewrite content into natural spoken language (math in plain English, tables as sentences, no citations) before passing it to a TTS engine, so the result actually sounds good when read aloud.
The audia CLI
Features
- LLM-curated text — mandatory LLM pass rewrites math notation, condenses tables and acknowledgements, removes citation artefacts, and ensures smooth spoken flow
- Chunk-level stitching — long documents are split at paragraph boundaries; each chunk receives the tail of the previous curated output as transition context
- ArXiv research — search papers by query and convert them to audio in one command
- Voice input (STT) — record a spoken query to trigger an ArXiv search
- Multiple TTS backends —
edge-tts(default, free),kokoro(local), or OpenAI TTS - Multiple LLM backends — OpenAI (
gpt-4o-minidefault) or Anthropic - CLI —
audia convert,research,listen,serve,info - Web UI — FastAPI backend + SPA frontend
- Local storage — SQLite database for papers and audio files via SQLAlchemy
- Debug output — every run saves raw, preprocessed, and curated text to
~/.audia/debug/<run_id>/
Tech Stack
Backend
Python 3.10+ — package language
FastAPI — backend for the web UI
LangGraph — agentic pipeline orchestration (PDF → preprocess → LLM curate → TTS)
LangChain — LLM abstraction
- Current support for LLMs from
Anthropic,
Google, and
OpenAI
- Current support for LLMs from
edge-tts — default TTS backend, no API key required
faster-whisper — STT for voice input (by SYSTRAN on Hugging Face)
PyMuPDF — PDF text extraction
SQLite — local database for papers and audio files
Frontend
React — interactive frontend
Vite — fast dev server and production bundler
Tailwind CSS — utility-first styling
TypeScript — type-safe component and API code
CLI
Packaging
PyPI — distributed as an installable Python package
Installation
pip install audia
For CLI usage, pipx is recommended — it installs audia in an isolated environment while exposing the command globally:
pipx install audia
Optional extras:
| Extra | Installs |
|---|---|
kokoro |
local Kokoro TTS |
pip install "audia[kokoro]"
Configuration
Copy .env.example to .env in your working directory and set your API key:
cp .env.example .env
Minimum required settings:
AUDIA_LLM_PROVIDER=openai # or anthropic
AUDIA_OPENAI_API_KEY=sk-...
All settings use the AUDIA_ prefix. Run audia info to see the active configuration.
Quick Start
Show active configuration:
audia info
Convert a local PDF:
audia convert paper.pdf
Convert multiple PDFs to a specific output folder:
audia convert paper1.pdf paper2.pdf --output ~/audiobooks
Search ArXiv and convert the top results:
audia research "retrieval augmented generation" --max-results 3 --convert
Start the web UI:
audia serve
# → http://localhost:8000
The audia UI
Pipeline
The pipeline can be entered in three ways:
| Entry point | Command |
|---|---|
| Voice input | audia listen — record speech, LLM distils a search query, confirm, then runs the full pipeline |
| Text query | audia research "retrieval augmented generation" — search ArXiv by text, select papers, run pipeline |
| Local PDF | audia convert paper.pdf — skip Steps 0, go straight to extraction |
When starting from voice or text, the full five-step LangGraph pipeline runs. For local PDFs, Steps 1–4 run directly:
[voice input] [text query]
│ │
▼ │
Microphone │
(faster-whisper STT) │
│ │
▼ │
LLM query distillation │ ← extracts concise ArXiv search terms
│ │ from natural speech
▼ │
Confirm / re-record? │
│ yes │
▼ ▼
Step 0 — ArXiv search (or use local PDF)
│ arxiv API: fetch metadata, download PDF
│
▼
Step 1 — PDF extraction PyMuPDF: text + metadata per page
│
▼
Step 2 — Heuristic pre-pass Regex: strip citations, LaTeX commands, figure captions
│
▼
Step 3 — LLM curation Chunked LLM pass: math → English, tables → sentences,
│ smooth spoken transitions between chunks
▼
Step 4 — TTS synthesis edge-tts (or kokoro / OpenAI): split into ~3800-char
chunks, synthesise, concatenate → .mp3
Output files for a run on 2025_Xu+.pdf:
~/.audia/audio/2025_Xu+_20260329_084445.mp3
~/.audia/debug/2025_Xu+_20260329_084445/
1_raw.txt ← PyMuPDF output
2_preprocessed.txt ← after heuristic pass
3_curated.txt ← after LLM curation
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-change) - Make your changes
- Run the test suite:
pytest --cov=src --cov-report=term-missing - Format and lint:
ruff format src/ tests/ && ruff check src/ tests/ - Update the documentation
- Submit a pull request
License
MIT — see LICENSE for details.
Metadata
Release files for audia 0.9.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| audia-0.9.0.tar.gz | 171.7 kB | Without provenance | Details for audia-0.9.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| audia-0.9.0-py3-none-any.whl | Python 3 | none | any | Details for audia-0.9.0-py3-none-any.whl |
Total release size: 327.6 kB
Release files / audia-0.9.0.tar.gz
| Download URL | audia-0.9.0.tar.gz |
|---|---|
| Size | 171.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
59bcb9b8357bc274b821177f564a3cbe27224bb62e782d68f26ff95c6e4d3d37
|
|
BLAKE2b-256 checksum How to use checksums |
491f9e894775772079e62f6eb1629af4842262f7c0d38c54fd36af76fd9a4e78
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|
Release files / audia-0.9.0-py3-none-any.whl
| Download URL | audia-0.9.0-py3-none-any.whl |
|---|---|
| Size | 155.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
806b2ada5a74529326bf7e9959f5c56c858f72e5bbd0a097721c4840aa91b057
|
|
BLAKE2b-256 checksum How to use checksums |
05e1a1b5ae12bb531298ec8acb308137f8c1fbf443b9faebdc244cd7a7389dd3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|
Security for audia 0.9.0
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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.