Cómo funciona
El servidor MCP ejecuta cada generación como un trabajo asíncrono: lo inicias y luego consultas hasta que termina. Tu cliente gestiona el polling automáticamente — esta página es para quien construye uno o depura el flujo.
#Flujo canónico de medios
Para cualquier herramienta que reciba un archivo del usuario (edición de imagen, control de movimiento, lip-sync, subtítulos, separación, anuncios):
get_upload_url(model_id=X)— devuelve un enlace temporal al navegador. Envíalo al usuario tal cual.- El usuario sube en su navegador. Kubeez detecta duración / dimensiones en el cliente y las escribe en la tabla de metadatos.
get_upload_session(token)— devuelve las URLs públicas másduration_secondspor archivo y un flagbilling_readiness(exact/pessimistic_fallback).estimate_generation_cost(model, reference_*_seconds=…)— previsualización exacta del precio sin descontar créditos. Cítaselo al usuario.generate_*(...)— solo después de que el usuario confirme.
Los modelos de tarifa fija (Nano Banana, Flux, Imagen, Z-Image, Seedream, Logo Maker, anuncios, música, voz) saltan el paso 4 — cita cost_per_generation desde get_models directamente.
#Flujos por herramienta
#Imágenes y vídeo
- Opcional:
get_models→ elige un model_id y lee sus capacidades. - Opcional:
get_balancepara verificar créditos. generate_media(prompt, model, …)→ devuelvegeneration_id.- Consulta
get_generation_status(id)cada 5s tras una espera inicial breve (~10s para imagen, ~30s para vídeo corto). - Cuando
statusseacompleted, leeoutputs[]— cada elemento tieneurl,thumbnail_url, opcionaloptimized_url.
#Música
generate_music(prompt, …)→generation_id.- Consulta
get_music_status(id)tras ~30s, luego cada 5s. - Cuando termine, lee
songs[]— cada uno conaudio_url,stream_url,cover_image_url.
#Subtítulos
generate_captions(media_url, …)es síncrono — devuelve subtítulos a nivel de palabra en la respuesta (espera de 1–5 minutos).
#Separación de audio
generate_separation(media_url)→separation_id.- Consulta
get_separation_status(id)tras ~20s, luego cada 5s. - Cuando termine, lee
vocals_url+instrumental_url.
#Creatividades publicitarias
create_ad_copy(reference_ad_url, …, variant_count)→generation_ids: [...](uno por variante).- Consulta cada id con
get_generation_statushasta completar.
#Cadencia del polling
Cada fila de get_models lleva un estimated_time_seconds basado en tiempos reales históricos. Úsalo como primera espera de polling, luego cada 5s. No consultes cada segundo — gastas tu cuota de rate-limit por el mismo resultado.
| Familia | Espera inicial típica |
|---|---|
| Imagen | ~10s (z-image suele <3s) |
| Vídeo corto (5–10s) | ~30s |
| Vídeo largo (15s+) | ~60s |
| Música | ~30s |
| Voz / TTS | ~5s |
| Separación de audio | ~20s |
#Buenas prácticas
- Cita el coste antes de generar para cualquier modelo por duración —
estimate_generation_costes de solo lectura. - Empieza siempre con
get_models— no fijes model_ids; las capacidades determinan la forma de la petición. - Respeta los requisitos de entrada —
get_modelste dicerequires_input_media,max_input_images, etc. - Maneja 429 (rate limit) — espera y reintenta. No insistas con bucles cerrados ante errores.
- Muestra errores claros al usuario ante créditos insuficientes o entradas inválidas — no reintentes sin acción del usuario.
Consulta Limitaciones para rate limits y comportamiento de devolución de créditos.
