earmark

earmark

Turn the things you meant to read into a private podcast feed.

AI / Agents

Skills
llms.txt
llms-full.txt

Developers

John Paul Helveston

Author

Community

Full license MIT

Meta

Requires: Python >=3.11,<3.13
Provides-Extra: misaki, dev

earmark init ~/pCloud\ Drive/public/audio --base-url https://filedn.com/XXXX/audio
earmark publish paper.pdf

earmark extracts the text from a document (PDF, DOCX, PPTX, EPUB, HTML, Markdown) or an article URL, rewrites it into something that sounds good read aloud, narrates it locally with Kokoro-82M, and puts the MP3 on a podcast feed your phone can subscribe to.

Everything runs on your machine. No API keys, no per-minute cost.

Install

Requires uv and ffmpeg.

brew install ffmpeg
git clone https://github.com/jhelvy/earmark.git
cd earmark
uv tool install --python 3.12 -e .

Python 3.11 or 3.12 specifically: the Kokoro toolchain does not yet support 3.13 or newer, and uv will fetch a suitable interpreter for you. Full detail in Installation.

The commands

earmark text    SOURCE   ->  text/<name>.md      look at it, fix it
earmark audio   SOURCE   ->  audio/<name>.mp3    narrate it
earmark publish SOURCE   ->  feed.xml            all of the above

publish runs the whole chain, so earmark publish paper.pdf is all you ever need to type. The other four commands are setup and housekeeping: init, config, feed, voices.

Everything earmark makes lands in one folder you choose (your library), which is meant to be a folder served on the public web. There is no library setting anywhere, because the library is the folder its earmark.toml sits in.

Start here

Quickstart empty folder to something playing on your phone
The library why a library is a folder
The pipeline text, audio, publish, and editing in between
Text cleaning what gets rewritten before anything is spoken
Choosing a voice 54 voices and how to pick one
Publishing anywhere GitHub Pages, rclone, rsync: one line each
Subscribing on your phone where the feed URL goes in each app
Reference every command, flag and config key