sora-2
Sora 2 crea video con diálogo sincronizado, efectos de sonido y audio de fondo a partir de texto o de una imagen de referencia. El perfil estándar permite explorar propuestas visuales y crear clips de concepto, con flujos separados del productor para personajes no humanos reutilizables, continuación y ediciones de video 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 video 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 voz, efectos y sonido de fondo sincronizados. El perfil estándar de Sora 2 se orienta a la exploración visual, el desarrollo de conceptos, los prototipos y los primeros montajes. Sora 2 Pro es una edición separada dirigida a una mayor fidelidad visual y a acabados de mayor resolución.
Describe una toma que se pueda ver y escuchar
La guía de prompts del fabricante organiza un brief útil en torno al encuadre, el sujeto, la acción, el entorno y la luz. Dale a la escena un estilo visual coherente y después describe el movimiento en momentos claros. Un concepto de producto original podría mostrar un pequeño objeto mecánico que gira una vez sobre una mesa de trabajo mientras la cámara se acerca lentamente, con luz suave de ventana y un sonido sutil de motor. Indica qué debe notar el espectador y cómo termina la acción.
Mantén comprensibles el movimiento de cámara y la acción del sujeto en cada toma. Una secuencia complicada se puede dividir en bloques de toma distintos, 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 sola secuencia. La guía destaca que las tomas más cortas suelen seguir las indicaciones con mayor fiabilidad y que generar repetidamente con el mismo prompt produce tomas diferentes.
El lanzamiento del modelo describe mejoras en el comportamiento físico y la continuidad entre tomas, incluidos estilos realistas, cinematográficos y de anime. Son capacidades previstas que debes dirigir y revisar. Examina el movimiento, el contacto entre objetos, las proporciones y la continuidad, en lugar de suponer que un primer fotograma creíble garantiza una secuencia coherente. Si una acción no queda clara, simplifícala y dale un inicio y un final visibles.
Dirige el diálogo y el sonido por separado
Especifica las líneas de diálogo por separado de la descripción visual y etiqueta a los hablantes de forma consistente. Mantén el diálogo lo bastante corto para ajustarse a la acción y a 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 una toma corta incluya un discurso largo. La guía advierte que un diálogo complejo y extenso puede alterar el ritmo y la sincronización.
Describe el paisaje sonoro que corresponde a la escena: el sonido de un pequeño movimiento, el ambiente de la habitación o el ritmo de un efecto del entorno. Explica qué sonido debe coincidir con la acción. Escucha la voz y los efectos resultantes junto con la imagen y revisa la asignación de hablantes, las palabras y los tiempos. El audio sincronizado forma parte del clip generado, en lugar de ser una respuesta de texto separada.
Tamaño, duración y un inicio guiado por imagen
Los tamaños de salida documentados del modelo estándar son 720×1280 en vertical y 1280×720 en horizontal. Los tamaños de mayor resolución del perfil Pro no se deben atribuir a Sora 2 estándar. El tamaño y la duración son ajustes explícitos de la solicitud; 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 duraciones de clip de 4, 8 y 12 segundos, así que elige una acción breve y definida al preparar una toma. El flujo ampliado del productor también documenta duraciones de clip de 16 y 20 segundos.
Una imagen de referencia fija el 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 del video de destino. Prepara el sujeto, el entorno y la composición en esa imagen inicial; después pide un movimiento específico. Se trata de una referencia para el fotograma inicial, no de una garantía de que cada detalle se mantendrá durante todo el clip.
Personajes no humanos reutilizables
El flujo ampliado del productor permite crear un recurso de personaje reutilizable a partir de un video de referencia corto de un animal, una mascota de marca o un objeto. Sus indicaciones de preparación piden un clip MP4 de aproximadamente dos a cuatro segundos, de 720p a 1080p, en 16:9 o 9:16. Hacer coincidir la relación de aspecto de origen y salida ayuda a evitar una apariencia estirada. La generación puede referenciar hasta dos personajes.
Conserva el identificador del personaje y menciona su nombre en el prompt; pasar únicamente el identificador no cumple toda la preparación indicada en la guía. Los recursos de personaje pueden acompañar una generación guiada por imagen, pero las extensiones de video no los aceptan. El productor bloquea por defecto las cargas de personajes con apariencia humana y rechaza imágenes de referencia que contengan rostros humanos en el flujo de API documentado. Las funciones de personajes personales de la app de Sora corresponden a otro flujo de producto.
Continúa o edita un clip terminado
Una extensión toma un video de origen terminado y un prompt de continuación, y usa el clip de origen completo como contexto para el movimiento, la dirección de cámara y la continuidad de la escena. La guía describe adiciones de hasta 20 segundos por extensión. La entrada documentada de la extensión es el video 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 vez de introducir una escena sin relación y sin transición.
La edición de video se centra en un cambio claro de un clip existente. Una revisión específica puede modificar el color de un objeto o la paleta de la escena y conservar el resto de la toma. La guía del productor recomienda un cambio bien definido a la vez y distingue entre editar un video generado y subir metraje arbitrario, lo cual tiene una condición de elegibilidad separada. Conserva el original terminado e identifica la revisión exacta que necesitas antes de hacer otra edición.
Trabajos de renderizado y el video terminado
El flujo de video documentado del productor es asíncrono: un trabajo enviado puede quedar en cola o en curso antes de completarse o fallar. Un trabajo completado entrega un video MP4; las miniaturas y las hojas de sprites permiten generar vistas previas y explorar los resultados. Mantén la identidad del trabajo asociada con el prompt, las referencias y los recursos devueltos. Una respuesta inicial del trabajo no es el video reproducible terminado.
El flujo habitual de descarga describe una vigencia de una hora para la URL de descarga. El flujo ampliado por lotes prepara solicitudes de renderizado JSON independientes, con identificadores de elemento estables, referencias cargadas y un resultado vinculado a cada toma; sus recursos terminados tienen un periodo de descarga separado de hasta 24 horas. Conserva el clip terminado cuanto antes e inspecciona la imagen y el sonido reales antes de considerarlo una toma seleccionada.
Las restricciones de contenido documentadas para la API del productor exigen material apto para públicos menores de 18 años y rechazan personajes o música con derechos de autor y la generación de personas reales. Prepara la escena y las referencias de acuerdo con ello. El resultado directo del modelo es video con audio, no imágenes fijas generadas, una respuesta conversacional de herramienta ni una película 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-2Inicio
Sora 2 crea video con diálogo sincronizado, efectos de sonido y audio de fondo a partir de texto o de una imagen de referencia. El perfil estándar permite explorar propuestas visuales y crear clips de concepto, con flujos separados del productor para personajes no humanos reutilizables, continuación y ediciones de video específicas.
- Entradas aceptadas
- Texto
- Resultados
- json · sse
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · Chat Completions POST /v1/chat/completions
- Entrada
text- 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 | Contratoarreglo de mensajes con role y content como cadena literal |
Parámetrofile_material | ContratoEl contenido UTF-8 real puede insertarse como cadena literal en content; no se deduce ninguna referencia a un archivo. |
Parámetrooptional_controls | Contratostream |
Ciclo de vida: synchronous_json_or_sse
Tarifas
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo fast
- Sin especificar Cuando se selecciona el modo fast
- Modo flex
- Sin especificar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Sin especificar Cuando el esfuerzo máximo de razonamiento usa el ajuste 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 monto 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 JSON o SSE, los encabezados de respuesta, el uso devuelto y todos los campos del resultado proporcionados. No se afirma que exista una familia de salida 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 de trabajos nuevos ni un reenvío.
Campos de respuesta
| Campo | Tipo | Significado |
|---|---|---|
Campocomplete response JSON | Tipoobject | SignificadoConserva todos los campos devueltos sin suponer una familia de resultados específica del modelo. |
CampoSSE data events | Tipostream | SignificadoConserva cada evento devuelto y marcador final 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-2Inicio
Sora 2 crea video con diálogo sincronizado, efectos de sonido y audio de fondo a partir de texto o de una imagen de referencia. El perfil estándar permite explorar propuestas visuales y crear clips de concepto, con flujos separados del productor para personajes no humanos reutilizables, continuación y ediciones de video específicas.
- Entradas aceptadas
- Texto
- Resultados
- json · sse
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Entrada
text- 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
Tarifas
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo fast
- Sin especificar Cuando se selecciona el modo fast
- Modo flex
- Sin especificar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Sin especificar Cuando el esfuerzo máximo de razonamiento usa el ajuste 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 monto 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 los encabezados. 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