Productivity
sag avatar

sag

ElevenLabs text-to-speech engine for OpenClaw with macOS-style CLI and voice synthesis control.

Introduction

Sag is a high-performance text-to-speech (TTS) integration for the OpenClaw AI assistant, leveraging ElevenLabs to provide realistic and expressive synthetic voices. Designed with a familiar macOS 'say' command UX, it allows users to convert text responses into high-quality audio files directly from the command line. This skill is essential for users who prefer auditory interactions or need to generate voice-over content for automated chat replies. It supports multiple ElevenLabs models, including expressive variants for conversational agents and high-speed options for low-latency playback.

  • Full ElevenLabs API integration supporting v2, v2.5, and v3 model architectures.

  • Supports expressive audio tags such as [whispers], [shouts], [sings], and [laughs] for natural-sounding delivery.

  • Built-in support for voice parameter customization including voice IDs and normalized language biasing.

  • Integrated pipeline for generating voice-based chat responses; outputs include file paths suitable for the OpenClaw MEDIA protocol.

  • Simple command-line interface for listing voices, testing TTS, and handling pronunciation through respelling and normalization.

  • Ensure you have a valid ElevenLabs API key set in your environment variables (ELEVENLABS_API_KEY or SAG_API_KEY).

  • Use the [pause], [short pause], or [long pause] tags for pacing, as v3 models do not support standard SSML break tags.

  • For chat integration, generate audio files to a temp directory and use the MEDIA:/path/to/file.mp3 syntax to render output in your assistant's client.

  • When defining specific personalities like a 'crazy scientist,' combine emotional tags with variable intensity settings to maximize the effect.

  • Use the --normalize auto flag to handle numbers, units, and URLs automatically, but switch to off if it interferes with specific proper names.

Repository Stats

Stars
366,063
Forks
75,055
Open Issues
6,978
Language
TypeScript
Default Branch
main
Sync Status
Idle
Last Synced
Apr 29, 2026, 07:48 AM
View on GitHub