RunwayML + Luma AI

Interactúa con las APIs de RunwayML y Luma AI para tareas de generación de video e imagen.

Documentación

MseeP.ai Security Assessment Badge

Servidor MCP de RunwayML + Luma AI

Este servidor MCP proporciona herramientas para interactuar con las APIs de RunwayML y Luma AI para tareas de generación de video e imágenes.

Características

  • Generar videos a partir de indicaciones de texto (RunwayML o Luma AI).
  • Generar videos a partir de imágenes (RunwayML o Luma AI).
  • Generar imágenes a partir de indicaciones de texto (Luma AI).
  • Gestionar generaciones de Luma AI (listar, obtener, eliminar).
  • Añadir audio a generaciones de Luma AI.
  • Mejorar la resolución de generaciones de Luma AI.
  • Mejorar indicaciones usando LLMs de OpenRouter antes de la generación.

Requisitos previos

  • Node.js (v18 LTS o posterior recomendado)
  • npm (generalmente incluido con Node.js)
  • Claves de API:
    • Secreto de API de RunwayML
    • Clave de API de Luma AI
    • Clave de API de OpenRouter (para la herramienta enhance_prompt)

Instalación

  1. Clonar o Descargar: Obtener el código del servidor.
  2. Navegar al Directorio: Abrir una terminal en el directorio raíz del servidor (runwayml-mcp-server).
  3. Instalar Dependencias:
    npm install
    

Configuración

  1. Crear archivo .env: En el directorio raíz del servidor, crear un archivo llamado .env.
  2. Añadir Claves de API: Añade tus claves de API al archivo .env:
    RUNWAYML_API_SECRET=your_runwayml_api_secret_here
    LUMAAI_API_KEY=your_luma_api_key_here
    OPENROUTER_API_KEY=your_openrouter_api_key_here
    
    Reemplaza los valores de los marcadores de posición con tus claves reales.

Ejecutar el Servidor

  1. Compilar el Servidor: Compilar el código TypeScript:
    npm run build
    
  2. Iniciar el Servidor:
    npm start
    
    Deberías ver un mensaje como RunwayML MCP server running on stdio en la salida de error de tu terminal (stderr).

Configuración del Cliente MCP (por ejemplo, Claude Desktop App, Cline)

Configura tu cliente MCP para conectarse a este servidor. Los pasos exactos dependen del cliente, pero normalmente necesitarás proporcionar:

  • Nombre: Un nombre descriptivo (por ejemplo, runway-luma-server)
  • Comando: node
  • Argumentos: La ruta completa al archivo index del servidor compilado (por ejemplo, /path/to/your/runwayml-mcp-server/build/server-index.js)
  • Variables de Entorno:
    • RUNWAYML_API_SECRET: Tu secreto de API de RunwayML
    • LUMAAI_API_KEY: Tu clave de API de Luma AI
    • OPENROUTER_API_KEY: Tu clave de API de OpenRouter

Ejemplo de Configuración (Conceptual):

