{"record":{"id":"383c4590973ec8af","repo":"home-assistant/core","slug":"tts-engine-pipeline-tts-engine-not-found","errorCode":null,"errorMessage":"TTS engine {pipeline.tts_engine} not found","messagePattern":"TTS engine (.+?) not found","errorType":"exception","errorClass":"HomeAssistantError","httpStatus":null,"severity":"error","filePath":"homeassistant/components/assist_satellite/entity.py","lineNumber":664,"sourceCode":"        message: str,\n        media_id: str | None,\n        preannounce_media_id: str | None = None,\n    ) -> AssistSatelliteAnnouncement:\n        \"\"\"Resolve the media ID.\"\"\"\n        media_id_source: Literal[\"url\", \"media_id\", \"tts\"] | None = None\n        tts_token: str | None = None\n\n        if media_id:\n            original_media_id = media_id\n        else:\n            media_id_source = \"tts\"\n            # Synthesize audio and get URL\n            pipeline_id = self._resolve_pipeline()\n            pipeline = async_get_pipeline(self.hass, pipeline_id)\n\n            engine = tts.async_resolve_engine(self.hass, pipeline.tts_engine)\n            if engine is None:\n                raise HomeAssistantError(f\"TTS engine {pipeline.tts_engine} not found\")\n\n            tts_options: dict[str, Any] = {}\n            if pipeline.tts_voice is not None:\n                tts_options[tts.ATTR_VOICE] = pipeline.tts_voice\n\n            if self.tts_options is not None:\n                tts_options.update(self.tts_options)\n\n            stream = tts.async_create_stream(\n                self.hass,\n                engine=engine,\n                language=pipeline.tts_language,\n                options=tts_options,\n            )\n            stream.async_set_message(message)\n\n            tts_token = stream.token\n            media_id = stream.url","sourceCodeStart":646,"sourceCodeEnd":682,"githubUrl":"https://github.com/home-assistant/core/blob/58a3fdb3ea0538617f0a07efcfba6294de64fd59/homeassistant/components/assist_satellite/entity.py#L646-L682","documentation":"Raised in _resolve_announcement_media_id when no media_id was supplied, so text must be synthesized, but tts.async_resolve_engine cannot find the pipeline's configured tts_engine. It means the TTS platform named by the pipeline is not loaded or no longer exists.","triggerScenarios":"Pipeline specifies tts_engine (e.g. 'tts.piper' or a cloud voice) that is not among loaded tts platforms; the TTS integration providing the engine was removed or failed setup; entity options reference a stale engine after an integration rename.","commonSituations":"Piper/Google Translate/Nabu Casa TTS integration uninstalled while pipelines still reference it; config entry for the TTS provider in a failed state; typo in the pipeline's tts_engine option.","solutions":["Reinstall/reload the integration that provides the missing TTS engine and confirm it appears in Settings > Devices & Services","Edit the pipeline (Settings > Voice assistants) and select an available TTS engine, or clear the field to use the default","Verify with hass.services.async_services_for_domain or the tts platform list that the engine name matches exactly","Pass media_id directly (pre-synthesized audio) if TTS is unavailable"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"from homeassistant.components import tts\nengine = tts.async_resolve_engine(hass, pipeline.tts_engine)\nif engine is None:\n    raise TTSMissing(f\"Pipeline TTS engine {pipeline.tts_engine} unavailable\")","typeGuard":null,"tryCatchPattern":"try:\n    await entity.async_internal_announce(message, ...)\nexcept HomeAssistantError as err:\n    if \"TTS engine\" in str(err) and \"not found\" in str(err):\n        # fall back to default engine or skip preannouncement\n        ...","preventionTips":["Validate tts.async_resolve_engine before announcing","Keep TTS provider integrations installed and healthy","After removing a TTS integration, update every pipeline that references its engines"],"tags":["assist-satellite","tts","pipeline","integration-setup"],"backgroundTag":null,"analyzedSha":"58a3fdb3ea0538617f0a07efcfba6294de64fd59","analyzedAt":"2026-08-14T20:54:38.818Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}