Respuesta corta: clonar una voz con MiniMax requiere dos llamadas a la API, y el resultado funciona con el SDK estándar de texto a voz de OpenAI. Primero suba una grabación de 10 segundos a 5 minutos (.mp3, .m4a o .wav, hasta 20 MB) a POST https://api.hop-base.com/v1/files/upload con purpose=voice_clone. Después llame a POST /v1/voice_clone con el file_id devuelto y un voice_id elegido por usted. A partir de ese momento, pase ese voice_id como voice al endpoint compatible con OpenAI /v1/audio/speech con speech-2.8-hd o speech-2.8-turbo. En el SDK de OpenAI, eso significa cambiar solo base_url, model y voice. La subida y la clonación son gratuitas. La tarifa de clonación publicada es de $1.5 por voz y se cobra una sola vez, en la primera síntesis correcta con esa voz. La voz se factura por carácter: $100 por millón en HD y $60 por millón en Turbo, y cada carácter chino cuenta como 2. Una voz clonada que no se utilice en 7 días se elimina, y en ese caso no se cobra la tarifa de clonación.
Qué necesita antes de empezar
- Una API key de HopBase cuyo grupo incluya los modelos MiniMax Speech (
speech-2.8-hd,speech-2.8-turbo). Puede añadir este grupo a una clave que ya utilice para chat o video. Compruébelo conGET /v1/models. - Una grabación limpia de la voz: de 10 segundos a 5 minutos, en
.mp3,.m4ao.wav, de 20 MB como máximo. Un solo hablante, poco ruido de fondo y un ritmo natural dan los mejores resultados. - El derecho a usar la voz. Clone únicamente su propia voz o la de una persona que le haya dado permiso explícito por escrito. Usted es responsable de un uso lícito, incluidas las normas sobre síntesis profunda y derechos de imagen.
Paso 1: suba la grabación
POST /v1/files/upload acepta multipart/form-data con exactamente dos campos, purpose y file. Cualquier otro campo devuelve 400.
curl https://api.hop-base.com/v1/files/upload \
-H "Authorization: Bearer sk-YOUR_KEY" \
-F purpose=voice_clone \
-F file=@my_voice.mp3
# → {"file":{"file_id":123456789,"bytes":...,"filename":"my_voice.mp3","purpose":"voice_clone"},"base_resp":{...}}
El formato y el tamaño se verifican al subir el archivo, y la duración se verifica al clonar. Si además quiere dar al modelo un clip de ejemplo corto, súbalo por separado con purpose=prompt_audio. Debe durar menos de 8 segundos.
Paso 2: clone la voz
curl https://api.hop-base.com/v1/voice_clone \
-H "Authorization: Bearer sk-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"file_id": 123456789,
"voice_id": "MyNarrator01",
"text": "Hello, this is my cloned voice.",
"model": "speech-2.8-hd",
"need_noise_reduction": true
}'
Los campos importantes:
| Campo | Reglas |
|---|---|
file_id | Obligatorio. El entero del paso 1. Cada archivo solo se puede usar una vez. |
voice_id | Obligatorio. De 8-256 caracteres: letras, dígitos, - y _. Debe empezar por una letra, no puede terminar en - ni en _ y debe ser único en su cuenta. |
text + model | Guion de vista previa opcional de hasta 1,000 caracteres. Si envía text, model es obligatorio. En ese caso la respuesta incluye demo_audio, un enlace de vista previa válido durante 24 horas, y la vista previa se factura como caracteres de voz. |
clone_prompt | Opcional: {"prompt_audio": <file_id>, "prompt_text": "..."}. Ambas claves son obligatorias. prompt_text es la transcripción exacta del clip y termina con un signo de puntuación. |
text_validation / accuracy | Control de calidad opcional. Indique la transcripción esperada (hasta 200 caracteres) y un umbral de aprobación de 0 a 1 (0.7 por defecto). La clonación falla si el reconocimiento de voz no coincide. |
need_noise_reduction, need_volume_normalization, aigc_watermark | Booleanos opcionales, todos false por defecto. |
Como el flujo reproduce la API oficial de clonación de voz de MiniMax, el código escrito para el SDK propio de MiniMax funciona tras cambiar la URL base y la clave.
Paso 3: use la voz clonada con el SDK de OpenAI
Este es el principal motivo para usar el endpoint compatible con OpenAI. Su código actual con client.audio.speech.create sigue funcionando, y el único cambio es que voice pasa a ser su nuevo voice_id:
from openai import OpenAI
client = OpenAI(base_url="https://api.hop-base.com/v1", api_key="sk-YOUR_KEY")
response = client.audio.speech.create(
model="speech-2.8-turbo",
voice="MyNarrator01", # your cloned voice_id
input="Welcome back. Here is today's product update.",
response_format="mp3",
)
response.write_to_file("update.mp3")
O con curl:
curl https://api.hop-base.com/v1/audio/speech \
-H "Authorization: Bearer sk-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "speech-2.8-turbo", "input": "Hello again.", "voice": "MyNarrator01"}' \
--output cloned.mp3
Límites del endpoint compatible con OpenAI: input admite hasta 4,096 caracteres. response_format puede ser mp3, opus, flac, wav o pcm (aac devuelve 400). speed va de 0.25 a 4. La respuesta es el audio en bruto, devuelto de una sola vez. Los campos de la API nativa, como voice_setting o language_boost, se rechazan en este endpoint.
Cuándo usar el endpoint nativo
Para guiones largos, control de emociones o streaming, llame a POST /v1/t2a_v2 y pase la voz como voice_setting.voice_id. Admite hasta 10,000 caracteres y es compatible con stream: true. En nuestras mediciones con textos cortos, los endpoints síncronos devolvieron el clip completo en unos 1.5-2.4 segundos y, con streaming, el primer fragmento de audio llegó tras aproximadamente 1 segundo. Al usar streaming, configure stream_options.exclude_aggregated_audio: true. De lo contrario, el evento final repite el clip completo y una simple concatenación duplica el audio. Los parámetros completos están en la documentación de texto a voz.
Reglas del ciclo de vida que suelen sorprender
- Las subidas solo se pueden usar una vez. Una clonación correcta elimina tanto el archivo de origen como el archivo de prompt, así que para volver a clonar debe subirlos de nuevo. Una clonación fallida conserva los archivos para que pueda reintentar.
- Las subidas no usadas caducan a las 24 horas. Eliminar un archivo nunca afecta a las voces ya clonadas.
- Use la voz en un plazo de 7 días. Una voz clonada que no se use para síntesis en los 7 días posteriores a la clonación se elimina y, en ese caso, no se cobra la tarifa de clonación. Basta con sintetizar una frase corta para conservarla.
- Las voces son privadas. Una voz clonada pertenece a su cuenta. En una cuenta empresarial la comparten las claves de los miembros bajo el titular. Otras cuentas no pueden usarla aunque conozcan el
voice_id. - La gestión es gratuita.
POST /v1/get_voicecon{"voice_type": "voice_cloning"}lista sus voces, yPOST /v1/delete_voiceelimina una y libera su nombre.
Cuánto cuesta
| Concepto | Precio publicado |
|---|---|
| Subida y clonación | Gratis |
| Tarifa de clonación | $1.5 por voz, cobrada una sola vez en la primera síntesis correcta con esa voz |
speech-2.8-hd | $100 por 1M de caracteres facturados |
speech-2.8-turbo | $60 por 1M de caracteres facturados |
Caracteres facturados: cada carácter Unicode cuenta como 1, y cada carácter Han (CJK) cuenta como 2. La puntuación, los espacios, los emojis y los marcadores de pausa como <#0.5#> cuentan como 1. Así, Hello, world. son 13 caracteres facturados. Un guion de unos 6,000 caracteres en inglés cuesta unos $0.36 en Turbo o $0.60 en HD a precio de lista, más el cargo único de $1.5 la primera vez que se usa una voz nueva. La tarifa de clonación aparece como una línea separada voice_clone_activation en el registro de uso de esa solicitud. Las solicitudes rechazadas con 400 o que fallan durante la síntesis no se cobran. Consulte la página de precios para ver los precios de lista vigentes; la tarifa de su grupo aparece en el catálogo de modelos tras iniciar sesión.
Errores frecuentes
| Mensaje | Qué hacer |
|---|---|
file_id ... does not exist; uploaded files are single-use and expire 24 hours after upload | Vuelva a subir la grabación |
voice_id ... already exists | Elija otro nombre o elimine primero la voz anterior |
audio duration out of range | El audio de origen debe durar de 10 s a 5 min, y el clip de prompt menos de 8 s |
voice id not exist | Error tipográfico, o la voz se eliminó o caducó tras 7 días sin uso. Vuelva a clonarla. |
voice cloning is temporarily unavailable (503) | Reintente más tarde |
Una alternativa: clonación de voz de Doubao
HopBase también ofrece seed-icl-2.0 de ByteDance (Doubao Voice Cloning 2.0), que se configura de otra forma. La grabación va en el cuerpo JSON de POST /v1/voice_clone en base64 (hasta 10 MB, cuerpo de hasta 16 MiB), y cada llamada necesita "model": "seed-icl-2.0". Recibe un voice_id que empieza por hbv_, que solo se usa con seed-icl-2.0 en /v1/audio/speech. No hay tarifa de clonación, y la síntesis cuesta ¥3 por 10,000 caracteres al precio de lista oficial. Durante la beta, cada cuenta conserva una voz clonada. Si utiliza la clonación de MiniMax y la de Doubao, use una clave distinta para cada una. Los detalles están en la misma documentación de voz.
Preguntas frecuentes
¿Puedo usar una voz clonada de MiniMax con el SDK de Python de OpenAI?
Sí. Apunte el cliente a https://api.hop-base.com/v1, configure model como speech-2.8-hd o speech-2.8-turbo y pase su voice_id como voice en client.audio.speech.create. No es necesario cambiar nada más en su código.
¿Cuánto debe durar la grabación de origen?
Entre 10 segundos y 5 minutos, en .mp3, .m4a o .wav, hasta 20 MB. Un clip de prompt opcional debe durar menos de 8 segundos.
¿Cuándo se cobra la tarifa de clonación de $1.5?
Una sola vez, con la primera síntesis correcta con la voz. La subida y la clonación son gratuitas, y el text de vista previa en la llamada de clonación se factura solo como caracteres de voz, no como primer uso. Si nunca usa la voz y caduca a los 7 días, no se cobra la tarifa de clonación.
¿Por qué dejó de funcionar mi voz clonada?
Lo más habitual es que no se haya usado para síntesis en los 7 días posteriores a la clonación, por lo que se eliminó. Ejecute POST /v1/get_voice para comprobarlo y vuelva a clonarla si es necesario. Tendrá que subir de nuevo la grabación, porque las subidas solo se pueden usar una vez.
¿Puedo hacer streaming de voz con una voz clonada?
Sí, en el endpoint nativo POST /v1/t2a_v2 con stream: true y voice_setting.voice_id configurado con su voz. El endpoint compatible con OpenAI devuelve el clip completo en una sola respuesta y no admite stream_format.
¿Cómo indico al modelo en qué idioma está el texto?
Use language_boost, disponible en el endpoint nativo y en la llamada de clonación. Tiene 40 opciones, entre ellas inglés, chino, cantonés (Chinese,Yue), japonés, coreano, español, francés, alemán, árabe e hindi, además de auto para detectar el idioma. La calidad de una voz clonada en un idioma distinto del de la grabación depende del audio de origen, así que pruebe primero con una vista previa corta. La lista completa está en la documentación de voz.