Skip to content
Merged
Show file tree
Hide file tree
Changes from 67 commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
487345c
feat(ming-tts): add dense omni pipeline
akshatvishu Apr 18, 2026
9cda910
fix(ming-tts): serialize stage0 stop reason as tensor
akshatvishu Apr 18, 2026
9add4ef
docs: Update Ming TTS example
akshatvishu Apr 18, 2026
1bee58d
Refactor Ming TTS model layout
akshatvishu Apr 23, 2026
276b954
Extract shared async chunk transfer helpers
akshatvishu Apr 23, 2026
8bd43d1
Migrate Ming TTS to deploy config
akshatvishu Apr 23, 2026
ac4fe0a
Reuse shared speaker embedding loader
akshatvishu Apr 23, 2026
d1920a5
fix: resolve F821 undefined name by adding raw_request to audio chunk…
akshatvishu Apr 23, 2026
e8b97bd
fix(ming_tts): update hf_architectures to match BailingMMNative archi…
akshatvishu Apr 23, 2026
6b8f2c3
fix(config): ensure DeployConfig.pipeline override is honored when au…
akshatvishu Apr 23, 2026
d0a51e8
fix ming_tts offline runner truncating multi-chunk audio
akshatvishu Apr 23, 2026
01055e3
docs: migrate Ming TTS docs to deploy config
akshatvishu Apr 28, 2026
12ac6a7
Merge remote-tracking branch 'origin/main' into feat/ming-omni-tts-dense
akshatvishu Apr 28, 2026
169800b
fix incorrectly importing OmniServerParams
akshatvishu Apr 28, 2026
b4187e3
tests: align Ming TTS offline coverage
akshatvishu Apr 28, 2026
5aeb88c
tests: fix Ming TTS online imports
akshatvishu Apr 28, 2026
dc2ea22
test(ming_tts): fix L3 runtime and deploy config path
akshatvishu Apr 28, 2026
a781827
fix(ming_tts): align async chunk payload with generation adapter
akshatvishu Apr 28, 2026
0508d2b
Fix Ming TTS codec frame rate derivation for online serving
akshatvishu Apr 28, 2026
80de956
Merge remote-tracking branch 'upstream/main' into feat/ming-omni-tts-…
akshatvishu May 13, 2026
88199f4
refactor(ming-tts): flatten prompt helpers and remove legacy dense
akshatvishu May 13, 2026
42bacb4
test(ming-tts): update e2e coverage for prompt helper refactor
akshatvishu May 13, 2026
ee047ce
style: reorder imports in ming_tts/qwen3 and fix noqa in test_serving…
akshatvishu May 13, 2026
55f9025
Add Ming dense prompt utilities
akshatvishu May 13, 2026
f5dd5bb
Fix Ming dense config initialization order
akshatvishu May 13, 2026
9609ece
Fix Ming dense config initialization and e2e validation
akshatvishu May 13, 2026
bf95f76
Disable prefix caching for Ming dense TTS
akshatvishu May 13, 2026
5170171
vllm_omni/entrypoints/openai/serving_speech.py
akshatvishu May 13, 2026
0b7eeca
fix(ming_tts): align llm2audio_vae signature with custom_process_inpu…
akshatvishu May 13, 2026
dc3240a
fix(ming_tts): fall back to soundfile when torchcodec unavailable
akshatvishu May 13, 2026
b72dea9
Fix Ming speaker audio fallback
akshatvishu May 13, 2026
6edc6ff
Align Ming podcast prompt formatting
akshatvishu May 13, 2026
736f7b8
ming-tts: address decode state and ISTFT reuse concerns
akshatvishu May 14, 2026
f1a8179
fix(ming_tts_llm): allow compute_logits with plain tensor during prof…
akshatvishu May 14, 2026
e0dfa42
ming-tts: align sampled multimodal stop state for logits
akshatvishu May 14, 2026
94c91a9
fix(ming-tts): skip text-mode requests in decode window validation
akshatvishu May 14, 2026
9ac9689
refactor(ming-tts): prune dense runtime dead code
akshatvishu May 26, 2026
f3f730c
Merge branch 'main' into feat/ming-omni-tts-dense
akshatvishu May 26, 2026
51d03d4
style: apply pre-commit formatting fixes
akshatvishu May 26, 2026
a10ed8f
test(ming-tts): update zh evaluation prompt in e2e tests
akshatvishu May 26, 2026
dfebed5
refactor(ming-tts): centralize stop reason metadata
akshatvishu May 26, 2026
e9519a0
test(ming-tts): keep branch tests focused on e2e
akshatvishu May 26, 2026
93bde5f
refactor(ming-tts): remove redundant validation from FlowLoss.sample
akshatvishu May 26, 2026
c924b34
refactor(ming-tts): remove dead conditioning dropout arg
akshatvishu May 26, 2026
0b2d070
refactor(ming-tts): use runner request id
akshatvishu May 27, 2026
4d923c7
examples: consolidate Ming TTS examples
akshatvishu May 27, 2026
da94f8a
Add Ming-omni-tts 0.5b Dense recipe
akshatvishu May 27, 2026
2b9d5b5
refactor: remove dead ingress and preprocessor plumbing per review
akshatvishu May 28, 2026
a8a7bf7
fix(ming-tts): prevent abandoned stream leaks and fix encoder race co…
akshatvishu May 28, 2026
6155fae
chore(ming-tts): address config, pathing and defensive review nits
akshatvishu May 28, 2026
7fc12ef
Gate Ming TTS final-stage logging
akshatvishu May 28, 2026
9862a46
Split Ming TTS prompt helpers by responsibility
akshatvishu May 28, 2026
b9ea555
Refactor Ming shared AudioVAE and CFM utilities
akshatvishu May 30, 2026
98364f1
Simplify Ming TTS documentation links
akshatvishu May 30, 2026
1eabd87
Remove redundant Ming DIT checks
akshatvishu May 30, 2026
6822cad
Fix Ming Flash Omni transformer compatibility
akshatvishu May 31, 2026
081a1e9
Fix Ming Flash Omni talker input bridge
akshatvishu May 31, 2026
149b0c0
Fix Ming Flash Omni transformer compatibility
akshatvishu May 31, 2026
55c1b12
Fix Ming Flash Omni talker input bridge
akshatvishu May 31, 2026
97109e0
Revert "Fix Ming Flash Omni talker input bridge"
akshatvishu May 31, 2026
7043a59
Revert "Fix Ming Flash Omni transformer compatibility"
akshatvishu May 31, 2026
ab9cf8f
Merge remote-tracking branch 'upstream/main'
akshatvishu May 31, 2026
d90be88
Merge remote-tracking branch 'upstream/main' into feat/ming-omni-tts-…
akshatvishu May 31, 2026
9977080
Merge remote-tracking branch 'upstream/main'
akshatvishu Jun 1, 2026
924d04a
Merge remote-tracking branch 'upstream/main'
akshatvishu Jun 1, 2026
0516572
Merge remote-tracking branch 'upstream/main'
akshatvishu Jun 2, 2026
6a9ffcb
Merge remote-tracking branch 'upstream/main' into feat/ming-omni-tts-…
akshatvishu Jun 2, 2026
463a850
Clean Ming TTS logits state handling
akshatvishu Jun 2, 2026
0b22925
test(e2e): add ROCm MI325 support to Ming Flash Omni expansion tests
akshatvishu Jun 2, 2026
b0e4fa9
Fix Ming Flash Omni language model accessor
akshatvishu Jun 2, 2026
a138a0f
fix(ming_tts): fallback to dummy next-tokens during engine profiling
akshatvishu Jun 2, 2026
6a7203c
fix: use typed payloads for Ming TTS async chunks
akshatvishu Jun 2, 2026
cae62ee
fix: support newer transformers 5.X in Ming Flash Omni talker
akshatvishu Jun 2, 2026
bccb3d0
Merge remote-tracking branch 'upstream/main'
akshatvishu Jun 2, 2026
2375df0
Add Bailing MoE input embedding delegate
akshatvishu Jun 3, 2026
4e1bfce
Merge remote-tracking branch 'upstream/main'
akshatvishu Jun 3, 2026
34d13eb
refactor(ming): move shared utilities to models/common/ming
akshatvishu Jun 3, 2026
459c8d8
Merge remote-tracking branch 'upstream/main'
akshatvishu Jun 4, 2026
8a8c118
Merge remote-tracking branch 'upstream/main'
akshatvishu Jun 5, 2026
59c7e30
Merge remote-tracking branch 'upstream/main'
akshatvishu Jun 6, 2026
ad86490
refactor(ming_tts): inline review-only helpers
akshatvishu Jun 7, 2026
89ffeee
Merge remote-tracking branch 'upstream/main'
akshatvishu Jun 7, 2026
a60dd84
Merge branch 'main' into feat/ming-omni-tts-dense
akshatvishu Jun 7, 2026
8027e2d
chore: restore qwen3 tts processor
akshatvishu Jun 7, 2026
cb58f98
refactor(ming_tts): wrap prompt builder output in tokens_input
akshatvishu Jun 8, 2026
d4a1c3e
Address Ming TTS review cleanup
akshatvishu Jun 8, 2026
183a87f
docs: update docs for upstream parity and MI300X ROCm test environment
akshatvishu Jun 9, 2026
b281640
refactor(tts): use required stage fields directly in Ming TTS detection
akshatvishu Jun 9, 2026
f5df86f
refactor(ming-tts): remove dead input embedding fallback
akshatvishu Jun 9, 2026
a072ff3
docs: use absolute GitHub links for Ming recipe references
akshatvishu Jun 9, 2026
7c95a5d
Align flowloss calculation with upstream
akshatvishu Jun 9, 2026
87ca95f
fix(ming_tts): use shared audio loader for speaker extraction
akshatvishu Jun 9, 2026
b6b39d7
Merge remote-tracking branch 'upstream/main' into feat/ming-omni-tts-…
akshatvishu Jun 9, 2026
eceb32c
refactor: align async omni engine with upstream
akshatvishu Jun 9, 2026
f552651
docs: remove duplicate Ming TTS example pages
akshatvishu Jun 9, 2026
7002e0d
Merge branch 'main' into feat/ming-omni-tts-dense
hsliuustc0106 Jun 10, 2026
54a13b0
ci(buildkite): add Ming-Omni-TTS E2E tests to merge-test pipeline
akshatvishu Jun 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/models/supported_models.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ th {
| `Qwen3TTSForConditionalGeneration` | Qwen3-TTS-12Hz-1.7B-CustomVoice | `Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice` | ✅︎ | ✅︎ | ✅︎ | ✅︎ |
| `Qwen3TTSForConditionalGeneration` | Qwen3-TTS-12Hz-1.7B-VoiceDesign | `Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign` | ✅︎ | ✅︎ | ✅︎ | ✅︎ |
| `Qwen3TTSForConditionalGeneration` | Qwen3-TTS-12Hz-1.7B-Base | `Qwen/Qwen3-TTS-12Hz-0.6B-Base` | ✅︎ | ✅︎ | ✅︎ | ✅︎ |
| `MingTTSForConditionalGeneration` | Ming-omni-tts dense 0.5B | `inclusionAI/Ming-omni-tts-0.5B` | ✅︎ | | | |
| `GLMTTSForConditionalGeneration` | GLM-TTS | `zai-org/GLM-TTS` | ✅︎ | | | |
| `NextStep11Pipeline` | NextStep-1.1 | `stepfun-ai/NextStep-1.1` | ✅︎ | ✅︎ | | ✅︎ |
| `MiMoAudioModel` | MiMo-Audio-7B-Instruct | `XiaomiMiMo/MiMo-Audio-7B-Instruct` | ✅︎ | ✅︎ | | |
Expand Down
21 changes: 21 additions & 0 deletions docs/user_guide/examples/offline_inference/ming_tts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Ming-omni-tts

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will this be autogenerated? cc @Gaohan123

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes these are.


Source <https://github.com/vllm-project/vllm-omni/tree/main/examples/offline_inference/text_to_speech/ming_tts>.

For the TTS model hub, see
[`examples/offline_inference/text_to_speech/README.md`](https://github.com/vllm-project/vllm-omni/tree/main/examples/offline_inference/text_to_speech/README.md).

## Example materials

??? abstract "README.md"
``````md
--8<-- "examples/offline_inference/text_to_speech/ming_tts/README.md"
``````
??? abstract "end2end.py"
``````py
--8<-- "examples/offline_inference/text_to_speech/ming_tts/end2end.py"
``````
??? abstract "cases.yaml"
``````yaml
--8<-- "examples/offline_inference/text_to_speech/ming_tts/cases.yaml"
``````
25 changes: 25 additions & 0 deletions docs/user_guide/examples/online_serving/ming_tts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Ming-omni-tts

Source <https://github.com/vllm-project/vllm-omni/tree/main/examples/online_serving/text_to_speech/ming_tts>.

For the online TTS serving hub, see
[`examples/online_serving/text_to_speech/README.md`](https://github.com/vllm-project/vllm-omni/tree/main/examples/online_serving/text_to_speech/README.md).

## Example materials

??? abstract "README.md"
``````md
--8<-- "examples/online_serving/text_to_speech/ming_tts/README.md"
``````
??? abstract "run_server.sh"
``````sh
--8<-- "examples/online_serving/text_to_speech/ming_tts/run_server.sh"
``````
??? abstract "openai_speech_client.py"
``````py
--8<-- "examples/online_serving/text_to_speech/ming_tts/openai_speech_client.py"
``````
??? abstract "run_curl.sh"
``````sh
--8<-- "examples/online_serving/text_to_speech/ming_tts/run_curl.sh"
``````
41 changes: 41 additions & 0 deletions examples/offline_inference/text_to_speech/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ list of supported architectures across all modalities, see
| CosyVoice3 | `FunAudioLLM/Fun-CosyVoice3-0.5B-2512` | 2 (talker + code2wav) | ✓ | ✓ | — | 24 kHz |
| Fish Speech S2 Pro | `fishaudio/s2-pro` | dual-AR | ✓ | ✓ | — | 44.1 kHz |
| GLM-TTS | `zai-org/GLM-TTS` | 2 (AR + DiT) | ✓ (required) | ✓ | — | 24 kHz |
| Ming-omni-tts | `inclusionAI/Ming-omni-tts-0.5B` | 2 (AR + audio VAE) | ✓ | ✓ | style / IP / dialect / TTA / podcast | 44.1 kHz |
| Ming-flash-omni-TTS | `Jonathan1909/Ming-flash-omni-2.0` | single (talker only) | — (caption-controlled) | — | style / IP / basic captions | 44.1 kHz |
| MOSS-TTS-Nano | `OpenMOSS-Team/MOSS-TTS-Nano` | single (AR + codec) | ✓ (required) | ✓ | voice_clone, continuation | 48 kHz |
| OmniVoice | `k2-fsa/OmniVoice` | 2 (gen + dec) | ✓ | — | voice design, language hint | 24 kHz |
Expand Down Expand Up @@ -159,6 +160,46 @@ Streaming requires `async_chunk: true` in the stage config.

---

## Ming-omni-tts

Dense 0.5B two-stage TTS pipeline (`AR + flow` + audio VAE) at 44.1 kHz. The example covers style, IP voice, music-only generation, text-to-audio events, emotion, dialect, zero-shot cloning, podcast, speech+BGM, and speech+environment-sound cases.

### Quick start
```bash
python examples/offline_inference/text_to_speech/ming_tts/end2end.py \
--case style \
--deploy-config vllm_omni/deploy/ming_tts.yaml \
--enforce-eager
```

### Voice cloning
```bash
python examples/offline_inference/text_to_speech/ming_tts/end2end.py \
--case zero_shot \
--ref-audio /path/to/reference.wav \
--ref-text "在此奉劝大家别乱打美白针。" \
--deploy-config vllm_omni/deploy/ming_tts.yaml \
--enforce-eager
```

### Streaming
```bash
python examples/offline_inference/text_to_speech/ming_tts/end2end.py \
--case basic \
--ref-audio /path/to/reference.wav \
--streaming \
--deploy-config vllm_omni/deploy/ming_tts.yaml \
--enforce-eager
```

### Notes
- `style`, `ip`, `bgm`, and `tta` do not require reference audio.
- Reference-audio cases use `--ref-audio`; `zero_shot` also requires `--ref-text`.
- `podcast` uses multiple references via `--ref-audio-paths`.
- Full case details live in [`ming_tts/README.md`](ming_tts/README.md).

---

## Ming-flash-omni-TTS

Standalone talker-only deployment of Ming-flash-omni-2.0 at 44.1 kHz. Voice is controlled through caption fields (`风格` / `IP` / `语速`/`基频`/`音量`) rather than reference audio.
Expand Down
240 changes: 240 additions & 0 deletions examples/offline_inference/text_to_speech/ming_tts/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
# Ming-omni-tts Offline Inference

`end2end.py` runs Ming dense 0.5B end to end with vLLM-Omni. It uses the in-repo Ming prompt builder directly, so the example request shape matches the real integration instead of a simplified wrapper.

## Files

| File | Purpose |
|---|---|
| `end2end.py` | Driver: CLI, case loading, prompt construction, orchestration (~150 lines) |
| `cases.yaml` | All 11 built-in case definitions (prompt, text, instruction, ref-audio flags, flow controls) |
| `_runner.py` | Engine management and audio output (streaming + blocking paths; internal helper) |

## Model Overview

Ming dense 0.5B is exposed here as a two-stage offline pipeline:

- **Stage 0**: Qwen2-based AR generation with Ming prompt formatting and inline flow controls
- **Stage 1**: audio VAE decode to mono 44.1 kHz waveform

The example supports both:

- **Blocking eager** via `vllm_omni/deploy/ming_tts.yaml`
- **Async chunk eager** via `vllm_omni/deploy/ming_tts.yaml` (default `async_chunk: true`)

## Setup

Install vLLM-Omni with the platform requirements for your accelerator:

```bash
uv pip install -e .
```

The Ming offline example does not require a separate upstream Ming package.
Reference-audio cases use the repo dependencies for audio loading,
resampling, and CampPlus speaker extraction, including `soundfile`,
`torchaudio`, and `onnxruntime`.

## Supported Cases

These cases cover the upstream dense 0.5B cookbook surface that maps cleanly onto the current vLLM-Omni example:

- `style`: zero-speaker style-conditioned speech
- `ip`: zero-speaker IP voice generation
- `bgm`: music-only generation
- `tta`: text-to-audio event generation with FlowLoss controls
- `emotion`: reference-audio speech with emotion control
- `basic`: reference-audio speech with speed / pitch / volume control
- `dialect`: reference-audio speech with dialect control
- `zero_shot`: reference-audio cloning with explicit transcript
- `podcast`: multi-reference dialogue generation with automatic speaker embedding extraction
- `speech_bgm`: speech with background music conditioning
- `speech_sound`: speech with environmental sound conditioning

## Quick Start

Run the zero-speaker style example:

```bash
python examples/offline_inference/text_to_speech/ming_tts/end2end.py \
--case style \
--deploy-config vllm_omni/deploy/ming_tts.yaml \
--enforce-eager
```

Run zero-shot cloning with a transcript:

```bash
python examples/offline_inference/text_to_speech/ming_tts/end2end.py \
--case zero_shot \
--ref-audio /path/to/10002287-00000094.wav \
--ref-text "在此奉劝大家别乱打美白针。" \
--deploy-config vllm_omni/deploy/ming_tts.yaml \
--enforce-eager
```

Run emotion-controlled speech:

```bash
python examples/offline_inference/text_to_speech/ming_tts/end2end.py \
--case emotion \
--ref-audio /path/to/emotion_prompt.wav \
--deploy-config vllm_omni/deploy/ming_tts.yaml \
--enforce-eager
```

Run podcast generation with two reference clips:

```bash
python examples/offline_inference/text_to_speech/ming_tts/end2end.py \
--case podcast \
--ref-audio-paths /path/to/CTS-CN-F2F-2019-11-11-423-012-A.wav /path/to/CTS-CN-F2F-2019-11-11-423-012-B.wav \
--deploy-config vllm_omni/deploy/ming_tts.yaml \
--enforce-eager
```

The script automatically extracts one 192-d speaker embedding per reference WAV using the Ming model's `campplus.onnx`.

If you already have precomputed multi-speaker embeddings, you can override extraction with:

```bash
--speaker-embedding /path/to/podcast_speaker_embeddings.json
```

where the JSON is a list of speaker embeddings, one 192-d vector per speaker.

Run text-to-audio event generation:

```bash
python examples/offline_inference/text_to_speech/ming_tts/end2end.py \
--case tta \
--deploy-config vllm_omni/deploy/ming_tts.yaml \
--enforce-eager
```

Use async_chunk streaming:

```bash
python examples/offline_inference/text_to_speech/ming_tts/end2end.py \
--case basic \
--ref-audio /path/to/10002287-00000095.wav \
--streaming \
--deploy-config vllm_omni/deploy/ming_tts.yaml \
--enforce-eager
```

`--streaming` uses `AsyncOmni` and the async_chunk stage config. It currently
supports one prompt per process invocation; use blocking mode for
`--num-prompts > 1`.

Collect runtime stats and a manifest:

```bash
python examples/offline_inference/text_to_speech/ming_tts/end2end.py \
--case style \
--deploy-config vllm_omni/deploy/ming_tts.yaml \
--enforce-eager \
--enable-stats \
--stats-log-file output_audio/ming_style_pipeline.log \
--metadata-json output_audio/ming_style_manifest.json
```

## Reference Fixtures

The upstream Ming cookbook uses these public audio fixtures from `inclusionAI/Ming-omni-tts/data/wavs`:

- `10002287-00000094.wav` for zero-shot cloning
- `10002287-00000095.wav` for `basic`
- `emotion_prompt.wav` for `emotion`
- `yue_prompt.wav` for `dialect`
- `00000309-00000300.wav` for `speech_bgm` and `speech_sound`
- `CTS-CN-F2F-2019-11-11-423-012-A.wav` and `CTS-CN-F2F-2019-11-11-423-012-B.wav` for `podcast`

## Validation Matrix

The repo-facing example is intended to cover the same dense TTS workflows used
by the local Ming validation script:

| Case | Blocking `deploy/ming_tts.yaml` | Async chunk `deploy/ming_tts.yaml` | Extra inputs |
|---|---:|---:|---|
| `style` | Yes | Optional smoke test | none |
| `ip` | Yes | Optional smoke test | none |
| `bgm` | Yes | Optional smoke test | none |
| `tta` | Yes | Optional smoke test | none |
| `emotion` | Yes | Yes | `--ref-audio emotion_prompt.wav` |
| `basic` | Yes | Yes | `--ref-audio 10002287-00000095.wav` |
| `dialect` | Yes | Yes | `--ref-audio yue_prompt.wav` |
| `zero_shot` | Yes | Yes | `--ref-audio 10002287-00000094.wav --ref-text ...` |
| `podcast` | Yes | Yes | two `--ref-audio-paths` |
| `speech_bgm` | Yes | Yes | `--ref-audio 00000309-00000300.wav` |
| `speech_sound` | Yes | Yes | `--ref-audio 00000309-00000300.wav` |

## Validated Outputs

Validation on an L4 GPU completed the full blocking matrix and the default
async_chunk matrix. Default async_chunk matched blocking output frame counts
and Stage-1 patch counts for every case:

| Case | Blocking frames / patches / sec | Async chunk frames / patches / sec |
|---|---:|---:|
| `style` | 409248 / 29 / 9.28 | 409248 / 29 / 9.28 |
| `ip` | 183456 / 13 / 4.16 | 183456 / 13 / 4.16 |
| `bgm` | 1326528 / 94 / 30.08 | 1326528 / 94 / 30.08 |
| `tta` | 465696 / 33 / 10.56 | 465696 / 33 / 10.56 |
| `emotion` | 324576 / 23 / 7.36 | 324576 / 23 / 7.36 |
| `basic` | 211680 / 15 / 4.80 | 211680 / 15 / 4.80 |
| `dialect` | 239904 / 17 / 5.44 | 239904 / 17 / 5.44 |
| `zero_shot` | 409248 / 29 / 9.28 | 409248 / 29 / 9.28 |
| `podcast` | 437472 / 31 / 9.92 | 437472 / 31 / 9.92 |
| `speech_bgm` | 296352 / 21 / 6.72 | 296352 / 21 / 6.72 |
| `speech_sound` | 352800 / 25 / 8.00 | 352800 / 25 / 8.00 |

## Key Arguments

| Argument | Description |
|---|---|
| `--model` | Hugging Face repo or local Ming checkpoint path |
| `--deploy-config` | Deploy config YAML. Use `vllm_omni/deploy/ming_tts.yaml` |
| `--case` | Built-in demo case |
| `--ref-audio` | Single reference wav path for cloning-style cases |
| `--ref-audio-paths` | Multiple reference wav paths, used by `podcast` |
| `--ref-text` | Reference transcript. Required for `zero_shot` |
| `--instructions` | Free-form Ming instruction string |
| `--instruction-json` | Structured Ming instruction JSON |
| `--speaker-embedding` | JSON file containing a 192-d speaker embedding |
| `--extract-speaker-embeddings` | Force CampPlus speaker extraction from the provided reference audio paths |
| `--max-decode-steps` | Override `ming_max_decode_steps` |
| `--num-prompts` | Repeat the same case N times. Outputs are indexed when `N > 1` |
| `--streaming` | Use `AsyncOmni` and async_chunk transport |
| `--enforce-eager` | Recommended for Ming dense; non-eager is out of scope |
| `--enable-stats` / `--log-stats` | Enable vLLM-Omni per-request stats logging |
| `--stats-log-file` | Optional path for the stats log |
| `--metadata-json` | Optional path for the run manifest JSON |
| `--stage-init-timeout` | Per-stage initialization timeout in seconds |
| `--init-timeout` | Total initialization timeout in seconds |
| `--batch-timeout` | Batch timeout in seconds |
| `--worker-backend` | `multi_process` or `ray` |
| `--ray-address` | Ray cluster address when using `--worker-backend ray` |

## Output

- The script writes one mono 44.1 kHz WAV file per run
- Default output directory: `output_audio/`
- Default filename: `ming_<case>.wav`
- When `--num-prompts > 1`, outputs are indexed as `ming_<case>_00000.wav`, `..._00001.wav`, etc.
- When stats are enabled, the script can also write:
- a stats log file such as `ming_style_pipeline.log`
- a manifest JSON with per-output metadata, stage durations, peak memory info,
and streaming client latency metrics when `--streaming` is used

## Notes

- `style` and `ip` are zero-speaker paths and do not require a reference clip
- `emotion`, `basic`, `dialect`, `speech_bgm`, and `speech_sound` require one reference clip
- `zero_shot` requires both `--ref-audio` and `--ref-text`
- `podcast` requires at least two reference clips via `--ref-audio-paths`
- `podcast` automatically extracts one speaker embedding per reference clip
- `--speaker-embedding` may contain either one 192-d vector or a list of 192-d vectors
- `--enforce-eager` was used for the validated runs
- Validation on the L4 GPU used SDPA for the Ming audio VAE instead of
FlashAttention2, which is the preferred default when available.
Loading
Loading