sora-2
Sora 2 crea vídeo con diálogos, efectos de sonido y audio de fondo sincronizados a partir de texto o de una imagen de referencia. El perfil estándar permite explorar ideas visuales y crear clips conceptuales, con flujos separados del productor para personajes no humanos reutilizables, continuaciones y ediciones de vídeo específicas.
- Ailoot Ultra · Chat Completions
POST /v1/chat/completionssora-2 - Ailoot Ultra · Anthropic Messages
POST /v1/messagessora-2
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.
Sora 2 es el modelo de generación de vídeo y audio de OpenAI para crear clips dinámicos a partir de la descripción escrita de una escena o de una imagen de referencia. Genera la secuencia visual junto con voces, efectos y sonido de fondo sincronizados. El perfil estándar de Sora 2 está orientado a la exploración visual, el desarrollo de conceptos, los prototipos y los primeros montajes. Sora 2 Pro es una edición separada orientada a una mayor fidelidad visual y a acabados de mayor resolución.
Describe un plano que pueda verse y oírse
La guía de prompts del fabricante organiza un brief útil en torno al encuadre, el sujeto, la acción, el escenario y la luz. Da a la escena un estilo visual coherente y describe después el movimiento en momentos claros. Un concepto original de producto podría mostrar un pequeño objeto mecánico que gira una vez sobre un banco de trabajo mientras la cámara se acerca lentamente, con luz suave de una ventana y un sutil sonido de motor. Indica en qué debe fijarse el espectador y cómo termina la acción.
Haz que el movimiento de cámara y la acción del sujeto de cada plano sean comprensibles. Una secuencia complicada puede dividirse en bloques de planos diferenciados, cada uno con su propio encuadre, acción e iluminación. Conserva los mismos detalles del sujeto y la misma paleta cuando varios clips deban formar una única secuencia. La guía destaca que los planos más cortos suelen seguir las instrucciones con mayor fiabilidad y que generar repetidamente con el mismo prompt produce tomas diferentes.
La presentación del modelo describe mejoras en el comportamiento físico y la continuidad entre planos, con estilos realistas, cinematográficos y de anime. Son capacidades previstas que deben dirigirse y comprobarse. Revisa el movimiento, el contacto entre objetos, las proporciones y la continuidad, en lugar de dar por hecho que un primer fotograma verosímil garantiza una secuencia coherente. Si una acción no resulta clara, simplifícala y dale un comienzo y un final visibles.
Dirige el diálogo y el sonido por separado
Especifica las frases habladas por separado de la descripción visual y etiqueta a los hablantes de forma coherente. Mantén el diálogo lo bastante breve para encajar en la acción y en la duración prevista del clip. Para una animación con dos personajes, alterna una pregunta y una respuesta breves en lugar de pedir que un plano corto incluya un discurso largo. La guía advierte de que un diálogo complejo y extenso puede alterar el ritmo y la sincronización.
Describe el paisaje sonoro propio de la escena: el sonido de un pequeño movimiento, el ambiente de una habitación o el ritmo de un efecto del entorno. Explica qué sonido debe coincidir con la acción. Escucha las voces y los efectos resultantes junto con la imagen y comprueba la asignación de hablantes, las palabras y la sincronización. El audio sincronizado forma parte del clip generado, en lugar de constituir una respuesta de texto separada.
Tamaño, duración y un inicio guiado por una imagen
Los tamaños de salida documentados para el modelo estándar son 720×1280 en vertical y 1280×720 en horizontal. Los tamaños de mayor resolución del perfil Pro no deben atribuirse a Sora 2 estándar. El tamaño y la duración son ajustes explícitos de la petición; escribir otro tamaño o pedir una película más larga en el prompt no modifica esos ajustes. La referencia de creación enumera opciones de clips de 4, 8 y 12 segundos, por lo que conviene elegir un momento breve y definido al preparar un plano. El flujo ampliado del productor también documenta opciones de clips de 16 y 20 segundos.
Una imagen de referencia fija el punto de partida del primer fotograma, y el texto describe lo que sucede después. El productor admite referencias JPEG, PNG y WebP y exige que la imagen coincida con el tamaño de vídeo de destino. Prepara el sujeto, el entorno y la composición en esa imagen inicial, y pide después un movimiento específico. Se trata de una referencia para el fotograma de apertura, no de una garantía de que todos sus detalles se mantengan durante todo el clip.
Personajes no humanos reutilizables
El flujo ampliado del productor puede crear un recurso de personaje reutilizable a partir de un vídeo breve de referencia de un animal, una mascota de marca o un objeto. Sus indicaciones de preparación piden un clip MP4 de unos dos a cuatro segundos, de 720p a 1080p, en 16:9 o 9:16. Hacer coincidir la relación de aspecto del origen y de la salida ayuda a evitar una apariencia estirada. La generación puede utilizar hasta dos personajes como referencia.
Conserva el identificador del personaje y menciona su nombre en el prompt; pasar solo el identificador no completa la preparación que indica la guía. Los recursos de personaje pueden acompañar una generación guiada por una imagen, pero las extensiones de vídeo no los admiten. El productor bloquea por defecto la subida de personajes con apariencia humana y rechaza las imágenes de referencia que contienen rostros humanos en el flujo de API documentado. Las funciones de personajes personales de la aplicación Sora constituyen un flujo de producto separado.
Continúa o edita un clip terminado
Una extensión utiliza un vídeo de origen terminado y un prompt de continuación, tomando el clip completo como contexto para el movimiento, la dirección de cámara y la continuidad de la escena. La guía describe ampliaciones de hasta 20 segundos por extensión. La entrada documentada de una extensión consiste en el vídeo de origen y el texto; ese modo excluye referencias adicionales de personajes o imágenes. Describe cómo continúa la acción existente, en lugar de introducir una escena sin relación y sin transición.
La edición de vídeo se centra en un cambio claro sobre un clip existente. Una revisión concreta puede modificar el color de un objeto o la paleta de la escena conservando el resto del plano. La guía del productor recomienda un cambio bien definido cada vez y distingue la edición de un vídeo generado de la subida de metraje arbitrario, que tiene una condición de admisión separada. Conserva el original terminado e identifica la revisión exacta necesaria antes de hacer otra edición.
Trabajos de renderizado y vídeo terminado
El flujo de vídeo documentado del productor es asíncrono: un trabajo enviado puede quedar en cola o en curso antes de completarse o fallar. Un trabajo completado produce un vídeo MP4; las miniaturas y las hojas de sprites sirven para las vistas previas y la exploración. Mantén la identidad del trabajo asociada al prompt, las referencias y los recursos recibidos. Una respuesta inicial del trabajo no es el vídeo final reproducible.
El flujo de descarga ordinario describe una validez de una hora para la URL de descarga. El flujo ampliado por lotes prepara peticiones de renderizado JSON independientes con identificadores estables de elementos, referencias subidas y un resultado asociado a cada plano; sus recursos completados tienen un periodo de descarga separado de hasta 24 horas. Guarda el clip terminado cuanto antes y comprueba la imagen y el sonido reales antes de considerarlo una toma seleccionada.
Las restricciones de contenido documentadas de la API del productor exigen material adecuado para menores de 18 años y rechazan personajes o música protegidos por derechos de autor, así como la generación de personas reales. Prepara la escena y las referencias de acuerdo con ello. El resultado directo del modelo es vídeo con audio, no imágenes fijas generadas, una respuesta conversacional de herramienta ni una película de duración ilimitada. Conserva la identidad exacta del modelo estándar y el clip de origen aceptado al continuar un concepto visual.
Ailoot Ultra · Chat Completions POST /v1/chat/completions sora-2
sora-2Primeros pasos
Sora 2 crea vídeo con diálogos, efectos de sonido y audio de fondo sincronizados a partir de texto o de una imagen de referencia. El perfil estándar permite explorar ideas visuales y crear clips conceptuales, con flujos separados del productor para personajes no humanos reutilizables, continuaciones y ediciones de vídeo específicas.
- Entradas aceptadas
- Texto
- Resultados
- json · sse
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · Chat Completions POST /v1/chat/completions
- Tipos de entrada
text- Tipos de salida
json,sse- Formato de salida
- JSON o text/event-stream
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites sora-2 | Predeterminado— |
Campomessages | Tipomessage[] | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campomessages[].role | Tipostring | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campomessages[].content | Tipostring | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Combinaciones de materiales de entrada
owned_text_messages
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetrocontent_type | Contratoapplication/json |
Parámetrorequired | Contratomodel, messages |
Parámetromaterial_types | Contratotext |
Parámetromessages | Contratolista de mensajes con role y content como cadena literal |
Parámetrofile_material | ContratoEl material UTF-8 real puede insertarse como contenido de cadena literal; no se deduce ninguna referencia a archivo. |
Parámetrooptional_controls | Contratostream |
Ciclo de vida: synchronous_json_or_sse
Planes
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 de Ailoot
Precios por configuración
| Configuración | Tabla de tarifas | Cargo |
|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Cargo Entrada · Tokens de entrada $0 / 1K tokens Salida · Tokens de salida $0.2 / 1K tokens Entrada · Lectura de caché $0 / 1K tokens Entrada · Escritura en caché $0 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
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 · Chat Completions
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"sora-2","messages":[{"role":"user","content":"hello"}],"stream":false}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
from pathlib import Path
print(Path("result.json").read_text(encoding="utf-8"))
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="sora-2", messages=[{"role":"user","content":"hello"}], stream=False)
import json
from pathlib import Path
data = result.to_dict(mode="json")
Path("result.json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"sora-2","messages":[{"role":"user","content":"hello"}],"stream":true}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.sse
Recibir y guardar resultados
Ailoot Ultra · Chat Completions
JSON o text/event-stream
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva todos los bytes del JSON o SSE, las cabeceras de respuesta, el uso devuelto y todos los campos de resultado proporcionados. No se establece una familia de resultados específica del modelo.
Si es necesario revisar la respuesta original
Conserva la respuesta original y la identidad del intento; no se deduce ninguna consulta periódica de un trabajo nuevo ni un reenvío.
Campos de respuesta
| Campo | Tipo | Significado |
|---|---|---|
Campocomplete response JSON | Tipoobject | SignificadoConserva todos los campos devueltos sin presuponer una familia de resultados específica del modelo. |
CampoSSE data events | Tipostream | SignificadoConserva todos los eventos devueltos y los marcadores terminales, sin seleccionar únicamente los campos de texto. |
Alias
Alias del modelo
Ailoot Ultra sora-2
Alias de rutas de métodos
Usa las rutas de método indicadas arriba.
ID de modelo relacionados
Ailoot Ultra · Anthropic Messages POST /v1/messages sora-2
sora-2Primeros pasos
Sora 2 crea vídeo con diálogos, efectos de sonido y audio de fondo sincronizados a partir de texto o de una imagen de referencia. El perfil estándar permite explorar ideas visuales y crear clips conceptuales, con flujos separados del productor para personajes no humanos reutilizables, continuaciones y ediciones de vídeo específicas.
- Entradas aceptadas
- Texto
- Resultados
- json · sse
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Tipos de entrada
text- Tipos de salida
json,sse- Formato de salida
- JSON o SSE
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites sora-2 | Predeterminado— |
Campomessages | Tipomessage[] | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campomessages[].role | Tipostring | RequisitoObligatorio | Valores y límites user, assistant | Predeterminado— |
Campomessages[].content | Tipostring | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campomax_tokens | Tipointeger | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Combinaciones de materiales de entrada
Texto · Texto UTF-8
cadena messages[].content
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetrocontent_type | Contratoapplication/json |
Parámetrorequired | Contratomodel, messages, max_tokens |
Parámetrooptional_controls | Contratostream |
Parámetromaterial_types | Contratotext |
Parámetrotext_file_material | ContratoLee el documento real en UTF-8 y coloca su texto en el campo input indicado o en la cadena de contenido del mensaje. |
Ciclo de vida: synchronous_or_streamed
Planes
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 de Ailoot
Precios por configuración
| Configuración | Tabla de tarifas | Cargo |
|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Cargo Entrada · Tokens de entrada $0 / 1K tokens Salida · Tokens de salida $0.2 / 1K tokens Entrada · Lectura de caché $0 / 1K tokens Entrada · Escritura en caché $0 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
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 · Anthropic Messages
{
"model": "sora-2",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError
api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
with urlopen(request, timeout=120) as response:
raw = response.read()
Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
Path('result.json').write_bytes(error.read())
Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
Recibir y guardar resultados
Ailoot Ultra · Anthropic Messages
JSON o SSE
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva todos los bloques de contenido, las firmas de razonamiento y los ID reales de uso de herramientas. Ensambla todos los fragmentos incrementales de los bloques SSE; el primer bloque de texto no constituye la salida completa.
Si es necesario revisar la respuesta original
Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campoid | Tipostring |
Campomodel | Tipostring |
Campocontent[] | Tipotext|thinking|tool_use|other content block |
Campostop_reason | Tipostring|null |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Alias
Alias del modelo
Ailoot Ultra sora-2
Alias de rutas de métodos
Usa las rutas de método indicadas arriba.
ID de modelo relacionados
FAQ · sora-2
- ¿Qué entradas y resultados están disponibles?
POST /v1/chat/completions·sora-2:text→json,ssePOST /v1/messages·sora-2:text→json,sse- ¿Qué campos utiliza la solicitud?
POST /v1/chat/completions·sora-2:model,messages,streamPOST /v1/messages·sora-2:model,messages,max_tokens,stream