> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Referencias y recursos

> **Note**
>
> **Guía práctica** · Da por hecho que has completado la [guía de inicio rápido de Imagen y Video ](/docs/es/eleven-api/guides/cookbooks/image-and-video).

## Resumen

La mayoría de los modelos de Imagen y Video aceptan contenido multimedia junto con el prompt: un primer fotograma para un vídeo, imágenes que
editar o audio con el que sincronizar los labios. Cada campo multimedia de la API recibe un objeto de referencia en lugar
de bytes sin procesar con una estructura fija, y cada referencia se etiqueta con un `type` que indica de dónde
procede el contenido.

| `type`          | Hace referencia a                                               | Campos                        |
| --------------- | --------------------------------------------------------------- | ----------------------------- |
| `generation`    | El resultado de otra generación, finalizada o aún en curso.     | `generation_id`               |
| `asset`         | Un archivo subido a la API de recursos.                         | `asset_id`                    |
| `inline_base64` | Contenido codificado directamente en el cuerpo de la solicitud. | `content_base64`, `mime_type` |

Los tres tipos son intercambiables dondequiera que se acepte una referencia, por lo que el mismo campo puede recibir una
generación en una solicitud y un recurso subido en la siguiente.

## Encadena una generación con la siguiente

Una referencia `generation` no tiene que apuntar a una generación que haya terminado. Envía la imagen,
obtén el ID de la respuesta y pásalo directamente a la solicitud de vídeo sin esperar: la
API pone el vídeo en cola detrás de la imagen y lo inicia en cuanto esta termina. No se
sube nada entre las dos llamadas.

Configura `webhook` en la última generación de la cadena y no tendrás que esperar nada. Ambas llamadas
devuelven el resultado en cuanto su generación se pone en cola, todo el grafo se ejecuta en el servidor y se llama a tu ruta
cuando la generación final alcanza un estado terminal.

```python maxLines=0
from elevenlabs import (
    ImageGenerationRequest_Gemini3ProImage,
    ImageReference_Generation,
    VideoGenerationRequest_Veo31FastGenerate001,
    WebhookTarget_All,
)

still = elevenlabs.flows.image.create(
    request=ImageGenerationRequest_Gemini3ProImage(
        prompt="A lighthouse on a cliff at dawn, heavy fog rolling in from the sea",
        aspect_ratio="16:9",
    )
)

# `still` is still pending here. Submitting now queues the video behind it.
clip = elevenlabs.flows.video.create(
    request=VideoGenerationRequest_Veo31FastGenerate001(
        prompt="The fog thickens and the beam sweeps across the water",
        start_frame=ImageReference_Generation(generation_id=still.id),
        duration_secs=8,
        webhook=WebhookTarget_All(),
    )
)

print(clip.id)
```

```typescript maxLines=0
const still = await elevenlabs.flows.image.create({
  modelId: "gemini-3-pro-image",
  prompt: "A lighthouse on a cliff at dawn, heavy fog rolling in from the sea",
  aspectRatio: "16:9",
});

// `still` is still pending here. Submitting now queues the video behind it.
const clip = await elevenlabs.flows.video.create({
  modelId: "veo-3.1-fast-generate-001",
  prompt: "The fog thickens and the beam sweeps across the water",
  startFrame: { type: "generation", generationId: still.id },
  durationSecs: 8,
  webhook: { type: "all" },
});

console.log(clip.id);
```

Solo la última generación necesita `webhook`. Configurarlo también en la imagen envía un evento para el
resultado intermedio, lo que resulta útil para informar del progreso, pero no es necesario para ejecutar la
cadena. Como en otros casos, el campo requiere un webhook suscrito a eventos de generación; consulta [webhooks de Imagen y Video](/docs/es/eleven-api/guides/how-to/image-and-video/webhooks) para configurar uno.

