Skip to content

feat: add NeuTTS optional skill + local TTS provider backend#1657

Merged
teknium1 merged 2 commits into
mainfrom
hermes/hermes-923bc090
Mar 17, 2026
Merged

feat: add NeuTTS optional skill + local TTS provider backend#1657
teknium1 merged 2 commits into
mainfrom
hermes/hermes-923bc090

Conversation

@teknium1

Copy link
Copy Markdown
Contributor

Summary

Salvaged from PR #1134 by @unmodeled-tyler, with TTS provider integration added per Teknium's direction.

Part 1: Optional skill (from PR #1134)

  • optional-skills/mlops/models/neutts/ — full NeuTTS skill with CLI scaffold, bootstrap helper, sample voice profile, and collaborative voice design workflow
  • tools/skills_hub.py — binary asset support so .wav files survive skill installation
  • tests/tools/test_skills_hub.py — regression tests for binary asset handling

Part 2: TTS provider backend (new)

NeuTTS is now a first-class TTS provider alongside Edge, ElevenLabs, and OpenAI:

  • Explicit use: Set tts.provider: "neutts" in config.yaml
  • Automatic fallback: When Edge TTS is unavailable (not installed) and neutts_cli is present, NeuTTS kicks in automatically instead of failing
  • check_tts_requirements() includes NeuTTS in availability checks, so the TTS tool registers as available when neutts_cli is installed even if edge-tts isn't

Config:

tts:
  provider: "neutts"   # or leave as "edge" for auto-fallback
  neutts:
    voice: ""          # NeuTTS voice profile name (empty = default)

NeuTTS outputs WAV; ffmpeg converts to Opus for Telegram voice bubbles (same pattern as Edge TTS).

Files changed

  • tools/tts_tool.py_generate_neutts(), _check_neutts_available(), provider dispatch, fallback logic
  • hermes_cli/config.pytts.neutts config defaults
  • tools/skills_hub.py — binary file support (read_bytes/write_bytes)
  • tests/tools/test_skills_hub.py — binary asset tests
  • optional-skills/mlops/models/neutts/ — full skill + CLI scaffold

unmodeled-tyler and others added 2 commits March 17, 2026 02:10
Add NeuTTS optional skill with CLI scaffold, bootstrap helper, and
sample voice profile. Also fixes skills_hub.py to handle binary
assets (WAV files) during skill installation.

Changes:
- optional-skills/mlops/models/neutts/ — skill + CLI scaffold
- tools/skills_hub.py — binary asset support (read_bytes, write_bytes)
- tests/tools/test_skills_hub.py — regression tests for binary assets
Add NeuTTS as a fourth TTS provider option alongside Edge, ElevenLabs,
and OpenAI. NeuTTS runs fully on-device via neutts_cli — no API key
needed.

Provider behavior:
- Explicit: set tts.provider to 'neutts' in config.yaml
- Fallback: when Edge TTS is unavailable and neutts_cli is installed,
  automatically falls back to NeuTTS instead of failing
- check_tts_requirements() now includes NeuTTS in availability checks

NeuTTS outputs WAV natively. For Telegram voice bubbles, ffmpeg
converts to Opus (same pattern as Edge TTS).

Changes:
- tools/tts_tool.py — _generate_neutts(), _check_neutts_available(),
  provider dispatch, fallback logic, Opus conversion
- hermes_cli/config.py — tts.neutts config defaults
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants