Qwen3 TTS Instruct Flash vs BytePlus Seed TTS 2.0
Cuál usar y cuándo — veredicto seleccionado, no una tabla de benchmarks
qwen3-tts-instruct-flash es 2.6x más barato por millón de caracteres ($11.5 frente a $30) y ambos aceptan dirección de voz en lenguaje natural, pero los límites de petición difieren mucho: 600 caracteres frente a 4096. seed-tts-2.0 ofrece además parámetros numéricos de voz junto al control descriptivo y publica sus voces agrupadas por escenario. Elige qwen3-tts-instruct-flash por coste en frases cortas, seed-tts-2.0 para pasajes largos y un control de voz más fino.
Precios
| Qwen3 TTS Instruct Flash | BytePlus Seed TTS 2.0 | Δ | |
|---|---|---|---|
| Por 1M caracteres | $11.5 | $30 | 0.38× |
Tarifas del catálogo en vivo en el momento de la compilación; la página de cada modelo incluye la ficha actualizada.
Dónde se sitúan — precio por 1M de caracteres en todos los 7 modelos de texto a voz en esta unidad de facturación (escala logarítmica)
Capacidades
| Qwen3 TTS Instruct Flash | BytePlus Seed TTS 2.0 | |
|---|---|---|
| Streaming | sí | sí |
| SSML | undocumented | unsupported |
| Unidad de facturación | character | character |
Especificaciones
| Qwen3 TTS Instruct Flash | BytePlus Seed TTS 2.0 | |
|---|---|---|
| Modalidades de entrada | texto | texto |
| Modalidades de salida | audio | audio |
| Límite de solicitudes | 600 characters | — |
| Voces | System voices published with one-line personas, among them Cherry (a sunny, positive, friendly and natural young woman), Serena, Ethan, Chelsie, Momo, Vivian, Moon, Maia, Kai, Nofish (a designer who cannot pronounce retroflex sounds), Bella, Eldric Sage, Mia, Mochi, Bellona, Vincent, Bunny, Neil, Elias, Arthur, Nini, Seren, Pip and Stella the Qwen-TTS voice list pairs each voice with the exact model ids that accept it. | TTS 2.0 voices carry *_uranus_bigtts speaker IDs and are listed by scenario (General, Entertainment, Education, Dubbing, AudioBook, RolePlay, CustomerService) on the Voice List page per-voice emotion via audio_params.emotion with emotion_scale 1 to 5 (default 4), speech_rate and loudness_rate in [-50, 100], and post_process.pitch in [-12, 12]. |
| Idiomas | Chinese (Mandarin), English, German, Italian, Portuguese, Spanish, Japanese, Korean, French and Russian. language_type defaults to Auto for mixed-language or undetermined input, which Alibaba documents as not guaranteeing accuracy naming a single language is documented to significantly improve synthesis quality. Unlike the Qwen3-TTS-Flash series, the Instruct series lists no Chinese dialect voices (Beijing, Shanghainese, Sichuan, Nanjing, Shaanxi, Hokkien, Tianjin, Cantonese). | English, Chinese, Japanese, German, French, Mexican Spanish, Indonesian Bahasa, Brazilian Portuguese, Italian and Korean |
| Control de voz |
| context_texts and section_id are TTS 2.0 only: a plain-language instruction steers rate, emotion, volume and style (only the first list value takes effect, and its text is not billed), and section_id links up to 30 rounds or 10 minutes of earlier synthesis as historical context. |
| Límites | HTTP non-real-time speech synthesis API the -realtime suffix marks the WebSocket sibling. Input text capped at 600 characters, multilingual mixed input allowed. Non-streaming returns an audio file URL valid for 24 hours streaming returns Base64-encoded PCM in chunks with the URL only in the final packet, played back in the official samples as 24 kHz mono 16-bit audio. Billed by input text characters, reported as usage.characters (input_tokens and output_tokens are always 0 on the Qwen3-TTS series) output audio is free. | Integration via uni-directional streaming HTTP, uni- or bi-directional streaming WebSocket and online SDK sampling rate 24K/16K/8K on the uni-directional streaming and non-streaming interfaces, 48K/24K/16K/8K on the bi-directional interface output PCM, OGG_OPUS or MP3 (WAV is accepted but returns multiple headers when streaming) SSML is not supported |
Las especificaciones se transcriben de la documentación de cada proveedor; si un proveedor no publica una fila, se omite en lugar de inferirse. Fuentes completas: Qwen3 TTS Instruct Flash · BytePlus Seed TTS 2.0
Cambia entre ellos con una línea
Ambos IDs están en cada pestaña a continuación — el par de líneas resaltadas es la única edición. Mismo endpoint, misma clave, misma estructura de solicitud.
from openai import OpenAI
client = OpenAI(
base_url="https://synthorai.io/v1",
api_key="sk-syn-...",
)
resp = client.audio.transcriptions.create(
model="qwen3-tts-instruct-flash",
# model="seed-tts-2.0", # descomenta esta línea, comenta la de arriba
file=open("meeting.mp3", "rb"),
language="en",
)
print(resp.text)import OpenAI from "openai";
import fs from "node:fs";
const client = new OpenAI({
baseURL: "https://synthorai.io/v1",
apiKey: "sk-syn-...",
});
const resp = await client.audio.transcriptions.create({
model: "qwen3-tts-instruct-flash",
// model: "seed-tts-2.0", // descomenta esta línea, comenta la de arriba
file: fs.createReadStream("meeting.mp3"),
});
console.log(resp.text);curl https://synthorai.io/v1/audio/transcriptions \
-H "Authorization: Bearer sk-syn-..." \
-F model="qwen3-tts-instruct-flash" \
# -F model="seed-tts-2.0" \ # descomenta esta línea, comenta la de arriba
-F file=@meeting.mp3package main
import (
"context"
"fmt"
"os"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/option"
)
func main() {
client := openai.NewClient(
option.WithBaseURL("https://synthorai.io/v1"),
option.WithAPIKey("sk-syn-..."),
)
f, _ := os.Open("meeting.mp3")
resp, _ := client.Audio.Transcriptions.New(context.TODO(), openai.AudioTranscriptionNewParams{
Model: "qwen3-tts-instruct-flash",
// Model: "seed-tts-2.0", // descomenta esta línea, comenta la de arriba
File: f,
})
fmt.Println(resp.Text)
}import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.audio.transcriptions.*;
import java.nio.file.Paths;
OpenAIClient client = OpenAIOkHttpClient.builder()
.baseUrl("https://synthorai.io/v1")
.apiKey("sk-syn-...")
.build();
Transcription resp = client.audio().transcriptions().create(
TranscriptionCreateParams.builder()
.model("qwen3-tts-instruct-flash")
// .model("seed-tts-2.0") // descomenta esta línea, comenta la de arriba
.file(Paths.get("meeting.mp3"))
.build()).asTranscription();
System.out.println(resp.text());Preguntas frecuentes
¿Cuál es más barato, Qwen3 TTS Instruct Flash o BytePlus Seed TTS 2.0?
Qwen3 TTS Instruct Flash es más barato en por 1m caracteres ($11.5 vs $30, con una diferencia de 2.6×). Otras filas pueden indicar lo contrario — la tabla anterior muestra la ficha completa, y el costo real depende de su combinación.
¿Puedo hacer pruebas A/B de Qwen3 TTS Instruct Flash frente a BytePlus Seed TTS 2.0 sin dos integraciones?
Sí. Ambos se sirven a través del mismo endpoint compatible con OpenAI con una clave API — el cambio es una modificación de una línea en la cadena del modelo, por lo que puede enrutar una fracción del tráfico a cada uno y comparar las facturas directamente.
¿Cómo se factura el texto a voz?
Por carácter de texto de entrada, con un límite de caracteres por petición mostrado en la tabla de especificaciones. Los guiones largos deben fragmentarse en múltiples peticiones en cualquiera de los modelos.