Si no tienes una ruta que reciba callbacks, elimina `webhook` y consulta el final de la cadena en su lugar. La
imagen intermedia tampoco necesita consultas propias: espera una vez, en la última generación, con el
intervalo correspondiente a su modalidad, que para vídeo no debe ser superior a una vez cada 10 segundos. Consulta las [directrices de consulta](/docs/es/eleven-api/guides/cookbooks/image-and-video#polling-guidelines).

```python
import time

while True:
    result = elevenlabs.flows.video.get(clip.id)
    if result.status in ("completed", "failed"):
        break
    time.sleep(10)
```

```typescript
let result = await elevenlabs.flows.video.get(clip.id);
while (result.status === "pending" || result.status === "generating") {
  await new Promise((resolve) => setTimeout(resolve, 10000));
  result = await elevenlabs.flows.video.get(clip.id);
}
```

Una generación que hace referencia a trabajo sin terminar se crea inmediatamente y permanece en `pending` hasta que
termine todo aquello a lo que hace referencia, sin que tengas que hacer nada más para iniciarla. Las cadenas
pueden tener cualquier profundidad y anchura: una generación puede esperar a varias referencias, cada una aún
esperando a su vez, de modo que puedes enviar un grafo completo de una sola vez y recogerlo solo en sus hojas. El tiempo
que pasa en cola no cuenta para el tiempo de espera de la generación.

Si falla una generación referenciada, la dependiente nunca se ejecuta: falla con el motivo `dependency_failed`
y arrastra consigo todo lo que esté en cola detrás de ella. No se cobra nada en la cadena colapsada: una
generación ya pagada se reembolsa, y otra cuyo precio depende de un resultado referenciado que aún no existe,
como una sincronización labial cuyo precio depende de la duración de una generación de audio pendiente,
solo se cobra cuando empieza. Un `generation_id` que no existe en tu espacio de trabajo
se rechaza en la propia llamada de creación, por lo que una errata aparece inmediatamente en vez de como una generación
fallida.

## Sube contenido como recurso

Sube un archivo a la API de recursos cuando el contenido proceda de fuera de ElevenLabs y quieras reutilizarlo
en varias generaciones. Los recursos pertenecen al espacio de trabajo y se conservan hasta que los eliminas.

```python
from elevenlabs import ImageReference_Asset, VideoGenerationRequest_Veo31FastGenerate001

with open("lighthouse.png", "rb") as f:
    asset = elevenlabs.assets.create(asset=f, name="lighthouse.png")

print(asset.asset_id)

clip = elevenlabs.flows.video.create(
    request=VideoGenerationRequest_Veo31FastGenerate001(
        prompt="The beam sweeps across the water as the fog thickens",
        start_frame=ImageReference_Asset(asset_id=asset.asset_id),
    )
)
```

```typescript
import { createReadStream } from "fs";

const asset = await elevenlabs.assets.create({
  asset: createReadStream("lighthouse.png"),
  name: "lighthouse.png",
});

console.log(asset.assetId);

const clip = await elevenlabs.flows.video.create({
  modelId: "veo-3.1-fast-generate-001",
  prompt: "The beam sweeps across the water as the fog thickens",
  startFrame: { type: "asset", assetId: asset.assetId },
});
```

La respuesta de la subida describe el recurso almacenado:

```json
{
  "asset_id": "5xM2KqOnZyce22SPZ9d4",
  "name": "lighthouse.png",
  "mime_type": "image/png",
  "created_at_unix": 1721520000,
  "content_url": "https://storage.googleapis.com/assets/5xM2KqOnZyce22SPZ9d4"
}
```

`content_url` es una URL firmada válida durante aproximadamente una hora y tiene el valor `null` mientras la subida sigue
procesándose. Vuelve a obtener el recurso para conseguir una URL nueva.

> **Warning**
>
> Acceder a la API de recursos con una clave de API requiere un plan Pro o superior, el mismo nivel que las
> rutas de generación.

### Límites de almacenamiento

Los recursos subidos cuentan para un límite total de almacenamiento del espacio de trabajo, que depende de tu plan:

| Plan       | Almacenamiento de recursos |
| ---------- | -------------------------- |
| Pro        | 11 GB                      |
| Scale      | 33 GB                      |
| Business   | 111 GB                     |
| Enterprise | 333 GB                     |

Solo los archivos que subes cuentan para el límite; los resultados generados no. Una subida que
hiciera que el espacio de trabajo superase su límite se rechaza con un error `asset_storage_limit_exceeded` antes de
leer el archivo. Elimina recursos que ya no necesites para liberar espacio o contacta con soporte para aumentar el
límite.

### Gestiona recursos

Enumera los recursos del más reciente al más antiguo, opcionalmente filtrando por nombre, y pagina los resultados con el cursor
de la respuesta anterior. `page_size` acepta de 1 a 100 y su valor predeterminado es 30.

```python
page = elevenlabs.assets.list(page_size=20, search="lighthouse")

for asset in page.assets:
    print(asset.asset_id, asset.name, asset.mime_type)

if page.has_more:
    page = elevenlabs.assets.list(page_size=20, search="lighthouse", cursor=page.next_cursor)
```

```typescript
let page = await elevenlabs.assets.list({ pageSize: 20, search: "lighthouse" });

for (const asset of page.assets) {
  console.log(asset.assetId, asset.name, asset.mimeType);
}

if (page.hasMore) {
  page = await elevenlabs.assets.list({
    pageSize: 20,
    search: "lighthouse",
    cursor: page.nextCursor,
  });
}
```

Obtén o elimina un único recurso por ID. Eliminar un recurso no afecta a las generaciones que ya
lo usaron.

```python
asset = elevenlabs.assets.get("5xM2KqOnZyce22SPZ9d4")
elevenlabs.assets.delete("5xM2KqOnZyce22SPZ9d4")
```

```typescript
const asset = await elevenlabs.assets.get("5xM2KqOnZyce22SPZ9d4");
await elevenlabs.assets.delete("5xM2KqOnZyce22SPZ9d4");
```

## Incluye contenido en línea

Una referencia `inline_base64` transporta el contenido en el cuerpo de la solicitud, lo que evita una subida independiente
para entradas puntuales. Codifica el archivo con el alfabeto base64 estándar e indica su tipo MIME.

```python
import base64

from elevenlabs import ImageGenerationRequest_GptImage2, ImageReference_InlineBase64

with open("headshot.jpg", "rb") as f:
    encoded = base64.b64encode(f.read()).decode()

generation = elevenlabs.flows.image.create(
    request=ImageGenerationRequest_GptImage2(
        prompt="Replace the background with a softly lit studio backdrop",
        images=[
            ImageReference_InlineBase64(
                content_base64=encoded,
                mime_type="image/jpeg",
            )
        ],
    )
)
```

```typescript
import { readFile } from "fs/promises";

const encoded = (await readFile("headshot.jpg")).toString("base64");

const generation = await elevenlabs.flows.image.create({
  modelId: "gpt-image-2",
  prompt: "Replace the background with a softly lit studio backdrop",
  images: [
    {
      type: "inline_base64",
      contentBase64: encoded,
      mimeType: "image/jpeg",
    },
  ],
});
```

> **Warning**
>
> El contenido en línea se almacena como un recurso efímero sin garantía de conservación y puede eliminarse cuando
> termina la generación. Sube el archivo a la API de recursos si necesitas hacer referencia a la
> misma entrada más de una vez.

El contenido en línea está limitado a 25 MB por referencia tras la descodificación. Los archivos más grandes deben ir a la API de
recursos, que acepta subidas mucho mayores y no tiene la penalización de tamaño de base64. Cada modalidad
acepta un conjunto fijo de tipos MIME:

| Referencia | `mime_type` aceptados                                               |
| ---------- | ------------------------------------------------------------------- |
| Imagen     | `image/jpeg`, `image/png`, `image/webp`, `image/heic`, `image/heif` |
| Audio      | `audio/mpeg`, `audio/wav`                                           |
| Vídeo      | `video/mp4`, `video/quicktime`, `video/webm`                        |

## Campos de referencia por modelo

Los campos de referencia reciben el nombre del papel que desempeña el contenido. `start_frame` y `end_frame` son
imágenes individuales que delimitan un vídeo, `image` y `audio` son las entradas necesarias de un modelo de sincronización labial, y los
plurales simples `images`, `videos` y `audios` son material de referencia libre del que se sirve el modelo.

Los campos que acepta un modelo y las combinaciones válidas varían según el modelo. Un `end_frame`
siempre requiere un `start_frame`. Incumplir una restricción devuelve un error de validación que indica el
campo problemático, así que la generación nunca se inicia ni se cobra.

### Veo 3.1

Ambos modelos Veo aceptan `start_frame`, `end_frame` y hasta tres entradas en `images`. A diferencia de otros
modelos, cada entrada de `images` incluye la referencia junto con el papel que desempeña:

```json
{
  "images": [
    {
      "image": { "type": "asset", "asset_id": "5xM2KqOnZyce22SPZ9d4" },
      "role": "subject"
    },
    {
      "image": { "type": "asset", "asset_id": "7pQ4LnBvXkR2mT9wYcHd" },
      "role": "style"
    }
  ]
}
```

Una referencia `subject` incorpora el sujeto o los elementos de escena de la imagen al vídeo; una referencia
`style` transfiere su estilo visual. Las imágenes de referencia no se pueden combinar con `start_frame` ni
`end_frame`, y requieren una duración de ocho segundos.

### Seedance

> **Warning**
>
> Los modelos de ByteDance están desactivados de forma predeterminada y requieren aprobación explícita antes de utilizarlos. Los clientes
> Enterprise pueden contactar con soporte para solicitar acceso.

Los tres niveles de Seedance 2.0 aceptan `start_frame`, `end_frame`, hasta 9 `images`, hasta 3 `videos`
y hasta 3 `audios`, sujetos a estas restricciones:

* Las referencias no se pueden combinar con `start_frame` ni `end_frame`.
* El audio de referencia requiere al menos una imagen o vídeo de referencia, por ejemplo, para realizar sincronización labial.
* El número total de archivos de referencia no debe superar 12.

Seedance 2.5 aumenta los límites a 30 `images`, 10 `videos` y 10 `audios` sin un total combinado,
y elimina la regla de que el audio de referencia necesita una imagen o vídeo que lo acompañe, por lo que se
acepta una entrada de solo audio. Las referencias siguen sin poder combinarse con `start_frame` ni `end_frame`.

### GPT Image

Los modelos GPT Image aceptan una `mask` junto con `images`. Las áreas completamente transparentes de la máscara indican
dónde puede editarse la primera imagen de referencia. Se rechaza una máscara sin imágenes de referencia.

## Siguientes pasos

#### [Webhooks](/docs/es/eleven-api/guides/how-to/image-and-video/webhooks)

Recibe el resultado de una generación en lugar de consultarlo.

#### [Resumen de Imagen y Video](/docs/es/overview/capabilities/image-video)

Compara las capacidades de los modelos, los formatos compatibles y la disponibilidad.

#### [Referencia de la API](/docs/es/api-reference/flows/image/create)

Explora las rutas de imagen, vídeo y recursos.