> ## Documentation Index
> Fetch the complete documentation index at: https://docs.comfy.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Inicio rápido de Comfy Router

> Genera imágenes y videos con los últimos modelos de IA en minutos.

Comfy Router te ofrece una sola API para modelos alojados de imagen y video en `https://api.comfy.org`. Crea una clave API en [tu espacio de trabajo de Comfy](https://platform.comfy.org/profile/api-keys?onboarding=router) y luego llama a cualquier modelo con los [SDK oficiales de Python y TypeScript](https://docs.comfy.org/es/development/api-development/sdks.md) o por HTTP simple. La facturación es de pago por uso: de forma predeterminada, cada solicitud toma créditos del saldo de tu espacio de trabajo, sin suscripción. Consulta los [precios de Router](https://docs.comfy.org/es/development/comfy-router/pricing.md) para ver las tarifas y otras opciones de facturación.

> [!NOTE]
>
> **¿Haces seguimiento del gasto con LiteLLM?** Router informa el costo en USD de una ejecución síncrona en el encabezado que LiteLLM lee, así no tienes que mantener una tabla de precios. Consulta [Usar Comfy Router con LiteLLM](https://docs.comfy.org/es/development/comfy-router/litellm).

## 1. Crear una clave API

Crea una clave en [tu espacio de trabajo de Comfy](https://platform.comfy.org/profile/api-keys?onboarding=router). En una terminal compatible con Bash, establece:

```bash theme={null}
export COMFY_API_KEY="comfyui-..."
```

Mantén las claves API en tu servidor o en tu entorno local. Estos ejemplos son para una terminal o un servidor, no para JavaScript del navegador.

Router cobra créditos por solicitud. Si tu espacio de trabajo no tiene saldo de créditos, la primera llamada real devuelve `402` con `error_type: insufficient_credits`. Esta comprobación se ejecuta antes de la validación del cuerpo, así que un espacio de trabajo sin fondos puede devolver `402` incluso para una solicitud no válida. Agrega créditos en [facturación del espacio de trabajo](https://platform.comfy.org) antes de depurar el cuerpo de la solicitud.

## 2. Encolar una solicitud

Elige tu idioma y ejecuta el ejemplo. La generación puede tardar unos minutos.

```python Python theme={null}
# Python 3.10+
# Instalar: python -m pip install "comfy-sdk>=0.3.0"
# Guarda como quickstart.py, luego ejecuta: python quickstart.py

import asyncio

from comfy_sdk import AsyncComfy

# AsyncComfy lee COMFY_API_KEY del entorno.
async def main():
    async with AsyncComfy() as client:
        handle = await client.models.submit(
            "byteplus/dreamina-seedance-2-5-260628",
            {
                "content": [
                    {
                        "text": "A red fox trotting through a snowy pine forest",
                        "type": "text",
                    },
                ],
                "duration": 5,
                "ratio": "16:9",
                "resolution": "720p",
            },
        )
        print("request_id:", handle.request_id)

        # Consulta hasta que la solicitud se complete, esperando el Retry-After que indica el servidor.
        async for update in handle.iter_events():
            print(update.status, update.queue_position)

        result = await handle.get()

    print("result:", result)

asyncio.run(main())
```

```bash cURL theme={null}
# 1. Envía la solicitud. Guarda el request_id de la respuesta 201.
curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests \
  -H "X-API-Key: $COMFY_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"content": [{"text": "A red fox trotting through a snowy pine forest", "type": "text"}], "duration": 5, "ratio": "16:9", "resolution": "720p"}'

# 2. Consulta hasta que el estado sea COMPLETED, esperando el valor de Retry-After cada vez.
REQUEST_ID="paste-request-id-from-201-response"
curl -i "https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests/$REQUEST_ID/status" \
  -H "X-API-Key: $COMFY_API_KEY"

# 3. Recupera el resultado del modelo.
curl "https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests/$REQUEST_ID" \
  -H "X-API-Key: $COMFY_API_KEY"
```

```typescript TypeScript theme={null}
// Node.js 22+
// Instalar: npm install "@comfyorg/sdk@>=0.4.0" --save-dev tsx
// Guarda como quickstart.mts, luego ejecuta: npx tsx quickstart.mts

import { comfy } from "@comfyorg/sdk";

// Comfy lee COMFY_API_KEY del entorno.
const handle = await comfy.models.submit(
  "byteplus/dreamina-seedance-2-5-260628",
  {
    content: [
      {
        text: "A red fox trotting through a snowy pine forest",
        type: "text",
      },
    ],
    duration: 5,
    ratio: "16:9",
    resolution: "720p",
  },
);
console.log("requestId:", handle.requestId);

// Consulta hasta que la solicitud se complete, esperando el Retry-After que indica el servidor.
for await (const update of handle.events()) {
  console.log(update.status, update.queuePosition);
}

const result = await handle.get();

console.log("result:", result.data);
```

Cada llamada de envío del SDK crea una clave de idempotencia y la reutiliza para los reintentos automáticos.
El ejemplo de cURL crea una con `uuidgen`. Si no está disponible, usa otro generador de UUID.
Para obtener detalles sobre el estado, la cancelación y la recopilación, consulta [Entrega en cola](https://docs.comfy.org/es/development/comfy-router/queue.md).

## Imagen a video y referencia a video

La misma solicitud de Seedance acepta entradas de imagen, video y audio. Agrega elementos a `content` y define el `role` de cada uno. Los roles que envías deciden la operación que ejecuta Router. El precio sigue los tipos de medio de `content`, no los roles: una solicitud con cualquier entrada de video se factura como video a video; si no, una con cualquier imagen se factura como imagen a video, y una solicitud solo de texto se factura como texto a video. Algunos modelos cobran la misma tarifa para texto a video y para imagen a video.

| Operación | Elementos de `content` |
| - | - |
| Texto a video | un elemento `text` |
| Imagen a video | un elemento `text` más un elemento `image_url` con `role: first_frame` |
| Primer y último fotograma | lo anterior más un segundo elemento `image_url` con `role: last_frame` |
| Referencia a video | un elemento `text` más elementos `image_url` con `role: reference_image`, y en Seedance 2.0 y 2.5, elementos `video_url` con `role: reference_video` y elementos `audio_url` con `role: reference_audio` |

Una `url` de imagen puede ser una URL pública o una cadena `data:image/<format>;base64,<content>`. Envía, consulta y recoge exactamente como en el inicio rápido de arriba. Solo cambia el cuerpo.

```bash Imagen a video theme={null}
curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests \
  -H "X-API-Key: $COMFY_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "content": [
      {"type": "text", "text": "The fox turns and runs into the trees"},
      {"type": "image_url", "image_url": {"url": "https://example.com/fox.png"}, "role": "first_frame"}
    ],
    "duration": 5,
    "resolution": "720p"
  }'
```

```bash Referencia a video theme={null}
curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests \
  -H "X-API-Key: $COMFY_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "content": [
      {"type": "text", "text": "The character from the reference walks through a neon-lit market"},
      {"type": "image_url", "image_url": {"url": "https://example.com/character.png"}, "role": "reference_image"},
      {"type": "image_url", "image_url": {"url": "https://example.com/outfit.png"}, "role": "reference_image"}
    ],
    "duration": 5,
    "ratio": "16:9",
    "resolution": "720p"
  }'
```

En Seedance 2.5, las solicitudes de primer fotograma y de primer y último fotograma toman la relación de aspecto de salida del primer fotograma. Omite `ratio` o envía `adaptive`, porque una relación concreta se rechaza con un `400`. El esquema de la solicitud es compartido en toda la familia Seedance y puede listar roles que un modelo ignora, así que revisa el campo `x-comfy-router-input-modalities` en el [esquema de entrada](https://docs.comfy.org/es/development/comfy-router/models.md) de cada modelo para conocer los tipos de entrada que ese modelo acepta. Por ejemplo, `reference_video` y `reference_audio` necesitan un modelo que liste `video` o `audio` ahí.

## Próximos pasos

> **[Explorar modelos](https://docs.comfy.org/es/development/comfy-router/models.md)**
>
> Explora los modelos disponibles y encuentra ejemplos de solicitudes para cada modelo.

> **[Usar la API del Router](https://docs.comfy.org/es/development/comfy-router/api.md)**
>
> Conoce cómo funciona el descubrimiento de modelos, los esquemas, las solicitudes en cola, los errores y la facturación.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.