{"data":{"slug":"sfortis-openai-tts","name":"openai_tts","tagline":"Custom TTS component for Home Assistant with OpenAI speech engine integration","github_url":"https://github.com/sfortis/openai_tts","owner":"sfortis","repo":"openai_tts","owner_avatar_url":"https://avatars.githubusercontent.com/u/15342157?v=4","primary_language":"Python","stars":216,"forks":53,"topics":["ai","chime","ha","hacs","home-assistant","homeassistant","llm","local-llm","openai","self-hosted","speech-synthesis","text-to-speech","tts"],"archived":false,"github_pushed_at":"2026-09-19T07:05:48+00:00","maintenance_label":"Very active","stars_delta_30d":11,"url":"https://www.graphcanon.com/tools/sfortis-openai-tts","markdown_url":"https://www.graphcanon.com/tools/sfortis-openai-tts.md","api_url":"https://www.graphcanon.com/api/graphcanon/tools/sfortis-openai-tts","graph_url":"https://www.graphcanon.com/api/graphcanon/graph?tool=sfortis-openai-tts","description":"Custom TTS component for Home Assistant. Utilizes the OpenAI speech engine or any compatible endpoint to deliver high-quality speech. Optionally offers chime and audio normalization features.","homepage_url":null,"license":"GPL-3.0","open_issues":12,"watchers":2,"ai_summary":"A Python-based custom text-to-speech solution for Home Assistant that integrates the OpenAI speech engine and offers optional features like chimes and audio normalization.","readme_excerpt":"<div align=\"center\">\n\n# OpenAI TTS for Home Assistant\n\n**Text-to-Speech component that connects Home Assistant to OpenAI's TTS API and any OpenAI-compatible backend.**\n\n\n\n\n\n\n\n\n<a href=\"https://www.buymeacoffee.com/sfortis\" target=\"_blank\"><img src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" height=\"42\" width=\"170\"></a>\n\n</div>\n\n---\n\nOpenAI TTS turns text into speech inside Home Assistant. It works with the official OpenAI Audio Speech API and any compatible self-hosted backend (Chatterbox, pocket-tts, LocalAI, TTS Web UI, and others). Configure one or more TTS agents per OpenAI account, target announcements at any media player, optionally prepend a chime, normalise loudness for small speakers, and have the original volume and music restored after the announcement.\n\n## Contents\n\n- [What's New](#whats-new-)\n- [Core Features](#core-features)\n- [Installation](#installation)\n- [Configuration](#configuration)\n- [openai_tts.say service](#openai_ttssay-service)\n- [openai_tts.set_api_key action](#openai_ttsset_api_key-action)\n- [Custom backends](#custom-backends)\n- [Contributing](#contributing)\n- [Notes](#notes)\n\n## What's New \n\nVersion 3.9 is mostly about backends other than OpenAI, and about what a speaker\ndoes while an announcement is playing.\n\n- **Provider presets**: pick OpenAI, Mistral, Groq, Lemonfox, Kokoro, Chatterbox\n  or a custom endpoint when you create an entry. The preset fills in the URL, the models and\n  the voices the provider publishes, so a profile cannot be saved with a\n  combination the backend will reject.\n- **Voices from the provider**: the voice picker lists what the backend reports\n  rather than OpenAI's catalogue, both in the profile and in the Assist pipeline.\n- **Sentence streaming** for the voice assistant, off by default per profile.\n  Speech starts on the first finished sentence instead of the finished reply.\n- **Send the voice name** can be turned off per profile, for backends that reject\n  the field. It is only offered when the endpoint is not OpenAI.\n- **Loudness correction while streaming**, on by default. Correction no longer\n  forces the whole clip to be produced before playback starts.\n- **Speakers that support announcements** duck and resume the music themselves\n  instead of being paused and restored by this integration.\n- **Repairs** are raised when a voice disappears at the provider or an API key is\n  rejected, instead of every call failing with no explanation.\n- **`response_variable`** is supported on `openai_tts.say`.\n- **Stream the audio** can be turned off per profile, for a backend that answers\n  a streamed read with audio that will not decode while the same request read in\n  one go is fine.\n- **`openai_tts.set_api_key`** is an admin action that replaces the key on an\n  entry, so an automation can rotate a short lived token without anyone opening\n  the settings. The key is checked against the endpoint before it is stored.\n\n[WHATSNEW.md](WHATSNEW.md) lists every change, including the fixes.\n\n## Core Features\n\n- **Text-to-Speech** via OpenAI's Audio Speech API or any compatible backend.\n- **Provider presets** for OpenAI, Mistral Voxtral, Groq, Lemonfox, Kokoro-FastAPI,\n  Chatterbox and a catch-all custom entry. The preset fills in the endpoint and the\n  models, and hides the settings a backend rejects, so a profile cannot be saved\n  with a combination that will fail at the first call.\n- **Multiple TTS agents** under one or more OpenAI accounts. Each agent has its own voice, model, speed, audio format and audio-processing settings.\n- **Models**: `tts-1`, `tts-1-hd`, `gpt-4o-mini-tts` (with custom speaking-style instructions).\n- **Voices**: full OpenAI catalog including `alloy`, `ash`, `coral`, `echo`, `fable`, `nova`, `onyx`, `sage`, `shimmer`, plus the `gpt-4o-mini-tts`-only voices `ballad`, `cedar`, `marin`, `verse`.\n- **Audio formats**: `mp3`, `opus`, `aac`, `flac`, `wav`, `pcm` per profile.\n- **Streaming playback** with HA 2025.7+ for low first-audio","github_created_at":"2023-11-10T06:31:29+00:00","created_at":"2026-07-15T11:00:44.469904+00:00","updated_at":"2026-09-20T05:05:55.730155+00:00","categories":[{"slug":"speech-audio","name":"Speech & Audio","url":"https://www.graphcanon.com/categories/speech-audio","markdown_url":"https://www.graphcanon.com/categories/speech-audio.md","api_url":"https://www.graphcanon.com/api/graphcanon/categories/speech-audio"}],"tags":[{"slug":"ai","name":"ai"},{"slug":"chime","name":"chime"},{"slug":"ha","name":"ha"},{"slug":"hacs","name":"hacs"},{"slug":"home-assistant","name":"home-assistant"},{"slug":"homeassistant","name":"homeassistant"},{"slug":"llm","name":"llm"},{"slug":"local-llm","name":"local-llm"}],"trust":{"provenance":{"is_fork":false,"github_id":716917337,"owner_type":"User","methodology":"github_public_v1","parent_repo":null,"near_duplicate_slugs":[]},"computed_at":"2026-09-20T05:05:53.236Z","maintenance":{"label":"Very active","score":96,"methodology":"github_public_v1","releases_90d":8,"days_since_push":0,"last_release_at":"2026-09-07T10:21:43Z","stars_delta_30d":11,"open_issues_delta_30d":3},"security_summary":{"status":"no_lockfile","scanner":null,"low_count":0,"high_count":0,"last_scan_at":"2026-07-15T11:00:45.738Z","medium_count":0,"scan_profile":"none","critical_count":0}},"capability_facts":{"scan":{"source":"repo_scan","observed_at":"2026-09-20T05:05:54.266Z"},"languages":{"value":["python"],"source":"github.language+pyproject.toml","observed_at":"2026-09-20T05:05:54.266Z"},"license_spdx":{"value":"GPL-3.0","source":"github.license","observed_at":"2026-09-20T05:05:54.266Z"}},"decision_facts":{"hosting":null,"pricing":null,"requirements":null,"constraints":null,"when_to_use":["When you require integration with the Home Assistant ecosystem that includes high-quality text-to-speech from OpenAI","If you need a self-hosted solution with customization options such as audio normalizing or adding chime alerts"],"when_not_to_use":["Avoid if your deployment environment does not support Python, essential for this TTS component's operation","Not fit when looking for pre-built integrations without Home Assistant, since it specifically caters to the Home Assistant platform"],"source":"enrich:decision_facts","observed_at":"2026-07-17T13:46:10.955Z"},"constraint_facets":null,"decision_summary":[{"label":"Adopt for","value":"A Python-based Home Assistant TTS component that leverages the OpenAI speech engine with extras like chimes and normalization"}]}}