narrate-gpt
Project description
narrate-gpt
A simple TTS CLI tool for narrating text snippets in natural-sounding language.
Usage
# Read from clipboard
narrate-gpt -c
# Provide text directly
narrate-gpt "Hello world"
# Disable automatic cleanup or transcript formatting
narrate-gpt -c --no-clean
narrate-gpt -c --no-format
# Choose an LLM formatter model
narrate-gpt -c --llm-model openai/gpt-5.1
Environment Variables
By default, narrate-gpt uses Inworld for TTS and OpenAI for LLM text formatting, so both keys are required:
export OPENAI_API_KEY="your-openai-api-key"
export INWORLD_API_KEY="your-inworld-api-key"
I very strongly recommend Inworld TTS, as it is very cheap and competitive with SOTA voice realism at the time of writing (Feb 2026). If you only want to use OpenAI for TTS (via the --tts-provider openai flag), you can skip the Inworld key and just set:
export OPENAI_API_KEY="your-openai-api-key"
Install
pip install "narrate-gpt @ git+ssh://git@github.com/fkodom/narrate-gpt.git"
# Install all dev dependencies (tests etc.)
pip install "narrate-gpt[test] @ git+ssh://git@github.com/fkodom/narrate-gpt.git"
# Setup pre-commit hooks
pre-commit install
Tooling
| Tool | Description | Runs on |
|---|---|---|
| black | Code formatter | - git commit (through pre-commit) - git push - pull requests |
| ruff | Code linter | - git commit (through pre-commit) - git push - pull requests |
| pytest | Unit testing framework | - git push - pull requests |
| mypy | Static type checker | - git push - pull requests |
| pre-commit | Pre-commit hooks | - git commit |
| twine $\dagger$ | PyPI package uploader | - New release (git tag) |
$\dagger$ Requires enabling the
publish.yamlworkflow. To activate, move the file from.github/disabled-workflows/publish.yaml.disabledto.github/workflows/publish.yaml, and set a valid PyPI token asPYPI_API_TOKENin the repo secrets.Then tag a new release of this repo, and GHA will automatically build and publish a Python wheel (
.whl) to PyPI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file narrate_gpt-0.2.0.tar.gz.
File metadata
- Download URL: narrate_gpt-0.2.0.tar.gz
- Upload date:
- Size: 175.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.5 {"installer":{"name":"uv","version":"0.10.5","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3c8d53fad816193f23a2f07289e191d7504e851c87a863c31c6b39e2c41e4a0
|
|
| MD5 |
7df73570a64465f53f1e4e7a1f03a1f9
|
|
| BLAKE2b-256 |
9eef882623429257fdb7ffe84cff137526a8288872401101078907b4b41cbb90
|
File details
Details for the file narrate_gpt-0.2.0-py3-none-any.whl.
File metadata
- Download URL: narrate_gpt-0.2.0-py3-none-any.whl
- Upload date:
- Size: 11.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.5 {"installer":{"name":"uv","version":"0.10.5","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a1a0d493fe9aff251602abc91db40048d62ffccc86e56db601787c0f3415da3
|
|
| MD5 |
45557f0664215524583d75f9e7382da7
|
|
| BLAKE2b-256 |
036c27b7d67c84908e24c6b7090bb9ad5f3814e664683ea39bfdc27a7c9890b5
|