{
  "mcpServers": {
    "runway-luma-server": {
      "command": "node",
      "args": ["/full/path/to/runwayml-mcp-server/build/server-index.js"],
      "env": {
        "RUNWAYML_API_SECRET": "your_runwayml_api_secret_here",
        "LUMAAI_API_KEY": "your_luma_api_key_here",
        "OPENROUTER_API_KEY": "your_openrouter_api_key_here"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

(Recuerda reemplazar /full/path/to/ con la ruta real en tu sistema)

Herramientas Disponibles

  • generate_text_to_video: Genera video a partir de texto.
    • provider: (Opcional) runwayml (predeterminado) o lumaai.
    • promptText: (Requerido) La indicación de texto.
    • runway_model: (Opcional) Modelo de Runway (por ejemplo, "gen-2").
    • runway_resolution: (Opcional) Resolución de Runway (1280:768 o 768:1280).
    • runway_watermark: (Opcional) Booleano, predeterminado false.
    • luma_model: (Opcional) Modelo de Luma (ray-flash-2, ray-2 (predeterminado), ray-1-6).
    • luma_aspect_ratio: (Opcional) Relación de aspecto de Luma (por ejemplo, 16:9 (predeterminado), 1:1).
    • luma_loop: (Opcional) Booleano.
    • duration: (Opcional) Duración del video en segundos (número).
    • seed: (Opcional) Semilla de generación (número).
  • generate_image_to_video: Genera video a partir de una imagen.
    • provider: (Opcional) runwayml (predeterminado) o lumaai.
    • promptImage: (Requerido) URL de la imagen de entrada, o para Runway, un arreglo [{uri: "url", position: "first" | "last"}].
    • promptText: (Opcional) Indicación de texto para acompañar la imagen.
    • runway_model: (Opcional) Modelo de Runway (gen3a_turbo (predeterminado)).
    • runway_duration: (Opcional) Duración de Runway (5 (predeterminado) o 10).
    • runway_ratio: (Opcional) Resolución de Runway (1280:768 o 768:1280).
    • runway_watermark: (Opcional) Booleano, predeterminado false.
    • luma_model: (Opcional) Modelo de Luma (ray-flash-2, ray-2 (predeterminado), ray-1-6).
    • luma_aspect_ratio: (Opcional) Relación de aspecto de Luma (por ejemplo, 16:9 (predeterminado)).
    • luma_loop: (Opcional) Booleano.
    • seed: (Opcional) Semilla de generación (número).
  • enhance_prompt: Refina una indicación usando OpenRouter.
    • original_prompt: (Requerido) La indicación a mejorar.
    • model: (Opcional) Nombre del modelo de OpenRouter (por defecto, un modelo capaz como anthropic/claude-3.5-sonnet).
    • instructions: (Opcional) Instrucciones específicas para la mejora.
  • luma_generate_image: Genera una imagen usando Luma AI.
    • prompt: (Requerido) Indicación de texto.
    • aspect_ratio: (Opcional) Relación de aspecto de Luma (16:9 (predeterminado)).
    • model: (Opcional) Modelo de imagen de Luma (photon-1 (predeterminado), photon-flash-1).
    • image_ref: (Opcional) Arreglo de objetos de referencia de imagen ({url: string, weight?: number}). Máximo 4.
    • style_ref: (Opcional) Arreglo de objetos de referencia de estilo ({url: string, weight?: number}). Máximo 1.
    • character_ref: (Opcional) Objeto de referencia de personaje ({ identity0: { images: [url1, ...] } }).
    • modify_image_ref: (Opcional) Objeto de referencia de modificación de imagen ({url: string, weight?: number}).
  • luma_list_generations: Lista generaciones anteriores de Luma AI.
    • limit: (Opcional) Número de resultados (predeterminado 10).
    • offset: (Opcional) Desplazamiento para paginación (predeterminado 0).
  • luma_get_generation: Obtiene detalles de una generación específica de Luma AI.
    • generation_id: (Requerido) UUID de la generación.
  • luma_delete_generation: Elimina una generación específica de Luma AI.
    • generation_id: (Requerido) UUID de la generación.
  • luma_get_camera_motions: Lista los movimientos de cámara admitidos para indicaciones de Luma AI. (Sin parámetros).
  • luma_add_audio: Añade audio a una generación de Luma.
    • generation_id: (Requerido) UUID de la generación.
    • prompt: (Requerido) Indicación para el audio.
    • negative_prompt: (Opcional) Indicación negativa para el audio.
  • luma_upscale: Mejora la resolución de una generación de Luma.
    • generation_id: (Requerido) UUID de la generación.
    • resolution: (Opcional) Resolución objetivo (1080p (predeterminado) o 4k).

(Nota: Para herramientas que implican generación (generate_*, luma_upscale), el servidor inicia la tarea y regresa inmediatamente. Las actualizaciones de progreso y la URL del resultado final se enviarán mediante notificaciones de progreso de MCP.)

Ejemplos de Flujos de Trabajo

Aquí hay ejemplos de cómo combinar las herramientas del servidor para casos de uso comunes:

1. Fragmento de Video Musical (Cyberpunk Noir)

Objetivo: Crear un clip de video cyberpunk noir de 5 segundos para la letra "Neon rivers flowing through a city of chrome".

Pasos:

  1. Generar Imagen Base (Luma):

    {
      "tool_name": "luma_generate_image",
      "arguments": {
        "prompt": "Overhead shot of a dark, rainy cyberpunk city street at night. Bright neon signs reflect on wet pavement, resembling rivers of light flowing between towering chrome skyscrapers. Film noir aesthetic, photorealistic.",
        "aspect_ratio": "16:9"
      }
    }
    

    (Espera a que se complete la generación de la imagen y obtén la URL de la imagen)

  2. Animar Imagen (Luma):

    {
      "tool_name": "generate_image_to_video",
      "arguments": {
        "provider": "lumaai",
        "promptImage": "{IMAGE_URL_FROM_STEP_1}",
        "promptText": "Slow pan left across the rainy cyberpunk cityscape, neon lights flickering subtly.",
        "luma_aspect_ratio": "16:9",
        "duration": 5
      }
    }
    

    (Espera a que se complete la generación del video)

2. Concepto de Anuncio de Producto (Auricular Flotante)

Objetivo: Crear un video de 5 segundos que muestre un auricular futurista flotando en un entorno minimalista.

Pasos:

  1. Generar Escena con Referencia de Producto (Luma):

    {
      "tool_name": "luma_generate_image",
      "arguments": {
        "prompt": "A single, sleek futuristic wireless earbud floats weightlessly in the center of a bright, minimalist white room with soft, diffused ambient light. Zero gravity effect.",
        "aspect_ratio": "1:1",
        "image_ref": [{ "url": "{PRODUCT_IMAGE_URL}", "weight": 0.8 }]
      }
    }
    

    (Espera a que se complete la generación de la imagen y obtén la URL de la imagen)

  2. Animar Escena (Luma):

    {
      "tool_name": "generate_image_to_video",
      "arguments": {
        "provider": "lumaai",
        "promptImage": "{IMAGE_URL_FROM_STEP_1}",
        "promptText": "The earbud slowly rotates and drifts gently in zero gravity.",
        "luma_aspect_ratio": "1:1",
        "duration": 5
      }
    }
    

    (Espera a que se complete la generación del video)

3. Animación de Imagen (RunwayML Gen3a)

Objetivo: Animar una imagen existente usando el modelo Gen3a de RunwayML.

Pasos:

  1. (Opcional) Generar Imagen Base (Luma): Usa luma_generate_image si no tienes una imagen.
  2. Animar Imagen (RunwayML):
    {
      "tool_name": "generate_image_to_video",
      "arguments": {
        "provider": "runwayml",
        "promptImage": "{YOUR_IMAGE_URL}",
        "promptText": "Subtle zoom in, cinematic lighting.",
        "runway_model": "gen3a_turbo",
        "runway_duration": "5",
        "runway_ratio": "1280:768" // Or "768:1280"
      }
    }
    
    (Espera a que se complete la generación del video)