Thanks to visit codestin.com
Credit goes to github.com

Skip to content

markuryy/orpheus-cpp

 
 

Repository files navigation

Orpheus CPP

PyPI - Version PyPI - Python Version


Installation

pip install orpheus-cpp

You also need to install the llama-cpp-python package separately. This is because llama-cpp-python does not ship pre-built wheels on PyPi.

Don't worry, you can just run one of the following commands:

Linux/Windows

pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu

MacOS with Apple Silicon

pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/metal

Usage

OpenAI-Compatible API Server

Run the standalone API server for OpenAI-compatible text-to-speech:

orpheus-api

Or using uv:

uv run orpheus-api

The server will start on http://localhost:8992 and provides OpenAI-compatible endpoints.

Using with OpenAI Client

from openai import OpenAI

# Point to your local Orpheus server
client = OpenAI(
    api_key="dummy-key",  # API key is ignored for local server
    base_url="http://localhost:8992/v1"
)

# Generate speech
response = client.audio.speech.create(
    model="orpheus-tts",
    voice="tara",  # Use Orpheus voice names
    input="Hello! This is Orpheus TTS speaking.",
    response_format="wav"
)

# Save audio file
with open("speech.wav", "wb") as f:
    f.write(response.content)

Available Voices

Orpheus supports multiple voices across different languages:

  • English: tara, jess, leah, leo, dan, mia, zac, zoe
  • Spanish: javi, sergio, maria
  • French: pierre, amelie, marie
  • German: jana, thomas, max
  • Italian: pietro, giulia, carlo
  • Chinese: 长乐, 白芷
  • Korean: 유나, 준서
  • Hindi: ऋतिका

API Endpoints

  • POST /v1/audio/speech - Generate speech (OpenAI compatible)
  • POST /v1/audio/speech/stream - Stream speech generation
  • GET /v1/voices - List available voices
  • GET /v1/models - List available models
  • GET /health - Health check

Async FastRTC Demo

After installing orpheus-cpp, install fastrtc and run the following command:

python -m orpheus_cpp

Then go to http://localhost:7860 and you should see the demo.

2025-03-26_10-37-56.mp4

Sync TTS

from orpheus_cpp import OrpheusCpp
from scipy.io.wavfile import write


orpheus = OrpheusCpp()

text = "I really hope the project deadline doesn't get moved up again."

# output is a tuple of (sample_rate (24_000), samples (numpy int16 array))
sample_rate, samples = orpheus.tts(text, options={"voice_id": "tara"})
write("output.wav", sample_rate, samples.squeeze())

Streaming Sync

for sample_rate, samples in orpheus.stream_tts_sync(text, options={"voice_id": "tara"}):
    write("output.wav", sample_rate, samples.squeeze())

Streaming Async

async for sample_rate, samples in orpheus.stream_tts(text, options={"voice_id": "tara"}):
    write("output.wav", sample_rate, samples.squeeze())

Tips

By default, we wait until 1.5 seconds of audio is generated before yielding the first chunk. This is to ensure smooth audio streaming at the cost of a longer time to first audio. Depending on your hardware, you can try to reduce the pre_buffer_size to get a faster time to first chunk.

async for sample_rate, samples in orpheus.stream_tts(text, options={"voice_id": "tara", "pre_buffer_size": 0.5}):
    write("output.wav", sample_rate, samples.squeeze())

License

orpheus-cpp is distributed under the terms of the MIT license.

About

Fast Streaming TTS with Orpheus + WebRTC (with FastRTC)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%