FireRedTTS3-Base for SGLang Omni

We provide our FireRedTTS3-Base checkpoint for inference with SGLang Omni. It supports zero-shot voice cloning from one reference recording and its transcript. Audio output is 24 kHz mono, with WAV responses and streaming PCM available through the /v1/audio/speech API.

Our model code and original checkpoint release:

This card documents the SGLang Omni loading and serving workflow.

Install SGLang Omni

Use Linux with an NVIDIA CUDA GPU and Python 3.12. Follow the SGLang Omni installation guide for the CUDA, UCX, and FlashAttention prerequisites, then install from source:

git clone https://github.com/sgl-project/sglang-omni.git
cd sglang-omni
pip install uv
uv venv .venv -p 3.12
source .venv/bin/activate
uv pip install --prerelease=allow -e '.[firered-tts3]'

Use a revision containing the FireRedTTS3 integration. Before that integration is merged, check out the corresponding PR revision before installing; an older PyPI release or checkout does not provide this model. Run the following commands from the sglang-omni repository root.

Download this checkpoint

For PR testing, use our temporary checkpoint at CKermit/FireRedTTS3-Base. After this PR, we plan to publish the official checkpoint at FireRedTeam/FireRedTTS3-Base.

hf download CKermit/FireRedTTS3-Base \
  --local-dir ./models/FireRedTTS3-Base

Download the complete repository, including configuration, tokenizer, and redae/ assets, plus campp/. Loading only the root model.safetensors file is insufficient. If you already have the complete checkpoint locally, use that directory directly.

Start the server

CUDA_VISIBLE_DEVICES=0 sgl-omni serve \
  --model-path ./models/FireRedTTS3-Base \
  --config examples/configs/firered_tts3_base.yaml \
  --allowed-local-media-path "$PWD/docs/_static/audio" \
  --port 8000

Wait for /health to return HTTP 200 before sending requests. Initial model loading, compilation, and warmup can take several minutes.

The reference clips below are included in the SGLang Omni repository. Local paths are resolved on the server, relative to its working directory. For your own clips, allow their directory with --allowed-local-media-path and supply the matching transcript for cloning.

Voice cloning

Provide exactly one reference recording and its actual transcript. The example uses the repository's ref_voice.wav:

curl --fail-with-body -X POST http://localhost:8000/v1/audio/speech \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "FireRedTTS3-Base",
    "input": "Hello, welcome to SGLang Omni.",
    "language": "English",
    "references": [{
      "audio_path": "docs/_static/audio/ref_voice.wav",
      "text": "It was the night before my birthday. Hooray! Itโ€™s almost here! It may not be a holiday, but itโ€™s the best day of the year."
    }],
    "seed": 42
  }' --output clone.wav

Streaming

To stream audio, add "stream": true and "response_format": "pcm" to the request and use curl -N. The response contains raw 24 kHz, signed 16-bit little-endian, mono PCM. Save it as output.pcm and convert it with:

ffmpeg -f s16le -ar 24000 -ac 1 -i output.pcm output.wav

The server also exposes /v1/audio/speech/stream over WebSocket. See the WebSocket protocol for session.config, input.text, input.commit, and input.done events.

A complete streaming request:

curl --fail-with-body -N -X POST http://localhost:8000/v1/audio/speech \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "FireRedTTS3-Base",
    "input": "Hello, welcome to SGLang Omni.",
    "language": "English",
    "ref_audio": "docs/_static/audio/ref_voice.wav",
    "ref_text": "It was the night before my birthday. Hooray! Itโ€™s almost here! It may not be a holiday, but itโ€™s the best day of the year.",
    "stream": true,
    "response_format": "pcm",
    "seed": 42
  }' --output output.pcm

Offline Python SDK

Save this as offline_tts.py in the SGLang Omni repository root and run CUDA_VISIBLE_DEVICES=0 python offline_tts.py. This starts the pipeline locally without an HTTP server.

import asyncio
import multiprocessing as mp
from pathlib import Path

from sglang_omni.client import Client, GenerateRequest
from sglang_omni.models.firered_tts3.config import FireRedTTS3PipelineConfig
from sglang_omni.pipeline.mp_runner import MultiProcessPipelineRunner


async def main() -> None:
    config = FireRedTTS3PipelineConfig(
        model_path="./models/FireRedTTS3-Base",
    )
    runner = MultiProcessPipelineRunner(config)
    await runner.start(timeout=600)
    try:
        client = Client(runner.coordinator)
        result = await client.speech(
            GenerateRequest(
                prompt={
                    "input": "Hello, welcome to SGLang Omni.",
                    "language": "English",
                    "references": [{
                        "audio_path": "docs/_static/audio/ref_voice.wav",
                        "text": "It was the night before my birthday. Hooray! Itโ€™s almost here! It may not be a holiday, but itโ€™s the best day of the year.",
                    }],
                    "seed": 42,
                },
                stream=False,
            ),
            request_id="demo-1",
        )
        Path("offline.wav").write_bytes(result.audio_bytes)
    finally:
        await runner.stop()


if __name__ == "__main__":
    mp.set_start_method("spawn", force=True)
    asyncio.run(main())

Serving notes

  • The current deployment supports a single GPU (tp_size=1).
  • HTTP input is limited to 400 characters.
  • Use an explicit language: Chinese (default), English, Japanese, Korean, German, French, Russian, Portuguese, Spanish, or Italian. Automatic language detection (Auto) is unsupported. These are the stock serving API's accepted language values; FireRedTTS3 supports additional languages and dialects through our standalone inference pipeline.
  • Submit spoken-form text when normalization is needed. The FastText and LLM text-normalization setup in our standalone pipeline is not used in this quick start.
  • Put flow-solver settings under stage_params.talker, for example {"n_timesteps": 10, "inference_cfg": 2.0, "max_patches": 200}. Unknown top-level fields are not forwarded as model settings.
  • seed controls the per-request flow sampler. Different precisions, hardware, or batching schedules can produce different results with the same seed.
  • For our published model-quality results, see the FireRedTTS3 model card. SGLang Omni runtime accuracy and performance are evaluated separately.
  • The audio phase generates continuous latents. Token-sampling settings such as temperature, top_p, and top_k do not control its audio output.

See the FireRedTTS3 cookbook for the full request parameters and deployment configuration.

Usage Disclaimer

  • The project incorporates zero-shot voice cloning functionality; Please note that this capability is intended solely for academic research purposes.
  • DO NOT use this model for ANY illegal activitiesโ—๏ธโ—๏ธ
  • The developers assume no liability for any misuse of this model.
  • If you identify any instances of abuse, misuse, or fraudulent activities related to this project, please report them to our team immediately.

Citation

@article{fireredtts3,
  title   = {FireRedTTS3: Unified Speech Generation and Editing with Semantically Enriched Speech Representations},
  author  = {FireRed Team},
  journal = {arXiv preprint},
  year    = {2026},
}

Acknowledgements

  • Qwen3 and Qwen2-Audio for the language model and audio understanding foundations
  • DiTAR for the patch-level diffusion autoregressive formulation
  • X-Codec for the discriminator design used in RedAE training
  • CAM++ for speaker embedding extraction
  • fastText for automatic language identification
  • WeTextProcessing (wetext) for the Chinese / English text normalization front-end

License

FireRedTTS3 is released under Apache-2.0. See our original model card for usage guidance and model evaluation details.

Downloads last month
42
Safetensors
Model size
2B params
Tensor type
F32
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for CKermit/FireRedTTS3-Base

Finetuned
(6)
this model