hermes - ✅(Solved) Fix [Feature]: Add Murf AI as a TTS provider to Hermes Agent [1 pull requests, 1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
NousResearch/hermes-agent#23230Fetched 2026-05-11 03:30:25
View on GitHub
Comments
0
Participants
1
Timeline
4
Reactions
0
Participants
Timeline (top)
labeled ×3cross-referenced ×1

Fix Action

Fixed

PR fix notes

PR #23236: feat(tts) : Add Murf AI as a TTS provider to Hermes Agent

Description (problem / solution / changelog)

What does this PR do?

Adds Murf AI as a first-class TTS provider in Hermes, including provider wiring, setup UX, and docs.
It supports both Murf models:

  • GEN2 for high-quality REST generation
  • FALCON for low-latency streaming

The integration follows existing Hermes TTS patterns (provider dispatch, config/env handling, tool configuration, and docs), and uses the official Murf Python SDK.

Related Issue

Fixes #23230

Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ New feature (non-breaking change that adds functionality)
  • 🔒 Security fix
  • 📝 Documentation update
  • ✅ Tests (adding or improving test coverage)
  • ♻️ Refactor (no behavior change)
  • 🎯 New skill (bundled or hub)

Changes Made

  • Added Murf provider integration in tools/tts_tool.py
    • Added Murf SDK lazy import and provider registration
    • Added Murf config defaults and provider max text length handling
    • Added GEN2 (generate) and FALCON (stream) generation paths
    • Added Murf availability checks in requirement detection
    • Added Telegram/OGG conversion compatibility path where needed
  • Added Murf config/env support in hermes_cli/config.py
    • Added MURF_API_KEY and MURF_REGION
    • Added tts.murf config block (model, voice_id, locale, region, style, speed/rate, pitch, output format)
  • Added Murf setup flow in hermes_cli/setup.py
    • Added Murf option in hermes setup tts
    • Prompt flow for Murf API key + Murf-specific setup values
    • Model selection between GEN2/FALCON
    • Region selection based on Murf SDK enum values
    • Linked Murf voice/style docs in setup prompts
  • Added Murf provider entry in hermes_cli/tools_config.py
  • Updated docs:
    • website/docs/user-guide/features/tts.md
    • website/docs/user-guide/features/overview.md
  • Updated dependency placement in pyproject.toml
    • Murf moved to optional premium TTS dependency group (not core dependency)

How to Test

  1. Install with premium TTS extras and set key:
    • pip install -e ".[tts-premium]"
    • export MURF_API_KEY=...
  2. Run setup and choose Murf:
    • hermes setup tts
    • Select provider Murf TTS, choose model (GEN2/FALCON), voice/style/region
  3. Validate synthesis:
    • Run speak "Hello from Murf" (or use Hermes TTS flow) and verify audio output is generated
    • Verify both GEN2 and FALCON paths work with configured settings

Checklist

Code

  • I've read the Contributing Guide
  • My commit messages follow Conventional Commits (fix(scope):, feat(scope):, etc.)
  • I searched for existing PRs to make sure this isn't a duplicate
  • My PR contains only changes related to this fix/feature (no unrelated commits)
  • I've run pytest tests/ -q and all tests pass
  • I've added tests for my changes (required for bug fixes, strongly encouraged for features)
  • I've tested on my platform: Linux (Amazon Linux, kernel 6.1)

Documentation & Housekeeping

  • I've updated relevant documentation (README, docs/, docstrings) — or N/A
  • I've updated cli-config.yaml.example if I added/changed config keys — or N/A
  • I've updated CONTRIBUTING.md or AGENTS.md if I changed architecture or workflows — or N/A
  • I've considered cross-platform impact (Windows, macOS) per the compatibility guide — or N/A
  • I've updated tool descriptions/schemas if I changed tool behavior — or N/A

Screenshots / Logs

Here's the asciinema demo setup with Murf AI api asciicast

Changed files

  • hermes_cli/config.py (modified, +26/-2)
  • hermes_cli/setup.py (modified, +173/-2)
  • hermes_cli/tools_config.py (modified, +9/-0)
  • pyproject.toml (modified, +4/-1)
  • tools/tts_tool.py (modified, +128/-1)
  • website/docs/user-guide/features/overview.md (modified, +1/-1)
  • website/docs/user-guide/features/tts.md (modified, +14/-3)

Code Example

POST https://api.murf.ai/v1/speech/stream        # Falcon — streaming
POST https://api.murf.ai/v1/speech/generate      # Gen2 — standard
Authorization: api-key $MURF_API_KEY
Content-Type: application/json

---

tts:
  provider: "murf"
  murf:
    model: "GEN2"              # or "GEN_FALCON" for real-time streaming
    voice_id: "en-US-natalie"
    style: "Conversational"
    speed: 0                   # -50 to 50, 0 = default
    pitch: 0                   # -50 to 50, 0 = default
    output_format: "MP3"       # MP3 or WAV

---
RAW_BUFFERClick to expand / collapse

Problem or Use Case

Hermes Agent currently supports several TTS providers, but not Murf AI. With 150+ natural-sounding voices across 35 languages and 20+ speaking styles, adding Murf would make Hermes significantly more versatile for both real-time voice agents and offline content generation , especially for multilingual workflows where Murf's single-voice multilingual switching is a clear differentiator.

Docs: https://murf.ai/api/docs/introduction/overview

Murf offers two distinct models suited for different use cases:

  • Falcon : an ultra-low-latency streaming model (time-to-first-audio under 130ms) optimised for real-time conversational agents, with WebSocket support.
  • Gen2 : a studio-quality synthesis model with rich customisation (pitch, speed, emphasis, pauses), ideal for narration, voiceovers, and multimedia workflows.

Proposed Solution

Add a murf provider in tools/tts_tool.py that:

  • Reads MURF_API_KEY from the environment
  • Supports both Falcon (streaming/WebSocket) and Gen2 (standard REST) models
  • Calls the appropriate Murf endpoint based on the configured model
  • Returns audio in the configured output format (MP3/WAV)

API Details

POST https://api.murf.ai/v1/speech/stream        # Falcon — streaming
POST https://api.murf.ai/v1/speech/generate      # Gen2 — standard
Authorization: api-key $MURF_API_KEY
Content-Type: application/json

Config example (.hermes/config.yaml):

tts:
  provider: "murf"
  murf:
    model: "GEN2"              # or "GEN_FALCON" for real-time streaming
    voice_id: "en-US-natalie"
    style: "Conversational"
    speed: 0                   # -50 to 50, 0 = default
    pitch: 0                   # -50 to 50, 0 = default
    output_format: "MP3"       # MP3 or WAV

For the Falcon streaming path, the implementation should use Murf's WebSocket or chunked-HTTP streaming endpoint and pipe audio chunks to the player in real time - consistent with how other streaming TTS providers are handled.

Alternatives Considered

No response

Feature Type

Configuration option

Scope

None

Contribution

  • I'd like to implement this myself and submit a PR

Debug Report (optional)

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING