Una voz clonada
Cada compra se plantea para una única voz de referencia, no para una librería ilimitada de voces.
La web vende clonación de voz por segundos de salida y además deja una prueba pública controlada. El mínimo comercial arranca en 5 € para que el cobro tenga sentido después de comisiones.
La lógica es directa: eliges un pack útil de verdad, pagas y esos segundos quedan ligados a tu cuenta para generar audio con tu voz clonada.
La unidad comercial aquí es el segundo de audio generado. Cada pack da derecho a una cantidad máxima de salida con una única voz clonada y con un importe mínimo compatible con comisiones reales.
Demo pública
Esta prueba pública deja seleccionar una voz del catálogo, escucharla y generar una muestra con texto fijo controlado. No hay texto libre en la demo para evitar usos abusivos.
Una voz clonada
Cada compra se plantea para una única voz de referencia, no para una librería ilimitada de voces.
Segundos de salida
El precio se relaciona con el máximo de audio final que puedes generar dentro del pack contratado.
Audio descargable
El resultado se entrega como audio final, listo para usar en tu flujo o para descargarlo directamente.
Seguimiento del pago
El checkout se crea por API y el estado puede consultarse para saber si el cobro quedó pendiente, fallido o pagado.
Seleccionas cuántos segundos de audio final quieres comprar para tu voz clonada.
Esta web crea una orden de pago local y te redirige a Stripe o PayPal según el proveedor que elijas.
Después del pago se consulta el estado para confirmar si la operación quedó efectivamente registrada.
El resultado depende de la calidad de la muestra. Si la referencia es mala, el audio final lo notará; por eso conviene usar voces limpias y autorizadas.
Puedes entrar al checkout y arrancar el flujo de pago desde esta misma web sin salir a otro proyecto distinto.
La página pública, el endpoint de clonación y el checkout están ya integrados para validar ventas y primeras operaciones.
Compra guiada
El checkout ya no se abre como invitado. Primero necesitas una cuenta con correo. Después esta web crea la orden local y te manda a Stripe o PayPal con la referencia ya asociada.
Pack entrada
10 minutos de audio final
5,00 €/pago
Precio mínimo útil para cubrir comisiones y dejar una compra razonable de 10 minutos.
Pack estudio
30 minutos de audio final
13,00 €/pago
Descuento frente al precio base para 30 minutos de salida con una sola voz.
Pack producción
60 minutos de audio final
24,00 €/pago
Descuento más fuerte para una hora de salida final con una sola voz en producción continua.
Precio base: 0,50 € por minuto. El mínimo comercial empieza en 5,00 € y los packs grandes aplican descuento para que el volumen tenga sentido real.
La API no es anónima: cada cliente genera su token en la zona cliente y lo envía como Authorization: Bearer TU_TOKEN_API. Cada audio generado descuenta segundos del saldo pagado de esa cuenta.
Respuesta esperada: un archivo de audio salida_audio.wav. Si el token no existe devuelve 401; si no hay saldo devuelve 402.
{
"text": "Hola, esta es una prueba de voz",
"language": "es",
"voice_id": "es-ES-AlvaroNeural"
}
{
"text": "Hola, esta es una prueba de voz",
"language": "es",
"speaker": {
"filename": "voz.wav",
"data": "BASE64_DE_TU_AUDIO"
}
}
# TODO: replace TU_TOKEN_API with your real API token.
API_TOKEN="TU_TOKEN_API"
# Modo 1: voz del catalogo (voice_id)
cat > payload_catalog.json <<'JSON'
{
"text": "Hola, esta es una prueba de voz",
"language": "es",
"voice_id": "es-ES-AlvaroNeural"
}
JSON
curl --fail-with-body -X POST "https://videodoblaje.com/api/clone" \
-H "Authorization: Bearer ${API_TOKEN}" \
-H "Content-Type: application/json" \
--data-binary @payload_catalog.json \
--output salida_audio.wav
# Modo 2: audio propio (speaker.data en Base64)
# Mantén voz.wav en esta carpeta o cambia la ruta.
python3 - <<'PY'
import base64, json
payload = {
"text": "Hola, esta es una prueba de voz",
"language": "es",
"speaker": {
"filename": "voz.wav",
"data": base64.b64encode(open("voz.wav", "rb").read()).decode("ascii")
}
}
open("payload_speaker.json", "w").write(json.dumps(payload, ensure_ascii=False))
PY
curl --fail-with-body -X POST "https://videodoblaje.com/api/clone" \
-H "Authorization: Bearer ${API_TOKEN}" \
-H "Content-Type: application/json" \
--data-binary @payload_speaker.json \
--output salida_audio.wav
# TODO: replace TU_TOKEN_API with your real API token.
$token = "TU_TOKEN_API"
# Modo 1: voz del catalogo (voice_id)
$payloadCatalog = @{
text = "Hola, esta es una prueba de voz"
language = "es"
voice_id = "es-ES-AlvaroNeural"
} | ConvertTo-Json -Depth 5
Invoke-WebRequest `
-Uri "https://videodoblaje.com/api/clone" `
-Method POST `
-Headers @{ Authorization = "Bearer $token" } `
-ContentType "application/json" `
-Body $payloadCatalog `
-OutFile "salida_audio.wav"
# Modo 2: audio propio (speaker.data en Base64)
# Mantén voz.wav en esta carpeta o cambia la ruta.
$audio = [Convert]::ToBase64String([IO.File]::ReadAllBytes("voz.wav"))
$payloadSpeaker = @{
text = "Hola, esta es una prueba de voz"
language = "es"
speaker = @{
filename = "voz.wav"
data = $audio
}
} | ConvertTo-Json -Depth 5
Invoke-WebRequest `
-Uri "https://videodoblaje.com/api/clone" `
-Method POST `
-Headers @{ Authorization = "Bearer $token" } `
-ContentType "application/json" `
-Body $payloadSpeaker `
-OutFile "salida_audio.wav"
<?php
// TODO: replace TU_TOKEN_API with your real API token.
$token = 'TU_TOKEN_API';
// Modo 1: voz del catalogo (voice_id)
$payloadCatalog = [
'text' => 'Hola, esta es una prueba de voz',
'language' => 'es',
'voice_id' => 'es-ES-AlvaroNeural',
];
// Modo 2: audio propio (speaker.data en Base64)
// Keep voz.wav next to this file or change the file_get_contents() path.
$payloadSpeaker = [
'text' => 'Hola, esta es una prueba de voz',
'language' => 'es',
'speaker' => [
'filename' => 'voz.wav',
'data' => base64_encode(file_get_contents(__DIR__ . '/voz.wav')),
],
];
$payload = $payloadCatalog; // or: $payloadSpeaker
$ch = curl_init('https://videodoblaje.com/api/clone');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
]);
$audio = curl_exec($ch);
if ($audio === false || curl_getinfo($ch, CURLINFO_HTTP_CODE) >= 400) {
throw new RuntimeException('Error API: ' . (string)$audio);
}
file_put_contents(__DIR__ . '/salida_audio.wav', $audio);
import { readFile, writeFile } from 'node:fs/promises';
// TODO: replace TU_TOKEN_API with your real API token.
const token = 'TU_TOKEN_API';
// Modo 1: voz del catalogo (voice_id)
const payloadCatalog = {
text: 'Hola, esta es una prueba de voz',
language: 'es',
voice_id: 'es-ES-AlvaroNeural',
};
// Modo 2: audio propio (speaker.data en Base64)
// Keep voz.wav next to this script or change the readFile() path.
const voice = await readFile('./voz.wav');
const payloadSpeaker = {
text: 'Hola, esta es una prueba de voz',
language: 'es',
speaker: { filename: 'voz.wav', data: voice.toString('base64') },
};
const payload = payloadCatalog; // or: payloadSpeaker
const response = await fetch('https://videodoblaje.com/api/clone', {
method: 'POST',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
if (!response.ok) {
throw new Error(await response.text());
}
await writeFile('./salida_audio.wav', Buffer.from(await response.arrayBuffer()));
import base64
import requests
# TODO: replace TU_TOKEN_API with your real API token.
token = "TU_TOKEN_API"
# Modo 1: voz del catalogo (voice_id)
payload_catalog = {
"text": "Hola, esta es una prueba de voz",
"language": "es",
"voice_id": "es-ES-AlvaroNeural",
}
# Modo 2: audio propio (speaker.data en Base64)
# Keep voz.wav next to this script or change the open() path.
with open("voz.wav", "rb") as audio_file:
audio_b64 = base64.b64encode(audio_file.read()).decode("utf-8")
payload_speaker = {
"text": "Hola, esta es una prueba de voz",
"language": "es",
"speaker": {"filename": "voz.wav", "data": audio_b64},
}
payload = payload_catalog # or: payload_speaker
response = requests.post(
"https://videodoblaje.com/api/clone",
headers={"Authorization": f"Bearer {token}"},
json=payload,
timeout=180,
)
response.raise_for_status()
with open("salida_audio.wav", "wb") as output:
output.write(response.content)
Segundos de audio final generado con una voz clonada. No un plan abstracto ni un servicio abierto sin límite.
Es el máximo de salida de audio final que compras dentro de cada pack.
Porque así el pack, el importe, la cuenta del cliente y la referencia del pedido quedan ligados al cobro antes de enviar al usuario al proveedor.