Qwen3 TTS Instruct Flash vs BytePlus Seed TTS 2.0
Cuál usar y cuándo
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 de caracteres | $11.5 | $30 | 0.38× |
Tarifas tomadas del catálogo en vivo al generar el sitio; la página de cada modelo tiene la ficha de precios actualizada.
Dónde queda cada uno: precio por 1M de caracteres entre los 7 modelos de síntesis de voz que se facturan en esta unidad (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 |
| Lanzamiento | - | 2025-10-16 |
| Límite por solicitud | 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 un dato, la fila se omite en vez de deducirlo. Fuentes completas: Qwen3 TTS Instruct Flash · BytePlus Seed TTS 2.0
Cambia de uno a otro con una sola línea
Los dos ids aparecen en todas las pestañas de abajo; lo único que cambia es el par de líneas resaltadas. El endpoint, la clave y la estructura de la solicitud son los mismos.
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 de caracteres ($11.5 frente a $30, una diferencia de 2.6×). En otras filas puede ser al revés: la tabla de arriba recoge todas las tarifas, y el coste real depende de tu combinación de uso.
¿Puedo hacer pruebas A/B de Qwen3 TTS Instruct Flash frente a BytePlus Seed TTS 2.0 sin dos integraciones?
Sí. Los dos se sirven desde el mismo endpoint compatible con OpenAI y con una sola clave API. Para cambiar de uno a otro basta con tocar una línea, el nombre del modelo, así que puedes mandar una parte del tráfico a cada uno y comparar directamente las facturas.
¿Cómo se factura el texto a voz?
Por carácter del texto de entrada, con un máximo de caracteres por solicitud que figura en la tabla de especificaciones. Con cualquiera de los dos modelos, los textos largos hay que repartirlos en varias solicitudes.