Fish Audio S2 Pro / Drama 3

This first-party Soniqo page documents Fish Audio S2 Pro from the local speech-swift / speech-core implementation. Hugging Face bundles are linked below after the integration notes.

Internal Page First

Landing cards and docs menus now point here first; source model and bundle links remain available from this page.

At a Glance

ModelFish Audio S2 Pro
RoleExperimental multilingual TTS with raw-reference cloning and style markers
BackendMLX fp16
Output44.1 kHz mono PCM
LanguagesMultilingual
LicenseResearch / non-commercial bundle; obtain Fish Audio license for commercial exposure
StatusProgrammatic runtime; CLI integration is still pending
SourceFish Audio S2 Pro
Swift productFishAudioTTS
CLI / runtimeProgrammatic runtime today; planned speech speak --engine fish-audio

Use

The snippet below mirrors the current speech-swift API or command exposed by the repo.

import FishAudioTTS

let model = try await FishAudioTTSModel.fromPretrained()
let pcm = try await model.generate(
    text: "आज मैं बहुत खुश हूँ। [excited]",
    referenceAudioURL: URL(fileURLWithPath: "reference.wav"),
    referenceText: "नमस्ते, यह संदर्भ आवाज है।"
)

Model Links

Implementation Notes

Fish Audio Drama 3

Experimental native MLX support for Drama 3 is available through FishAudioDrama3Model. A 35B hybrid-attention MoE backbone, temporal audio tower and Fish DAC codec produce 44.1 kHz mono audio. The 4-bit checkpoint passed waveform and independent ASR checks for text-only generation, reference cloning and CLI output on Apple M5 Pro. 8-bit and BF16 remain unvalidated.

The default balanced mode trims idle MLX buffers above 512 MiB at stage boundaries. The shared model-lifetime cache cap also applies, preserving lower caller budgets; neither control limits total process memory. --fish-drama3-memory-mode unrestricted or memoryOptions: .unrestricted loads weights eagerly and skips stage trimming, while retaining the lifetime cap.

Text-only generation defers 794.4 MiB of reference encoder weights. The first reference encoding loads and retains them, so keep codec.safetensors available until then. Precomputed reference codes do not need the encoder.

Provide complete input text. Voice cloning requires a reference clip and its exact transcript. Speaker tags 0–15 and inline emotions are supported. PCM streaming is available through generateStreaming, generateStream and --stream. The default chunk contains 3 codec frames, about 139 ms of audio. Automatic long-text chunking and streamed text input remain unavailable. Reaching the frame limit throws an error.

speech speak "Hello from Drama 3." --engine fish-drama3 --fish-drama3-bundle-dir /path/to/bundle -o hello.wav
speech speak "Hello from Drama 3." --engine fish-drama3 --stream --fish-drama3-chunk-frames 3 -o streamed.wav
speech speak "Hello in the reference voice." --engine fish-drama3 --voice-sample reference.wav --fish-drama3-reference-text "The exact reference transcript." --seed 42 -o cloned.wav
import FishAudioTTS
let model = try await FishAudioDrama3Model.fromBundle(bundleURL, memoryOptions: .balanced)
let pcm = try await model.generate(text: "Hello from Drama 3.", options: .init(seed: 42))
try await model.generateStreaming(text: "Hello from Drama 3.", options: .init(seed: 42, streamingChunkFrames: 3)) { chunk in
    print(chunk.frameIndex, chunk.samples.count, chunk.isFinal)
}
OptionDefault
--fish-drama3-model-idmlx-community/fish-audio-drama-3-4bit
--fish-drama3-bundle-dir—
--fish-drama3-reference-text—
--fish-drama3-max-frames2048
--fish-drama3-temperature1
--fish-drama3-top-k30
--fish-drama3-top-p0.9
--voice-sample—
--seed0
--streamfalse
--fish-drama3-chunk-frames3
--fish-drama3-memory-modebalanced

Built with Fish Audio. Bundles retain the Community License and NOTICE.

4-bit benchmark

ModeFirst PCM, msWarm synthesis, sAudio, sRTFPeak RSS, GiBPeak physical footprint, GiB
Text-only / Buffered—2.3063.4830.66214.45724.220
Reference cloning / Buffered—2.6813.2040.83715.06424.789
Text-only / Streaming275.32.5293.4830.72615.57122.321
Reference cloning / Streaming730.22.8603.2040.89314.67623.885

Apple M5 Pro, 48 GiB, release build, 2026-10-17. Median of three warm calls, measuring complete waveform generation. Model loading and WAV file I/O are excluded; cloning includes reference encoding on every call. RTF = synthesis time / audio duration. Independent ASR: 16/16 clips, zero word errors. Use physical footprint for unified-memory sizing. First PCM is the first nonempty streaming callback; buffered rows have no chunk callback. The default chunk contains 139.3 ms of audio. Audible playback onset was not measured.