Vidu: Q2 Text-to-Video
Vidu Q2 crea vídeo a partir de una descripción de escena en texto, con una duración de 1–10 segundos, salida de 540p, 720p o 1080p y cinco relaciones de aspecto. Este perfil viduq2 concreto utiliza el campo prompt para el estilo y el movimiento y devuelve su resultado mediante una tarea asíncrona.
Sobre el modelo
Esta descripción cubre las capacidades del modelo. Las entradas, salidas y opciones disponibles en Ailoot se indican a continuación para el método seleccionado.
Vidu Q2 crea vídeo a partir de una escena escrita mediante el perfil de texto a vídeo seleccionado por viduq2. Sus entradas obligatorias son el identificador exacto del modelo y un prompt que describa la escena. Utilízalo para un concepto breve de producto, un plano general o una acción de personaje cuyo aspecto y movimiento se puedan especificar con palabras. Este método configurado es de texto a vídeo; su descripción no asigna al selector un modo separado de imagen de referencia o edición de vídeo.
Construye las instrucciones en torno a una secuencia visible. Identifica el sujeto, el lugar, la acción, el tamaño del plano, el movimiento de cámara y la composición final. Para un concepto de producto, describe un objeto sobre una mesa, la luz que recorre su material y un lento acercamiento de cámara que termine en un detalle reconocible. Para una escena de un lugar, establece el entorno antes de acercarte al punto de interés. Ajusta la acción a la duración del clip elegida para que la escena tenga espacio para el final previsto.
El límite de prompt es de 2.000 caracteres. Pon primero el sujeto y la acción esenciales; después, añade los detalles de iluminación, material, entorno y cámara que cambien el resultado deseado. Especifica el estilo visual en el prompt. La guía específica de Q2 indica que los parámetros separados style y movement_amplitude no surten efecto en este modelo, así que los ajustes predefinidos general o anime y las opciones de amplitud de movimiento no sustituyen una descripción clara de la escena.
El ajuste de duración específico del modelo acepta segundos enteros de uno a diez. Las opciones de resolución específicas de Q2 son 540p, 720p y 1080p, con 720p como valor predeterminado documentado. Elige la duración y la resolución conjuntamente según la acción y el destino. Una breve presentación del sujeto y un movimiento más largo necesitan tiempos diferentes; aumentar la duración solicitada debe servir a la secuencia visible, en lugar de limitarse a alargar una escena sin cambiar sus instrucciones. Revisa las dimensiones y la duración reales del clip devuelto al preparar su colocación final.
Las opciones documentadas de aspect_ratio son 16:9, 9:16, 3:4, 4:3 y 1:1, con 16:9 como valor predeterminado. La guía incluye expresamente 3:4 y 4:3 para la familia Q2. Elige el encuadre antes de generar y describe una composición adecuada: mantén claramente visible el sujeto principal en una vista vertical o utiliza el ancho de un encuadre horizontal para mostrar el entorno. Deja la vista final lo bastante clara para la página, presentación o incorporación posterior de rótulos prevista.
El campo seed controla la variación. Omitirlo o proporcionar 0 selecciona un valor aleatorio; un valor distinto de cero selecciona la opción de semilla fija documentada para una generación reproducible. Conserva el seed devuelto junto con el prompt y los ajustes al comparar versiones. La operación compartida también documenta los controles audio y off_peak específicamente para modelos Q3. Esas opciones de Q3 no son capacidades asignadas a este perfil Q2; planifica esta solicitud en torno a su entrada de texto y salida de vídeo documentadas.
La generación es asíncrona. El envío devuelve task_id y un estado inicial, con created para una tarea recién creada. Conserva esa identidad de tarea mientras sigues el procesamiento. La consulta de resultados documentada utiliza state=success para un resultado correcto y devuelve una lista creations. Cada entrada tiene la URL de su vídeo en creations[].url; guarda todos los vídeos devueltos en lugar de asumir que la tarea siempre contiene exactamente una creación.
La documentación de resultados también comunica la duración real del vídeo, fps y el ancho y alto de la resolución. Conserva esos valores comunicados junto con el clip terminado, en lugar de tratar la frecuencia de fotogramas o las dimensiones de un ejemplo como una especificación fija de Q2. La respuesta de creación de la tarea incluye un valor credits junto con la configuración de la solicitud. Conserva esos metadatos de tarea comunicados y el identificador de la tarea completada junto con el resultado, para que cada vídeo siga vinculado a sus ajustes de generación.
Revisa toda la secuencia frente a las instrucciones originales: aspecto del sujeto, forma del objeto, dirección de movimiento, continuidad de cámara y vista final prevista. Para una revisión, identifica el detalle concreto que no cumplió las instrucciones y conserva las partes de la escena que funcionaron. Guarda juntos el prompt, el selector exacto, los ajustes, la identidad de tarea y los vídeos terminados, para que una comparación posterior se base en los resultados reales.
Ailoot Ultra · Vídeo POST /v1/videos viduq2
viduq2Primeros pasos
Vidu Q2 crea vídeo a partir de una descripción de escena en texto, con una duración de 1–10 segundos, salida de 540p, 720p o 1080p y cinco relaciones de aspecto. Este perfil viduq2 concreto utiliza el campo prompt para el estilo y el movimiento y devuelve su resultado mediante una tarea asíncrona.
- Entradas aceptadas
- Texto
- Resultados
- Vídeo
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · Vídeo POST /v1/videos
- Tipos de entrada
text- Tipos de salida
video
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites viduq2 | Predeterminado— |
Campoprompt | Tipostring | RequisitoObligatorio | Valores y límites Condiciones: Describe la escena que se generará. El límite documentado es de 2000 caracteres; Ailoot comprueba que la cadena no esté vacía y conserva el texto. | Predeterminado— |
Campoduration | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 Máximo: 10 Condiciones: La descripción específica de viduq2 indica entre 1 y 10 segundos enteros. No se documenta ninguna duración predeterminada específica del modelo. Unidad: segundos | Predeterminado— |
Camposeed | Tipostring | RequisitoOpcional | Valores y límites Condiciones: Omítelo o envía la cadena "0" para obtener aleatoriedad. Un valor de seed proporcionado distinto de cero selecciona el comportamiento documentado con un valor fijo de seed; no se especifica ningún intervalo numérico. | Predeterminado— |
Campoaspect_ratio | Tipostring | RequisitoOpcional | Valores y límites 16:9, 9:16, 3:4, 4:3, 1:1 | Predeterminado16:9 |
Camporesolution | Tipostring | RequisitoOpcional | Valores y límites 540p, 720p, 1080p Condiciones: La lista específica de viduq2 documenta estos tramos para duraciones de entre 1 y 10 segundos. Una enumeración y una tabla compartidas también mencionan 360p; su aplicabilidad contradice esa lista y no se establece aquí. | Predeterminado720p |
Campostyle | Tipostring | RequisitoOpcional | Valores y límites general, anime Condiciones: La solicitud compartida acepta este campo, pero la documentación indica expresamente que no tiene efecto en viduq2. | Predeterminadogeneral |
Campomovement_amplitude | Tipostring | RequisitoOpcional | Valores y límites auto, small, medium, large Condiciones: La solicitud compartida acepta este campo, pero la documentación indica expresamente que no tiene efecto en los modelos q2. | Predeterminadoauto |
Combinaciones de materiales de entrada
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetrocontent_type | Contratoapplication/json |
Parámetrorequired | Contratomodel, prompt |
Parámetrooptional | Contratoduration, seed, aspect_ratio, resolution, style, movement_amplitude |
Parámetromaterial_types | Contratotext |
Parámetroadditional_properties | Contratotrue |
Parámetrovalidation_scope | ContratoAiloot valida que las cadenas model/prompt no estén vacías. Los tipos y límites opcionales siguientes son el contrato documentado de la solicitud; los demás campos se conservan para el modelo seleccionado. |
Alias de método: /v1/videos/generations
Ciclo de vida: submit_once_poll_original
GET /v1/videos/{request_id}
GET /v1/videos/generations/{request_id}
GET /v1/videos/{request_id}/content
GET /v1/videos/generations/{request_id}/content
Crea una sola vez y conserva el id público devuelto y polling_url.
Consulta periódicamente la operación original y lee state; la finalización se alcanza con success y un resultado creations[].url bajo tu titularidad.
Descarga cada URL devuelta de los vídeos bajo tu titularidad; no deduzcas del ejemplo una cantidad fija de resultados, una duración ni una frecuencia de fotogramas.
Planes
Cómo se calcula el cargo definitivo
Las tarifas mostradas estiman el coste antes de la generación. El cargo final se calcula a partir del coste registrado para la generación original. La duración medida del resultado y las cantidades previstas no constituyen la cantidad facturable final.
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo rápido
- Sin especificar Cuando se selecciona el modo rápido
- Modo flex
- Sin especificar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Sin especificar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)
Tarifas estimadas para comparar
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Cantidad prevista | Cargo |
|---|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Cantidad prevista— | Cargo Entrada · Tokens de entrada · Estimación solo para comparar — / 1K tokens Salida · Tokens de salida · Estimación solo para comparar — / 1K tokens Entrada · Lectura de caché · Estimación solo para comparar — / 1K tokens Entrada · Escritura en caché · Estimación solo para comparar — / 1K tokens Entrada · Escritura en caché, 1 hora · Estimación solo para comparar — / 1K tokens |
| ConfiguraciónCoste estimado de generación | Tabla de tarifas— | Cantidad previstaestimación para una generación | Cargo Salida · Coste estimado de generación · Estimación solo para comparar $5.12 estimación previa a la generación Esta estimación no es un cargo adicional ni una tarifa fija para la generación completada. |
Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Solicitudes de ejemplo
Ailoot Ultra · Vídeo
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
cat > request.json <<'JSON_REQUEST'
{"model":"viduq2","prompt":"In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene."}
JSON_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_POLL'
import json
from pathlib import Path
from urllib.parse import quote,urljoin,urlsplit
r=json.loads(Path("result.json").read_text())
i=r.get("id")
if not isinstance(i,str) or not i:raise SystemExit("Keep original response/headers/id; do not resubmit creation.")
u=urljoin("https://api.ailoot.ai",r.get("polling_url") or "/v1/videos/"+quote(i,safe=""))
p=urlsplit(u)
if p.scheme!="https" or p.netloc!="api.ailoot.ai" or not p.path.startswith("/v1/videos/"):raise SystemExit("Use the actual Ailoot lookup path.")
Path("poll-url.txt").write_text(u)
PY_POLL
curl --fail-with-body --silent --show-error "$(cat poll-url.txt)" -H "Authorization: Bearer $AILOOT_API_KEY" -D status-headers.txt -o status.json
set -eu
python3 - <<'PY_ASSETS'
import json
from pathlib import Path
from urllib.parse import urlsplit
r=json.loads(Path("status.json").read_text())
if r.get("state")!="success":raise SystemExit("Poll the same original job until its owned result is returned.")
creations=r.get("creations")
if not isinstance(creations,list) or not creations:raise SystemExit("No completed video creations.")
urls=[]
for item in creations:
value=item.get("url") if isinstance(item,dict) else None
values=[value] if isinstance(value,str) else value
if not isinstance(values,list) or not values:raise SystemExit("No completed video URL.")
for u in values:
if not isinstance(u,str):raise SystemExit("Invalid returned URL.")
p=urlsplit(u)
if p.scheme!="https" or p.netloc!="api.ailoot.ai" or not p.path.startswith("/v1/media/assets/") or not p.path.endswith("/content") or not p.query:raise SystemExit("Wait for the actual Ailoot-owned signed result.")
urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_ASSETS
index=0
while IFS= read -r asset_url; do
curl --fail-with-body --silent --show-error "$asset_url" -o "video-${index}.bin"
index=$((index + 1))
done < asset-urls.txt
Recibir y guardar resultados
Ailoot Ultra · Vídeo
El JSON conserva el estado nativo y la lista creations, con los valores públicos id/provider_task_id/polling_url añadidos. Las URL de vídeo seleccionadas están vacías antes de la publicación y se convierten en URL firmadas de recursos bajo titularidad de Ailoot tras la finalización.
GET /v1/videos/{request_id}GET /v1/videos/generations/{request_id}GET /v1/videos/{request_id}/contentGET /v1/videos/generations/{request_id}/content
Conserva todos los resultados completados
Guarda todos los vídeos completados o archivos recibidos; descarga cada URL de archivo que se haya devuelto.
Descarga todas las URL reales devueltas en creations[].url; un índice de contenido identifica un resultado real devuelto.
Si es necesario revisar la respuesta original
La declaración fijada no enumera ningún estado terminal de fallo. Conserva la respuesta, las cabeceras y el id originales, y comprueba esa misma operación ante cualquier estado desconocido o error result_pending_check; no vuelvas a enviar nunca una creación de resultado incierto.
Campos de respuesta
| Campo | Tipo | Significado |
|---|---|---|
Campoid | Tipostring | SignificadoIdentificador público devuelto de la tarea u operación de Ailoot. |
Campoprovider_task_id | Tipostring | SignificadoIdentificador de la tarea original, independiente del id público. |
Campopolling_url | Tipostring | SignificadoRuta de consulta de Ailoot devuelta para la tarea original. |
Campotask_id | Tipostring when supplied | SignificadoIdentificador original presente en la respuesta de creación. |
Campostate | Tipostring when supplied | SignificadoEstado nativo de la tarea: created para el estado pendiente fijado y success para la finalización. |
Campoerr_code | Tipostring when supplied | SignificadoDiagnóstico de la tarea; la especificación guardada no declara ninguna lista enumerada de códigos de error. |
Campocreations[].url | Tipostring|string[] | SignificadoCada URL seleccionada de un vídeo completado se sustituye por una URL firmada de un recurso bajo titularidad de Ailoot. |
Campocreations[].video.duration | Tiponumber when supplied | SignificadoDuración del vídeo devuelta; comprueba el resultado real completado. |
Campocreations[].video.fps | Tipointeger when supplied | SignificadoFrecuencia de fotogramas devuelta; no se garantiza una frecuencia fija. |
Campocreations[].video.resolution.width | Tipointeger when supplied | SignificadoAnchura de salida devuelta en píxeles. |
Campocreations[].video.resolution.height | Tipointeger when supplied | SignificadoAltura de salida devuelta en píxeles. |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónJSON o modelo no válido, cadenas obligatorias ausentes o vacías, o índice de contenido no válido. | Siguiente paso |
Respuesta401 · authentication_error | CondiciónClave API de Ailoot no válida. | Siguiente paso |
Respuesta403 · permission_error | CondiciónEl grupo de la clave API no tiene acceso a esta ruta de medios. | Siguiente paso |
Respuesta404 · not_found_error | CondiciónLa tarea original o el resultado solicitado no existe o no pertenece al mismo usuario, clave API o grupo. | Siguiente paso |
Respuesta502 · result_pending_check | CondiciónEl envío original o su estado está incompleto o no puede conciliarse; conserva el ID original y no vuelvas a enviarlo. | Siguiente paso |
Respuesta503 · result_pending_check | CondiciónLa vinculación original, la ruta o los medios bajo tu titularidad siguen en comprobación; continúa comprobando esa operación original. | Siguiente paso |
Respuesta503 · server_error | CondiciónEl servicio de medios o el almacenamiento de la tarea original no está disponible. | Siguiente paso |
Alias
Alias del modelo
Ailoot Ultra viduq2
Alias de rutas de métodos
/v1/videos/generations
ID de modelo relacionados
FAQ · Vidu: Q2 Text-to-Video
- ¿Qué entradas y resultados están disponibles?
POST /v1/videos·viduq2:text→video- ¿Qué campos utiliza la solicitud?
POST /v1/videos·viduq2:model,prompt,duration,seed,aspect_ratio,resolution,style,movement_amplitude- ¿Qué límites se aplican?
POST /v1/videos·viduq2:duration.minimum:1;duration.maximum:10