Skip to content

refactor(tts): replace NeuTTS optional skill with built-in provider + setup flow#1664

Merged
teknium1 merged 1 commit intomainfrom
hermes/hermes-923bc090
Mar 17, 2026
Merged

refactor(tts): replace NeuTTS optional skill with built-in provider + setup flow#1664
teknium1 merged 1 commit intomainfrom
hermes/hermes-923bc090

Conversation

@teknium1
Copy link
Copy Markdown
Contributor

Summary

Follow-up to PR #1657. Replaces the optional NeuTTS skill with a proper built-in provider integration and setup wizard flow.

What changed

Removed: The entire optional-skills/mlops/models/neutts/ directory — the 400-line SKILL.md, CLI scaffold (neutts_cli), and bootstrap helper. All redundant now that NeuTTS is a built-in TTS provider.

Added: Setup wizard flow (hermes setup tts)

When selecting NeuTTS as their TTS provider, users get an interactive install:

Select TTS provider:
  1. Edge TTS (free, cloud-based, no setup needed)
  2. ElevenLabs (premium quality, needs API key)
  3. OpenAI TTS (good quality, needs API key)
  4. NeuTTS (local on-device, free, ~300MB model download)
  5. Keep current (Edge TTS)

> 4

NeuTTS requires:
  • Python package: neutts (~50MB install + ~300MB model on first use)
  • System package: espeak-ng (phonemizer)

Install NeuTTS dependencies now? [Y/n] y
→ Installing espeak-ng...
→ Installing neutts[all]...
✓ NeuTTS ready
  • TTS selection runs at end of hermes setup (model section)
  • Also available standalone: hermes setup tts
  • ElevenLabs/OpenAI paths prompt for API keys
  • Tool status display shows NeuTTS install state

Refactored: Synthesis backend

  • New tools/neutts_synth.py — standalone helper that calls the neutts Python API directly in a subprocess (keeps ~500MB model out of the agent process)
  • No neutts_cli dependency — just needs pip install neutts[all]
  • Config-driven: tts.neutts.ref_audio, tts.neutts.ref_text, tts.neutts.model, tts.neutts.device
  • Bundled default voice sample (tools/neutts_samples/jo.wav + jo.txt)
… setup flow

Remove the optional skill (redundant now that NeuTTS is a built-in TTS
provider). Replace neutts_cli dependency with a standalone synthesis
helper (tools/neutts_synth.py) that calls the neutts Python API directly
in a subprocess.

Add TTS provider selection to hermes setup:
- 'hermes setup' now prompts for TTS provider after model selection
- 'hermes setup tts' available as standalone section
- Selecting NeuTTS checks for deps and offers to install:
  espeak-ng (system) + neutts[all] (pip)
- ElevenLabs/OpenAI selections prompt for API keys
- Tool status display shows NeuTTS install state

Changes:
- Remove optional-skills/mlops/models/neutts/ (skill + CLI scaffold)
- Add tools/neutts_synth.py (standalone synthesis subprocess helper)
- Move jo.wav/jo.txt to tools/neutts_samples/ (bundled default voice)
- Refactor _generate_neutts() — uses neutts API via subprocess, no
  neutts_cli dependency, config-driven ref_audio/ref_text/model/device
- Add TTS setup to hermes_cli/setup.py (SETUP_SECTIONS, tool status)
- Update config.py defaults (ref_audio, ref_text, model, device)
@teknium1 teknium1 merged commit d50e071 into main Mar 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant