Skip to main content

audia — turn your ideas into audio

Python 3.10+ License: MIT PyPI version PyPI Downloads Tests Coverage GitHub last commit

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-mini default) 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 Python 3.10+ — package language
  • FastAPI FastAPI — backend for the web UI
  • LangGraph LangGraph — agentic pipeline orchestration (PDF → preprocess → LLM curate → TTS)
  • LangChain LangChain — LLM abstraction
    • Current support for LLMs from Anthropic Anthropic, Google Google, and OpenAI OpenAI
  • Microsoft edge-tts — default TTS backend, no API key required
  • Hugging Face faster-whisper — STT for voice input (by SYSTRAN on Hugging Face)
  • PyMuPDF PyMuPDF — PDF text extraction
  • SQLite SQLite — local database for papers and audio files

Frontend

  • React React — interactive frontend
  • Vite Vite — fast dev server and production bundler
  • Tailwind CSS Tailwind CSS — utility-first styling
  • TypeScript TypeScript — type-safe component and API code

CLI

  • Typer Typer + Rich — CLI with coloured progress output

Packaging

  • PyPI 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

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/my-change)
  3. Make your changes
  4. Run the test suite: pytest --cov=src --cov-report=term-missing
  5. Format and lint: ruff format src/ tests/ && ruff check src/ tests/
  6. Update the documentation
  7. 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)

Source distribution for audia 0.9.0
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)

Table of built distributions (wheels) for audia 0.9.0
File Interpreter ABI Platform Actions
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.

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